说明
firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。
firewalld跟iptables比起来至少有两大好处:
- firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
- firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
常用参数
命令 |
说明 |
-h, --help |
显示帮助信息; |
-V, --version |
显示版本信息; |
-q, --quiet |
不打印状态消息; |
命令 |
说明 |
--state |
查看防火墙运行状态 |
--reload |
重新加载防火墙并保留状态信息 |
--complete-reload |
重新加载防火墙并丢失状态信息 |
--runtime-to-permanent |
将当前防火墙的规则永久保存; |
--check-config |
检查配置正确性 |
--permanent |
将策略永久保存 |
区域选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| firewall-cmd --new-zone=test --permanent
firewall-cmd --delete-zone=test --permanent
firewall-cmd --info-zone=public
firewall-cmd --get-zones
firewall-cmd --list-all-zones
firewall-cmd --set-default-zone=public
firewall-cmd --get-default-zone
firewall-cmd --add-interface=eth0 --zone=public
firewall-cmd --get-zone-of-interface=eth0
firewall-cmd --get-active-zones
firewall-cmd --path-zone=public --permanent
firewall-cmd --new-zone-from-file=/usr/lib/firewalld/zones/public.xml --name=test --permanent
firewall-cmd --load-zone-defaults=public --permanent
|
target选项
1 2 3 4 5
|
firewall-cmd --get-target --zone=public --permanent
firewall-cmd --set-target=ACCEPT --zone=docker --permanent
|
设定永久区域的目标。目标是其中之一:ACCEPT(接受),DROP(丢弃),REJECT(拒绝),default(默认)
默认类似于REJECT(拒绝),但在以下场景中具有特殊含义:
- ICMP明确允许
在区域规则集的末尾,明确允许ICMP数据包。
- 转发的数据包遵循出口区域的目标
在转发数据包的情况下,如果入口区域使用默认值,则由出口区域确定是否允许该数据包。
对于进入zoneA和离开zoneB的转发数据包:
- 如果zoneA的目标是接受、丢弃或拒绝,则数据包将分别被接受、丢弃或拒绝。
- 如果zoneA的目标是默认的,则根据zoneB的目标接受、丢弃或拒绝数据包。如果zoneB的目标也是默认的,那么数据包将被firewalld的catchall reject拒绝。
- 信源区向界面区漂移
这仅适用于启用AllowZoneDrift的情况。请参见firewalld.conf(5)。
如果数据包以默认目标进入基于源的区域,它仍可能进入基于接口的区域(包括默认区域)。
源管理
sources1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| firewall-cmd --add-source=192.168.1.1
firewall-cmd --add-source=192.168.1.0/24
firewall-cmd --remove-source=192.168.1.1
firewall-cmd --add-source=192.168.1.0/24 --zone=trusted
firewall-cmd --add-source=192.168.1.1 --zone=drop
firewall-cmd --query-source=192.168.1.0/24 --zone=trusted
firewall-cmd --get-zone-of-source=192.168.1.1
firewall-cmd --add-source=00:68:EB:A6:4A:BC --zone=trusted
|
服务管理
1 2 3 4 5 6 7 8 9 10 11 12
| firewall-cmd --get-services
firewall-cmd --add-service=ssh
firewall-cmd --add-service={http,https}
firewall-cmd --remove-service=ssh
firewall-cmd --list-services
firewall-cmd --permanent --zone=public --add-service=http
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| firewall-cmd --info-service=http
firewall-cmd --new-service=test --permanent
firewall-cmd --delete-service=test --permanent
firewall-cmd --path-service=http --permanent
firewall-cmd --new-service-from-file=http.xml --name=http2 --permanent
firewall-cmd --load-service-defaults=http --permanent
firewall-cmd --service=http --get-description --permanent
firewall-cmd --service=http --set-description=test --permanent
firewall-cmd --service=http --get-short --permanent
firewall-cmd --service=http --set-short=test --permanent
firewall-cmd --service=http --get-port --permanent
firewall-cmd --service=http --add-port=8080/tcp --permanent
firewall-cmd --service=http --get-source-port --permanent
firewall-cmd --service=http --remove-port=8080/tcp --permanent
firewall-cmd --service=http --add-source-port=111/tcp --permanent
firewall-cmd --service=http --remove-source-port=111/tcp --permanent
firewall-cmd --service=http --get-destinations --permanent
firewall-cmd --service=http --set-destination=ipv4:192.168.1.1 --permanent
firewall-cmd --service=http --remove-destination=ipv4 --permanent
|
端口管理
1 2 3 4 5 6 7 8
| firewall-cmd --add-port=22/tcp
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port={9000/tcp,8081/tcp,7000/tcp}
firewall-cmd --list-ports
|
端口转发
1 2 3 4 5 6
| firewall-cmd --query-masquerade
firewall-cmd --add-masquerade --permanent
firewall-cmd --remove-masquerade
|
1 2 3 4
| firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80
firewall-cmd --add-forward-port=port=2222:proto=tcp:toport=22:toaddr=192.168.1.2
|
富规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| rule [source] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port [log|nflog] [audit] [accept|reject|drop|mark]
rule
[family="ipv4|ipv6"]
[priority="priority"]
source [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"
destination [not] address="address[/mask]"|ipset="ipset"
service name="service name"
port port="port value" protocol="tcp|udp"
source-port port="port value" protocol="tcp|udp"
protocol value="protocol value"
[accept|reject|drop|mark]
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
|
1 2 3 4 5 6 7 8
| --list-rich-rules
--add-rich-rule=<rule>
--remove-rich-rule=<rule>
--query-rich-rule=<rule>
|
1 2 3 4 5 6 7 8 9 10 11 12
| firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=http accept'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.1 service name=http drop'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.1 service name=http reject'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.1 port port=80 protocol=tcp accept'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 forward-port port=2222 protocol=tcp to-port=22 to-addr=192.168.1.1' firewall-cmd --add-masquerade --permanent
|
其他
1 2 3 4 5 6
| firewall-cmd --panic-on
firewall-cmd --panic-off
firewall-cmd --query-panic
|
参考
firewall-cmd
firewalld.richlanguage