目录
【1】 打开方式在 CentoS7 系统中,打开 firewall - config 图形工具的方式有两种:一种是单击 “应用程序” 中的 “杂项”,选择 “防火墙”;另一种是直接在终端中输入
【3】 服务管理firewalld 预先定义了很多服务,存放在
一、firewalld 防火墙概述
在 Linux 系统中,网络安全至关重要,firewalld 作为一款功能强大的防火墙管理工具,发挥着关键作用。它为系统提供了灵活且高效的网络访问控制能力,确保系统免受未经授权的网络访问和恶意攻击。
(1) 基本原理
firewalld 是一种动态防火墙管理工具,它作为包过滤机制的规则提供者,通过与内核中的 Netfilter 进行通信来实现数据包的处理。Netfilter 是 Linux 内核中用于数据包过滤、网络地址转换(NAT)和端口转发等功能的框架。firewalld 利用 Netfilter 的功能,根据用户配置的规则对数据包进行检查和过滤,决定是否允许数据包通过。
(2) 与 iptables 的关系
iptables 是传统的 Linux 防火墙管理工具,在早期的 Linux 系统中被广泛使用。firewalld 和 iptables 在功能上有相似之处,它们都通过 iptables 命令与内核的 netfilter 进行交互。但两者也存在一些区别:
- 配置存储位置:iptables service 将配置储存在/etc/sysconfig/iptables文件中,而 firewalld 把配置存放在/usr/lib/firewalld/和/etc/firewalld/中的各种 XML 文件里。
- 规则处理方式:使用 iptables service 时,每一个单独更改意味着清除所有旧有的规则并从配置文件里读取所有新的规则;而 firewalld 不会创建新的规则,仅仅运行规则中的不同之处,因此可以在运行时间内改变设置而不丢失现行连接。
- 在 Euler 系统中的差异:在 Euler 系统中,虽然仍可使用 iptables 命令管理防火墙,但当重启服务器或重启 firewalld 时,iptables 命令管理的规则不会自动加载,反而会被 firewalld 的规则代替。
二、firewalld 防火墙配置方式在 Euler 系统中,配置 firewalld 防火墙主要有三种方式,分别是通过 firewall - config 图形工具、firewal1 - cmd 命令行工具以及直接编辑
/etc/firewalld/中的配置文件。通常不建议直接编辑配置文件,下面主要介绍 firewall - config 图形工具与 firewal1 - cmd 命令行工具的配置方法。
(1)firewall - config 图形工具
【1】 打开方式在 CentoS7 系统中,打开 firewall - config 图形工具的方式有两种:一种是单击 “应用程序” 中的 “杂项”,选择 “防火墙”;另一种是直接在终端中输入
firewal1 - config命令。
【2】 工作界面介绍
firewall - config 工作界面主要分为三个部分:上面是主菜单,包含文件、选项、查看、帮助四个菜单项;中间是配置选项,包括运行时和永久两种配置;下面是区域、服务、IPsets、ICMP 类型、直接配置、锁定白名单设置选项卡,其中,ICMP 类型、直接配置和锁定白名单选项卡需从 “查看” 下拉菜单中选择后才能看见。最底部是状态栏,从左到右显示连接状态、默认区域、锁定状态、应急模式四个信息。
【3】 主菜单选项说明
- “选项” 菜单:“选项” 菜单是最重要的,其中包含多个重要选项。
- 重新加载防火墙:重新加载防火墙规则,当前的永久配置将变成新的运行时配置。例如,所有当前运行的配置规则若未在永久配置中操作,系统重新加载后就会丢失。
- 更改连接区域:用于更改网络连接的所属区域和接口。
- 改变默认区域:更改网络连接的默认区域。
- 应急模式:表示丢弃所有的数据包。
- 锁定:可以对防火墙的配置进行加锁,只允许白名单上的应用程序进行修改。
- “配置” 选项:“配置” 选项包括运行时和永久两种。运行时配置为当前使用的配置规则,永久配置规则在系统或服务重启时生效。
【4】 主要设置选项卡
- “区域” 选项卡:区域是服务、端口、协议、IP 伪装、ICMP 过滤等组合,同时区域也可以绑定到接口和源地址。“区域” 选项卡下面还包含服务、端口、协议、源端口、伪装等一系列子选项卡。
- “服务” 子选项卡:可以定义区域中哪些服务是可信的,可信的服务可以被绑定到该区域的任意连接、接口和源地址访问。
- “端口” 子选项卡:用于设置允许访问的主机或网络访问的端口范围。
- “协议” 子选项卡:用于添加所有主机或网络均可访问的协议。
- “端口转发” 子选项卡:可以将指定端口映射到另一个端口或其他主机的指定端口,设置时需选择协议类型,且该功能仅支持 IPv4。
- “ICMP 过滤器” 子选项卡:ICMP 主要用于在联网的计算机间发送出错信息,也发送类似 ping 请求以及回应等信息。在 “ICMP 过滤器” 子选项卡中可以选择应该被拒绝的 ICMP 类型,其他所有的 ICMP 类型则被允许通过防火墙,默认设置是没有限制。
- “服务” 选项卡:服务是端口、协议、模块和目标地址的组合,“服务” 选项卡只能在 “永久” 配置视图中查看和修改。运行时配置中的服务是不可以修改的。与 “区域” 选项卡不同,“服务” 选项卡仅包含五个子选项卡,其中,“端口”“协议”“源端口” 这些子选项卡的作用及配置方法与 “区域” 选项卡中的相同。
- “模块” 子选项卡:用于设置网络过滤的辅助模块。
- “目标地址” 子选项卡:如果某服务指定了目标地址,服务项目仅限于目标地址和类型,如果 IPv4 与 IPv6 均为空,则没有限制。
(2) firewal1 - cmd 命令行工具
【1】 获取预定义信息
firewal1 - cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻塞类型。获取这些信息的命令如下:
# 获取可用的区域
[root@localhost ~]# firewall - cmd --get - zones
work drop internal external trusted home dmz public block
# 获取可用的服务
[root@localhost ~]# firewall - cmd --get - service
RH - Satellite - 6 amanda - client amanda - k5 - client bacula bacula - client ceph ceph - mon dhcp dhcpv6 dhcpv6 - client dns docker - registry dropbox - lansync freeipa - ldap freeipa - ldaps freeipa - replication ftp high - availability http https imap imaps ipp ipp - client ipsec iscsi - target kadmink erberos kpasswd ldap ldaps libvirt libvirt - tls mdns mosh mountd ms - wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy - dhcp pptp pulseaudio puppetmaster radius rpc - bind rsyncd samba samba - client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog - tls telnet tftp tftp - client tinc tor - socks transmission - client vdsm vnc - server wbem - https xmpp - bosh xmpp - client xmpp - local xmpp - server
# 获取可用的ICMP阻塞类型
[root@localhost ~]# firewall - cmd --get - icmptypes
destination - unreachable echo - reply echo - request parame
firewal1 - cmd --get - icmptypes命令的执行结果中各种阻塞类型的含义如下:
- destination - unreachable:目的地址不可达。
- echo - reply:应答回应(pong)。
- parameter - problem:参数问题。
- redirect:重新定向。
- router - advertisement:路由器通告。
- router - solicitation:路由器征寻。
- source - quench:源端抑制。
- time - exceeded:超时。
- timestamp - reply:时间戳应答回应。
- timestamp - request:时间戳请求。
【2】 区域管理
使用 firewal1 - cmd 命令可以实现获取和管理区域,为指定区域绑定网络接口等功能。常用的区域管理选项及说明如下表所示:
选项
|
说明
|
--get - default - zone
|
显示网络连接或接口的默认区域
|
--set - default - zone=
|
设置网络连接或接口的默认区域
|
--get - active - zones
|
显示已激活的所有区域
|
--get - zone - of - interface=
|
显示指定接口绑定的区域
|
--zone= --add - interface=
|
为指定接口绑定区域
|
--zone= --change - interface=
|
为指定的区域更改绑定的网络接口
|
--zone= --remove - interface=
|
为指定的区域删除绑定的网络接口
|
--list - all - zones
|
显示所有区域及其规则
|
[--zone=] --list - all
|
显示所有指定区域的所有规则
|
具体操作示例如下:
# 显示当前系统中的默认区域
[root@localhost ~]# firewall - cmd --get - default - zone
public
# 显示默认区域的所有规则
[root@localhost ~]# firewall - cmd --list - all
public (active)
target: default
icmp - block - inversion: no
interfaces: ens160
sources:
services: dhcpv6 - client ssh
ports:
protocols:
masquerade: no
forward - ports:
sourceports:
icmp - blocks:
rich rules:
# 显示网络接口ens160对应区域
[root@localhost ~]# firewall - cmd --get - zone - of - interface=ens160
public
# 将网络接口ens160对应区域更改为internal区域
[root@localhost ~]# firewall - cmd --zone=internal --change - interface=ens160
The interface is under control of NetworkManager, setting zone to 'internal'. success
[root@localhost ~]# firewall - cmd --zone=internal --list - interfaces
ens160
[root@localhost ~]# firewall - cmd --get - zone - of - interface=ens160
internal
# 显示所有激活区域
[root@localhost ~]# firewall - cmd --get - active - zones
internal
interfaces: ens160
【3】 服务管理firewalld 预先定义了很多服务,存放在
/usr/lib/firewalld/services/目录中,服务通过单个的 XML 配置文件来指定,这些配置文件按
service - name.xml格式命名,每个文件对应一项具体的网络服务,如 ssh 服务等。与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口。在最新版本的 firewalld 中默认已经定义了 70 多种服务供我们使用,对于每个网络区域,均可以配置允许访问的服务。当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在
/etc/firewalld/services/目录中。service 配置具有以下优点:
- 通过服务名字来管理规则更加人性化。
- 通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。
firewal1 - cmd 命令区域中服务管理的常用选项及作用如下表所示:
参数
|
作用
|
--get - default - zone
|
查访默认的区域名称
|
--set - default - zone=<区域名称>
|
设置默认的区域,使其永久生效
|
--get - zones
|
显示可用的区域
|
--get - services
|
显示预定义的服务
|
--get - active - zones
|
显示当前正在使用的区域、来源地址和网卡名称
|
--add - source=
|
将源自此 IP 或子网的流量导向指定的区域
|
--remove - source=
|
不再将源自此 IP 或子网的流量导向这个区域
|
--add - interface=<网卡名称>
|
将源自该网卡的所有流量都导向某个指定区域
|
--change - interface=<网卡名称>
|
将某个网卡与区域进行关联
|
--list - all
|
显示当前区域的网卡配置参数、资源、端口以及服务等信息
|
--list - all - zones
|
显示所有区域的网卡配置参数、资源、端口以及服务等信息
|
--add - service=<服务名>
|
设置默认区域允许该服务的流量
|
--add - port=<端口号/协议>
|
设置默认区域允许该端口的流量
|
--remove - service=<服务名>
|
设置默认区域不再允许该服务的流量
|
--remove - port=<端口号/协议>
|
设置默认区域不再允许该端口的流量
|
--reload
|
让 “永久生效” 的配置规则立即生效,并覆盖当前的配置规则
|
--panic - on
|
开启应急状况模式
|
--panic - off
|
关闭应急状况模式
|
具体操作示例如下:
# 为默认区域设置允许访问的服务(先查看默认区域内允许访问的所有服务)
[root@localhost ~]# firewall - cmd --list - services
# 打开443/TCP端口
[root@localhost ~]# firewall - cmd --zone=internal --add - port=443/tcp
success
# 在internal区域禁止443/TCP端口访问
[root@localhost ~]# firewall - cmd --zone=internal --remove - port=443/tcp
success
【4】 两种配置模式
firewal1 - cmd 命令工具有两种配置模式:运行时模式(Runtime mode)和永久模式(Permanent mode)。
- 运行时模式:表示当前内存中运行的防火墙配置,在系统或 firewalld 服务重启、停止时配置将失效。
- 永久模式:表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewal1 - cmd 命令工具与配置模式相关的选项有三个:
- --reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
- --permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动 firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。
- --runtime - to - permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。
三、firewalld 防火墙配置应用
(1)实验环境
包含网关服务器、web 服务器、企业内网测试机和互联网测试机。网关服务器多网卡连接不同网络,web 服务器提供网站服务,各设备通过特定网段 IP 通信。
(2)实验过程
- 基本环境配置
- 修改网关服务器主机名:
vi /etc/hostname
,写入gateway - server
- 开启网关服务器路由转发:
- 修改配置文件:
vi /etc/sysctl.conf
,添加net.ipv4.ip_forward = 1
- 使配置生效:
sysctl -p
- 修改配置文件:
- 修改 web 服务器主机名:
vi /etc/hostname
,写入web
- 修改网关服务器主机名:
- 网站服务器环境搭建
- 安装软件包:
yum install -y httpd mod_ssl
- 启用并启动 httpd 服务,关闭 SELinux:
- 启用服务:
systemctl enable httpd
- 启动服务:
systemctl start httpd
- 关闭 SELinux:
setenforce 0
- 启用服务:
- 创建测试页:
vi /var/www/html/index.html
,写入测试内容 - 更改 ssh 监听端口并重启服务:
- 修改配置文件:
vi /etc/ssh/sshd_config
,修改Port
为12345
- 重启服务:
systemctl restart sshd
- 修改配置文件:
- 安装软件包:
- 网站服务器防火墙配置
- 启动防火墙并设置默认区域:
- 启动服务:
systemctl start firewalld
- 开机自启:
systemctl enable firewalld
- 设置默认区域:
firewall - cmd --set - default - zone=dmz
- 启动服务:
- 配置 dmz 区域:
- 添加 https 服务:
firewall - cmd --zone=dmz --add - service=https --permanent
- 添加 TCP 的 12345 端口:
firewall - cmd --zone=dmz --add - port=12345/tcp --permanent
- 禁止 ping:
firewall - cmd --add - icmp - block=echo - request --zone=dmz --permanent
- 移除 ssh 服务:
firewall - cmd --zone=dmz --remove - service=ssh --permanent
- 重新加载配置:
firewall - cmd --reload
- 添加 https 服务:
- 启动防火墙并设置默认区域:
- 网关服务器防火墙配置
- 验证防火墙运行状态:
firewall - cmd --state
,systemctl enable firewalld
- 设置默认区域并查看结果:
- 设置默认区域:
firewall - cmd --set - default - zone=external
- 查看配置:
firewall - cmd --list - all
- 设置默认区域:
- 配置网卡区域:
- 将 eth1 配置到 trusted 区域:
firewall - cmd --change - interface=eth1 --zone=trusted
- 将 eth2 配置到 dmz 区域:
firewall - cmd --change - interface=eth2 --zone=dmz
- 将 eth1 配置到 trusted 区域:
- 查看配置情况:
firewall - cmd --get - active - zones
- 后续配置与测试:
- 关闭 SELinux,更改 ssh 监听端口并重启服务(操作同网站服务器)
- 在 external 区域添加 12345 端口:
firewall - cmd --zone=external --add - port=12345/tcp --permanent
- 移除 ssh 服务:
firewall - cmd --zone=external --remove - service=ssh --permanent
- 禁止 ping:
firewall - cmd --zone=external --add - icmp - block=echo - request --permanent
- 重新加载配置:
firewall - cmd --reload
- 在不同测试机上进行 ssh 登录测试
- 验证防火墙运行状态:
四、firewalld 高级配置
(1)IP 伪装与端口转发
- IP 地址伪装:实现内网主机借助外网 IP 访问外部网络,共享上网。
- 端口转发:将外部对特定端口的访问转发到内部指定主机和端口,实现外网访问内网服务。
(2)firewall - cmd 高级配置
- 直接规则:将特定 IP 范围列入黑名单
- 添加黑名单链:
firewall - cmd --direct --permanent --add - chain ipv4 raw blacklist
- 添加规则:
firewall - cmd --direct --permanent --add - rule ipv4 raw PREROUTING 0 -s 192.168.0.0/24 -j blacklist
- 记录规则:
firewall - cmd --direct --permanent --add - rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log - prefix "blacklisted"
- 丢弃规则:
firewall - cmd --direct --permanent --add - rule ipv4 raw blacklist 1 -j DROP
- 重新加载配置:
firewall - cmd --reload
- 添加黑名单链:
- 富语言规则
- 规则排序:先解析直接规则,再由 firewalld 处理其他规则;信任区域接受所有数据包,其他区域不匹配则拒绝。
- 测试和调试:使用
--timeout
选项为运行时规则添加超时,如firewall - cmd --add - rich - rule='...' --timeout = 300
。 - 规则命令
- 添加富规则:
firewall - cmd --add - rich - rule='rule protocol value=ah accept'
- 删除富规则:
firewall - cmd --remove - rich - rule='rule...'
- 查询富规则:
firewall - cmd --query - rich - rule='rule...'
- 列出所有富规则:
firewall - cmd --list - rich - rules
- 添加富规则:
- 规则配置举例:根据不同协议、服务、源地址等配置允许或拒绝规则,并设置日志记录和连接限制。如允许特定源地址的 TFTP 连接并记录日志:
firewall - cmd --add - rich - rule='rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'
五、配置 firewall 防火墙的地址伪装和端口转发
(1)实验环境与基本配置
同 firewalld 防火墙配置应用实验环境。基本配置步骤类似,包括设置服务器网卡 IP、配置主机名、开启路由转发、搭建网站服务器环境、配置防火墙等。
(2)配置 IP 伪装与端口转发
- 内网用户共享上网
- 外网测试机搭建网站服务:
- 修改主机名:
hostname internet
- 安装 httpd:
yum install -y httpd
- 创建测试页:
vi /var/www/html/index.html
,写入内容 - 启用并启动服务:
systemctl enable httpd
,systemctl start httpd
- 设置防火墙允许 http 访问:
firewall - cmd --add - service=http
- 修改主机名:
- 内网和 dmz 网站服务器访问外网测试
- 查看网关服务器 external 区域地址伪装状态:
firewall - cmd --list - all --zone=external
- 配置 IP 伪装:
- 关闭原伪装:
firewall - cmd --remove - masquerade --zone=external
- 添加富规则开启伪装:
firewall - cmd --zone=external --add - rich - rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'
- 关闭原伪装:
- 再次测试 dmz 网站服务器访问外网情况
- 外网测试机搭建网站服务:
- 端口转发访问内部 web 服务器
- 配置端口转发:
firewall - cmd --zone=external --add - forward - port=port=443:proto=tcp:toaddr=192.168.2.10
- 互联网测试机访问内部 web 服务器测试
- 使用富规则配置端口转发(假设新公网 IP 为 100.1.1.15):
- 配置新 IP 到网关服务器 eth0 接口:修改
/etc/sysconfig/network - scripts/ifcfg - eth0
,添加IPADDR1 = 100.1.1.15
等,重启网络服务systemctl restart NetworkManager
- 添加富规则:
firewall - cmd --zone=external --add - rich - rule='rule family=ipv4 destination address=100.1.1.15/32 forward - port port=443 protocol=tcp to - addr=192.168.2.10'
- 互联网测试机访问测试 https://10.1.1.15
- 配置新 IP 到网关服务器 eth0 接口:修改
- 配置端口转发: