查看所有 iptables 规则

The*_*age 171 iptables

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

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

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart
Run Code Online (Sandbox Code Playgroud)

这已经完成了我想要的,但是当我使用:

iptables -L
Run Code Online (Sandbox Code Playgroud)

我得到的输出与我通常得到的输出相同:

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
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*gan 142

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

iptables --table nat --list
Run Code Online (Sandbox Code Playgroud)

或使用选项简写形式:

iptables -t nat -L
Run Code Online (Sandbox Code Playgroud)

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


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

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


Gil*_*il' 128

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
Run Code Online (Sandbox Code Playgroud)

或者,您可以调用该iptables-save程序,该程序以可以解析的格式显示所有表中的所有规则iptables-restore。这种格式也很容易被人类阅读(它很像对iptables命令的一系列调用来构建表)。


Cam*_*ron 61

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

从手册页:

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

  • 我没有发现这种情况。`iptables -S` 没有显示我所有的 nat 规则,我可以在运行 `iptables -L -t nat` 时看到这些规则 (8认同)
  • +1。没有关于它的“似乎”-来自手册页:“-S,打印所选链中的所有规则。如果没有选择链,则所有链都像 iptables-save 一样打印”。这是我通常需要的。 (6认同)
  • 同意@mulllhausen 的观点。我需要“sudo iptables --table nat --list”来显示我的 nat 表规则。“-S”标志本身没有显示它们。 (3认同)
  • @MikeS 从手册页来看,这两个命令仅对指定的表进行操作,默认情况下进行过滤。“与其他所有 iptables 命令一样,它适用于指定的表(过滤器是默认值)。” -S 和 -L 的文档中的措辞几乎完全相同,它们仅在输出格式上有所不同,而不是打印的规则不同。至少在 Ubuntu 16.04 上是这样,我的系统上是 iptables v1.6.0。 (2认同)

tac*_*omi 20

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

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp
Run Code Online (Sandbox Code Playgroud)

您可以进行双重备份,以便在不丢失过去的 iptables 的情况下修改其中一个。

这是个人实践,我并不是说这是最好的方法,但对我来说效果很好。

试一下


小智 5

您可以使用:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter
Run Code Online (Sandbox Code Playgroud)

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

  • 查找表名的更好方法是“cat /proc/net/ip_tables_names”和“cat /proc/net/ip6_tables_names” (2认同)