FirewallD:仅允许来自特定 IP 地址的连接

thi*_*tzz 5 firewalld centos7 firewalld-zone

我正在尝试使用 FirewallD 来限制网络上其他机器对 CentOS 服务器的访问。它有一个单一的网络接口,并且在公共区域中运行。假设此服务器的 IP 地址为 10.10.1.20。

我想要做的是只允许 IP 地址为 10.10.1.125 和 10.10.1.126 的机器能够连接(ssh 和 https)到该服务器。其他任何 ip 地址都不应该能够连接到该服务器(甚至知道它存在)。

我尝试使用 FirewallD 的丰富规则如下(10.10.1.20)

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.0/24" drop'

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.125" accept'

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.126" accept'
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。我无法从 10.10.1.125 或 10.10.1.126 建立到 10.10.1.20 的 ssh 连接。

我尝试以相反的顺序输入规则,但它仍然不起作用。

有人可以帮我吗?在应用我上面写的规则之前,我是否需要将区域从公共区域更改为更严格的区域,例如 drop ?

Mic*_*ton 10

丰富的规则不是解决这个问题的方法。他们现在和以后只会制造混乱。

了解 firewalld区域对应于您可能希望允许的一组服务,以及这些服务的流量来源。

您所要做的就是设置要在区域中允许的服务(您可能已经这样做了),然后设置源。

可以通过两种方式指定流量源:按接口或按源 IP 地址。匹配任何来源的流量通过此检查。

因此,您要做的是添加允许访问服务的 IP 地址,然后删除接口(如果有)。

firewall-cmd --zone=public --add-source=10.10.1.25
firewall-cmd --zone=public --add-source=10.10.1.26
firewall-cmd --zone=public --remove-interface=enp2s1
firewall-cmd --runtime-to-permanent
Run Code Online (Sandbox Code Playgroud)

请注意您可能希望这样做在public区,但创建一个新的区域。该区域有几项设置为默认允许(例如 DHCP),如果您删除接口并按源 IP 地址限制该区域,可能会导致问题。


小智 -1

sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="ssh" source address="10.10.1.125" accept'
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="https" source address="10.10.1.125" accept'
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="ssh" source address="10.10.1.126" accept'
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="https" source address="10.10.1.126" accept'
firewall-cmd --reload 
Run Code Online (Sandbox Code Playgroud)

并重新启动防火墙服务。

防火墙默认阻止所有连接。所以您只需要添加这些规则。