Я хотел бы развернуть правила iptables «безопасным» способом, используя ansible, где для безопасности я думаю, что-то вроде Shorewall команда safe-restart
.
Итак, я ищу такой рабочий процесс:
Моя цель - не потерять контроль над моими машинами из-за неправильной конфигурации брандмауэра (которая может, например, блокировать SSH).
Это то что iptables-apply
делает. Из его man
страница в моем Debian:
iptables-apply попытается применить новый файл правил (как вывод iptables-save, прочитать iptables-restore) или запустить команду для настройки iptables, а затем спросит пользователя, в порядке ли изменения. Если новые правила iptables разорвут существующее соединение, пользователь не сможет ответить утвердительно. В этом случае сценарий откатывается к предыдущим рабочим правилам iptables по истечении тайм-аута.
Поскольку ansible не имеет агента, это означает, что потребуется открыть новое соединение (или повторно использовать существующий если настроен правильно) на хост, чтобы восстановить состояние.
Если на текущем шаге изменения в брандмауэре не позволят установить следующее соединение, очевидно, что нет никакого способа восстановить.
Таким образом, это означает, что вы должны поставить задачу тестирования-восстановления на самом хосте, который будет пытаться применить новые правила, а затем Подождите чтобы узнать, был ли успешен следующий шаг playbook (обычно вам нужен как минимум SSH-доступ, поэтому этап тестирования playbook может просто убить этот скрипт, прежде чем он восстановит предыдущий набор правил). Конечно, он также может выполнять некоторые самостоятельные тесты.
Резюме: создайте сценарий, который не только применяет правила, но и отменяет их, если эти правила вызовут регресс соединения.
Прямой подход с использованием iptables-apply
:
Найдите нестандартный способ перезагрузки хоста. Используйте брандмауэр, где сохранение состояния необязательно, например firewalld
Модуль Ansible. При первом тестировании спектакля запустите его с permanent: False
. При необходимости используйте консоль или перезагрузите хост, чтобы вернуть его. Убедившись, что это работает, переключитесь на permanent: True
.
Одна из альтернатив - временно запланировать откат правил брандмауэра в будущем, например, с помощью at
. У которого также есть модуль Ansible. Мне не нравится эта реализация, потому что запланированная команда - это просто сценарий оболочки, а не модуль, непосредственно проверяющий конфигурацию.