文章总结: 本文详细介绍了Linux系统中iptables和firewalld两种防火墙工具的核心概念、配置方法和实战应用。iptables基于netfilter框架,支持表链目标精细控制;firewalld提供动态管理,以区域服务简化操作。文档涵盖基本命令、高级配置如NAT、规则持久化、Web和数据库服务器案例、故障排查及安全最佳实践,最终指出iptables适合底层控制,firewalld适合日常运维。
综合评分: 100
文章分类: 网络安全,安全工具,解决方案,安全建设,应用安全
Linux 系统中两种核心防火墙
原创
guowei
网络安全直通车
2025年12月5日 10:07
北京
Linux 系统中两种核心防火墙工具(iptables与firewalld)的完整配置指南,首先明确防火墙是监控并控制网络流量的安全设备,其中iptables是传统工具,直接操作内核 netfilter 框架,核心依赖 “表(filter/nat 等 4 类)、链(INPUT/OUTPUT 等 5 类)、目标(ACCEPT/DROP 等)” 概念;firewalld是动态防火墙管理器,以 “区域(drop/public 等 9 类)、服务、富规则” 为核心,支持动态配置。文中详细提供了两者的基本语法、常用命令(如 iptables 查看规则iptables -L -n -v、firewalld 添加服务firewall-cmd --add-service=http)、高级配置(端口范围、连接限制、NAT / 端口转发)、规则持久化方法(CentOS/Ubuntu 系统差异),并给出 Web / 数据库服务器的实战配置脚本,同时覆盖故障排查(规则不生效、连接被拒)、性能优化及 “最小权限、白名单” 等安全最佳实践,最终指出 iptables 适合底层精细控制,firewalld 适合日常动态运维。
详细总结
1. 防火墙基础概念
防火墙是监控和控制网络流量的网络安全设备,根据预定义规则允许 / 阻止数据包,Linux 系统中核心解决方案为iptables与firewalld,两者核心差异如下表:
| 对比维度 | iptables | firewalld |
| — | — | — |
| 定位 | 传统防火墙工具 | 动态防火墙管理器 |
| 核心依赖 | 直接操作内核 netfilter 框架 | 基于 netfilter,提供高级抽象 |
| 配置特性 | 静态配置,修改需重启规则 | 动态配置,支持实时生效(无重启) |
| 核心概念 | 表、链、目标 | 区域、服务、富规则 |
| 适用场景 | 需底层精细控制规则的场景 | 日常运维、动态调整规则的场景 |
2. iptables 详解
2.1 核心基础概念(表、链、目标)
| 类别 | 具体内容及说明 |
| — | — |
| 表(Tables) | 1. filter 表:默认表,用于过滤数据包(核心表);2. nat 表:用于网络地址转换(SNAT/DNAT);3. mangle 表:修改数据包头部信息;4. raw 表:配置连接跟踪。 |
| 链(Chains) | 1. INPUT:处理入站数据包;2. OUTPUT:处理出站数据包;3. FORWARD:处理转发数据包;4. PREROUTING:路由决策前处理数据包;5. POSTROUTING:路由决策后处理数据包。 |
| 目标(Targets) | 1. ACCEPT:接受数据包;2. DROP:丢弃数据包(无反馈);3. REJECT:拒绝并返回错误信息;4. LOG:记录日志;5. MASQUERADE:IP 伪装(NAT 场景)。 |
2.2 基本语法与常用命令
-
基本语法
:
iptables [-t table] -[ADI/FLZ/N/X/P] chain rule-specification -
常用命令分类
:
-
按规则内容删除:
iptables -D INPUT -p tcp --dport 80 -j ACCEPT -
按行号删除(第 3 条):
iptables -D INPUT 3 -
清空所有规则:
iptables -F;iptables -X;iptables -Z(重置计数器) -
允许 SSH(22 端口):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT -
允许 HTTP(80)+HTTPS(443):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT;iptables -A INPUT -p tcp --dport 443 -j ACCEPT -
允许特定 IP(192.168.1.100):
iptables -A INPUT -s 192.168.1.100 -j ACCEPT -
查看所有规则:
iptables -L -n -v -
查看 nat 表规则:
iptables -t nat -L -n -v -
查看 INPUT 链规则编号:
iptables -L INPUT --line-numbers
-
查看规则
:
- 查看所有规则:
iptables -L -n -v - 查看 nat 表规则:
iptables -t nat -L -n -v - 查看 INPUT 链规则编号:
iptables -L INPUT --line-numbers
-
添加规则
:
- 允许 SSH(22 端口):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT - 允许 HTTP(80)+HTTPS(443):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT;iptables -A INPUT -p tcp --dport 443 -j ACCEPT - 允许特定 IP(192.168.1.100):
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
-
删除规则
:
- 按规则内容删除:
iptables -D INPUT -p tcp --dport 80 -j ACCEPT - 按行号删除(第 3 条):
iptables -D INPUT 3 - 清空所有规则:
iptables -F;iptables -X;iptables -Z(重置计数器)
-
设置默认策略
:
iptables -P INPUT DROP;iptables -P FORWARD DROP;iptables -P OUTPUT ACCEPT(默认拒绝入站 / 转发,允许出站)
2.3 高级配置
-
端口控制
:
-
端口范围(3000-3010):
iptables -A INPUT -p tcp --dport 3000:3010 -j ACCEPT -
多端口(80,443,8080):
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT -
时间限制
(仅 09:00-18:00 允许 SSH):
iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 -j ACCEPT -
连接限制
:
-
并发连接 > 3 拒绝 SSH:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT -
连接速率 5 次 / 分钟:
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min --limit-burst 10 -j ACCEPT -
NAT 配置
:
-
SNAT(源地址转换,192.168.1.0/24 网段通过 eth0 出口):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE -
DNAT(目标地址转换,80 端口转发到 192.168.1.100:8080):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
2.4 规则持久化(防止重启失效)
| 系统类型 | 持久化命令 |
| — | — |
| CentOS/RHEL | 1. service iptables save;2. 手动保存:iptables-save > /etc/sysconfig/iptables;恢复:iptables-restore < /etc/sysconfig/iptables |
| Ubuntu/Debian | 1. 安装工具:apt-get install iptables-persistent;2. 保存:netfilter-persistent save;恢复:netfilter-persistent reload |
3. firewalld 详解
3.1 核心基础概念
-
区域(Zones)
:预定义安全级别,共 9 类,核心如下表:
| 区域名称 | 安全级别 | 功能说明 |
| — | — | — |
| drop | 最高(严格) | 丢弃所有传入连接,无反馈 |
| block | 高 | 拒绝所有传入连接,返回错误信息 |
| public | 默认 | 公共网络,仅允许预定义服务(如 SSH) |
| trusted | 最低(宽松) | 允许所有传入连接 |
| external | 中等 | 外部网络,用于 NAT(隐藏内部 IP) | -
服务(Services)
:预定义的端口 + 协议组合(如 http 对应 80/tcp,https 对应 443/tcp)。
-
富规则(Rich Rules)
:支持复杂规则配置(如 IP 限制、速率限制、端口转发)。
3.2 基本命令
-
服务管理
(firewalld 自身):
-
启动:
systemctl start firewalld -
停止:
systemctl stop firewalld -
查看状态:
systemctl status firewalld或firewall-cmd --state -
区域管理
:
-
查看默认区域:
firewall-cmd --get-default-zone -
设置默认区域:
firewall-cmd --set-default-zone=public -
查看活动区域:
firewall-cmd --get-active-zones -
查看区域详情(public):
firewall-cmd --zone=public --list-all -
服务 / 端口管理
:
-
查看可用服务:
firewall-cmd --get-services -
添加临时服务(http):
firewall-cmd --add-service=http -
永久添加服务(http):
firewall-cmd --permanent --add-service=http -
添加临时端口(8080/tcp):
firewall-cmd --add-port=8080/tcp -
查看开放端口:
firewall-cmd --list-ports
3.3 高级配置
-
自定义服务
(以 myapp 为例,8080/tcp、8443/tcp):
-
富规则配置
:
-
允许 192.168.1.100 访问 22 端口:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' -
限制 SSH 速率 10 次 / 分钟:
firewall-cmd --add-rich-rule='rule service name="ssh" limit value="10/m" accept' -
阻止 192.168.1.200:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.200" drop' -
IP 伪装与端口转发
:
-
启用 IP 伪装:
firewall-cmd --add-masquerade -
端口转发(80→192.168.1.100:8080):
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
4. 实战配置案例
以 Web 服务器和数据库服务器为例,两种防火墙的核心配置脚本要点如下:
| 服务器类型 | 防火墙工具 | 核心配置要点 |
| — | — | — |
| Web 服务器 | iptables | 1. 清空规则:iptables -F; iptables -X; iptables -Z;2. 默认策略:INPUT/FORWARD DROP,OUTPUT ACCEPT;3. 允许:本地回环(lo)、已建立连接、SSH(并发 > 3 拒)、80/443(HTTP/HTTPS)、20/21(FTP)、53(DNS);4. 保存规则:service iptables save |
| Web 服务器 | firewalld | 1. 设置默认区域:public;2. 永久添加服务:http、https、ssh、ftp;3. 限制 SSH 速率:--add-rich-rule='rule service name="ssh" limit value="3/m" accept';4. 重新加载:firewall-cmd --reload |
| 数据库服务器 | iptables | 1. 清空规则 + 默认策略(同 Web);2. 允许:本地回环、已建立连接;3. SSH 仅允许 192.168.1.0/24 网段;4. MySQL(3306 端口)仅允许 192.168.1.100/101;5. 保存规则 |
| 数据库服务器 | firewalld | 1. 新建区域:firewall-cmd --permanent --new-zone=database;2. 设置默认区域:database;3. 永久添加富规则:SSH 仅 192.168.1.0/24,MySQL 仅 192.168.1.100/101;4. 重新加载 |
5. 故障排查与性能优化
5.1 常见问题排查
-
规则不生效
:
- 检查规则:
iptables -L -n -v(iptables);firewall-cmd --list-all(firewalld); - 检查服务状态:
systemctl status iptables/systemctl status firewalld; - 查看日志:
tail -f /var/log/messages(iptables);journalctl -u firewalld -f(firewalld)。
-
连接被拒绝
:
- iptables 启用日志:
iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "; - firewalld 启用拒绝日志:
firewall-cmd --set-log-denied=all; - 查看日志定位问题:
tail -f /var/log/messages。
5.2 性能优化
-
规则优化
:
- 常用规则放前面(如 HTTP/HTTPS):
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT; - 用状态匹配减少规则:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT; - 多端口用 multiport(减少规则数量)。
-
监控与统计
:
- 查看规则统计:
iptables -L -n -v --line-numbers; - 重置计数器:
iptables -Z; - 实时监控:
watch -n 1 'iptables -L -n -v'。
6. 安全最佳实践
6.1 核心安全原则
-
最小权限原则
:仅开放必要端口 / 服务(如 Web 服务器仅开放 80/443/22);
-
白名单策略
:默认拒绝所有连接,仅允许信任的 IP / 端口;
-
定期审计
:定期检查防火墙规则(如每月 1 次),删除冗余规则;
-
日志监控
:启用日志,定期分析(如每日查看拒绝日志)。
6.2 配置建议与备份
-
关键配置命令
:
-
默认策略:
iptables -P INPUT DROP; iptables -P FORWARD DROP; -
限制 SSH 速率:
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min --limit-burst 10 -j ACCEPT; -
防止端口扫描:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP;iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP。 -
备份与恢复
:
-
iptables 备份:
iptables-save > /root/iptables.backup.$(date +%Y%m%d);恢复:iptables-restore < 备份文件; -
firewalld 备份:
cp -r /etc/firewalld /root/firewalld.backup.$(date +%Y%m%d)。
7. 总结
-
iptables
:优势是底层控制精细,支持复杂规则(如 NAT、连接限制),适合对防火墙规则有高精度需求的场景(如服务器集群、复杂网络环境);
-
firewalld
:优势是动态配置、操作友好,通过 “区域 / 服务” 简化管理,适合日常运维、规则需频繁调整的场景(如办公网络、小型服务器);
-
核心建议:防火墙仅为网络安全的一部分,需结合入侵检测、日志监控、系统更新等措施构建完整防护体系。
4. 关键问题
问题 1:iptables 与 firewalld 的核心差异是什么?在实际场景中如何选择?
答案:两者的核心差异体现在定位、配置特性和核心概念上:
-
定位与依赖
:iptables 是传统工具,直接操作内核 netfilter 框架;firewalld 是动态管理器,基于 netfilter 提供高级抽象;
-
配置特性
:iptables 需静态配置,修改规则后需重启生效;firewalld 支持动态配置,规则实时生效无需重启;
-
核心概念
:iptables 以 “表(filter/nat 等)、链(INPUT/OUTPUT 等)、目标(ACCEPT/DROP 等)” 为核心;firewalld 以 “区域(public/trusted 等)、服务(http/ssh 等)、富规则” 为核心。
选择依据:
- 若需底层精细控制(如复杂 NAT 配置、多维度连接限制)或部署在规则稳定的复杂环境(如服务器集群),选 iptables;
- 若需日常运维简化(如频繁调整开放服务、办公网络管理)或追求动态配置效率,选 firewalld。
问题 2:在 CentOS 和 Ubuntu 系统中,iptables 的规则如何实现持久化?避免重启后规则丢失的关键操作是什么?
答案:iptables 规则默认是临时的,重启系统后会丢失,不同系统的持久化方法不同,关键操作如下:
- CentOS/RHEL 系统:
- 方法 1(服务化保存):执行
service iptables save,规则会自动保存到/etc/sysconfig/iptables; - 方法 2(手动保存):执行
iptables-save > /etc/sysconfig/iptables,手动指定保存路径; - 恢复操作:若规则丢失,执行
iptables-restore < /etc/sysconfig/iptables即可恢复。
- Ubuntu/Debian 系统:
- 前提:需先安装持久化工具,执行
apt-get install iptables-persistent; - 保存操作:安装后执行
netfilter-persistent save,规则会保存到/etc/iptables/目录下; - 恢复操作:执行
netfilter-persistent reload,即可加载保存的规则。
关键操作:无论哪种系统,核心是将当前生效的 iptables 规则写入系统默认的配置文件(CentOS 的/etc/sysconfig/iptables、Ubuntu 的/etc/iptables/),确保系统重启时能自动加载。
问题 3:如何为 Web 服务器配置防火墙?分别基于 iptables 和 firewalld 给出核心配置逻辑及关键命令。
答案:Web 服务器需开放 HTTP(80/tcp)、HTTPS(443/tcp),同时保障 SSH(22/tcp)管理权限,核心配置逻辑是 “默认拒绝入站 / 转发,允许必要服务 + 已建立连接”,具体配置如下:
(1)基于 iptables 的配置
核心逻辑:清空旧规则→设置默认策略→允许关键连接→保存规则;关键命令:
(2)基于 firewalld 的配置
核心逻辑:设置默认区域→永久添加必要服务→限制 SSH 速率→重载生效;关键命令:
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络安全直通车 guowei《Linux 系统中两种核心防火墙》