iptables 简易使用手册

iptables 简易使用手册

iptables 是一个强大而灵活的 Linux 防火墙工具,用于管理网络包过滤和网络地址转换 (NAT)。它基于 Netfilter 框架工作,允许你定义详细的规则来管理入站和出站流量。

1. 查看现有规则

  • 查看所有表的规则:

    
    sudo iptables -L
  • 查看特定链(例如INPUT链)的规则:

    
    sudo iptables -L INPUT

2. 允许或拒绝端口

  • 允许某个端口(例如允许 22 端口的 SSH 流量):

    
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 拒绝某个端口(例如拒绝 21 端口的 FTP 流量):

    
    sudo iptables -A INPUT -p tcp --dport 21 -j REJECT

3. 允许或拒绝 IP 地址

  • 允许来自特定 IP 地址(例如允许 192.168.1.100):

    
    sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
  • 拒绝来自特定 IP 地址:

    
    sudo iptables -A INPUT -s 192.168.1.100 -j DROP

4. 保存和恢复规则

  • iptables的规则默认不会在系统重启后保存,因此需要保存规则以便重启后生效:

    • 在 Debian/Ubuntu 系统上,使用iptables-save保存规则:

      
      sudo iptables-save > /etc/iptables/rules.v4
    • 恢复规则:

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

5. 链、表、规则的概念

iptables规则由组成:

  • 表(Tables):用于处理不同类型的数据包,主要有四种表:

    • filter:最常用的表,用于包过滤(默认)。
    • nat:用于网络地址转换(NAT)。
    • mangle:用于修改包头。
    • raw:用于排除某些包处理。
  • 链(Chains):链是数据包流经的路径,主要有三种预定义链:

    • INPUT:用于处理入站流量(进入服务器的流量)。
    • OUTPUT:用于处理出站流量(从服务器发出的流量)。
    • FORWARD:用于处理转发流量(通过服务器转发的流量)。

6. 基础规则操作

  • 添加规则:将新规则添加到链的末尾(例如允许 80 端口的 HTTP 流量):

    
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 插入规则:将新规则插入到链的特定位置(在链的第 1 条规则处插入):

    
    sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
  • 删除规则:删除特定规则(例如,删除允许 22 端口的规则):

    1. 先列出规则编号:

      
      sudo iptables -L INPUT --line-numbers
    2. 删除第 1 条规则:

      
      sudo iptables -D INPUT 1
  • 清除链中的所有规则

    
    sudo iptables -F

7. 状态匹配(state match)

使用状态匹配可以让你创建基于连接状态的规则。

  • 允许已建立和相关的连接继续通过:

    
    sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 拒绝所有新连接请求:

    
    sudo iptables -A INPUT -m state --state NEW -j DROP

8. 日志记录

  • 记录数据包而不丢弃它们(可以将LOG动作用于记录异常流量):

    
    sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH connection: "

9. 默认策略设置

  • 将默认策略设置为拒绝所有入站流量(更严格的防火墙策略):

    
    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -P OUTPUT ACCEPT

10. 常见规则简化

  • 允许 HTTP 和 HTTPS 流量:

    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • 允许所有来自本地网络(192.168.1.0/24)的流量:

    
    
    sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

总结

iptables 是功能强大的防火墙管理工具,适合处理复杂的防火墙需求。