保存和恢复规则集

  • 用 iptables-save 和 iptables-restore 的一个重要原因就是他们能够加速恢复和保存大的规则。
  • 改动每个规则都要调运命令 iptables,而每一次调用 iptables,它首先要把 Netfilter 内核空间中的整个规则集都提取出来,然后再插入或附加,或做其他的改动,最后,再把新的规则集从它的内存空间插入到内核空间中。这会花费很多时间
  • 解决这个问题的武器,就是 iptables-save 和 iptables-restore。
  • iptables-save 命令用来把规则保存到一个特殊格式的文本文件中,Iptables-save 能够一次性从内核里面获取全部的规则,并且保持到一个文件里面。
  • iptables-restore 则能够加载这个文件,并且在内核中恢复规则。iptables-restore 则能够一次性把所有规则加载并且同步到内核。
  • 他们的最大优点就是对于规则的操作只需要一次请求。
iptables-save [-c] [-t table]
-c 参数告诉 iptables 在保存的时候保存包和字节数量。默认情况下,这个参数不被使用。
-t 参数告诉 iptables 哪一个表的配置需要保存,没有这个参数所有表的配置都会被保存。
  • 以#开头表示这行是注释。
  • 每一个表都以标志,例如mangle。
  • 接着在每一个表里面,我们都有链和规则,一个链看起来像如下的格式:
  • <链名><链策略>[<报文计数>:<字节计数>]
  • 每一个表的结束都用一个 COMMIT 关键字,COMMIT 关键字表明此刻我们应该把 所有规则发送到内核。
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*filter
:INPUT ACCEPT [404:19766]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [530:43376]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*mangle
:PREROUTING ACCEPT [451:22060]
:INPUT ACCEPT [451:22060]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [594:47151]
:POSTROUTING ACCEPT [594:47151]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*filter
:INPUT DROP [1:229]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Apr 24 10:19:55 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*mangle
:PREROUTING ACCEPT [658:32445]
:INPUT ACCEPT [658:32445]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [891:68234]
:POSTROUTING ACCEPT [891:68234]
COMMIT
# Completed on Wed Apr 24 10:19:55 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:55 2002
*nat
:PREROUTING ACCEPT [1:229]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
-A POSTROUTING -o eth0 -j SNAT --to-source 195.233.192.1
COMMIT
# Completed on Wed Apr 24 10:19:55 2002
  • 你可能看到了,每一个命令前都有字节和报文统计值,这是因为我们用了-c 参 数。除了有计数器,其他的都和普通的脚本一样。现在的问题是怎么把输出保 存到文件中。非常简单,既然使用 linux,你应该早就知道了,用重定向就可 以了。
  • iptables-restore
iptables-restore [-c] [-n]
-c 参数表明我们要恢复我们之前保存的字节以及报文统计,这个参数还有另外一种长格式写法—counter。
-n 参数表明不会覆盖之前已经存在的配置,默认情况下 iptables-restore 会 刷新和破坏所有之前已经存在的配置。-n 参数当然也可以通过—noflush 来替 代,他们是一样的。

# 恢复方法:
cat /etc/iptables-save | iptables-restore -c
iptables-restore -c < /etc/iptables-save