Featured image of post Iptables 防火墙配置与管理

Iptables 防火墙配置与管理

iptables 防火墙配置指南,涵盖多系统支持、规则清理、持久化配置等核心操作。🚀

iptables 防火墙配置与管理

本文档提供完整的 iptables 防火墙配置指南,涵盖多系统支持、规则清理、持久化配置等核心操作。🚀


📚 目录导航


🔧 iptables 简介与核心功能

iptables 是 Linux 系统中最强大的防火墙工具,具有完整的网络包过滤能力。

✨ 核心特性

  • 四表五链架构 📊:包含 filter、nat、mangle、raw 四个表和 INPUT、OUTPUT、FORWARD 等五个内置链
  • 状态跟踪 🔄:支持连接状态检测(NEW、ESTABLISHED、RELATED、INVALID)
  • 灵活的策略控制 🛡️:可基于协议、端口、IP地址、网络接口等进行精细控制
  • 网络地址转换 🔄:支持 SNAT、DNAT 等网络地址转换功能

🔧 主要功能

  • 包过滤 📦:根据规则决定数据包的通过或拒绝
  • 网络地址转换 🌐:实现私有网络与公网的地址转换
  • 流量整形 ⚡:对数据包进行修改和标记
  • 连接跟踪 🔍:监控网络连接状态

🧹 清理 iptables 规则

当需要重置防火墙配置时,应按以下安全流程操作,避免被锁在系统外。

🚨 安全清理步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 1. 📌 首先将默认策略改为 ACCEPT,防止规则清空后连接被断开
iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -P OUTPUT ACCEPT

# 2. 🗑️ 清空所有表中的规则链
iptables -t filter -F && iptables -t nat -F && iptables -t mangle -F && iptables -t raw -F

# 3. 🔄 删除所有用户自定义链(需要先确保链没有被引用)
iptables -t filter -X && iptables -t nat -X && iptables -t mangle -X && iptables -t raw -X

# 4. 📊 重置所有计数器归零
iptables -t filter -Z && iptables -t nat -Z && iptables -t mangle -Z && iptables -t raw -Z

# 5. 👀 验证规则已清空
iptables -L -n -v

💡 清理说明

  • 顺序很重要 ⚠️:必须先修改默认策略再清空规则,避免被锁在系统外
  • 多表操作 📋:iptables 有 filter、nat、mangle、raw 四个表,都需要清理
  • 自定义链 🔗:自定义链需要先清空规则再删除
  • 计数器归零 📈:-Z 参数用于重置包和字节计数器

🐧 Debian/Ubuntu 系统配置

在 Debian/Ubuntu 系统上配置 iptables 的完整流程:

🔄 系统环境准备

1
2
3
4
5
6
7
8
9
# 查看当前防火墙状态
iptables -L

# 🗑️ 移除其他防火墙工具
apt purge -y ufw
apt purge -y iptables-persistent

# 📦 安装 iptables 持久化工具
apt update -y && apt install -y iptables-persistent nano

📝 配置文件编辑

编辑 iptables 规则配置文件:

1
nano /etc/iptables/rules.v4

配置文件内容示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
*filter

# 🎯 定义默认策略
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# 🔄 允许已建立的和相关的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 🔐 允许 SSH 连接(重要!)
-A INPUT -p tcp --dport 22 -j ACCEPT

# 🖥️ 允许本地回环接口通信
-A INPUT -i lo -j ACCEPT
-A FORWARD -i lo -j ACCEPT

# 💾 提交规则
COMMIT

🚀 加载与启用规则

1
2
3
4
5
6
7
8
9
# 📥 加载规则文件
iptables-restore < /etc/iptables/rules.v4

# 🔄 启用持久化服务
systemctl enable netfilter-persistent
systemctl restart netfilter-persistent

# 👀 验证规则
iptables -L

📋 Debian/Ubuntu 配置说明

组件 作用 重要性
iptables-persistent 规则持久化 🔴 关键
/etc/iptables/rules.v4 IPv4 规则文件 🔴 关键
netfilter-persistent 持久化服务 🟡 重要

🔴 CentOS/RHEL 系统配置

在 CentOS/RHEL 系统上配置 iptables 的完整流程:

🔄 系统环境准备

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看当前防火墙状态
iptables -L

# 🗑️ 移除 firewalld(如果已安装)
yum remove -y firewalld

# 📦 安装 iptables-services
yum update -y && yum install -y iptables-services

# 🚀 启用并启动 iptables 服务
systemctl enable iptables
systemctl start iptables

🛡️ 基础安全规则配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 🧹 清除现有规则
iptables -F

# 1. 🔐 允许 SSH 连接(重要!避免锁死)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 2. 🔄 允许本地回环接口通信
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT

# 3. 🤝 允许已建立的和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 4. 🚫 设置默认策略为拒绝
iptables -P INPUT DROP
iptables -P FORWARD DROP

# 💾 保存配置并重启服务
service iptables save
systemctl restart iptables

📝 CentOS 配置说明

规则 作用 重要性
-p tcp --dport 22 -j ACCEPT 允许 SSH 连接 🔴 关键,避免被锁
-i lo -j ACCEPT 允许本地回环 🟡 重要,系统内部通信
-m state --state ESTABLISHED,RELATED 允许相关连接 🟢 必要,正常网络通信
service iptables save 保存规则 🔴 关键,确保重启后生效

🔄 系统服务管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看服务状态
systemctl status iptables

# 重启服务
systemctl restart iptables

# 停止服务
systemctl stop iptables

# 禁用服务
systemctl disable iptables

🔍 规则查看与管理

👀 规则查看命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 📋 查看所有规则(简要)
iptables -L

# 📊 查看规则带数字格式(显示端口号)
iptables -L -n

# 🔍 详细查看(显示计数器、接口等)
iptables -L -n -v

# 📈 查看特定表的规则
iptables -t nat -L -n
iptables -t mangle -L -n

# 🔢 以数字格式显示规则(带行号)
iptables -L -n --line-numbers

🛠️ 常用管理操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ➕ 添加规则示例
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 允许 HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # 允许 HTTPS

# ✏️ 插入规则到指定位置
iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT  # 在第一条插入

# ❌ 删除规则
iptables -D INPUT 2                               # 删除 INPUT 链第二条规则
iptables -D INPUT -p tcp --dport 80 -j ACCEPT     # 按规则内容删除

# 📝 修改策略
iptables -P OUTPUT ACCEPT                         # 修改 OUTPUT 链默认策略

📊 规则文件位置

系统 规则文件位置 保存命令
Debian/Ubuntu /etc/iptables/rules.v4 自动保存
CentOS/RHEL /etc/sysconfig/iptables service iptables save

💡 实用技巧与注意事项

🔐 安全配置建议

  1. 远程操作安全措施 ⚠️

    1
    2
    3
    
    # 设置定时恢复,防止配置错误被锁
    (sleep 300; iptables -F; iptables -P INPUT ACCEPT) &
    echo "防火墙恢复定时器已启动,5分钟后自动重置"
    
  2. 重要服务保障 🛡️

    1
    2
    3
    4
    5
    
    # 确保关键服务不受影响
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # SSH
    iptables -A INPUT -p udp --dport 53 -j ACCEPT    # DNS
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # HTTP
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # HTTPS
    
  3. 防御性配置 🛡️

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 限制暴力破解
    iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j ACCEPT
    
    # 防止洪水攻击
    iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/min -j ACCEPT
    
    # 阻止无效数据包
    iptables -A INPUT -m state --state INVALID -j DROP
    

🚨 常见问题排查

  1. 连接被拒绝 🔴

    • 检查默认策略是否为 DROP
    • 确认相关端口的 ACCEPT 规则已添加
    • 验证规则顺序是否正确
    • 检查连接跟踪状态
  2. 规则不生效 🟡

    • 检查规则语法是否正确
    • 确认规则已保存
    • 验证服务已重启
    • 查看系统日志:journalctl -u iptablesdmesg | grep iptables
  3. 服务无法启动 🔴

    • 检查配置文件语法
    • 查看日志文件
    • 验证文件权限

📋 最佳实践总结

  • 测试环境验证:新规则先在测试环境验证
  • 备份配置:重要修改前备份当前配置
  • 注释说明:复杂规则添加注释说明
  • 定期审计:定期检查防火墙规则
  • 最小权限:遵循最小权限原则,只开放必要端口
  • 版本控制:对规则文件进行版本管理
  • 监控日志:定期检查防火墙日志

🌐 多系统差异总结

特性 Debian/Ubuntu CentOS/RHEL
持久化工具 iptables-persistent iptables-services
规则文件 /etc/iptables/rules.v4 /etc/sysconfig/iptables
服务管理 netfilter-persistent iptables
默认状态 通常无默认规则 可能有默认规则

📌 温馨提示:iptables 是强大的网络工具,配置时请务必谨慎,特别是在生产环境中操作时建议先在测试环境验证,并确保有应急恢复方案。建议使用管理口或带外管理进行防火墙配置操作。🔧🛡️

🚀 进阶建议:对于生产环境,建议结合脚本自动化管理,并建立完整的变更管理和回滚流程。

最后更新于 2025-11-27