firewalld初探

CentOS8中firewalld已经与iptables解绑,后端改用nftables。所以不像centos7还能装下iptables进行处理。不过进步总是好的。就跟centos7使用systemd替换了老旧的init。虽然开始不习惯,但是越用越觉得好。

那看来未来是必须要学firewalld的相关命令了。

在firewalld默认是有9个不同的zone,可以在https://firewalld.org/documentation/man-pages/firewalld.zones.html
这里看到9个zone的定义。其实对我来说这些就是提前定义好的一些规则集而已

1
2
firewall-cmd --get-zones     #查看是所有zone
block dmz drop external home internal public trusted work

一般默认就是public, 在/etc/firewalld/zones 目录下可以看到public.xml这个就是public zone的

比如我这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="sshd"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="53"/>
<port protocol="udp" port="53"/>
<rule family="ipv4">
<source address="223.1.1.114"/>
<port protocol="tcp" port="8080"/>
<accept/>
</rule>
<masquerade/>
</zone>

这里可以看到开通了3个服务,分别为ssh,sshd,dhcp-client, 又开放了3个端口,tcp80,tcp53,udp53,同时也开启了nat功能。这里同时限制了只有223.1.1.114可以访问该机器的8080端口。
那这里的服务是在哪里定义的呢,其实就是在/etc/firewalld/services 下定义,格式如下

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>

<service>
<short>sshd</short>
<description>sshd port</description>
<port protocol="tcp" port="5499"/>
</service>

当然firewalld也支持直接命令行操作, 这里都有–permanent参数,这个我觉得比iptables-save好用,这里表示永久变更,其实就是写入到xml文件里了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 开启 NAT 转发
firewall-cmd --permanent --zone=public --add-masquerade

# 开放 DNS 使用的 53 端口,UDP
firewall-cmd --zone=public --add-port=53/udp --permanent

# 检查是否允许 NAT 转发
firewall-cmd --query-masquerade
# 禁止防火墙 NAT 转发
firewall-cmd --remove-masquerade

# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

# 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1

# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

剩下更多的东西就得慢慢研究了,先这些已经够用。