freebsd_pf
freebsd_pf
Роль Ansible. FreeBSD. Настройка файрвола PF.
Не стесняйтесь делиться своим мнением и сообщать о проблемах.
Внесение вклада приветствуется.
Предупреждение:
Поскольку это влияет на файрвол, существует риск быть заблокированным. Необходимо прочитать руководство
- https://www.freebsd.org/doc/en/books/handbook/firewalls-pf.html
- https://www.openbsd.org/faq/pf/filter.html
Когда вы экспериментируете с 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.
Рабочий процесс
- При необходимости измените оболочку на /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'
- Установите роль и коллекции
shell> ansible-galaxy role install vbotka.freebsd_pf
Установите коллекцию при необходимости
shell> ansible-galaxy collection install community.general
- Создайте файрвол
Есть несколько шаблонов *-pf.conf.j2 доступных. Выберите шаблон, который подходит для вашей цели (маршрутизатор, сервер, балансировщик и т.д.) и просмотрите примеры переменных .yml.sample в vars. Шаблон default-pf.conf.j2 и переменные pfconf_example_default.yml.sample были протестированы. Остальные шаблоны и образцы потребуют больше внимания и тестирования.
Примечание: Вы можете создавать вложенные списки (таблицы, параметры, нормализация, очередь, трансляция, фильтрация и т.д.) для шаблона default-pf.conf.j2. Списки будут упрощены.
- Создайте плейбук
shell> cat freebsd-pf.yml
- hosts: srv.example.com
roles:
- vbotka.freebsd_pf
Просмотрите обработчики, чтобы увидеть, как осуществляется запуск/перезапуск/перезагрузка PF.
Установите пакеты
shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml
Затем отключите установку, чтобы ускорить выполнение плейбука.
- Настройте файрвол
Запуск и перезапуск файрвола прерывает 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
Ссылки
- Книга PF
- Файрволы с использованием пакетного фильтра PF OpenBSD
- Руководство для начинающих по файрволам с PF
- PF Тестирование вашего файрвола - Журнал OpenBSD
- Быстрая настройка тюрьмы на ZFS с использованием ezjail с PF NAT
- FreeBSD и blacklistd
- Blacklistd на FreeBSD
- PF и sshguard
- Принуждение к банам Fail2ban с PF
- Fail2Ban с PF
- Fail2Ban pf.conf: исправление синтаксиса multiport
Лицензия
Информация об авторе
FreeBSD. Configure PF firewall.
ansible-galaxy install vbotka/ansible-freebsd-pf