Есть ли у кого-нибудь опыт настройки модуля puppetlabs-firewall на ubuntu 12.04?
Документация по 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
}
Мне сложно понять, что это такое и как работает. Когда я помещаю это в верхнюю область видимости, он блокирует все мои марионеточные хосты. И я не хочу применять правила брандмауэра с этим модулем ко всем моим марионеточным узлам, а только к их подмножеству в целях тестирования. Поскольку я использую shorewall для большинства своих хостов и просто пытаюсь управлять брандмауэром с помощью марионетки, а не путем распространения файлов конфигурации shorewall. У кого-нибудь есть рабочая настройка на ubuntu, где я могу назначить брандмауэр для определенных хостов с минимальным дублированием в настройке? Пример мне действительно поможет.
Чтобы полностью понять, как работает модуль, посмотрите в $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 соединение.