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 次 |
最近记录: |