freebsd_pf

freebsd_pf

качество Статус сборки GitHub метка

Роль Ansible. FreeBSD. Настройка файрвола PF.

Не стесняйтесь делиться своим мнением и сообщать о проблемах.

Внесение вклада приветствуется.

Предупреждение:

Поскольку это влияет на файрвол, существует риск быть заблокированным. Необходимо прочитать руководство

Когда вы экспериментируете с PF на удалённом хосте, откройте сеанс и, как root, выполните следующую команду перед включением PF:

shell> sleep 120; pfctl -d

Это отключит PF через 2 минуты и позволит вам открыть новый сеанс на этом удалённом хосте на случай, если что-то пойдёт не так.

Требования и зависимости

Коллекции

  • community.general

Опциональные зависимости

Переменные роли

По умолчанию файрвол отключен

pf_enable: False

По умолчанию sshguard, blacklistd, fail2ban и relayd отключены

pf_blacklistd_enable: False
pf_fail2ban_enable: False
pf_relayd_enable: False
pf_sshguard_enable: False

По умолчанию заблокированные пакеты не регистрируются

pf_log_all_blocked: False

Просмотрите значения по умолчанию и примеры в vars.

Рабочий процесс

  1. При необходимости измените оболочку на /bin/sh
shell> ansible srv.example.com -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod freebsd -s /bin/sh'
  1. Установите роль и коллекции
shell> ansible-galaxy role install vbotka.freebsd_pf

Установите коллекцию при необходимости

shell> ansible-galaxy collection install community.general
  1. Создайте файрвол

Есть несколько шаблонов *-pf.conf.j2 доступных. Выберите шаблон, который подходит для вашей цели (маршрутизатор, сервер, балансировщик и т.д.) и просмотрите примеры переменных .yml.sample в vars. Шаблон default-pf.conf.j2 и переменные pfconf_example_default.yml.sample были протестированы. Остальные шаблоны и образцы потребуют больше внимания и тестирования.

Примечание: Вы можете создавать вложенные списки (таблицы, параметры, нормализация, очередь, трансляция, фильтрация и т.д.) для шаблона default-pf.conf.j2. Списки будут упрощены.

  1. Создайте плейбук
shell> cat freebsd-pf.yml
- hosts: srv.example.com
  roles:
    - vbotka.freebsd_pf
  1. Просмотрите обработчики, чтобы увидеть, как осуществляется запуск/перезапуск/перезагрузка PF.

  2. Установите пакеты

shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml

Затем отключите установку, чтобы ускорить выполнение плейбука.

  1. Настройте файрвол

Запуск и перезапуск файрвола прерывает SSH-соединения. Смотрите обработчики для получения деталей. В результате оба обработчика, запускающие и перезагружающие, работают некорректно, и соединение SSH будет неработоспособным. Поэтому сначала давайте настроим правила:

shell> ansible-playbook -e pf_enable=false freebsd-pf.yml

Перед тем как включить файрвол, откройте сеанс SSH на удалённом хосте и выполните следующие команды:

shell> sleep 120; pfctl -d

Если вы заблокируете себя на удалённом хосте, вышеуказанные команды отключат файрвол через 2 минуты. Вы можете запускать эти команды каждый раз при экспериментах с файрволом. Теперь, включите файрвол:

shell> ansible-playbook -e pf_enable=true freebsd-pf.yml

Обновите файрвол

Откройте SSH-соединение с хостом на случай, если что-то пойдёт не так. Обновите и проверьте конфигурацию. Не перезагружайте правила:

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=true freebsd-pf.yml

Перезагрузите правила после обновления и проверки конфигурации:

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

Устранение неполадок

pf.conf

В качестве первого шага включите резервное копирование файлов конфигурации:

pf_backup_conf: true

Если конфигурация /etc/pf.conf не проходит проверку, задача заканчивается с ошибкой:

TASK [vbotka.freebsd_pf : pfconf: Configure rules] **********************************************
fatal: [srv.example.com]: FAILED! => changed=false
  checksum: 765302b1f0de9f200b2cab396e0271fc04e6adcc
  exit_status: 1
  msg: failed to validate
  stderr: |-
    /home/freebsd/.ansible/tmp/ansible-tmp-1554558267.39-44232067735996/source:119: syntax error

Сообщение выше показывает местоположение синтаксической ошибки (source:119) в временном файле, созданном модулем шаблона. Найти ошибку трудно, если этот временный файл недоступен для просмотра.

Включите pf_conf_only=true и отключите проверку pf_conf_validate=false, чтобы найти проблему:

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=false freebsd-pf.yml

Найдите синтаксическую ошибку в конфигурационном файле /etc/pf.conf:

shell> pfctl -n -f /etc/pf.conf

Обновите, проверьте и перезагрузите правила после исправления конфигурации:

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

relayd.conf

Аналогичным образом можно устранить неполадки в /usr/local/etc/relayd.conf:

shell> ansible-playbook -t pf_relayd -e pf_debug=true -e pf_relayd_conf_validate=false -e pf_relayd_conf_only=true freebsd-pf.yml

Найдите синтаксическую ошибку в конфигурационном файле /usr/local/etc/relayd.conf:

shell> relayd -n -f /usr/local/etc/relayd.conf

Обновите, проверьте и перезагрузите правила после исправления конфигурации:

shell> ansible srv.example.com -m service -a "name=relayd state=reloaded"

Безопасность

Чтобы предотвратить перезагрузку непроверенной конфигурации обработчиком, файл конфигурации /etc/pf.conf не будет создан, и задача завершится, если оба параметра pf_conf_only=false и pf_conf_validate=false:

shell> ansible-playbook -e pf_conf_only=false -e pf_conf_validate=false freebsd-pf.yml
fatal: [srv.example.com]: FAILED! => changed=false
  msg: Validation can be turned off if pf_conf_only=True. End of play.

Роль завершает работу аналогичным образом в случае -e pf_relayd_conf_only=false -e pf_relayd_conf_validate=false.

Ansible lint

Используйте файл конфигурации .ansible-lint.local при запуске ansible-lint. Некоторые правила могут быть отключены, а некоторые предупреждения могут быть игнорированы. Смотрите заметки в файле конфигурации.

shell> ansible-lint -c .ansible-lint.local

Ссылки

Лицензия

лицензия

Информация об авторе

Vladimir Botka

Установить
ansible-galaxy install vbotka/ansible-freebsd-pf
Лицензия
bsd-2-clause
Загрузки
230
Владелец