Linux 防火墙 Firewalld 使用过的经验 #
2021-04-01 15:46
目前使用经验适用于CentOS 7+,Redhat 7+
有些系统没有默认安装Firewalld,可以使用yum进行安装:yum install -y firewalld
Firewalld 状态查询
[root@Genl-gm-4885 ~]# firewall-cmd --state
not running
Firewalld 启用,关闭等等命令
systemctl start firewalld //启动
systemctl stop firewalld //停用
systemctl enable firewalld //设置Firewalld自启动
systemctl disable firewalld //设置Firewalld不自启动
PS. 查看系统自启动服务
systemctl list-unit-files|grep enabled
Firewalld 使用了zone的一个概念,通过设置zone 可以快速设置防火墙的规则。
使用firewall-cmd --get-zones 获取zone列表
block dmz drop external home internal public trusted work
默认的zone 是public。拒绝所有的连接请求,除了dhcp和ssh。
zone=trusted 则相反,为接受所有请求。
获取当前使用的zones
firewall-cmd --get-active-zones
切换到别的zone
firewall-cmd --zone=trusted --change-interface=#{网卡名,如eth190}
Firewalld 的连接规则有三类:
- drop:抛弃连接请求
- reject:拒绝连接请求
- accept:接受连接请求
使用rich rule 添加防火墙规则
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="172.255.92.199" accept' --permanent //添加 permanent,表明永久有效,但需要reload
firewall-cmd --reload //reload 规则
查看当前规则
firewall-cmd --list-all
举个例子,假设要禁用 172.253.0.0/16 网段,但允许172.253.32.21 访问。
理所当然的这么调整,发现不行;调换顺序也不行。
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="172.253.0.0/16" reject' --permanent
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="172.253.32.21" accept' --permanent
翻了N久的bing和百度,没找到任何说法。后来发现了NOT 语法!
如下这番,就可以了!!
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source NOT address="172.253.0.0/16" accept' --permanent
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="172.253.32.21" accept' --permanent
PS.一些字段掩码的规则
172.0.0.0/8:代表 172.0.0.1 - 172.255.255.255
172.23.0.0/16:代表 172.23.0.1 - 172.23.255.255
172.23.15.0/24:代表 172.23.15.1 - 172.23.15.255