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

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

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


哪个已经完成了我想要的操作,但是当我使用时: br />
如何查看规则,包括我添加的规则? (系统为CentOS 6)

#1 楼

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

iptables --table nat --list


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


对于更快的结果,还可以包括-n--numeric选项,以打印数字IP地址而不是主机名,从而避免等待反向DNS查找。您可以通过以下方法获取更多信息:包括-v--verbose选项。

#2 楼

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

另外,要获得规则的准确表示,您需要传递选项-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命令的一系列调用以构建表)。

#3 楼

iptables -S帮了我大忙。似乎列出了所有活动规则,即使关闭服务也是如此。

从手册页:


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


评论


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

–可爱的香肠
16年4月1日在10:08

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

– Mike S
16年5月11日在21:27



我没有发现这种情况。 iptables -S不会显示我所有的nat规则,运行iptables -L -t nat时可以看到这些规则

– Mulllhausen
17年4月8日在1:34

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

–斯科特
17-6-18到3:15



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

– Robert Oschler
17年8月18日在19:54

#4 楼

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

其中之一而不会丢失您过去的iptables。

评论


这是我到目前为止找到的唯一实际可行的答案,它实际上也转储了所有表。

–克里斯·哈灵顿(Chris Harrington)
17年5月28日在0:50

#5 楼

您可以使用:

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


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

评论


查找表名的更好方法是cat / proc / net / ip_tables_names和cat / proc / net / ip6_tables_names

– Paul Tobias
20-2-5在10:43

#6 楼

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

iptables -t nat -L


#7 楼

如果确实有帮助,您可以编写一个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命令。

#8 楼

iptables -vnxL
iptables -vnxL -tnat


还有可能,尽管很少使用:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy