Что делают люди, когда меняют правила брандмауэра, чтобы случайно не заблокировать себя?
Например, есть ли способ загрузить правила брандмауэра, чтобы они были активны только в течение некоторого периода тестирования, а затем вернуть правила брандмауэра к предыдущим настройкам?
Другой вариант - открыть сеанс экрана на сервере и выполнить задание в сеансе экрана, которое спит на несколько минут, а затем сбрасывает таблицы. После внесения изменений вы можете просто убить задание. Вы также можете просто попросить сценарий изменить политику INPUT на ACCEPT или что-то в этом роде.
Может быть немного удобнее cron, но идея та же. Я делаю то же самое с роутерами reload in 10
. Поэтому, если я заблокируюсь, маршрутизатор перезагрузится и восстановит конфигурацию до состояния, которое было до того, как я внес изменения.
я использую Firehol в качестве интерфейса к iptables. У Firehol есть действительно приятная функция, которая позволяет безопасно тестировать новый набор правил.
Когда вы запускаете команду firehol try
Firehol игнорирует HUP, делает резервную копию текущего набора правил, применяет новый набор правил и затем выдает пользователю подсказку, спрашивая, хотят ли они выполнить новый набор правил. Если вы не ответите в течение тридцати секунд, firehol восстанавливает предыдущий набор правил.
В идеале, конечно, всегда иметь консольный доступ, даже если он имитирует консольный доступ через другой интерфейс.
Если вы используете что-то, что использует службу iptables (например, /etc/init.d/iptables), которую вы можете включать и выключать, вы можете настроить простую задачу cron, чтобы отключать ее каждые 30 минут. Более общим решением было бы запускать через некоторый интервал следующее: Как: Linux очистить или удалить все правила iptables. Это можно сделать с помощью cronjob или просто запустив screen и выполнив цикл сна в bash, чтобы время от времени запускать этот небольшой скрипт.
Если вы экспериментируете с iptables и учитесь его использовать, на всякий случай ничто не сравнится с подключенным монитором.
Исходя из того, что сказал Рьюэлл. Вы можете создать задание cron, которое сбрасывает и перезагружает все ваши правила из файла конфигурации каждые 30 минут. Затем, когда вы тестируете, вы меняете правила напрямую с помощью команд и сохраняете их в файле конфигурации только тогда, когда уверены, что они работают.
Для наших удаленных серверов мы используем KVM over IP. Это позволяет нам иметь удаленную клавиатуру / мышь / дисплей, независимый от наших наборов правил iptables.
Я бы либо поставил на работу на несколько минут, чтобы перезагрузить предыдущий набор правил, хотя я думаю, что лучше было бы убедиться, что вы разрешаете доступ со своего IP-адреса в качестве одного из самых первых правил - если бы не первое правило. Таким образом, вы сможете вынуть его, когда он вам понравится.
Также стоит отметить, что если вы разрешаете родственные и установленные соединения (т.е. -m state --state RELATED,ESTABLISHED -j ACCEPT
) и вам удастся заблокировать доступ по SSH, любые существующие соединения должны быть сохранены - поэтому убедитесь, что вы проверили, можете ли вы войти по SSH снова, прежде чем выходить из существующего сеанса!
Как правило, я никогда не меняю политику моей цепочки INPUT на DENY. Вместо этого я добавляю последнее правило:
iptables -A INPUT -i <dev> -j REJECT
Если ваш скрипт умирает во время выполнения (скажем, вы работаете удаленно по плохой ссылке и отключаетесь) и вы установили политику DENY, вы можете заблокировать себя. Таким образом вы повысите шансы, что у вас будет хотя бы доступ в случае неудачи.
Вам по-прежнему необходимо убедиться, что ваши правила предоставляют достаточный доступ, чтобы последнее правило не загружало вас, но я думаю, что другие ответы достаточно хорошо охватывают это.
Чтобы быть более точным, чем некоторые другие ответы здесь. В итоге я сделал следующее:
Я создаю резервную копию моих текущих правил iptables:
sudo iptables-save > original-iptables.save
Я создал новую сессию с помощью tmux:
tmux
Я разделил сессию tmux на две панели, используя:
<C>-b %
В первой панели, которую я выполнил: (запустите это как пользователь root sudo su
)
sleep 5m && sudo iptables-restore original-iptables.save
Это сбросит ваши правила iptables через 5 минут. Эта команда фактически гарантирует, что вы не сможете случайно заблокировать себя на своем сервере. Вы можете использовать другую панель, чтобы опробовать любые новые правила. (переключение панелей с помощью <C>-b o
) Если новые правила работают, вы всегда можете отменить исходную команду с помощью -c, чтобы новые правила оставались активными и не сбрасывались.
Вы можете найти красивую и простую шпаргалку по tmux Вот.
В этом случае мне нравится использовать CSF который является менеджером iptables, но намного проще, здесь вы можете указать входящие и исходящие порты, а также диапазоны IP. Он также имеет тестирование Пример, где он включил правила на 5 минут, после этого правила исчезнут, таким образом вы можете быть уверены, что даже если вас заблокируют, через 5 минут вы сможете снова войти.
Надеюсь это поможет!