当前位置:首页>Linux>从零搞懂 Linux 防火墙:iptables 核心原理与实战配置全攻略

从零搞懂 Linux 防火墙:iptables 核心原理与实战配置全攻略

  • 2026-10-11 06:25:32
从零搞懂 Linux 防火墙:iptables 核心原理与实战配置全攻略

防火墙是网络安全的第一道防线。本文将从种类选型、核心概念到 iptables 实战配置,带你系统掌握 Linux 防火墙技术。


一、防火墙有哪些种类?企业该如何选型?

1.1 硬件防火墙

部署在企业网络入口处,提供三层路由转发与安全防护能力。常见厂商包括:

  • 路由/交换设备:H3C、华为、Cisco(思科)等

  • 专业安全厂商:深信服、绿盟、奇安信、天融信、山石网科等

  • 国际厂商:Juniper、Palo Alto、Fortinet 等

硬件防火墙性能强、吞吐量大,适合对安全要求高、访问量巨大的中大型企业。

1.2 软件防火墙(Linux 主机防火墙)

直接运行在服务器操作系统上,适合封禁 IP、限制端口等场景。主要方案:

方案说明
iptables经典方案,直接写入 Linux 内核,工作在网络第 4 层(传输层),Docker 等容器技术也依赖其工作
firewalldCentOS 7 默认防火墙管理工具,支持动态更新规则
nftablesCentOS 8 / RHEL 8 起替代 iptables 的新框架,性能更优
ufwUbuntu 默认防火墙前端工具(Uncomplicated Firewall),使用更简洁

1.3 云防火墙(公有云场景)

云上环境无需自建硬件防火墙,主要使用云厂商提供的安全产品:

  • 安全组:类似虚拟防火墙,可按 IP、端口进行访问控制

  • NAT 网关:实现内网共享上网、端口映射等功能

  • WAF(Web 应用防火墙):工作在 OSI 第 7 层(应用层),专门防御 SQL 注入、XSS、CC 攻击等 Web 层面的安全威胁

1.4 企业选型建议

企业规模推荐方案
初创 / 中小企业公有云 + 安全组 + 云 WAF + 态势感知,成本低、运维轻
中大型企业(高访问量)硬件防火墙 + WAF + 物理服务器 + 云服务器混合架构
金融 / 政企(合规要求)硬件防火墙 + IDS/IPS + WAF + 堡垒机 + 日志审计

二、必须搞懂的核心概念

在学习 iptables 之前,先理解四个核心概念。可以用一个形象的比喻来记忆:

概念英文比喻说明
表(Table)Table一栋楼iptables 最大的功能分类单位,按功能划分
链(Chain)Chain楼里的房间存放规则的容器,不同的数据流走不同的链
规则(Rule)Rule房间里的柜子具体的过滤条件,如允许或拒绝某个 IP/端口
策略(Policy)Policy柜子里衣服的摆放规则当数据包不匹配任何规则时的默认处理方式

层级关系:表 → 链 → 规则 → 策略(默认动作)


三、iptables 的执行流程

数据包经过防火墙时,规则按以下逻辑执行:

  1. 层层过滤:规则按配置顺序从上到下依次匹配。

  2. 命中即停:一旦匹配到某条规则,明确为 DROP(拒绝)或 ACCEPT(允许)后,不再继续向下匹配。

  3. 未命中则继续:如果当前规则没有明确表态,则继续匹配下一条规则。

  4. 默认兜底:当所有规则都匹配完毕后,才执行链的默认策略(Policy)。

关键原则:规则的顺序至关重要!建议将"拒绝类规则"放在前面(使用 -I 插入到链首),"允许类规则"放在后面(使用 -A 追加到链尾)。


四、四表五链详解

iptables 采用"四表五链"架构,不同表负责不同功能,不同链处理不同方向的数据流。

4.1 四大表

表名功能典型场景
filter数据包过滤(默认表)防火墙核心功能,允许或拒绝 IP/端口
nat网络地址转换共享上网、端口映射、IP 映射
raw连接跟踪豁免高性能场景下跳过连接状态跟踪
mangle数据包修改修改 TTL、TOS 等字段,用于 QoS 等场景

4.2 五条链

链名方向说明
PREROUTING入方向(路由前)数据包到达后、路由判断之前处理,常用于 DNAT(目的地址转换)
INPUT入方向过滤目标地址为本机的数据包,即"进入主机的数据"
FORWARD转发方向转发流经本机但目的地不是本机的数据包,与 NAT 关系密切
OUTPUT出方向处理源地址为本机的数据包,即"从主机发出的数据"
POSTROUTING出方向(路由后)数据包离开前处理,常用于 SNAT(源地址转换),实现共享上网

4.3 filter 表详解

filter 是 iptables 的默认表,也是真正负责主机防火墙功能的核心。它包含三条链:

  • INPUT 链:过滤所有进入本机的数据包。能否让数据包进入服务器,由这条链决定。

  • FORWARD 链:转发经过本机但目标不是本机的数据包。与 NAT 功能密切相关。需开启内核参数 net.ipv4.ip_forward=1。

  • OUTPUT 链:处理从本机发出的数据包。

4.4 nat 表详解

nat 表负责网络地址转换,与主机自身安全无关,主要用于网络层面:

  • PREROUTING 链:数据包到达防火墙时,在路由判断之前修改目的地址/端口。

    • 典型场景:将公网 IP 映射到内网服务器(DNAT),如将公网 IP 的 80 端口映射到内网服务器的 8080 端口。

  • POSTROUTING 链:数据包离开防火墙时,在路由判断之后修改源地址/端口。

    • 典型场景:局域网共享上网(SNAT),将内网地址转换为公网地址。

  • OUTPUT 链:修改本机发出数据包的目的地址。


五、环境准备与基础命令

5.1 安装 iptables

以 CentOS 7 为例(实际生产中请先在测试环境验证):

# 安装 iptables 服务yum install -y iptables-services# 关闭并禁用 firewalld(两者不能共存)systemctl stop firewalldsystemctl disable firewalld# 启动并设置开机自启systemctl start iptables.servicesystemctl enable iptables.service

5.2 加载内核模块

modprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrackmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpmodprobe ipt_state

如需永久生效,将上述命令写入 /etc/rc.local。

5.3 常用查看命令

# 查看 filter 表规则(默认表)iptables -nL# 查看指定表的规则iptables -t nat -nL# 查看规则并显示序号iptables -nL --line-number# 查看规则并显示数据包计数iptables -nLv

六、iptables 命令参数速查表

6.1 基本操作参数

参数含义说明
-L列出所有规则显示指定链/表的全部规则
-n数字显示不将 IP/端口反向解析为域名
-t指定表不指定时默认操作 filter 表
-A追加规则将规则添加到链的末尾,适合允许类规则
-I插入规则将规则插入到链的首部,适合拒绝类规则
-D删除规则按序号删除,如 -D INPUT 1

6.2 匹配条件参数

参数含义说明
-p指定协议tcp / udp / icmp / all
--dport目标端口必须配合 -p tcp 或 -p udp 使用
--sport源端口数据包的来源端口
-s源 IP屏蔽/允许特定 IP 或网段时无需指定协议
-d目标 IP数据包的目标地址
-m指定匹配模块如 multiport(多端口)、state(状态)、limit(限速)
-i入接口网卡数据包从哪个网卡进入
-o出接口网卡数据包从哪个网卡出去

6.3 动作与管理参数

参数含义说明
-j执行动作ACCEPT(允许)/ DROP(丢弃,不回通知)/ REJECT(拒绝,回通知)
-F清空规则清除指定表的所有规则,操作前务必备份
-X删除自定义链删除用户自定义的链
-Z计数器清零重置数据包和字节计数器
-v详细模式显示数据包数量和字节数

七、实战配置:filter 表规则

操作前务必备份现有规则!

# 备份当前规则iptables-save > /root/iptables_backup.rules# 清空所有规则(谨慎操作)iptables -Fiptables -Xiptables -Z

7.1 封禁特定端口

# 拒绝所有用户访问 22 端口(SSH)iptables -t filter -A INPUT -p tcp --dport 22 -j DROP# 查看规则iptables -t filter -nL --line-number# 删除该规则(按序号)iptables -t filter -D INPUT 1

生产提醒:封禁 SSH 端口前,务必确保有其他管理通道(如云控制台 VNC),否则会导致远程管理中断!

7.2 封禁特定 IP

# 封禁单个 IP(两个网卡网段都需要封)iptables -I INPUT -s 192.168.1.100 -j DROPiptables -I INPUT -s 10.0.1.100 -j DROP# 封禁整个网段iptables -I INPUT -s 10.0.1.0/24 -j DROP

-I vs -A:封禁类规则建议使用 -I(插入到链首),确保优先匹配;允许类规则使用 -A(追加到链尾)。

7.3 封禁网段访问特定端口

# 禁止 10.0.0.0/24 网段访问 8080 端口iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP

7.4 只允许指定网段访问

方法一:使用 ! 取反

# 只允许 172.16.1.0/24 网段,其他全部拒绝iptables -I INPUT ! -s 172.16.1.0/24 -j DROP

方法二:修改默认策略(推荐)

# 先添加允许规则iptables -A INPUT -s 172.16.1.0/24 -j ACCEPTiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 再修改默认策略为 DROPiptables -P INPUT DROP

注意顺序:方法二中,一定要先配好允许规则,再修改默认策略为 DROP,否则当前连接可能立即中断。

7.5 指定多个端口

# 使用 multiport 模块匹配多个不连续端口iptables -A INPUT -m multiport -p tcp --dport 80, 443, 8080 -j ACCEPT# 匹配连续端口范围(无需 multiport 模块)iptables -A INPUT -p tcp --dport1:1024 -j ACCEPT# 排除特定端口(除 80、443 外全部拒绝)iptables -I INPUT -p tcp -m multiport ! --dport 80, 443 -j DROP

7.6 禁止 Ping(ICMP 控制)

方法一:通过 iptables 规则

# 禁止外部 ping 本机(icmp-type 8 为 Echo Request)iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP

方法二:通过内核参数(更彻底)

# 编辑 /etc/sysctl.conf,添加:net.ipv4.icmp_echo_ignore_all =1# 使配置生效sysctl -p

建议:生产环境中,不建议完全禁 Ping。可以通过限速方式防止 ICMP Flood 攻击,而不是完全屏蔽。

7.7 匹配 TCP 连接状态

iptables 支持基于连接状态的过滤,这是构建安全策略的基础:

状态说明
NEW新建连接请求
ESTABLISHED已建立的连接
RELATED与已有连接相关联的新连接(如 FTP 数据连接)
INVALID非法或无法识别的连接
# 允许已建立和关联的连接通过(非常关键的规则)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

7.8 限制连接速率

使用 limit 模块控制数据包通过速率,可用于防 DoS 攻击:

# 限制每分钟最多 10 个数据包iptables -A INPUT -p icmp -m limit --limit 10/minute -j ACCEPT# 配合 burst 参数:前 5 个包立即放行,之后每 6 秒释放 1 个iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
参数说明
--limit n/{second\|minute\|hour}指定时间内的平均请求速率
--limit-burst n突发允许的最大数据包数,默认为 5

八、生产环境推荐配置模板

以下是一个适用于中小企业的 iptables 基础安全策略模板:

# 1. 清空现有规则iptables -Fiptables -Xiptables -Z# 2. 允许本地回环iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT# 3. 允许已建立和关联的连接iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 4. 允许管理网段 SSH 访问iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT# 5. 允许 Web 服务端口iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT# 6. 限制 ICMP(防 Ping Flood)iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 3 -j ACCEPT# 7. 拒绝其他所有入站连接iptables -A INPUT -j DROP# 8. 保存规则iptables-save > /etc/sysconfig/iptables

九、总结

知识点核心要点
防火墙选型中小企业用云安全产品,大型企业用硬件+软件组合方案
核心概念表→链→规则→策略,层层递进
执行流程顺序匹配,命中即停,默认策略兜底
四表五链filter(过滤)、nat(地址转换)最常用;INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
规则技巧拒绝规则用 -I 置顶,允许规则用 -A 追加;善用状态匹配和速率限制
安全建议操作前备份、修改默认策略前先配允许规则、保留管理通道

最后提醒:iptables 是 Linux 防火墙的基石,但从 CentOS 8 开始,nftables 已成为默认替代方案。建议在新项目中逐步迁移到 nftables,其语法更统一、性能更优。不过理解 iptables 的原理,对学习任何防火墙技术都大有裨益。

最新文章

随机文章