【问题标题】:Iptables rules validationiptables 规则验证
【发布时间】:2012-08-31 20:08:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl iptables


    【解决方案1】:

    这是我在 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"); }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

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

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

      您要验证什么?

      fffuu 可以:

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

      请注意,ITval 存在错误,已在 Verified iptables Firewall Analysis by Cornelius Diekmann, Julius Michaelis, Maximilian Haslbeck, and Georg Carle. In IFIP Networking 2016, Vienna, Austria, May 2016 (Section 2, paragraph 2) 中报告。

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

      【讨论】:

      • 我忍不住把这个名字读成一个发音方式:as "fu-fu-fu" ;-)
      【解决方案4】:

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

      【讨论】:

      • 请注意,link-only answers are discouraged,SO 答案应该是搜索解决方案的终点(相对于另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多