FIREWALLD
Firewalld简介
Firewalld是一个动态防火墙管理器,nftables框架的前端,作为iptables服务的替代方案。在 RHEL8 中, firewalld是推荐的前端,用来管理防火墙规则集。Firewalld仍可以读取和管理iptables配置文件和规则集,并将iptables对象直接转换为nftables规则和对象。
区域名 | 默认配置 |
---|---|
trusted | 允许所有传入流量。 |
home | 除非与传出流量相关,或与cockpit、dhcpv6-client、mdns、sambaclient或ssh预定义服务匹配,否则拒绝传入流量。 |
internal | 除非与传出流量相关,或与cockpit、dhcpv6-client、mdns、sambaclient或ssh预定义服务匹配,否则拒绝传入流量。 |
work | 除非与传出流量相关,或与cockpit、ssh、ipp-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量。 |
public | 除非与传出流量相关,或与cockpit、ssh或dhcpv6-client预定义服务匹配,否则拒绝传入流量。新添加的网络接口的默认区域。 |
external | 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPv4传出流量将进行伪装,以使其看起来像是来自传出网络接口的IPv4地址。 |
dmz | 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。 |
block | 除非与传出流量相关,否则拒绝所有传入流量,对客户端响应ICMP错误。 |
drop | 除非与传出流量相关,否则丟弃所有传入流量,不对客户端响应ICMP错误。 |
数据包与zone匹配原则:
-
如果该源地址被分配给特定区域, 则应用该区域的规则。
-
如果源地址未被分配给特定区域, firewalld将数据包分配给与传入网络接口关联的区域,并应用该区域的规则。
-
如果以上都未匹配,firewalld将数据包分配给默认区域。
注意事项:
-
firewalld默认指定public区域为默认区域,并将lo回环接口映射至trusted区域。
-
如果流量不与允许的端口或协议或服务匹配,则通常会被拒绝。
zone内规则优先级
对于所有区域,区域内规则的基本排序是相同的:
- 为该区域设置的任何端口转发和伪装原则。
- 为该区域设置的任何拒绝规则。
- 为该区域设置的任何允许规则。
在所有情况下,第一个匹配项将胜出。如果区域中所有规则都不匹配,那么通常会拒绝该包,trusted例外。
还可以设置记录和审计规则,该规则与以上3个规则可以同时生效。
防火墙预定义服务
服务名 | 配置 |
---|---|
SSH | 本地SSH服务器。到22/tcp的流量。 |
dhcpv6-client | 本地DHCPv6客户端。到fe80::/64 IPv6网络中546/udp的流量。 |
ipp-client | 本地IPP打印。到631/udp的流量。 |
samba-client | 本地Windows文件和打印共享客户端。到137/udp和138/udp的流量。 |
MDNS | 多播DNS(mDNS)本地链路名称解析。到5353/udp指向224.0.0.251 (IPv4)或ff02::fb(IPv6)多播地址的流量。 |
管理服务器防火墙
系统管理员可通过多种方式与firewalld交互:
- Web控制台图形界面
- firewall-config图形界面工具
- firewall-cmd命令行工具
firewall-cmd
查询
firewall-cmd --get-default-zone 查看当前默认区域
--get-active-zones 查看当前已激活的区域
--get-zones 查看所有可用的区域
--list-all-zones 查看所有区域的规则
--list-all --zone=区域名 查看指定区域的规则
--list-services --zone=区域名 查看指定区域允许访问的服务列表
--list-ports --zone=区域名 查看指定区域允许访问的端口列表
--get-zone-of-interface=网卡名 查看与网卡绑定的区域
--get-icmptypes 查看所有icmp类型
增加
firewall-cmd --add-interface=网卡名 --zone=区域名 给指定区域添加绑定的网卡
--add-source=源地址 --zone=区域名 给指定区域添加源地址
--add-service=服务名 --zone=区域名 给指定区域添加允许访问的服务
--add-service={服务名1,服务名2,...} --zone=区域名 给指定区域添加允许访问的服务列表
--add-port=端口/协议 --zone=区域名 给指定区域添加允许访问的端口
--add-port=端口1-端口2/协议 --zone=区域名 给指定区域添加允许访问的连续的端口列表
--add-port={端口1,端口2,...}/协议 --zone=区域名 给指定区域添加允许访问的不连续的端口
--add-icmp-block=icmp类型 --zone=区域名 给指定区域添加拒绝访问的icmp类型
删
firewall-cmd --remove-service=服务名 --zone=区域名
--remove-port=端口/协议 --zone=区域名
--remove-icmp-block=icmp类型 --zone=区域名
--remove-interface=网卡名 --zone=区域名 从指定区域里删除绑定的网卡
--remove-source=源地址 --zone=区域名 从指定区域里删除绑定的源地址
改
firewall-cmd --set-default-zone 修改当前默认区域
--change-interface=网卡名 --zone=区域名 修改/添加网卡 绑定给指定区域
--change-source=源地址 --zone=区域名 修改/添加源地址 绑定给指定区域
Web控制台
yum install cockpit -y
yum install cockpit-dashboard -y
systemctl enable --now cockpit.socket
firewall-cmd --add-service=cockpit --permanent
firewall-cmd --reload
打开浏览器输入http://<ip>:9090即可访问
firewall-config
富规则
除了firewalld提供的常规区域和服务语法之外,还可以使用直接规则和富规则。
直接规则:允许管理员将手动编码的{ip,ip6,eb}tables规则插入到firewall管理的区域中。
尽管直接规则很强大,但难以管理,灵活性也低于标准规则和富规则。本课程不讨论。
富规则:可实现自定义规则,例如允许从单个IP地址连接到某个服务,还可以配置允许和拒绝,记录连接,端口转发和速率限制。
富规则语法:
rule
[source]
[destination]
service | port | protocol | icmp-block | icmp-type | masquerade | forward-port |source-port
[log]
[audit]
[accept | reject | drop | mark]
–add-rich-rule=向指定区域中添加
–remove-rich-rule= 删除指定区域中
–list-rich-rule= 查询指定区域中列表
–query-rich-rule= 查询指定区域中是否含有规则,如果存在则返回0,否则返回1
示例:
rule family="ipv4" source address="192.168.2.4" drop
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns"
level="info" limit value="3/m" reject
rule family="ipv6" service name="radius" accept