Linux CentOS 8(firewalld的配置与管理)

Linux CentOS 8(firewalld的配置与管理)


目录


一、firewalld 简介

firewalld(动态防火墙管理器)自身和 iptables 一样,并不具备防火墙的功能,而是需要通过内核的 netfilter 来实现,也就是说 firewalld 和 iptables 的作用都是用于维护规则,而真正使用规则的是内核的 netfilter。只不过 firewalld 和 iptables 的结构以及使用方法不一样。

firewalld 跟 iptables 比起来,firewalld 可以动态修改单条规则,不需要像 iptables 那样,修改了规则后必须全部刷新才可以生效。缺点是每个服务都需要去设置才能放行,因为默认是拒绝,而 iptables 里默认是每个服务是允许,需要拒绝的才去限制。普遍应用于 Rhel7、CentOS7 及之后。且最小化安装的 Linux 系统不会安装 firewalld。

firewalld 只能做和 IP/Port 相关的限制,web 相关的限制无法实现。

二、firewalld 工作概念

1、预定义区域(管理员可以自定义修改)

通过将网络划分成不同的区域,制定出不同区域间的访问控制策略来控制不同程序区域间传送的数据流。一个网卡仅能绑定一个区域,但一个区域可以绑定多个网卡。如表1-1所示的几种不同的预定义区域。
表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,默认区域可以修改。

2、预定义服务

通过预定义服务,可以很方便的允许特定网络的流量通过防火墙,如表1-2所示。
表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 配置方法

firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件。其中 firewall-config是图形化工具,firewall-cmd是命令行工具。

1、通过firewall-cmd配置

1.1 安装firewalld

c 复制代码
[root@localhost ~]# yum install firewalld firewall-config
//firewall-config为图形工具

1.2 启动firewalld

c 复制代码
[root@localhost ~]# systemctl start firewalld

1.3 屏蔽服务

c 复制代码
[root@localhost ~]# systemctl mask iptables
[root@localhost ~]# systemctl mask ip6tables
[root@localhost ~]# systemctl mask ebtables
//由于iptables、ip6tables、ebtables这三个服务与filrewalld冲突,为防止意外启动,需要屏蔽这三个服务。

1.4 配置文件所在位置

c 复制代码
[root@localhost ~]# cd /lib/firewalld/{services,zones}/*.xml
//系统配置文件,尽量不要修改
[root@localhost ~]# cd /etc/firewalld/{services,zones}/*.xml
//用户配置文件

1.5 查看状态

c 复制代码
[root@localhost ~]# firewalld-cmd --state

1.6 配置 firewalld

c 复制代码
[root@localhost ~]# firewalld-cmd [选项··· ]

默认情况下是修改运行时配置(马上临时生效),如果要修改永久配置,添--permanent选项,但一定要重启才能生效。

zone区域相关命令,如表2-1所示。
表2-1 zone区域命令及作用说明

参数 作用
--get-default-zone 查询当前默认区域
--set-default-zone= 设置默认区域,使其永久生效
--get-active-zones 列出当前正在使用的所有区域(具有关联的接口或源)及其接口和源信息。
--get-zones 列出所有可用区域
--new-zone= 新增区域

服务相关命令,如表2-2所示。
表2-2 services服务命令及作用说明

参数 作用
--get-services 列出所有预定义服务
--add-service= [--zone=] 允许到的流量。如果未提--zone=选项,则将使用默认区域
--remove-service= [--zone=] 移除到的流量。如果未提--zone=选项,则将使用默认区域

port端口相关命令,如表2-3所示。
表2-3 port端口命令及作用说明

参数 作用
--add-port=<PORT/PROTOCOL> [--zone=] 允许到<PORT/PROTOCOL>端口的流量。如果未提--zone=选项,则将使用默认区域
--remove-port=<PORT/PROTOCOL> [--zone=] 移除到<PORT/PROTOCOL>端口的流量。如果未提--zone=选项,则将使用默认区域

interface接口相关命令,如表2-4所示:
表2-4 interface接口命令及作用说明

参数 作用
--add-interface= [--zone=] 将来自的所有流量路由到指定区域,如果未提--zone=选项,则将使用默认区域
--remove-interface= [--zone=] 将来自的所有流量路由取消到指定区域,如果未提--zone=选项,则将使用默认区域

source源相关命令,如表2-5所示:
表2-5 source源命令及作用说明

参数 作用
--add-source= [--zone=] 将来自IP地址或网络/子网掩码的所有流量路由到指定区域。如果未提--zone=选项,则将使用默认区域
--remove-source= [--zone=] 将来自IP地址或网络/子网掩码的所有流量路由取消到指定区域。如果未提--zone=选项,则将使用默认区域

其他相关命令,如表2-6所示:
表2-6 其他命令及作用说明

参数 作用
--list-all [--zone=] 列出的所有已配置接口、源、服务和端口。如果未提--zone=选项,则将使用默认区域。
--reload 更新防火墙规则
--version 查看版本

1.7 重启firewalld服务

c 复制代码
[root@localhost ~]# firewalld-cmd --reload
或
[root@localhost ~]# systemctl restart firewalld

2、通过firewall图形界面配置

2.1 启动图形化界面

通过命令firewalld-config启动图形界面,如图2-1所示:

c 复制代码
[root@localhost ~]# firewalld-config


图2-1 通过命令启动图形界面

通过菜单启动图形界面:应用---杂项---防火墙,如图2-2所示:


图2-2 通过菜单启动图形界面

2.2 选择配置规则的状态,如图2-3所示:


图2-3 选择配置规则的状态

注:自定义区域、服务只能在"永久"配置下设置

2.3 在区域内的services、ports、interfaces等选项页设置运行的流量,如图2-4所示:


图2-4 在区域内设置运行的流量

2.4 在服务内的ports、protocols等选项页设置运行的流量,如图2-5所示:


图2-5 在服务内设置运行的流量

四、配置 firewalld 的富规则

firewalld 中的富规则表示更复杂的防火墙策略配置,它可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的。

1、富规则语法

c 复制代码
[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 ]

2、富规则相关命令

firewall-cmd 有四个选项用于处理富规则,这些选项都能加上--permanent--zone=<ZONE>组合使用,如表3-1所示:
表3-1 富规则命令及作用说明

参数 作用
--add-rich-rule='' 在指定的区域添加一条富规则。如果未指定区域,则向默认区域中添加
--remove-rich-rule='' 在指定的区域删除一条富规则。如果未指定区域,则向默认区域中添加
--query-rich-rule='' 查询富规则是否已添加到指定区域,如果未指定区域,则为默认区域。找到规则返回0,找不到返回1。
--list-rich-rules 列出指定区域的所有富规则

3、实例

3.1 在work区域中拒绝172.25.0.11的所有流量

c 复制代码
[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服务

c 复制代码
[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连接

c 复制代码
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.0/24 service name=ssh drop'

3.4 网站禁止ping服务

c 复制代码
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
//drop和reject区别
reject直接拒绝,返回拒绝
drop是丢弃,直到超时

制作成员: 何嘉愉
排版: 裕新
初审: 杨佳佳
复审: 二月二

相关推荐
Koi慢热1 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎11 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
我们的五年21 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记42 分钟前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特1 小时前
环境变量简介
linux
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
是阿建吖!2 小时前
【Linux】进程状态
linux·运维
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Komorebi.py3 小时前
【Linux】-学习笔记05
linux·笔记·学习