尝试使用防火墙关闭两个端口,其余端口保持打开

尝试使用防火墙关闭两个端口,其余端口保持打开

我认为我使用的技术是错误的,但不确定是否正确。

计算机:Red Hat 版本 7.2

防火墙d.noarch:0.3.9-14.el7

我被要求关闭两个端口,但确保其他所有端口都打开。解决方案需要易于打开和关闭。为此,我做了:

  • 启动firewalld

  • 设置“trusted”为默认区域#Trusted 开放所有端口

  • firewall-cmd --zone=trusted --add-interface=eno16780032 # 此服务器上仅有以太网接口。

  • 为了测试目的,执行 nc -l port_number 以使某些东西在该端口上应答。

测试方式:转到另一台机器,执行“telnet machine_name port_number”并观察是否收到响应。(每次测试后重新启动 nc。)

关闭端口:

  • 防火墙cmd --zone=trusted --remove-port 端口号/tcp

核实:

  • 防火墙cmd --zone=trusted --query-port 端口号/tcp

返回“否”

此时,nc 应该正在监听 port_number,但它应该被防火墙阻止。我应该无法连接到它。

但是,来自不同机器的“telnet machine_name port_number”仍然可以连接。

此时我甚至没有尝试让它持久化,只是尝试让规则发挥作用。我做错了什么?

应用程序:我们有一个自主开发的后端服务,以主/从配置运行。从服务器始终处于运行状态,以便与主服务器同步数据。前端只能使用指定为“主”的系统。(开发人员告诉我,要使其成为真正的集群需要做太多工作。)

“云”中有一个负载均衡器(我们无法直接控制它),它指向两台机器。目标是阻塞从属机器上的两个关键端口,以便负载均衡器始终转到主机器。当我们进行故障转移时,“从属机器”(现在是主机器)上的端口将解除阻塞,“主机器”(现在是从属机器)上的端口将被阻塞,从而迫使负载均衡器转到新的主机器。

这可能不是负载平衡器或防火墙的良好用途,但这是一个奇怪的应用程序,我们只是试图找到一些可行的方法,既不涉及干扰负载平衡器,也不关闭从属服务器上的服务。

有任何想法吗?

答案1

我记得背后的理念firewalld是关闭所有端口,只打开您需要的端口。所以您尝试做的只是相反的事情。因此,像这样的命令--add-port将添加指定为打开的端口。
例如,添加端口 80 只会添加另一条ACCEPT规则,iptables但由于区域的目标trusted已经ACCEPT存在,因此这条规则毫无意义。

$ firewall-cmd --zone=trusted --add-port=80/tcp

$ iptables -L -n | grep 80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW

如果您使用 删除端口--remove-port,也会是一样的,如果未配置相应的端口,则会给出提示。

$ firewall-cmd --zone=trusted --remove-port 80/tcp
success
$ firewall-cmd --zone=trusted --remove-port 80/tcp
Warning: NOT_ENABLED: '80:tcp' not in 'trusted'
success

firewalld还提供了rich-rules可用于您想要实现的目标的功能。

以下命令将关闭端口80/TCP

firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" reject'

如果您想允许单个 IP 地址连接到该端口,您可以添加source

firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'

source参数还接受 CIDR 表示法的子网。

firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.0/24" port port="80" protocol="tcp" reject'

相关内容