如何找出 iptables 规则来自哪里?

如何找出 iptables 规则来自哪里?

我曾经在 Ubuntu 14.04 LTS 安装中拥有自己的一套 iptables 规则。它位于 中/etc/network/if-pre-up.d/iptables

现在,显然一次又一次,apt-get dist-upgrade我的规则似乎被覆盖了:当我跑步时,iptables -L我看到的东西似乎来自于libvirt其他东西,但不是我。

因此,我正在寻找一种方法来找出这些规则的来源,以便我可以编辑/控制它们。我追求的方法需要比我现在尝试的方法更聪明——只需在所有系统配置文件中搜索输出中出现的唯一字符串iptables -L

更新:

运行virsh net-autostart default --disable并重启后,所有那些奇怪的 iptables 规则都消失了。现在我有了干净的 iptables,我知道它们之前被 libvirt/kvm 污染了。

但问题仍然存在:是否有一个通用的方法来找出在哪里iptables 规则从何而来?有没有比猜测并逐个关闭以查看是否会影响 iptables 更智能的方法?

答案1

通常,iptables 规则由位于 /etc/init.d 中的脚本保存或加载。假设脚本使用典型的 iptables-save 和 iptables-restore 命令,您可以使用递归 grep 搜索它们,例如:

grep -R iptables-restore /etc/init.d/

如果 grep 命令输出显示任何文件,您就可以看到哪个包负责将这些文件放置在系统上。

dpkg-query -S file-name-result-of-grep

该文件可能是在安装时生成的,或者由普通用户创建的,如果是这种情况,则 dpkg 可能不知道该文件。

如果 dpkg 的单一包名称简洁输出不够具象,您可以apt-cache show package-name使用 dpkg 提供的包名称。

答案2

我相信生成的 iptables 规则来自何时进行更改,而何时/var/lib/libvirt/network/default.xml又生成规则。我认为,但不确定,规则不是作为规则集存储的,而是从 .xml 源编译而来,并在启动期间启动 libvirtd 时输入到 iptables 规则集中。/etc/libvirt/qemu/networks/default.xmlvirsh net-edit default

相关内容