美文网首页
linux手册翻译——iptables(8)

linux手册翻译——iptables(8)

作者: 蟹蟹宁 | 来源:发表于2021-06-23 22:18 被阅读0次

    \color{#A00000}{NAME}
    iptables - 用于 IPv4 /IPv6数据包过滤和 NAT 的管理工具

    \color{#A00000}{SYNOPSIS}
    iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain rule-specification
    
       iptables [-t table] -I chain [rulenum] rule-specification
    
       iptables [-t table] -R chain rulenum rule-specification
    
       iptables [-t table] -D chain rulenum
    
       iptables [-t table] -S [chain [rulenum]]
    
       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
    
       iptables [-t table] -N chain
    
       iptables [-t table] -X [chain]
    
       iptables [-t table] -P chain target
    
       iptables [-t table] -E old-chain-name new-chain-name
    
       rule-specification = [matches...] [target]
    
       match = -m matchname [per-match-options]
    
       target = -j targetname [per-target-options]
    

    \color{#A00000}{DESCRIPTION}
    iptables 和 ip6tables 用于在 Linux 内核中设置、维护和检查 IPv4 和 IPv6 包过滤规则的表。 可以定义几个不同的表。 每个表包含许多内置链,也可能包含用户定义的链。
    每个链都包含了一个规则列表,可以匹配一组数据包。 每个规则都指定如何去处理匹配的数据包,即Target,如下图所示,表中有五个链:PREROUTING,INPUT,POSTROUTING,OUTPUT和DOCKER,其中链POSTROUTING拥有两个匹配规则,他们的Target分别是MASQUERADE和SNAT,即进行网络地址转换,链OUTPUT只有一条规则,其target是DOCKER,即数据包要交给链DOCKER进行进一步匹配处理。

    Target

    数据包将在链上依次匹配规则,若不匹配,则检查下一条,若匹配,则根据target,执行下一步操作。target的至可能是其他链的名字(如上面的DOCKER),则此时将数据包交给此链进行规则匹配;target还可能是其他特殊值:ACCEPT、DROP或 RETURN 之一。

    • ACCEPT 表示让数据包通过。
    • DROP 意味着将数据包丢弃
    • RETURN 表示停止遍历此链并在上一个链中的下一个规则处恢复。

    如果到达内置链的末端或匹配带有目标 RETURN 的内置链中的规则,则链的策略将决定数据包的命运。链的策略在上图中,每个内置链名称后的括号中体现。

    Tables

    目前有五个独立的表(存在哪些表取决于内核配置选项和存在哪些模块)。

    -t, --table table
    此选项指定命令应操作那个数据包匹配表。 如果内核配置了自动模块加载,则将尝试加载该表的适当模块(如果该模块尚不存在)。
    三个表包括:

    • filter:
      这是默认表(如果没有传递 -t 选项)。 它包含内置链 INPUT(用于更改发往本地套接字的数据包)、FORWARD(用于更改通过本机的路由转发的数据包)和 OUTPUT(用于在路由之前更改本地生成的数据包)。
    • nat:
      当遇到创建新连接的数据包时,会查阅此表。 它由四个内置函数组成:PREROUTING(用于在数据包进入时立即更改)、INPUT、OUTPUT 和 POSTROUTING(用于在数据包即将离开时对其进行更改)。IPv6 NAT 支持从内核 3.7 开始可用。
    • mangle:
      该表用于专门的数据包更改。 在内核 2.4.17 之前,它有两个内置链:PREROUTING 和 OUTPUT。 从内核 2.4.18 开始,还支持其他三个内置链:INPUT、FORWARD 和 POSTROUTING
    • raw:
      此表主要用于配置与 NOTRACK Target 相结合的连接跟踪豁免。 它在具有更高优先级的 netfilter 钩子上注册,因此在 ip_conntrack 或任何其他 IP 表之前调用。 它提供以下内置链: PREROUTING、 OUTPUT
    • security:
      此表用于强制访问控制 (Mandatory Access Control, MAC) 网络规则,例如由 SECMARK 和 CONNSECMARK Target启用的规则。 强制访问控制由 Linux 安全模块(例如 SELinux)实现。 security 在 filter 之后调用,允许filter中的任何自由访问控制 ( Discretionary Access Control, DAC) 规则在 MAC 规则之前生效。 该表提供了以下内置链:INPUT、OUTPUT 和 FORWARD。

    Options

    iptables 和 ip6tables 识别的Options可以分为几个不同的类别:

    COMMANDS

    这些选项指定要执行的所需操作。 除非下面另有说明,否则只能在命令行上指定其中之一。 对于长版本的命令和选项名称,您只需要使用足够多的字母以确保 iptables 可以将其与所有其他选项区分开来。

    • -A, --append chain rule-specification
      将一个或多个规则附加到所选链的末尾。 当源和/或目标名称解析为多个地址时,将为每个可能的地址组合添加规则。

    • -C, --check chain rule-specification
      检查所选链中是否存在匹配规范的规则。 此命令使用与 -D 相同的逻辑来查找匹配条目,但不会更改现有的 iptables 配置并使用其退出代码来指示成功或失败。

    • -D, --delete chain rule-specification

    • -D, --delete chain rulenum
      从选定的链中删除一个或多个规则。 此命令有两个版本:规则可以指定为链中的数字(第一个规则从 1 开始)或要匹配的规则。

    • -I, --insert chain [rulenum] rule-specification
      在选定的链中插入一个或多个规则,给定的规则编号为插入位置。 即,如果规则编号为 1,则将一条或多条规则插入到链的头部。 如果未指定规则编号,默认使用1。

    • -R, --replace chain rulenum rule-specification
      替换所选链中的规则。 如果源和/或目标名称解析为多个地址,该命令将失败。 规则从 1 开始编号。

    • -L, --list [chain]
      列出所选链中的所有规则。 如果未选择任何链,则列出所有链。如,可以iptables -t nat -n -L使用列出nat表的所有链。经常和-n连用,以避免进行长时间的反向DNS查询(由ip获取域名)

    • -S, --list-rules [chain]
      打印所选链中的所有规则。 如果没有选择链,则所有链都像 iptables-save 一样打印。 可以理解为显示所有规则是怎么生成方式、顺序。

    • -F, --flush [chain]
      刷新选定的链(如果没有给出表中的所有链)。 这相当于将所有规则一一删除。

    • --Z, --zero [chain [rulenum]]
      将所有链中的数据包和字节计数器清零,或仅清零给定链,或仅清零链中的给定规则。 可以同时指定 -L、--list选项,以便在计数器被清除之前查看计数器。

    • -N, --new-chain chain
      通过给定的名称创建一个新的用户定义链。 必须没有该名称的目标。

    • -X, --delete-chain [chain]
      删除指定的用户定义链。 必须保证没有链的引用才能删除(所谓引用就是内置链的规则)。 如果有,您必须先删除或替换引用规则,然后才能删除链。 链必须为空,即不包含任何规则。 如果没有给出参数,它将尝试删除表中的每个非内置链

    • -P, --policy chain target
      将内置(非用户定义)链的策略设置为给定的目标。 策略目标必须是 ACCEPT 或 DROP。

    • -E, --rename-chain old-chain new-chain
      将用户指定的链重命名为用户提供的名称。 这是装饰性的,对表的结构没有影响。

    • -h
      帮助。 给出命令语法的(目前非常简短的)描述。

    PARAMETERS

    以下参数构成规则规范(rule-specification在添加、删除、插入、替换和追加命令中使用)。

    • -4, --ipv4
      此选项在 iptables 和 iptables-restore 中无效。 如果使用 -4 选项的规则与(并且仅与)ip6tables-restore 一起插入,它将被静默忽略。 任何其他用途都会引发错误。 此选项允许在单个规则文件中使用 IPv4 和 IPv6 规则,以便与 iptables-restore 和 ip6tables-restore 一起使用。
    • -6, --ipv6
      如果使用 -6 选项的规则与(并且仅与)iptables-restore 一起插入,它将被静默忽略。 任何其他用途都会引发错误。 此选项允许在单个规则文件中使用 IPv4 和 IPv6 规则,以便与 iptables-restore 和 ip6tables-restore 一起使用。 此选项在 ip6tables 和 ip6tables-restore 中无效。
    • [!] -p, --protocol protocol
      规则或要检查的数据包的协议。 指定的协议可以是 tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh 或特殊关键字“all”之一,也可以是一个数值,代表这些协议之一或不同的协议。 也允许来自 /etc/protocols 的协议名称。 数字零等价于ALL。 "ALL" 将匹配所有协议,并在省略此选项时作为默认值。 请注意,在 ip6tables 中,不允许使用除 esp 之外的 IPv6 扩展标头。 esp 和 ipv6-nonext 可用于内核版本 2.6.11 或更高版本。 数字 0 等价于 all,这意味着不能直接测试值 0 的协议字段。 要匹配 HBH 标头,即使它是最后一个,也不能使用 -p 0,但始终需要 -m hbh。
    • [!] -s, --source address[/mask][,...]
      源规范。 地址可以是网络名称、主机名、网络 IP 地址(带 /mask)或普通 IP 地址。 在将规则提交给内核之前,主机名将只解析一次。 请注意,指定要使用远程查询(例如 DNS)解析的任何名称是一个非常糟糕的主意。 掩码可以是 ipv4 网络掩码(对于 iptables)或普通数字,指定网络掩码左侧的 1 的数量。 因此,iptables 掩码为 24 相当于 255.255.255.0。 标志 --src 是此选项的别名。 可以指定多个地址,但这会扩展为多个规则(使用 -A 添加时),或者会导致删除多个规则(使用 -D)。
    • [!] -d, --destination address[/mask][,...]
      目的地规范。 有关语法的详细说明,请参阅 -s(源)标志的说明。 标志 --dst 是此选项的别名。
    • -m, --match match
      指定要使用的匹配项,即测试特定属性的扩展模块。 这组匹配构成了调用目标的条件。 匹配项按照命令行上的指定从头到尾进行评估,并以短路方式工作,即如果一个扩展产生错误,则评估将停止。
    • -j, --jumpt targe
      用于指定规则的Target; 即,如果数据包匹配它该怎么办。 目标可以是用户定义的链(除了此规则所在的链),可以立即决定数据包命运的特殊内置目标之一,或者是扩展(参见下面的扩展)。 如果在规则中省略此选项(并且未使用 -g),则匹配规则对数据包的命运没有影响,但规则上的计数器将增加。
    • ** -g, --goto** chain
      指定处理应在用户指定的链中继续。与 --jump 选项不同,return 不会在此链中继续处理,而是在通过 --jump 调用我们的链中继续处理。
    • [!] -i, --in-interface name
      用于接收数据包的接口名称(仅适用于进入 INPUT、FORWARD 和 PREROUTING 链的数据包)。 ”!” 在接口名称之前使用,则意义相反。 如果接口名称以“+”结尾,则以该名称开头的任何接口都将匹配。 如果省略此选项,则任何接口名称都将匹配。
    • [!] -o, --out-interface name
      用于发送数据包的接口的名称(用于进入 FORWARD、OUTPUT 和 POSTROUTING 链的数据包)。 ”!” 在接口名称之前使用,则意义相反。 如果接口名称以“+”结尾,则以该名称开头的任何接口都将匹配。 如果省略此选项,则任何接口名称都将匹配。
    • [!] -f, --fragment
      这意味着该规则仅涉及分段数据包的第二个和更多 IPv4 片段。 由于无法告诉此类数据包(或 ICMP 类型)的源端口或目标端口,因此此类数据包将不匹配任何指定它们的规则。 ”!” 在接口名称之前使用,规则将只匹配头部片段或未分段的数据包。 此选项特定于 IPv4,在 ip6tables 中不可用。
    • -c, --set-counters packets bytes
      这使管理员能够初始化规则的数据包和字节计数器(在 INSERT、APPEND、REPLACE 操作期间)。
    OTHER OPTIONS

    可以指定以下附加选项:

    • -v, --verbose
      详细输出。 此选项使 list 命令显示接口名称、规则选项(如果有)和 TOS 掩码。 还列出了数据包和字节计数器,后缀“K”、“M”或“G”分别代表 1000、1,000,000 和 1,000,000,000 乘法器(但请参阅 -x 标志以更改此设置)。 对于追加、插入、删除和替换,这会导致打印规则的详细信息。 -v 可以多次指定以可能发出更详细的调试语句。
    • **-w, --wait ** [seconds]
      等待 xtables 锁定。 为了防止程序的多个实例同时运行,将尝试在启动时获取排他锁。 默认情况下,如果无法获得锁,程序将退出。 此选项将使程序等待(无限期或可选秒),直到获得排他锁。
    • -W, --wait-interval microseconds
      每次迭代等待的时间间隔。 在运行延迟敏感的应用程序时,等待 xtables 锁的时间过长可能是不可接受的。 此选项将使每次迭代花费指定的时间量。 默认间隔为 1 秒。 此选项必须和-w一起使用。
    • -n, --numeric
      数字输出。 IP 地址和端口号将以数字格式打印。 默认情况下,程序会尝试将它们显示为主机名、网络名或服务(只要适用)。
    • -x, --exact
      展开数字。 显示数据包和字节计数器的确切值,而不是仅以 K(1000 的倍数)M(1000K 的倍数)或 G(1000M 的倍数)为单位的舍入数字。 此选项仅与 -L 命令相关。
    • --line-numbers
      列出规则时,将行号添加到每个规则的开头,对应于该规则在链中的位置。
    • --modprobe=command
      在链中添加或插入规则时,使用命令加载任何必要的模块(目标、匹配扩展等)。

    相关文章

      网友评论

          本文标题:linux手册翻译——iptables(8)

          本文链接:https://www.haomeiwen.com/subject/wzebyltx.html