3

我有一个perl脚本,它生成一个稍后将iptables在远程机器上加载的 shell 脚本。perl 脚本的数据输入来自一个配置文件,我可以在其中为每个规则指定各种参数。

问题是关于验证,如果没有执行能力,你将如何验证整套规则?

我在 CPAN 上搜索过,最接近的解决方案是IPTables::Rule,但它只在生成规则时验证一些限制。我不能使用 IPTables::IPv4,因为它直接与主机 iptables 交互。

4

4 回答 4

2

这是我在 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"); }
于 2018-07-27T02:51:42.573 回答
1

这不是直接可以实现的。iptables规则字符串语法部分由iptables(8)加载的各个匹配或操作模块解析。在不直接调用底层 C 模块的情况下,没有标准的方法来解析输入。

于 2012-09-09T20:37:17.013 回答
1

查看fffuu,花哨的正式防火墙通用理解器。它是 iptables 防火墙规则集的静态分析器。该工具仍在积极开发中(截至 2017 年 2 月),尚未完全完成。但是,核心已完全正式验证,因此您可以信任它。

作为输入,它只需要 的输出iptables-save。对于您的场景,您可以在虚拟机上生成此输出。

你想验证什么?

fffuu 可以:

  • 检查欺骗保护
  • 将您的防火墙转换为简化版本,然后您可以手动检查
  • 可视化防火墙在完整 IPv4 和 IPv6 地址空间上隐含的访问控制关系。默认情况下,它会检查目标端口 22 和 80。

请注意,ITval 存在错误,Cornelius Diekmann、Julius Michaelis、Maximilian Haslbeck 和 Georg Carle 在 Verified iptables Firewall Analysis 中报告。在 IFIP Networking 2016,奥地利维也纳,2016 年 5 月(第 2 节,第 2 段)

免责声明:我是fffuu的作者,我的观点可能有偏见,而且fffuu并不完美(还)。但是,嘿,它是免费的,我希望它有所帮助。随意重用任何代码:-)

于 2016-04-02T16:47:25.123 回答
0

检查以下 sf.net 项目http://sourceforge.net/projects/itval/

于 2013-12-26T13:28:49.313 回答