查看所有iptables规则


144

有没有办法iptables更详细地查看规则?

我最近在一系列IP中添加了伪装:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

哪个完成了我想要的,但是当我使用时:

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

如何查看规则,包括我添加的规则?(系统是CentOS 6)

Answers:


116

当使用-L--list选项,列出当前的防火墙规则,还需要指定适当的Netfilter表(一filternatmanglerawsecurity)。因此,如果您为nat表格添加了规则,则应使用-t--table选项显式指定该表格:

iptables --table nat --list

或使用选项简写形式:

iptables -t nat -L

如果未指定特定表,则将该filter表用作默认表。


为了获得更快的结果,还可以包含-n--numeric选项以打印数字IP地址而不是主机名,这很有用,从而避免了等待反向DNS查找的需要。

您可以通过包含-v--verbose选项获得更多信息。


113

iptables控制五种不同的表:filternatmanglerawsecurity。在给定的调用中,iptables仅显示或修改由选项的参数指定的这些表之一-t(默认为filter)。要查看防火墙的完整状态,您需要iptables依次调用每个表。

此外,要获得规则的准确表示,您需要传递option -v。否则,输出中将忽略一些重要的条件,例如过滤器规则中的接口(例如,只能用来区分“接受所有内容”的规则和“接受环回接口上的所有内容”的规则-v)。

因此,要完整展示netfilter规则,您需要

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对构建表的命令的一系列调用)。


56

iptables -S为我做the俩。它似乎列出了所有活动规则,即使服务已关闭也是如此。

从手册页:

-S,--list-rules [链]打印选定链中的所有规则。如果未选择任何链,则所有链都将像iptables-save一样打印。与其他所有iptables命令一样,它适用于指定的表(默认为filter)。


这是一个非常糟糕的答案,我也注意到/ sbin / service iptables状态给出了类似的输出
TheLovelySausage

6
+1。在手册页上没有关于它的“似乎”信息:“-S,打印所选链中的所有规则。如果未选择任何链,则所有链都像iptables-save一样打印”。这是我通常需要的。
Mike S

3
我发现情况并非如此。iptables -S并没有显示我所有的nat规则,我可以在跑步时看到这些规则iptables -L -t nat
mulllhausen '17

1
@MikeS在手册页中,两个命令仅在指定的表上运行,默认情况下进行过滤。“就像其他所有iptables命令一样,它适用于指定的表(默认是过滤器)。” 对于-S和-L,文档中的措词几乎相同地被复制,它们的区别仅在于输出格式,而不是打印的规则。至少在Ubuntu 16.04上是如此,在我的系统上是iptables v1.6.0。
斯科特(Scott)

在这里同意@mulllhausen。我需要“ sudo iptables --table nat --list”来显示我的nat表规则。“ -S”标志本身未显示它们。
罗伯特·奥施勒

15

我要做的是执行iptables-save > iptables_bckp此操作,这将备份所有层,然后编辑文件并还原iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

您可以进行两次备份,因此您可以修改其中一个备份而不会丢失过去的iptables。

这是个人的做法,我并不是说这是最好的方法,但对我来说却很棒。

试一下


这是到目前为止我发现的唯一实际可行的答案,它实际上也转储了所有表。
克里斯·哈灵顿

4

iptables命令还要求您指定表,否则默认为过滤表。因此,请尝试:

iptables -t nat -L

1

您可以使用:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

查找所有表并在表中显示特定规则。


1

如果确实有帮助,您可以编写一个bash脚本并将其放在您的路径引用的文件夹中,或者通过〜/ .bashrc文件中的别名引用它。

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

记得给新的bash脚本执行权限 chmod

如果许可是问题,则可能必须在所有iptables命令前添加sudo 。


0
iptables -vnxL
iptables -vnxL -tnat

可能另外,尽管这些很少使用:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.