Linux防火墙是系统安全的第一道防线,通过控制网络流量进出,防止未授权访问和恶意攻击,修改Linux防火墙需根据系统类型(如CentOS、Ubuntu)和防火墙工具(iptables、firewalld、nftables)选择合适的方法,本文将详细介绍不同工具的配置步骤、核心概念及安全注意事项。

Linux防火墙基础:从netfilter到用户工具
Linux防火墙的核心是内核空间的netfilter框架,它提供数据包过滤、网络地址转换(NAT)等功能,而用户空间则通过工具(如iptables、firewalld)操作netfilter。
- iptables:传统工具,通过“表(Table)”和“链(Chain)”管理规则,默认有5个表(filter、nat、mangle、raw、security),其中filter表最常用,负责过滤进出本机的数据包,包含INPUT(入站)、OUTPUT(出站)、FORWARD(转发)三条链。
- firewalld:CentOS 7+、Ubuntu 18.04+等系统默认采用,支持“区域(Zone)”动态管理,将网络接口划分为不同区域(如public、trusted),每个区域独立配置规则,无需重启服务即可更新规则。
- nftables:iptables的替代品,内核3.13+支持,语法更简洁,整合了iptables的多个表功能,逐渐成为主流(如Ubuntu 20.04+默认使用)。
iptables实战:传统而强大的过滤引擎
iptables规则按“匹配条件-动作”结构执行,常用动作包括ACCEPT(允许)、DROP(丢弃)、REJECT(拒绝并返回错误)。
查看与清空规则
- 查看当前规则(显示IP和端口,不解析域名):
iptables -L -n -v
- 清空所有规则(谨慎操作,避免远程锁死):
iptables -F # 清空链规则 iptables -X # 清空自定义链 iptables -Z # 计数器归零
添加基础规则
- 允许SSH连接(端口22):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 拒绝特定IP访问(如192.168.1.100):
iptables -A INPUT -s 192.168.1.100 -j DROP
- 允许已建立的连接(避免断开现有会话):
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
端口转发与NAT
- 开启内核转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 将80端口转发至8080端口:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
保存规则
- CentOS 6及以下:
service iptables save - Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4
firewalld动态管理:区域化安全策略
firewalld通过“区域”隔离不同网络环境,默认区域为public(仅允许SSH、DHCP等必要服务)。
查看与切换区域
- 查看当前活跃区域:
firewall-cmd --get-active-zones
- 查看指定区域规则(如public):
firewall-cmd --zone=public --list-all
添加端口与服务
- 永久允许8080端口(需reload生效):
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload
- 允许HTTP服务(预定义服务,包含80端口):
firewall-cmd --permanent --add-service=http firewall-cmd --reload
端口转发与富规则
- 添加端口转发(将80端口转发至内网192.168.1.10的8080端口):
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 firewall-cmd --reload
- 使用富规则(Rich Rules)实现复杂控制(如允许特定IP访问MySQL):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.50" service name="mysql" accept' firewall-cmd --reload
高级配置:自定义链与日志审计
iptables自定义链
当规则较多时,可创建自定义链提升可读性:
iptables -N WEB_FILTER # 创建自定义链WEB_FILTER iptables -A WEB_FILTER -p tcp --dport 80 -m limit --limit 5/min -j ACCEPT # 限速5次/分钟 iptables -A WEB_FILTER -j LOG --log-prefix "WEB_ACCESS: " # 记录日志 iptables -A WEB_FILTER -j DROP # 超出限制丢弃 iptables -A INPUT -p tcp --dport 80 -j WEB_FILTER # 将80端口流量转入自定义链
防火墙日志审计
通过日志记录被拦截的流量,便于分析攻击行为:

iptables -A INPUT -p tcp --dport 22 -m limit --limit 2/min -j LOG --log-level 6 --log-prefix "SSH_LOGIN: "
日志默认位于/var/log/messages,可通过grep "SSH_LOGIN" /var/log/messages查看。
安全操作:修改防火墙的核心原则
-
备份先行:修改前备份现有规则,避免误操作导致服务中断。
- iptables备份:
iptables-save > /root/iptables_backup - firewalld备份:
firewall-cmd --list-all > /root/firewalld_backup
- iptables备份:
-
最小权限原则:仅开放必要的端口和服务,禁止所有非必需流量(默认拒绝所有,按需开放)。
-
测试环境验证:在生产环境修改前,先在测试机验证规则有效性,确保SSH、数据库等关键服务可访问。
-
避免远程锁死:若修改SSH端口规则,确保同时开放默认22端口或通过控制台访问,防止远程连接断开。

-
定期审计:通过
iptables -L -n -v或firewall-cmd --list-all检查规则,清理冗余或过期规则。
灵活选择,安全优先
Linux防火墙工具的选择需结合系统版本和需求:iptables稳定且功能全面,适合传统服务器;firewalld动态管理更便捷,适合频繁变更规则的场景;nftables作为新兴工具,语法简洁且性能更优,逐渐成为未来趋势,无论使用哪种工具,核心目标都是通过精细化规则控制网络流量,在保障服务可用性的同时,最大化系统安全性,修改防火墙时,务必遵循“备份-测试-应用”的流程,确保操作安全可控。















