以下是 iptables 常用命令的总结,涵盖规则管理、查看、策略配置等核心操作:


1. 查看规则

  • 列出所有规则(默认 filter 表):

    iptables -L -n -v
    
    • -L:列出规则。
    • -n:显示数字格式(不解析域名和服务名)。
    • -v:显示详细信息(如数据包计数)。
  • 查看指定表(如 nat 表)的规则:

    iptables -t nat -L -n -v
    

2. 重置规则

  • 清空所有规则(慎用,可能导致服务中断):

    iptables -F        # 清空规则链
    iptables -X        # 删除用户自定义链
    iptables -Z        # 重置计数器
    
  • 恢复默认策略(允许所有流量):

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    

3. 设置默认策略

  • 默认拒绝所有入站流量,允许出站和转发:
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    

4. 允许/拒绝规则

  • 允许特定端口(如开放 TCP 80 端口):

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    
  • 允许特定 IP 访问(如允许 192.168.1.100 访问 SSH):

    iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
    
  • 拒绝所有其他流量(需放在允许规则之后):

    iptables -A INPUT -j DROP
    
  • 允许本地回环接口(lo)

    iptables -A INPUT -i lo -j ACCEPT
    

5. 状态管理

  • 允许已建立的连接和关联流量(防止断开当前会话):
    iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    

6. 网络地址转换(NAT)

  • 启用 IP 转发(需修改 /etc/sysctl.conf):

    sysctl net.ipv4.ip_forward=1
    
  • 配置源地址转换(SNAT):

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
  • 端口转发(将外部 8080 转发到内部 192.168.1.2:80):

    iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.2:80
    

7. 规则持久化

  • 保存规则到文件(不同发行版方法不同):

    iptables-save > /etc/iptables/rules.v4    # Debian/Ubuntu
    service iptables save                    # CentOS/RHEL
    
  • 开机自动加载规则:

    iptables-restore < /etc/iptables/rules.v4
    

8. 高级用法

  • 限制连接速率(防止暴力破解 SSH):

    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
    
  • 日志记录(记录被拒绝的流量):

    iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    

示例:保护 SSH 端口

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

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许特定 IP 访问 SSH(替换为你的 IP)
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT

# 拒绝其他 SSH 访问
iptables -A INPUT -p tcp --dport 22 -j DROP

注意事项

  1. 规则顺序:iptables 按顺序匹配规则,第一条匹配的规则生效。
  2. 远程操作风险:配置防火墙时,确保留有 SSH 访问权限,避免被锁在服务器外。
  3. 测试规则:使用 iptables-apply 或先设置临时规则再保存。

掌握这些命令后,可以灵活配置防火墙规则。如需更现代的工具,可学习 nftables(iptables 的替代品)。

参考文章

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐