Linux 中防火墙firewalld的使用 方法
firewalld 是一种动态防火墙管理解决方案。Centos 7 默认使用 firewalld。firewalld 是对 iptables 的一个封装,可以让你更容易地管理 iptables 规则。它并不是 iptables 的替代品,虽然 iptables 命令仍可用于 firewalld,但建议 firewalld 时仅使用 firewalld 命令。 与 iptables 相比,我觉得 firewalld 更好用
用一个例子说明下。比如要开放 8080 端口。
- firewalld
firewalld-cmd --zone=public --add-port=5000/tcp --permanent
firewalld-cmd --reload
- iptables
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
service iptables save
systemctl iptables restart
相比之下 firewalld 更容易看懂,且步骤更少,又不用重启服务。 另外 firewalld 还有分区的概念容易整理一系列的端口。Centos 7 默认防火墙使用 Firewalld 还觉得挺好的。
安装 firewalld
Centos 7 会默认安装 firewalld,若卸载了要重新安装
yum -y install firewalld
基本管理
- 启动
systemctl start firewalld
- 设置开机启动
systemctl enable firewalld
- 重启
systemctl restart firewalld
- 关闭开机启动
systemctl disable firewalld
- 查看状态
systemctl status firewalld
或者firewall-cmd --state
区域(zones)
Firewalld 有区域(zones)的概念。这有什么用呢?比如说,公共 WIFI 是不可信任的网络类型,而家庭网络几乎是完全可信任。如果这两者都采取相同的安全策略,就会有很多策略是冗余的。根据网络的类型,将防火墙分成不同的区域有它存在的价值。而在firewalld中会,会预先为你设定了很多个区域。 用下面的语句可以看到所有的区域
firewall-cmd --get-zones
block dmz drop external home internal public trusted work
其中从不信任到信任的排序是:
- drop(丢弃):最低级别的信任。任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
- block(限制):和上面相似,任何接收的网络连接都被
IPv4
的 icmp-host-prohibited (ping 不到) 信息和IPv6
的 icmp6-adm-prohibited 信息所拒绝 - public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
- external(外部):特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
- dmz(非军事区用):于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
- work(工作):用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
- home(家庭):用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
- internal(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
- trusted(信任):可接受所有的网络连接
区域命令
获取默认区域
sudo firewall-cmd --get-default-zone
public
查看所有区域的信息
sudo firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
target: default
...
区域的端口
添加端口
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --reload
端口后的协议可以是tcp或者udp
添一段端口
sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
查看端口
sudo firewall-cmd --zone=public --list-port
80/tcp
移除端口
sudo firewall-cmd --permanent --zone=public --remove-port=80/tcp
sudo firewall-cmd --reload
最后
常用的命令就是以上几种、另外 firewall 也有端口转发、白名单、黑名单的功能,只是这些功能都有更好的替代品了,nginx 之类的。如果你想了解更多你可以看 firewall的官方文档_firewalld)
THE END
二维码