我在 Debian 服务器上工作,并试图弄清楚我的 IPTable 规则存储在哪里。
通过在网上查找,我发现通常有两个位置可以保存这些内容。
http://major.io/2009/11/16/automatically-loading-iptables-on-debianubuntu/建议/etc/network/if-up.d/iptables
但该文件在该目录中不存在。
http://beginlinux.wordpress.com/2009/05/26/saving-changes-for-iptables/ /etc/sysconfig/iptables
但该/etc/sysconfig
目录根本不存在。
据我所知,以前的管理员出于安全目的将常用文件保存到其他位置并不罕见,我想知道是否有办法在iptables-save
使用该命令时找出规则的保存位置。此页面还指出该文件是使用位于的脚本恢复的,/etc/init.d/iptables
但这也不存在。
关于如何继续找出规则保存的位置,有什么帮助或建议吗?我知道我可以尝试使用 grep 来查找规则中罕见的字符串,但我觉得必须有一种更简单、更直接的方法。
更新:
非常感谢您的帮助。我尝试使用 grep 搜索 /etc 目录,但花费了很长时间,而且我不想冒内存耗尽的风险,所以我停止了它。我想我会尝试使用 strace 作为一种不太耗时的方法。
通过查看 strace,我发现了以下行(我将 IP 地址更改为 1.1.1.1):
`open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=2859, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7747000
read(5, "# Internet (IP) protocols\n#\n# Up"..., 4096) = 2859
close(5) = 0
munmap(0xb7747000, 4096) = 0
write(1, "-A net2fw -s 1.1.1.1/32 -p t"..., 66) = 66`
我不能 100% 确定这在做什么,但在我看来,这是它使用文件中的协议 #5 的地方,/etc/protocols
即:
st 5 ST # ST datagram mode
读取某个文件的文件统计信息,然后将读取的内容映射到内存位置0xb7747000
。我不确定它从哪里读取,但随后它关闭协议,从内存中取消映射,然后将规则写入文件描述符1
。
我离正确阅读还有多远?我怎样才能找出所代表的文件1
?
答案1
iptables-persistent
wheezy 包将规则保存在 中/etc/iptables/rules.v4
。
您可以在这里查看该包的源代码:https://packages.debian.org/search?keywords=iptables-persistent
答案2
需要做一些侦查工作吗?
- 运行“strace iptables-save”并查看此命令打开的文件的输出。忽略库文件,它打开以读取的文件之一将是您要查找的规则集。