adr*_*nos 3 iptables shell-script
如何获得所有 iptables 规则的确定性完整转储?
通过完整,我的意思是所有的 iptables 表。
通过确定性,我的意思是当命令多次运行而不修改任何 iptables 时,它应该总是输出相同的。
用例:重构防火墙脚本。使用例如 for 循环而不是多次编写类似的命令之类的东西。在检查重构前后运行 iptables-dump 命令并没有改变任何实际的 iptables 规则。
iptables控制五种不同的表:filter,nat,mangle,raw和security。在给定的调用中,iptables仅显示或修改这些表之一,由选项的参数指定-t(默认为filter)。要查看防火墙的完整状态,需要iptables依次调用每个表。此外,要获得规则的准确表示,您需要传递 option
-v。否则,输出中会省略一些重要的标准,例如过滤规则中的接口(例如,“接受所有内容”的规则和“环回接口上的所有内容”的规则只能用 区分-v)。因此,要完整地介绍 netfilter 规则,您需要
Run Code Online (Sandbox Code Playgroud)iptables -vL -t filter iptables -vL -t nat iptables -vL -t mangle iptables -vL -t raw iptables -vL -t security或者,您可以调用该
iptables-save程序,该程序以可以解析的格式显示所有表中的所有规则iptables-restore。这种格式也很容易被人类阅读(它很像对iptables命令的一系列调用来构建表)。
但是在使用时-v,将添加包和字节计数器。从而使输出不确定。
如何两全其美?如何获得所有 iptables 规则的确定性完整转储?
该iptables-save命令有一个非常简单的输出。不同的部分在规则后的方括号中,或在注释中:
# Generated by iptables-save v1.4.21 on Sun Jan 10 16:02:30 2016
: INPUT ACCEPT [38:2132]
Run Code Online (Sandbox Code Playgroud)
然后它变成了使这些实体无效甚至删除这些实体的练习,从而产生一个完全确定的输出,仍然可以通过以下方式重新读取iptables-restore:
iptables-save | sed -e 's/\[[0-9:]*\]/[0,0]/' -e '/^#/d'
*filter
:INPUT ACCEPT [0,0]
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6178 次 |
| 最近记录: |