Общая информация
Содержание
Общая информация#
Создание новых файлов зон#
Делаем по аналогии с существующими в каталоге роли (roles/setup_firewalld).
“Зоны” firewalld в нашем случае соответствуют источникам трафика,
сами источники — IP адреса хостов и сети — задаём с помощью ipsets (тоже
в файлах настроек firewalld в каталоге роли).
ВАЖНО: каждый IP адрес должен попадать только в одну зону. Если составить правила (зоны) так, чтобы один адрес попадал сразу под два правила (две зоны / два источника) — срабатывать будет только одно из двух правил.
Разрешение на выполнение / killswitch#
Роль / плейбуки проверяют, разрешено ли им выполнение на данном хосте.
Переменная inv_firewalld_allow_role установлена в значение no по умолчанию
для всех хостов. Соответственно, плейбуки будут выполняться только на хостах,
для которых значение данной переменной специально установлено в yes.
Недоработки / особенности, обратить внимание#
Attention
Если добавить новую зону в настройки, но не добавить соответствующий файл в
files/zonesилиtemplates/zones, плейбук не выдаст ошибку, будет успешно выполнен. Разумеется, новая зона не появится на хостах (файла не было и нет).Для полной очистки директории
/etc/firewalldна хостах (до загрузки новой конфигурации) можно добавить-e "firewalld_clear_etc_directory=True"к вызову плейбука, либо поменять соответствующую переменную в самом плейбуке. Сейчас поведение по умолчанию — не очищать директорию, только изменять существующие и добавлять новые файлы. М. б. это изменится в будущем.
FirewallD и Docker#
Насколько вижу, сосуществуют ок (но не идеально / не без проблем!). Демон докера во время старта создаёт все нужные ему таблицы / правила фаерволла — как при остановленном, так и при запущенном FirewallD. Правила докера и FirewallD не конфликтуют, работают параллельно (используют таблицы и chains с разными именами).
Если остановить FirewallD — насколько вижу — из nft ruleset исчезают
и правила, созданные докером. Перезапуск службы докера заново создаёт нужные
правила. Вывод: не нужно останавливать FirewallD без крайней
необходимости. Если остановил — перезапусти docker.
Docker (при запуске/перезапуске) присваивает зону trusted (т.е. можно всё)
своим интерфейсам dockerX и docker_gwbridge (ограничения затем настраивает
отдельными правилами iptables/nftables.
Как проверить наличие правил докера — есть здесь: Проверка наличия таблиц докера
На крайний случай#
Подготовлены плейбуки:
playbook/maintenance/firewalld/allow_all_traffic_polite.ymlplaybook/maintenance/firewalld/allow_all_traffic_FORCED.ymlplaybook/maintenance/firewalld/disable_firewalld_polite.ymlplaybook/maintenance/firewalld/disable_firewalld_FORCED.yml
allow_all_traffic — разрешает весь трафик (или большинство), установив для
интерфейса ens192 зону trusted (можно всё). Настройка только runtime,
после firewall-cmd --reload или перезагрузки хоста снова будет активна
рабочая конфигурация FirewallD.
disable_firewalld — отключает и останавливает службу FirewallD.
Вариант polite “уважает” разрешение inv_firewalld_allow_role,
вариант FORCED применяется к любому хосту.