【Linux入门】Firewalld防火墙及其配置方法实例
文章目录
Firewalld 概述与 iptables 对比
Firewalld 概述
Firewalld 是 CentOS 7 及更高版本中默认的防火墙管理工具,它取代了传统的 iptables 防火墙。Firewalld 旨在提供一种更加动态和易于管理的防火墙解决方案,特别是在处理网络区域和接口安全等级方面。它工作在网络层,利用 Linux 内核的 netfilter 子系统来实现包过滤功能。
主要特点:
- 基于区域的管理:Firewalld 引入了网络区域的概念,允许管理员根据网络连接的信任程度来定义不同的安全策略。例如,家庭网络、工作网络和公共网络可以分别配置不同的防火墙规则。
- 支持 IPv4 和 IPv6:Firewalld 同时支持 IPv4 和 IPv6 协议的防火墙设置。
- 动态防火墙:Firewalld 允许在不中断现有连接的情况下更改防火墙规则,这对于需要高可用性的生产环境尤为重要。
- 运行时与永久配置:Firewalld 支持两种配置模式:运行时配置(即时生效,重启后失效)和永久配置(需要重载或重启 firewalld 服务后生效)。
- 丰富的配置接口:除了命令行工具,Firewalld 还提供了图形界面(如 firewall-config)和 D-Bus 接口,便于用户和管理员进行配置。
Firewalld 与 iptables 的区别
-
管理策略:
- iptables:基于接口和规则链来管理防火墙,需要手动定义每一条规则,并决定其处理逻辑(如接受、拒绝或丢弃)。
- firewalld:基于区域的概念来管理防火墙,通过定义不同区域的安全策略来简化配置过程。
-
配置存储:
- iptables:配置通常存储在
/etc/sysconfig/iptables文件中(尽管这取决于发行版和配置方式),修改后需要重新加载或重启 iptables 服务。 - firewalld:配置存储在
/etc/firewalld/(用户自定义配置)和/usr/lib/firewalld/(默认配置)目录下的 XML 文件中,支持运行时和永久配置。
- iptables:配置通常存储在
-
规则更新:
- iptables:每次修改规则时,都需要重新加载所有规则,这可能会导致短暂的连接中断。
- firewalld:支持在不中断现有连接的情况下更新规则,因为它只应用更改的部分,而不是重新加载所有规则。
-
防火墙类型:
- iptables:通常被视为静态防火墙,因为规则一旦设置,除非手动更改,否则不会改变。
- firewalld:动态防火墙,支持在运行时更改配置,同时保持现有连接的稳定性。
-
易用性和灵活性:
- iptables:虽然功能强大,但配置相对复杂,需要管理员具备较高的网络和安全知识。
- firewalld:提供了更直观和易于管理的界面,降低了配置难度,同时保持了高度的灵活性。
Firewalld 区域的概念与数据处理流程
Firewalld 区域的概念
Firewalld 防火墙为了简化管理和提高灵活性,引入了区域(zone)的概念。区域是一组预定义的防火墙规则集,用于决定如何处理通过特定网络接口或源自特定IP地址的数据包。Firewalld 防火墙将所有网络流量分配到不同的区域中,每个区域根据其安全级别和应用场景,定义了允许或拒绝的服务和端口列表。
Firewalld 防火墙预定义了九个区域,每个区域都有其特定的用途和默认规则:
- trusted(信任区域):允许所有的传入流量,不进行任何限制。
- public(公共区域):默认用于新添加的网络接口,允许SSH和DHCPv6客户端的流量,其余均拒绝。
- external(外部区域):类似于公共区域,但增加了对传出流量的地址伪装功能,适用于路由器外部网络。
- home(家庭区域):允许SSH、mDNS、Samba客户端和DHCPv6客户端的流量,其余均拒绝。
- internal(内部区域):默认规则与家庭区域相同,适用于受信任的内部网络。
- work(工作区域):允许SSH和DHCPv6客户端的流量,其余均拒绝,适用于工作环境。
- dmz(隔离区域/非军事区域):仅允许SSH流量,适用于需要较高安全隔离的环境。
- block(限制区域):拒绝所有传入流量,但会发送ICMP错误响应。
- drop(丢弃区域):丢弃所有传入流量,不发送任何响应,适用于需要极高隐蔽性的场景。
最终一个区域的安全程度是取决于管理员在此区域中设置的规则。
区域如同进入主机的安全门,每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入。
可以根据网络规模,使用一个或多个区域,但是任何一个 活跃区域 至少需要关联 源地址或接口。
默认情况下,public区域是默认区域,包含所有接口(网卡)。
Firewalld 数据处理流程
对于进入系统的数据包,Firewalld 会根据以下步骤进行处理:
-
检查源地址:首先,Firewalld 会检查数据包的源IP地址。如果源地址已经关联到特定的区域(即源地址或接口已明确绑定到某个区域),则直接应用该区域的规则。
-
检查网络接口:如果源地址未关联到特定的区域,Firewalld 会接着检查数据包传入的网络接口。如果网络接口已绑定到某个区域,则应用该区域的规则。
-
使用默认区域:如果源地址和网络接口都未关联到特定的区域,Firewalld 将使用默认区域(默认情况下为public区域)的规则来处理数据包。
这一流程确保了无论数据包来自何处,Firewalld 都能根据相应的规则集进行处理,从而提供灵活且强大的网络保护。管理员可以根据实际需求和网络环境,配置和调整区域及其规则,以实现最佳的安全策略。
Firewalld 防火墙配置方法
一、配置方式
- 使用 firewall-cmd 命令行工具:
- 通过命令行接口直接管理和配置 firewalld。
- 使用 firewall-config 图形工具:
- 通过图形用户界面(GUI)进行配置,适合不熟悉命令行的用户。
- 编写 /etc/firewalld/ 中的配置文件:
- 直接编辑 firewalld 的配置文件,这种方式适合需要批量配置或自动化配置的场景。
二、启动 firewalld 服务
systemctl start firewalld.service
三、常用的 firewall-cmd 命令选项
1. 查询与设置默认区域
-
查询当前默认区域:
firewall-cmd --get-default-zone -
设置默认区域:
firewall-cmd --set-default-zone=<zone>
2. 查看区域信息
-
查看当前正在使用的区域及其对应的网卡接口:
firewall-cmd --get-active-zones -
显示所有可用的区域:
firewall-cmd --get-zones -
查看指定接口绑定的区域:
firewall-cmd --get-zone-of-interface=<interface>
3. 管理接口与区域绑定
-
为指定接口绑定区域:
firewall-cmd --zone=<zone> --add-interface=<interface> -
更改指定区域绑定的网络接口:
firewall-cmd --zone=<zone> --change-interface=<interface> -
删除指定区域绑定的网络接口:
firewall-cmd --zone=<zone> --remove-interface=<interface>
4. 管理源地址与区域绑定
-
为指定源地址绑定区域:
firewall-cmd --zone=<zone> --add-source=<source>[/<mask>] -
更改指定的区域绑定的源地址:
firewall-cmd --zone=<zone> --change-source=<source>[/<mask>] -
删除指定的区域绑定的源地址:
firewall-cmd --zone=<zone> --remove-source=<source>[/<mask>]
5. 查看与设置区域规则
-
显示所有区域及其规则:
firewall-cmd --list-all-zones -
显示指定区域的所有规则:
firewall-cmd --zone=<zone> --list-all -
显示指定区域内允许访问的所有服务:
firewall-cmd --zone=<zone> --list-services -
为指定区域设置允许访问的某项服务:
firewall-cmd --zone=<zone> --add-service=<service> -
删除指定区域已设置的允许访问的某项服务:
firewall-cmd --zone=<zone> --remove-service=<service> -
显示指定区域内允许访问的所有端口号:
firewall-cmd --zone=<zone> --list-ports -
为指定区域设置允许访问的某个/某段端口号(包括协议名):
firewall-cmd --zone=<zone> --add-port=<portid>[-<portid>]/<protocol> -
删除指定区域已设置的允许访问的端口号(包括协议名):
firewall-cmd --zone=<zone> --remove-port=<portid>[-<portid>]/<protocol> -
显示指定区域内拒绝访问的所有 ICMP 类型:
firewall-cmd --zone=<zone> --list-icmp-blocks -
为指定区域设置拒绝访问的某项 ICMP 类型:
firewall-cmd --zone=<zone> --add-icmp-block=<icmptype> -
删除指定区域已设置的拒绝访问的某项 ICMP 类型:
firewall-cmd --zone=<zone> --remove-icmp-block=<icmptype> -
显示所有 ICMP 类型:
firewall-cmd --get-icmptypes
以上命令中的 <zone>, <interface>, <source>, <mask>, <service>, <portid>, <protocol>, 和 <icmptype> 均为占位符,实际使用时需替换为具体值。
Firewalld 管理
Firewalld 区域管理
1. 显示当前系统中的默认区域
firewall-cmd --get-default-zone
2. 显示默认区域的所有规则**
firewall-cmd --list-all
注意:这里未指定 --zone 参数,因此默认显示默认区域的规则。
3. 显示当前正在使用的区域及其对应的网卡接口
firewall-cmd --get-active-zones
4. 设置默认区域
firewall-cmd --set-default-zone=home
firewall-cmd --get-default-zone # 验证设置是否成功
Firewalld 服务管理
1. 查看默认区域内允许访问的所有服务
firewall-cmd --list-services
注意:同样未指定 --zone,默认为默认区域。
2. 添加 httpd 服务到 public 区域
firewall-cmd --add-service=http --zone=public
firewall-cmd --reload # 使更改生效
3. 查看 public 区域已配置规则
firewall-cmd --list-all --zone=public
4. 删除 public 区域的 httpd 服务
firewall-cmd --remove-service=http --zone=public
firewall-cmd --reload # 使更改生效
5. 同时添加 httpd、https 服务到默认区域,并设置成永久生效
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --zone=internal --permanent --add-service={http,https,ftp} # 假设你想在internal区域也添加
firewall-cmd --reload # 使更改生效
firewall-cmd --list-all # 查看默认区域配置
firewall-cmd --list-all --zone=internal # 查看internal区域配置
Firewalld 端口管理
1. 允许 TCP 的 443 端口到 internal 区域
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --reload # 使更改生效
firewall-cmd --list-all --zone=internal
2. 从 internal 区域将 TCP 的 443 端口移除
firewall-cmd --zone=internal --remove-port=443/tcp
firewall-cmd --reload # 使更改生效
3. 允许 UDP 的 2048~2050 端口到默认区域
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --reload # 使更改生效
firewall-cmd --list-all
补充:设置地址转换
注意:以下命令使用 --direct --passthrough 绕过 Firewalld 的规则处理,直接操作 iptables 规则。这通常用于高级配置。
1. 设置 SNAT
firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.80.0/24 -j SNAT --to-source 12.0.0.1
firewall-cmd --reload # 更改可能需要重新加载
2. 设置 DNAT
firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A PREROUTING -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11
firewall-cmd --reload # 更改需要重新加载
注意:
--permanent选项用于设置永久规则,但更改不会立即生效,需要执行firewall-cmd --reload或重启 Firewalld 服务。--runtime-to-permanent命令通常不单独使用,因为它旨在将当前运行时配置写入永久配置,但在实际操作中,你通常会直接通过--permanent选项设置永久规则。- 地址转换(NAT)的设置可能需要额外的防火墙规则来确保流量能够正确通过,这取决于你的具体网络配置和安全需求。
更多推荐
所有评论(0)