前言
在 CentOS/RHEL 7/8/9 系列系统中,firewalld 已成为默认的动态防火墙管理工具。相比 iptables,firewalld 支持区域化管理、热重载、服务化配置,使用更简单、更安全,同时也能完整实现端口放行、NAT 转发、端口映射等企业常用功能。
为了让你更全面掌握 Linux 防火墙体系,本文在 firewalld 基础上,额外补充 TCPWrapper 七层访问控制 ,形成二层+七层完整防护体系,所有命令均为生产环境可直接使用的标准指令。
一、firewalld 防火墙基础
1. 核心介绍
-
依赖:
firewalld系统服务 -
管理工具:
-
firewall-cmd命令行(最常用)
-
firewall-config图形工具
-
-
特点:动态更新、支持热重载、区域隔离、简单易用
二、数据过滤(常用操作)
1. 启动并启用 firewalld
systemctl unmask firewalld
systemctl start firewalld
systemctl enable firewalld
2. 查看所有区域
firewall-cmd --get-zones
常用区域说明:
-
drop
:直接丢弃(黑名单)
-
block
:拒绝并返回拒绝包
-
public
:默认公共区域
-
trusted
:信任所有(白名单)
3. 查看/设置默认区域
firewall-cmd --get-default-zone
4. 查看区域详细规则
firewall-cmd --list-all --zone=public
5. 放行服务(永久生效)
# 放行 http
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
# 放行 ftp
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
6. 放行自定义端口
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
7. 禁止 Ping(禁 ICMP 请求)
firewall-cmd --permanent --add-icmp-block=echo-request
firewall-cmd --reload
三、NAT 地址转换与端口转发
1. SNAT / 源地址转换(内网共享上网)
开启 IP 伪装(相当于 iptables MASQUERADE):
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
查看是否开启:
firewall-cmd --list-all
# 看到 masquerade: yes 表示成功
2. DNAT / 端口转发(发布内网服务)
(1)本地端口映射
将本机 8888 → 22 端口:
firewall-cmd --permanent --add-forward-port=port=8888:proto=tcp:toport=22
firewall-cmd --reload
(2)远程端口转发(发布内网服务器)
访问本机 6666 → 转发到内网 172.16.100.10:80
firewall-cmd --permanent --add-forward-port=port=6666:proto=tcp:toport=80:toaddr=172.16.100.10
firewall-cmd --reload
四、TCPWrapper 七层访问控制
1. 介绍
TCPWrapper 是应用层(七层)防火墙,通过控制"谁能访问哪个服务"实现精细化权限管理。
2. 配置文件
/etc/hosts.allow允许规则/etc/hosts.deny拒绝规则
匹配顺序:allow 优先 → 再匹配 deny
3. 配置格式
服务名: 客户端IP/网段
示例:
# 允许 100 访问 ftp
vsftpd: 192.168.177.100
# 允许整个网段
vsftpd: 192.168.177.0/255.255.255.0
# 允许网段,但排除 10
vsftpd: 192.168.177.0/255.255.255.0 EXCEPT 192.168.177.10
4. 使用前提
服务必须依赖 libwrap.so.0库。
查看命令:
ldd /usr/sbin/vsftpd | grep -i wrap
出现 libwrap.so.0表示支持 TCPWrapper。
五、核心要点总结
-
firewalld 是 CentOS 7+ 默认防火墙
,基于区域管理,支持热重载。
-
所有永久配置必须加
--permanent,并执行--reload。 -
--add-service适合标准服务,
--add-port适合自定义端口。 -
NAT 转发只需开启
--add-masquerade,端口转发用--add-forward-port。 -
TCPWrapper 是七层访问控制
,比防火墙更细粒度,适合 SSH/FTP/Telnet 等服务。
-
TCPWrapper 生效前提:服务必须加载
libwrap库。 -
Linux 安全最佳实践:firewalld(网络层)+ TCPWrapper(应用层)双层防护。