使用 firewalld 阻止 RHEL7/CentOS7 上的传出连接?

gol*_*lem 12 linux redhat iptables centos firewalld

RHEL7/CentOS7 提供了一个新的firewalld防火墙服务,它取代了iptables service(两者都使用iptables工具与内核的 Netfilter 进行交互)。

firewalld可以轻松调整以阻止传入流量,但正如 Thomas Woerner 1,5 年前指出的那样, “目前,firewalld 无法以简单的方式限制传出流量”。据我所知,情况从那时起就没有改变。或者有吗?有没有办法阻止传出流量firewalld?如果没有,除了通过iptables工具手动添加规则之外,还有其他“标准”方式(在 RHEL7 发行版上)阻止传出流量吗?

小智 14

我在那个漂亮的 GUI 中没有找到任何选项,但可以通过直接界面

仅启用传出端口 80:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP
Run Code Online (Sandbox Code Playgroud)

这会将它添加到永久规则,而不是运行时规则。
您将需要重新加载永久规则,以便它们成为运行时规则。

firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)

显示永久规则

firewall-cmd --permanent --direct --get-all-rules
Run Code Online (Sandbox Code Playgroud)

显示运行时规则

firewall-cmd --direct --get-all-rules
Run Code Online (Sandbox Code Playgroud)


小智 7

在我自己问了同样的问题之后,经过一些修补,我收集了一些很好的规则来限制 HTTP/HTTPS 和 DNS 查询的传出流量:

允许建立的连接:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

允许 HTTP:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

允许 HTTPS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

允许 DNS 查询:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

拒绝一切:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP
Run Code Online (Sandbox Code Playgroud)

首先通过省略“--permanent”参数进行测试可能是个好主意。

我绝不是专家,但这对我来说似乎很好用:)

  • 在某些时候,您可能会发现删除规则很有用。删除单个直接规则似乎很棘手,但对于大锤来说,“firewall-cmd [--permanent] --direct --remove-rules ipv4 filter OUTPUT”将进行批量删除。 (2认同)