CentOS Firewalld 配置详解
Firewalld 是 CentOS 7 及更高版本中默认的防火墙管理工具,与 iptables 相比,firewalld 提供了更简单、更灵活的管理方式,并且支持动态更新规则而无需重启防火墙服务,本文将详细介绍 firewalld 的配置方法、区域管理、服务管理和端口管理等内容。
Firewalld 简介
Firewalld 是一个动态防火墙管理器,通过内核的 netfilter 子系统实现防火墙功能,它不仅支持 IPv4,还支持 IPv6,并具备丰富的配置选项和友好的用户界面,Firewalld 使用区域(zone)和服务(service)的概念来管理网络流量,使得配置更加直观和高效。
二、Firewalld 与 iptables 的区别
1、配置方式:
iptables:基于接口设置规则,所有更改都需要手动刷新规则。
firewalld:基于区域设置规则,可以动态修改单条规则而不影响其他规则。
2、规则存储:
iptables:规则存储在/etc/sysconfig/iptables
文件中。
firewalld:规则存储在/usr/lib/firewalld/
和/etc/firewalld/
目录下的 XML 文件中。
3、操作方式:
iptables:每次修改规则后需要重新加载整个规则集。
firewalld:可以实时更新规则而无需重启服务。
Firewalld 区域管理
Firewalld 预定义了多个区域,每个区域都有不同的安全级别和默认行为,以下是常见的预定义区域及其描述:
区域名称 | 描述 |
trusted | 允许所有传入和传出流量,适用于高度信任的内部网络。 |
home | 允许选定的服务和流量,通常用于家庭网络。 |
work | 允许选定的服务和流量,通常用于工作环境。 |
public | 默认区域,仅允许选定的服务和流量,适用于公共网络。 |
dmz | 隔离区域,仅允许选定的流量,适用于非军事区(DMZ)。 |
block | 阻止所有传入流量,但允许传出流量。 |
drop | 丢弃所有传入流量,不产生任何响应。 |
internal | 类似于 home 区域,但通常用于内部网络。 |
external | 类似于 public 区域,但适用于外部网络。 |
查看当前活动区域
firewallcmd getactivezones
设置默认区域
firewallcmd setdefaultzone=public
为指定接口绑定区域
firewallcmd zone=public addinterface=ens33
Firewalld 服务管理
Firewalld 预定义了许多常见的服务,如 HTTP、HTTPS、SSH 等,这些服务对应特定的端口和协议,可以通过服务名称来管理相应的端口。
查看可用服务
firewallcmd getservices
添加服务到指定区域
firewallcmd zone=public addservice=http
移除服务从指定区域
firewallcmd zone=public removeservice=http
Firewalld 端口管理
除了使用预定义的服务外,还可以直接管理端口。
添加端口到指定区域
firewallcmd zone=public addport=8080/tcp permanent
移除端口从指定区域
firewallcmd zone=public removeport=8080/tcp permanent
查看指定区域的端口状态
firewallcmd zone=public listports
Firewalld 富规则配置
Firewalld 支持富规则(rich rules),可以更细粒度地控制网络流量,富规则语法较为复杂,但功能强大。
示例:添加一条富规则
firewallcmd permanent addrichrule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
查看富规则列表
firewallcmd listall permanent
删除富规则
firewallcmd permanent deleterichrule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
Firewalld 的其他常用命令
启动 firewalld:
systemctl start firewalld
停止 firewalld:
systemctl stop firewalld
重启 firewalld:
systemctl restart firewalld
查看 firewalld 状态:
systemctl status firewalld
查看 firewalld 版本:
firewallcmd version
重新加载 firewalld 配置:
firewallcmd reload
常见问题解答(FAQs)
Q1:如何更改 firewalld 的默认区域?
A1:可以使用以下命令更改默认区域:
firewallcmd setdefaultzone=public
将默认区域设置为home
:
firewallcmd setdefaultzone=home
Q2:如何在 firewalld 中配置端口转发?
A2:确保开启了伪装功能:
firewallcmd addmasquerade permanent
添加端口转发规则,将本地端口 8080 的流量转发到外部地址 192.168.1.100 的 80 端口:
firewallcmd addforwardport=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100 permanent
重新加载配置:
firewallcmd reload
注意:如果端口转发仍不生效,请检查内核参数net.ipv4.ip_forward
是否已启用:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl p
通过上述步骤,您可以全面了解并掌握 CentOS 中 firewalld 的配置和管理方法,无论是简单的服务和端口管理,还是复杂的富规则配置,firewalld 都能提供强大的支持,帮助您构建安全可靠的网络环境。