关于IPTABLES的手记

本文只介绍iptables操作时的一些命令记录,对于iptables的其它概念如表,链,规则等不再赘述

在对iptables操作时需要尤其小心,对于防火墙添加的失误会造成程序间端口无法访问,导致业务受影响甚至停摆。

–APPEND -A

-A chain – 指定规则应该添加到的 chain 的名称。例如,使用 INPUT 将会把规则添加到默认的 INPUT(入站)链的末尾,而使用 OUTPUT 则会将规则添加到出站链的末尾。

1
iptables -A chain firewall-rule

-A 的意思是附加(append),并不是添加(add)的意思,它是将规则添加到已有的防火墙链(chain)的末尾的操作指令。这是特别重要的,因为规则在 iptables 中的位置非常重要,所以千万记住,-A 的意思是将规则添加到末尾,因为一般情况下 iptables 中最后一条规则是丢弃所有数据包。如果你已经有了一条这样的规则,使用 -A 参数添加的规则将会在丢弃规则之后,以至于新规则根本无法起作用。如果要插入到中间位置,需要用 -I 指令。

–DELETE -D

从 chain 中删除与指定规则匹配,或指定编号的条目。

表示从 chain 中删除对应规则 firewall-rule 的那一条目。这种形式删除规则比较麻烦,通常用下面的形式

1
iptables -D chain firewall-rule

删除 chain 中编号为 rulenum 的那条规则。1 表示第一条。

1
iptables -D chain rulenum

–INSERT -I

将 firewall-rule 添加为 chain 中的第 rulenum 条规则,原先的第 rulenum 条及以后各条的需要顺次 +1。如上面一样,1 表示该 chain 中第一条。默认为 1,即,如果没有指定 rulenum 则将该 chain 中第一条规则替换掉。

1
iptables -I chain [rulenum] firewall-rule

–REPLACE -R

将 chain 中原来的第 rulenum 条规则替换为 firewall-rule。如果没有指定 rulenum,则替换该 chain 中第一条。

1
iptables -R chain [rulenum] firewall-rule

–LIST -L

列出 chain 或者所有 chain(当未指定 chain 名称时)中的 第 rulenum 条规则或者所有规则(当未指定 rulenum 时)。不过要注意,如果未指定 chain 则不能带 rulenum 参数。

1
iptables -L [chain [rulenum]]

如果在 -L 后再加上 –line-numbers,则表示在每条规则前面显示序号

1
iptables -L --line-numbers

–LIST-RULES -S

打印出 chain 或者所有 chain(当未指定 chain 名称时)中的 第 rulenum 条规则或者所有规则(当未指定 rulenum 时)。不过要注意,如果未指定 chain 则不能带 rulenum 参数。

1
iptables -S [chain [rulenum]]

–FLUSH -F

清空 chain 或所有 chain (当未指定 chain 名称时)中的规则。

1
iptables -F [chain]

–ZERO -Z

把 chain 或者所有 chain(当未指定 chain 名称时)的包及字节的计数器清空。

1
iptables -Z [chain [rulenum]]

–NEW -N

创建一个名称为 chain 的新链。

1
--new -N chain

–DELETE-CHAIN -X

删除用户自定义 chain 或者所有用户自定义 chain(当未指定 chain 名称时)。该指令不影响预设规则(如 INPUT、OUTPUT、FORWARD 等)。

1
iptables -X [chain]

–POLICY -P

改变 chain 的策略为 target。

1
iptables -P chain target

–RENAME-CHAIN -E

将 old-chain 名称更改为 new-chain。这样做可以使所有引用 old-chain 的规则失效。

1
iptables -E old-chain new-chain