关于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 |