设置 puppetlabs-firewall 模块

设置 puppetlabs-firewall 模块

有人有在 ubuntu 12.04 上设置 puppetlabs-firewall 模块的经验吗?

文档https://github.com/puppetlabs/puppetlabs-firewall状态:

目前,您需要提供我们在模块中提供的设置之外的一些设置,以支持正确的排序、清除和防火墙持久性。

因此建议您在某处的顶级范围内提供以下内容(例如您的 site.pp):

# Always persist firewall rules
exec { 'persist-firewall':
  command     => $operatingsystem ? {
    'debian'          => '/sbin/iptables-save > /etc/iptables/rules.v4',
    /(RedHat|CentOS)/ => '/sbin/iptables-save > /etc/sysconfig/iptables',
  },
  refreshonly => true,
}
# These defaults ensure that the persistence command is executed after 
# every change to the firewall, and that pre & post classes are run in the
# right order to avoid potentially locking you out of your box during the
# first puppet run.
Firewall {
  notify  => Exec['persist-firewall'],
  before  => Class['my_fw::post'],
  require => Class['my_fw::pre'],
}
Firewallchain {
  notify  => Exec['persist-firewall'],
}

# Purge unmanaged firewall resources
#
# This will clear any existing rules, and make sure that only rules
# defined in puppet exist on the machine
resources { "firewall":
  purge => true
}

我很难理解它的作用和工作原理。当我将其放在顶部范围时,它会锁定我的所有 puppet 主机。我不想将此模块的防火墙规则应用于我的所有 puppet 主机,而只是将其应用于测试目的的一个子集。由于我对大多数主机都使用 shorewall,并且只是尝试通过 puppet 而不是分发 shorewall 配置文件来控制防火墙。是否有人在 ubuntu 上有一个可行的设置,我可以在配置中将防火墙分配给特定主机,同时尽量减少重复?举个例子真的能帮到我。

答案1

要完全理解模块的工作原理,请查看$module_path/firewall/lib/puppet/{type|proider}/*它全部用 Ruby 编写。即使你不懂这种语言,也可以很直接地理解它。

正如评论中提到的,清单中的附加代码是一种解决方法,因此模块可以正常工作。我猜他们在通过 ruby​​ 直接在类型/提供程序中实现所有代码时遇到了一些问题。使用默认功能是有意义的iptables-save,因为在重新启动后重新加载防火墙设置要容易得多,并且它适用于大多数流行的 Linux 发行版。

即使您复制/粘贴该代码,也不会影响您当前的配置,只要您不在节点默认值或节点配置中使用资源类型即可。出于测试目的,请将此代码直接包含在测试节点中。应该产生相同的结果。上面是一个例子:

    Firewall {
      notify => Exec["persist-firewall"],
      before  => Class['my_fw::post'],
      require => Class['my_fw::pre'],
    }

    Firewallchain {
      notify  => Exec['persist-firewall'],
    }

    resources { "firewall":
      purge => true
    }

    firewall { '100 ssh 22':
      port => '22',
      proto => 'tcp',
      action => 'accept',
    }

    firewall { '100 www 80':
      port => '80',
      proto => 'tcp',
      action => 'accept',
    }

    firewall { '100 sql 5436':
      port => '5436',
      proto => 'tcp',
      action => 'accept',
    }

    firewall { '100 sql 5438':
      port => '5438',
      proto => 'tcp',
      action => 'accept',
    }

    firewall { '100 sql 5440':
      port => '5440',
      proto => 'tcp',
      action => 'accept',
    }

    exec { "persist-firewall":
      command => $operatingsystem ? {
        "debian" => "/sbin/iptables-save > /etc/iptables/rules.v4",
        /(RedHat|CentOS)/ => "/sbin/iptables-save > /etc/sysconfig/iptables",
      },
      refreshonly => 'true',
    }

在这个例子中,我允许 22、80、5436、5438 传入 TCP 连接。

相关内容