漫辰夕BLOG
🏠 首页 📚 归档 🗂️ 分类 🔗 友链
iptables 实战指南:从原理到生产环境防火墙配置
Linux相关 Linux iptables

iptables 实战指南:从原理到生产环境防火墙配置

✍️ 漫辰夕 📅 2025/11/10 👁️ 46 次阅读

前言

iptables 是 Linux 系统中最经典的防火墙工具,虽然近年来 nftables 逐渐成为主流,但仍有大量生产环境在使用 iptables。本文将从原理到实战,带你全面掌握 iptables 的配置技巧。

一、iptables 核心概念

1.1 四表五链

iptables 的核心架构由"四表五链"组成:

四表:

filter 表:默认表,用于数据包过滤

nat 表:网络地址转换

mangle 表:修改数据包内容

raw 表:连接跟踪处理

五链:

INPUT:处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包

PREROUTING:路由前处理

POSTROUTING:路由后处理

1.2 数据包流向

入站数据包 → PREROUTING → INPUT → 本地进程
                              ↓                              
转发数据包 → PREROUTING → FORWARD → POSTROUTING
                              ↓
出站数据包 → OUTPUT → POSTROUTING → 网络

二、常用命令速查

2.1 查看规则

# 查看所有表的规则
iptables -L -n -v​

查看指定表

iptables -t nat -L -n -v​

查看规则带行号

iptables -L -n --line-numbers

2.2 添加规则

# 添加规则到链末尾
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

​# 插入规则到指定位置 iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT​

追加到指定链

iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

2.3 删除规则

# 按行号删除
iptables -D INPUT 1​

按规则删除

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

​# 清空链所有规则 iptables -F INPUT​

清空所有表

iptables -F && iptables -t nat -F && iptables -t mangle -F

2.4 设置默认策略

# 设置默认 DROP(谨慎操作!)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

三、生产环境配置实例

3.1 基础安全配置

#!/bin/bash

清空现有规则

iptables -Fiptables -X iptables -t nat -F iptables -t mangle -F

​# 设置默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT​

允许回环接口

iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

​# 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT​

允许 SSH (22 端口)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

​# 允许 HTTP/HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT

​# 允许 ICMP (ping) iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

​# 防止 SYN 洪水攻击 iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT​

保存规则 (CentOS/RHEL)

service iptables save​

保存规则 (Ubuntu/Debian)

iptables-save > /etc/iptables/rules.v4

3.2 Docker 环境配置

Docker 会修改 iptables 规则,需要注意:

# 允许 Docker 网桥
iptables -A FORWARD -i docker0 -j ACCEPT
iptables -A FORWARD -o docker0 -j ACCEPT​

或者禁用 Docker 自动修改 iptables

在 /etc/docker/daemon.json 中添加:

{"iptables": false}

3.3 端口转发配置

# 开启 IP 转发

echo 1 > /proc/sys/net/ipv4/ip_forward​

将 8080 端口转发到 80

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

​# 转发到其他服务器 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 iptables -t nat -A POSTROUTING -j MASQUERADE

3.4 限制 IP 访问

# 封禁单个 IP
iptables -A INPUT -s 192.168.1.100 -j DROP​

封禁网段

iptables -A INPUT -s 192.168.1.0/24 -j DROP​

只允许特定 IP 访问 SSH

iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP

四、故障排查技巧

4.1 查看连接状态

# 查看连接跟踪
conntrack -L​

查看 NAT 表

iptables -t nat -L -n -v

​# 实时查看匹配的数据包 watch -n 1 'iptables -L -n -v | grep -E "^Chain|pkts"'

4.2 日志记录

# 添加日志记录
iptables -A INPUT -j LOG --log-prefix "IPT_INPUT_DROP: " --log-level 4​

查看日志tail -f /var/log/messages | grep IPT

tail -f /var/log/syslog | grep IPT

4.3 常见问题

问题 1:规则不生效

•检查规则顺序(iptables 从上到下匹配)

•确认默认策略

•检查是否有其他防火墙(firewalld、ufw)冲突

问题 2:重启后规则丢失

•确保执行了保存操作

•检查 iptables 服务是否开机自启

问题 3:影响 Docker 容器网络

•Docker 依赖 iptables 进行 NAT

•修改前备份规则,或在 Docker 配置中禁用 iptables 管理

五、最佳实践建议

1.先放行后限制:先配置允许的规则,最后设置默认 DROP

2.保留 SSH 会话:修改防火墙时保持 SSH 连接,避免被锁在外面

3.定期审计规则:使用 iptables -L -n --line-numbers 定期检查

4.版本控制:将规则保存到文件中,纳入版本管理

5.测试环境验证:生产环境变更前先在测试环境验证

6.备份恢复方案

六、从 iptables 迁移到 nftables

如果你考虑升级到 nftables:

# 查看是否支持 nftables
nft --version​

使用 nftables 语法实现相同功能

nft add table inet filter nft add chain inet filter input { type filter hook input priority 0 ; policy drop ; } nft add rule inet filter input tcp dport 22 accept

总结

iptables 作为成熟的防火墙解决方案,在生产环境中依然有重要价值。掌握其核心原理和配置技巧,能够帮助你构建安全的网络环境。

关键要点:

•理解四表五链和数据包流向

•遵循"最小权限原则"配置规则

•做好规则备份和恢复预案

•定期审计和优化规则集


参考资料:

•iptables 官方文档

•Linux 防火墙深度解析

本文首发于漫辰夕 BLOG,转载请注明出处。


‹ 上一篇 Linux系统故障修复
下一篇 › GPU 压测神器 fieldiag 全解析——从显存到温度,15 分钟入门