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

Безопасный способ развертывания iptables с помощью ansible

Я хотел бы развернуть правила iptables «безопасным» способом, используя ansible, где для безопасности я думаю, что-то вроде Shorewall команда safe-restart.

Итак, я ищу такой рабочий процесс:

  1. установить новые правила;
  2. подождите 30 секунд для подтверждения от пользователя (или, в нашем случае, от машины, выполняющей playbook);
  3. если пользователь подтверждает, сделайте их постоянными, в противном случае восстановите старые правила.

Моя цель - не потерять контроль над моими машинами из-за неправильной конфигурации брандмауэра (которая может, например, блокировать SSH).

Это то что iptables-apply делает. Из его man страница в моем Debian:

iptables-apply попытается применить новый файл правил (как вывод iptables-save, прочитать iptables-restore) или запустить команду для настройки iptables, а затем спросит пользователя, в порядке ли изменения. Если новые правила iptables разорвут существующее соединение, пользователь не сможет ответить утвердительно. В этом случае сценарий откатывается к предыдущим рабочим правилам iptables по истечении тайм-аута.

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

Если на текущем шаге изменения в брандмауэре не позволят установить следующее соединение, очевидно, что нет никакого способа восстановить.

Таким образом, это означает, что вы должны поставить задачу тестирования-восстановления на самом хосте, который будет пытаться применить новые правила, а затем Подождите чтобы узнать, был ли успешен следующий шаг playbook (обычно вам нужен как минимум SSH-доступ, поэтому этап тестирования playbook может просто убить этот скрипт, прежде чем он восстановит предыдущий набор правил). Конечно, он также может выполнять некоторые самостоятельные тесты.

Резюме: создайте сценарий, который не только применяет правила, но и отменяет их, если эти правила вызовут регресс соединения.

Прямой подход с использованием iptables-apply:

  1. Запустите его отдельно (с экраном или tmux или чем-то еще) с новым набором правил
  2. Убейте его на следующем этапе воспроизведения, прежде чем он откатит брандмауэр до предыдущего набора правил

Найдите нестандартный способ перезагрузки хоста. Используйте брандмауэр, где сохранение состояния необязательно, например firewalld Модуль Ansible. При первом тестировании спектакля запустите его с permanent: False. При необходимости используйте консоль или перезагрузите хост, чтобы вернуть его. Убедившись, что это работает, переключитесь на permanent: True.

Одна из альтернатив - временно запланировать откат правил брандмауэра в будущем, например, с помощью at. У которого также есть модуль Ansible. Мне не нравится эта реализация, потому что запланированная команда - это просто сценарий оболочки, а не модуль, непосредственно проверяющий конфигурацию.