免责声明:这是我第一次使用firewalld,请小心:)。
我有一台 CentOS 机器,我想使用firewalld 实现以下要求:
- 允许从任意位置连接到端口 1、2、3、4。
- 仅允许来自 IP 地址 IP1、IP2 和 IP3 的连接端口 5
- 完全阻止从任何地方到端口 6 的连接。
所以我这样做了:
- 将端口 1、2、3 和 4 添加到
public
区域 - 将端口 5 和 IP 地址 IP1、IP2 和 IP3 添加到区域
trusted
现在区域如下所示:
public (active)
target: default
icmp-block-inversion: no
interfaces: eno12345
sources:
services: ssh dhcpv6-client
ports: 1/tcp 2/tcp 3/tcp 4/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: IP1 IP2 IP3
services:
ports: 5/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
注意:public
是默认区域。
因此前两条规则似乎应用正确。
然而,我被最后一条规则困住了(完全封锁端口 6)。我尝试了多种解决方案,但似乎都不起作用。
1). 我应该怎样做才能应用这个?
2). 尽管防火墙配置中没有明确列出允许端口 6,但我为什么可以通过端口 6 进行连接?iptables
也没有添加有关该端口的规则。
答案1
我解决这个问题的方法是在trusted
区域中添加一条丰富的规则:
rule family="ipv4" port port="6" protocol="tcp" drop
据我所知,首先应用的是丰富的规则。在我的例子中,它似乎运行正常。
答案2
下面是一些通用命令
firewall-cmd --list-ports
firewall-cmd --get-zones
firewall-cmd --zone=public --add-port=5000/tcp
#更新了 Aleksandar Pavić 报告的网址,感谢 Aleksandar Pavić
如需更多文档和详细信息,请查看。 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-controlling_traffic#sec-Controlling_Ports_using_CLI