Linux CentOS 8(firewalld的配置与管理)
firewalld(动态防火墙管理器)自身和 iptables 一样,并不具备防火墙的功能,而是需要通过内核的 netfilter 来实现,也就是说 firewalld 和 iptables 的作用都是用于维护规则,而真正使用规则的是内核的 netfilter。只不过 firewalld 和 iptables 的结构以及使用方法不一样。
firewalld 跟 iptables 比起来,firewalld 可以动态修改单条规则,不需要像 iptables 那样,修改了规则后必须全部刷新才可以生效。缺点是每个服务都需要去设置才能放行,因为默认是拒绝,而 iptables 里默认是每个服务是允许,需要拒绝的才去限制。普遍应用于 Rhel7、CentOS7 及之后。且最小化安装的 Linux 系统不会安装 firewalld。
firewalld 只能做和 IP/Port 相关的限制,web 相关的限制无法实现。
通过将网络划分成不同的区域,制定出不同区域间的访问控制策略来控制不同程序区域间传送的数据流。一个网卡仅能绑定一个区域,但一个区域可以绑定多个网卡。如表1-1所示的几种不同的预定义区域。
区域名称 | 默认配置 |
---|---|
trusted | 允许所有数据包传入和数据包流出,lo接口被分配为此区域 |
home | 拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh、mdns、ipp-client、sbmclient、dhcpv6-client)的数据包可以流入 |
work | 拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh、ipp-client、dhcpv6-client)的数据包可以流入 |
public | 拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh、dhcpv6-client)的数据包可以流入。新添加的网卡默认绑定到该区 |
dmz | 隔离区域也称为非军事区域。拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh)的数据包可以流入 |
block | 阻止所有传入的数据包 |
drop | 拒绝所有传入的数据包 |
internal | 拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh)的数据包可以流入 |
external | 拒绝任何数据包流入,但允许数据包流出和预定义服务(ssh、dhcpv6-client)的数据包可以流入 |
相应地,firewalld提供了九个区域的配置文件,分别是trusted.xml、home.xml、work.xml 、public.xml、dmz.xml、block.xml、drop.xml、internal.xml、external.xml,他们都保存在“/usr/lib/firewalld/zones/”目录下。
注:默认区域是public,默认区域可以修改。
通过预定义服务,可以很方便的允许特定网络的流量通过防火墙,如表1-2所示。
服务名称 | 配置 |
---|---|
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的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件。其中 firewall-config是图形化工具,firewall-cmd是命令行工具。
1.1 安装firewalld
[root@localhost ~]# yum install firewalld firewall-config
//firewall-config为图形工具
1.2 启动firewalld
[root@localhost ~]# systemctl start firewalld
1.3 屏蔽服务
[root@localhost ~]# systemctl mask iptables
[root@localhost ~]# systemctl mask ip6tables
[root@localhost ~]# systemctl mask ebtables
//由于iptables、ip6tables、ebtables这三个服务与filrewalld冲突,为防止意外启动,需要屏蔽这三个服务。
1.4 配置文件所在位置
[root@localhost ~]# cd /lib/firewalld/{services,zones}/*.xml
//系统配置文件,尽量不要修改
[root@localhost ~]# cd /etc/firewalld/{services,zones}/*.xml
//用户配置文件
1.5 查看状态
[root@localhost ~]# firewalld-cmd --state
1.6 配置 firewalld
[root@localhost ~]# firewalld-cmd [选项··· ]
默认情况下是修改运行时配置(马上临时生效),如果要修改永久配置,添--permanent
选项,但一定要重启才能生效。
zone区域相关命令,如表2-1所示。
参数 | 作用 |
---|---|
–get-default-zone | 查询当前默认区域 |
–set-default-zone= | 设置默认区域,使其永久生效 |
–get-active-zones | 列出当前正在使用的所有区域(具有关联的接口或源)及其接口和源信息。 |
–get-zones | 列出所有可用区域 |
–new-zone= | 新增区域 |
服务相关命令,如表2-2所示。
参数 | 作用 |
---|---|
–get-services | 列出所有预定义服务 |
–add-service= [–zone=] | 允许到的流量。如果未提–zone=选项,则将使用默认区域 |
–remove-service= [–zone=] | 移除到的流量。如果未提–zone=选项,则将使用默认区域 |
port端口相关命令,如表2-3所示。
参数 | 作用 |
---|---|
–add-port= | 允许到 |
–remove-port= | 移除到 |
interface接口相关命令,如表2-4所示:
参数 | 作用 |
---|---|
–add-interface= [–zone=] | 将来自的所有流量路由到指定区域,如果未提–zone=选项,则将使用默认区域 |
–remove-interface= [–zone=] | 将来自的所有流量路由取消到指定区域,如果未提–zone=选项,则将使用默认区域 |
source源相关命令,如表2-5所示:
参数 | 作用 |
---|---|
–add-source= [–zone=] | 将来自IP地址或网络/子网掩码的所有流量路由到指定区域。如果未提–zone=选项,则将使用默认区域 |
–remove-source= [–zone=] | 将来自IP地址或网络/子网掩码的所有流量路由取消到指定区域。如果未提–zone=选项,则将使用默认区域 |
其他相关命令,如表2-6所示:
参数 | 作用 |
---|---|
–list-all [–zone=] | 列出的所有已配置接口、源、服务和端口。如果未提–zone=选项,则将使用默认区域。 |
–reload | 更新防火墙规则 |
–version | 查看版本 |
1.7 重启firewalld服务
[root@localhost ~]# firewalld-cmd --reload
或
[root@localhost ~]# systemctl restart firewalld
2.1 启动图形化界面
通过命令firewalld-config
启动图形界面,如图2-1所示:
[root@localhost ~]# firewalld-config
通过菜单启动图形界面:应用—杂项—防火墙,如图2-2所示:
2.2 选择配置规则的状态,如图2-3所示:
注:自定义区域、服务只能在“永久”配置下设置
2.3 在区域内的services、ports、interfaces等选项页设置运行的流量,如图2-4所示:
2.4 在服务内的ports、protocols等选项页设置运行的流量,如图2-5所示:
firewalld 中的富规则表示更复杂的防火墙策略配置,它可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的。
[root@localhost ~]# man firewalld.richlanguage
rule
[source]
[destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]
Rule
rule [family="ipv4|ipv6"]
Source
source [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"
Destination
destination [not] address="address[/mask]"
Service
service name="service name"
Port
port port="port value" protocol="tcp|udp"
Protocol
protocol value="protocol value"
Forward-port
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
Source-port
source-port port="port value" protocol="tcp|udp"
[ accept | reject | drop | mark ]
firewall-cmd 有四个选项用于处理富规则,这些选项都能加上--permanent
,--zone=
组合使用,如表3-1所示:
参数 | 作用 |
---|---|
–add-rich-rule=‘’ | 在指定的区域添加一条富规则。如果未指定区域,则向默认区域中添加 |
–remove-rich-rule=‘’ | 在指定的区域删除一条富规则。如果未指定区域,则向默认区域中添加 |
–query-rich-rule=‘’ | 查询富规则是否已添加到指定区域,如果未指定区域,则为默认区域。找到规则返回0,找不到返回1。 |
–list-rich-rules | 列出指定区域的所有富规则 |
3.1 在work
区域中拒绝172.25.0.11
的所有流量
[root@localhost ~]# firewall-cmd --zone=work --add-rich-rule='rule family=ipv4 source address=172.25.0.11 reject'
3.2 允许172.25.0.0
网段的主机能够访问http服务
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.0/24 service name=http accept'
3.3 默认public区域
对外开放,但拒绝172.16.0.0/24
网段通过ssh连接
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.0/24 service name=ssh drop'
3.4 网站禁止ping服务
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
//drop和reject区别
reject直接拒绝,返回拒绝
drop是丢弃,直到超时
制作成员: 何嘉愉
排版: 裕新
初审: 杨佳佳
复审: 二月二