🔥 热门搜索

M
Memo
Linux相关

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

📅 2026/3/23👁️ 11 次阅读🕐 更新于 2026/3/23

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

前言

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 查看规则

bash 复制代码
# 查看所有表的规则
iptables -L -n -v

# 查看指定表
iptables -t nat -L -n -v

# 查看规则带行号
iptables -L -n --line-numbers

2.2 添加规则

bash 复制代码
# 添加规则到链末尾
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 删除规则

bash 复制代码
# 按行号删除
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 设置默认策略

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

三、生产环境配置实例

3.1 基础安全配置

bash 复制代码
#!/bin/bash
# 清空现有规则
iptables -F
iptables -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 规则,需要注意:

bash 复制代码
# 允许 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 端口转发配置

bash 复制代码
# 开启 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 访问

bash 复制代码
# 封禁单个 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 查看连接状态

bash 复制代码
# 查看连接跟踪
conntrack -L

# 查看 NAT 表
iptables -t nat -L -n -v

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

4.2 日志记录

bash 复制代码
# 添加日志记录
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. 备份恢复方案
    bash 复制代码
    # 备份
    iptables-save > /backup/iptables-$(date +%Y%m%d).rules
    
    # 恢复
    iptables-restore < /backup/iptables-20260323.rules

六、从 iptables 迁移到 nftables

如果你考虑升级到 nftables:

bash 复制代码
# 查看是否支持 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 作为成熟的防火墙解决方案,在生产环境中依然有重要价值。掌握其核心原理和配置技巧,能够帮助你构建安全的网络环境。

关键要点:

  • 理解四表五链和数据包流向
  • 遵循"最小权限原则"配置规则
  • 做好规则备份和恢复预案
  • 定期审计和优化规则集

参考资料:

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