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