什么是 Iptables?

Iptables 是 Linux 系统中的一个防火墙工具,用于控制网络流量。通过设置规则,您可以允许或拒绝特定的数据包,从而增强系统的安全性。

基本概念

  1. 链(Chains): Iptables 主要有三个链:

    • INPUT: 处理进入本机的流量。

    • OUTPUT: 处理从本机发出的流量。

    • FORWARD: 处理被转发的流量,即流量不直接发送到本机的情况。

  2. 规则(Rules): 每条规则定义了如何处理特定的流量,包括源地址、目标地址、协议和端口等。

  3. 策略(Policies): 默认行为,如果没有匹配到规则,就会执行策略。常见策略有 ACCEPT(允许)和 DROP(拒绝)。

常用命令

1. 查看当前规则

iptables -L -n -v
  • -L: 列出当前的规则链。

  • -n: 不解析域名,直接显示 IP 地址,提升查询速度。

  • -v: 显示更详细的信息,包括数据包和字节计数。

2. 添加规则

  • 允许来自特定 IP 的流量:

    iptables -A INPUT -s <IP_ADDRESS> -j ACCEPT
    • -A INPUT: 向 INPUT 链添加一条规则。

    • -s <IP_ADDRESS>: 指定源 IP 地址。

    • -j ACCEPT: 如果匹配,执行接受操作。

  • 拒绝来自特定 IP 的流量:

    iptables -A INPUT -s <IP_ADDRESS> -j DROP
    • -j DROP: 如果匹配,执行拒绝操作。

3. 允许特定端口的流量

  • 允许 TCP 端口 80(HTTP):

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    • -p tcp: 指定协议为 TCP。

    • --dport 80: 指定目标端口为 80。

4. 保存规则

规则更改后需要保存,以便重启后生效。可以使用如下命令(不同的发行版可能有所不同):

service iptables save  # CentOS

iptables-save > /etc/iptables/rules.v4  # Debian/Ubuntu

5. 删除规则

  • 列出 INPUT 链的规则并显示编号:

    iptables -L INPUT --line-numbers
  • 删除特定规则(需指定规则编号):

    iptables -D INPUT <RULE_NUMBER>
    • -D INPUT: 从 INPUT 链删除指定规则。

6. 清空所有规则

如果需要重置所有规则,可以使用:

iptables -F
  • -F: 清空所有链中的所有规则。

实用示例

  • 仅允许内网访问 10000 以上的端口

    iptables -A INPUT -p tcp --dport 10000:65535 -s 192.168.0.0/16 -j ACCEPT
    iptables -A INPUT -p tcp --dport 10000:65535 -j DROP
    • --dport 10000:65535: 指定目标端口范围为 10000 到 65535。

    • -s 192.168.0.0/16: 允许来自该子网(内网)的流量。

小贴士

  • 修改规则前,先备份当前规则,避免误操作导致网络不可用。

  • 在修改防火墙规则时,务必小心,以免锁定自己。可以通过 SSH 连接进行测试,确保规则正确。

  • 你可以使用 iptables -S 来查看当前所有规则的详细信息,包括规则的完整列表。