📜  Linux 中的 iptables 命令及示例

📅  最后修改于: 2022-05-13 01:57:05.798000             🧑  作者: Mango

Linux 中的 iptables 命令及示例

iptables是一个命令行界面,用于设置和维护用于 IPv4 的 Netfilter 防火墙的表,包含在 Linux 内核中。防火墙将数据包与这些表中定义的规则进行匹配,然后对可能的匹配项采取指定的操作。

  • 是一组链的名称。
  • 是规则的集合。
  • 规则是用于匹配数据包的条件。
  • 目标是在可能的规则匹配时采取的行动。目标的示例是 ACCEPT、DROP、QUEUE。
  • 策略是在与内置链不匹配的情况下采取的默认操作,可以是 ACCEPT 或 DROP。

句法:

iptables --table TABLE -A/-C/-D... CHAIN rule --jump Target
桌子

有五种可能的表:

  • filter:包过滤的默认使用表。它包括 INPUT、OUTPUT 和 FORWARD 等链。
  • nat :与网络地址转换有关。它包括 PREROUTING 和 POSTROUTING 链。
  • mangle :用于专门的数据包更改。内置链包括 PREROUTING 和 OUTPUT。
  • raw :配置连接跟踪的豁免。内置链是 PREROUTING 和 OUTPUT。
  • security :用于强制访问控制
链条

表中包含的内置链很少。他们是:

  • INPUT:发往 localhost 套接字的数据包规则集。
  • FORWARD :用于通过设备路由的数据包。
  • OUTPUT :用于本地生成的数据包,意在向外传输。
  • PREROUTING :用于在数据包到达时对其进行修改。
  • POSTROUTING :用于在数据包离开时对其进行修改。

注意:也可以创建用户定义的链。

选项
  1. -A, –append :追加到参数中提供的链。

    句法:

    iptables [-t table] --append [chain] [parameters]
    

    示例:此命令丢弃来自任何端口的所有流量。

    iptables -t filter --append INPUT -j DROP
    

    输出:

  2. -D, –delete :从指定链中删除规则。

    句法:

    iptables [-t table] --delete [chain] [rule_number]
    

    示例:此命令从 INPUT 链中删除规则 2。

    iptables -t filter --delete INPUT 2
    

    输出:

  3. -C, –check :检查规则是否存在于链中。如果规则存在则返回 0,如果不存在则返回 1。

    句法:

    iptables [-t table] --check [chain] [parameters]
    

    示例:此命令检查指定规则是否存在于 INPUT 链中。

    iptables -t filter --check INPUT -s 192.168.1.123 -j DROP
    

    输出:

参数

iptables命令提供的参数用于匹配数据包并执行指定的操作。常用参数有:

  1. -p, –proto :是数据包遵循的协议。可能的值可能是:tcp、udp、icmp、ssh 等。

    句法:

    iptables [-t table] -A [chain] -p {protocol_name} [target]
    

    示例:此命令在 INPUT 链中附加一条规则以丢弃所有 udp 数据包。

    iptables -t filter -A INPUT -p udp -j DROP
    

    输出:

  2. -s、--source:用于匹配数据包的源地址。

    句法:

    iptables [-t table] -A [chain] -s {source_address} [target]
    

    示例:此命令在 INPUT 链中附加一条规则,以接受来自 192.168.1.230 的所有数据包。

    iptables -t filter -A INPUT -s 192.168.1.230 -j ACCEPT
    

    输出:

  3. -d, –destination :用于匹配数据包的目的地址。

    句法:

    iptables [-t table] -A [chain] -d {destination_address} [target]
    

    示例:此命令在 OUTPUT 链中附加一条规则,以丢弃所有发往 192.168.1.123 的数据包。

    iptables -t filter -A OUTPUT -d 192.168.1.123 -j DROP
    

    输出:

  4. -i, –in-interface :匹配具有指定in-interface的数据包并采取行动。

    句法:

    iptables [-t table] -A [chain] -i {interface} [target]
    

    示例:此命令在 INPUT 链中附加一条规则,以丢弃所有发往无线接口的数据包。

    iptables -t filter -A INPUT -i wlan0 -j DROP
    

    输出:

  5. -o, –out-interface :匹配具有指定输出接口的数据包。
  6. -j, –jump :此参数指定要对匹配执行的操作。

    句法:

    iptables [-t table] -A [chain] [parameters] -j {target}
    

    示例:此命令在 FORWARD 链中添加一条规则以丢弃所有数据包。

    iptables -t filter -A FORWARD -j DROP
    

    输出:

笔记:

  • 在尝试命令时,您可以删除所有过滤规则和用户创建的链。
    sudo iptables --flush
    
  • 要保存 iptables 配置,请使用:
    sudo iptables-save
  • 可以通过以下方式恢复 iptables 配置:
    sudo iptables-restore
  • 还有其他接口,例如 ip6tables,用于管理 IPv6 的过滤表。