如何检查脚本中的iptables是否为空

时间:2015-02-09 22:44:32

标签: bash iptables

我正在编写一个需要检查iptables是否为空的脚本。

我唯一的想法就是“iptables-save”并将其与空iptables的“iptables-save”进行比较。

但是,我不确定我是否可以指望“iptables-save”在每个主机上为空iptables产生相同的结果。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用iptables-save和grep来查看以-开头的行:

清空iptables:

sudo iptables-save | grep '^\-' | wc -l
0

非空:

sudo iptables-save | grep '^\-' | wc  -l 
13

答案 1 :(得分:1)

您是否尝试过--list( - L)参数?

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

该输出显示没有防火墙条目。

如果确实输出了,你会看到类似的东西......

$ sudo iptables -n -L -v --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
3    TCPMSS     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
5    wanin      all  --  0.0.0.0/0            0.0.0.0/0
6    wanout     all  --  0.0.0.0/0            0.0.0.0/0
7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain wanin (1 references)
num  target     prot opt source               destination
Chain wanout (1 references)
num  target     prot opt source               destination

编辑:这是您可以使用的一个班轮:echo "$(sudo iptables -n -L -v --line-numbers)" | egrep "^[0-9]"。那么只测试$?是1还是0.如果为0,则存在活动的防火墙规则,如果为1则没有活动规则。

$ echo "$(sudo iptables -n -L -v --line-numbers)" | egrep "^[0-9]"
1        0     0 DROP       all  --  *      *       202.54.1.2           0.0.0.0/0
$
$ echo $?
0
$
$ sudo iptables -D INPUT 1
$
$ echo "$(sudo iptables -n -L -v --line-numbers)" | egrep "^[0-9]"
$ echo $?
1

编辑:或者使用wc -l可能会更好....

echo "$(sudo iptables -n -L -v --line-numbers)" | egrep "^[0-9]" | wc -l
相关问题