我正在尝试使用 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'
但它似乎不起作用。我无法从 10.10.1.125 或 10.10.1.126 建立到 10.10.1.20 的 ssh 连接。
我尝试按相反的顺序输入规则,但仍然不起作用。
有人能帮我吗?我是否需要将区域从公共区域更改为更严格的区域(如 drop)才能应用我上面写的规则?
答案1
制定复杂的规则并不是解决问题的办法。它们只会造成混乱,无论是现在还是将来。
了解防火墙区对应于您可能希望允许的一组服务,以及这些服务的流量来源。
您所要做的就是设置您想要在区域中允许的服务(您可能已经完成),然后设置源。
流量来源可以通过两种方式指定:按接口或按源 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
请注意,你可能不要想要在public
区域中执行此操作,但要创建一个新区域。该区域有几个设置为默认允许的内容(例如 DHCP),如果您删除接口并通过源 IP 地址限制区域,则可能会出现问题。
答案2
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
并重新启动防火墙服务。
防火墙默认阻止所有连接。因此您只需添加这些规则。