保存和恢复规则集
-
用 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