我有一个perl
脚本,它生成一个稍后将iptables
在远程机器上加载的 shell 脚本。perl 脚本的数据输入来自一个配置文件,我可以在其中为每个规则指定各种参数。
问题是关于验证,如果没有执行能力,你将如何验证整套规则?
我在 CPAN 上搜索过,最接近的解决方案是IPTables::Rule,但它只在生成规则时验证一些限制。我不能使用 IPTables::IPv4,因为它直接与主机 iptables 交互。
我有一个perl
脚本,它生成一个稍后将iptables
在远程机器上加载的 shell 脚本。perl 脚本的数据输入来自一个配置文件,我可以在其中为每个规则指定各种参数。
问题是关于验证,如果没有执行能力,你将如何验证整套规则?
我在 CPAN 上搜索过,最接近的解决方案是IPTables::Rule,但它只在生成规则时验证一些限制。我不能使用 IPTables::IPv4,因为它直接与主机 iptables 交互。
这是我在 sh 脚本中测试规则的方法:
#!/bin/sh
/usr/sbin/iptables-restore --test < yourfileofrules
[ $? -ne 0 ] && {
echo File does NOT syntax check
exit 1
}
在 perl 中,您将以您喜欢的任何方式执行 iptables-restore 命令,然后检查“0”退出状态是否成功。
[编辑] 有人告诉我这是 perl 方式:
my $cmd = "/usr/sbin/iptables-restore --test < yourfileofrules";
if (system($cmd) != 0) { die("File does NOT syntax check"); }
这不是直接可以实现的。iptables
规则字符串语法部分由iptables(8)
加载的各个匹配或操作模块解析。在不直接调用底层 C 模块的情况下,没有标准的方法来解析输入。
查看fffuu,花哨的正式防火墙通用理解器。它是 iptables 防火墙规则集的静态分析器。该工具仍在积极开发中(截至 2017 年 2 月),尚未完全完成。但是,核心已完全正式验证,因此您可以信任它。
作为输入,它只需要 的输出iptables-save
。对于您的场景,您可以在虚拟机上生成此输出。
你想验证什么?
fffuu 可以:
免责声明:我是fffuu的作者,我的观点可能有偏见,而且fffuu并不完美(还)。但是,嘿,它是免费的,我希望它有所帮助。随意重用任何代码:-)
检查以下 sf.net 项目http://sourceforge.net/projects/itval/