Назад | Перейти на главную страницу

Настройка модуля puppetlabs-firewall

Есть ли у кого-нибудь опыт настройки модуля 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 соединение.