Мне нужно подготовить серверы через SSH и в процессе настроить iptables
. Точнее, я хочу запустить следующие команды в таком порядке:
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 5000
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A INPUT -j DROP
iptables-save
Как мне этого добиться, не попав в локацию? Могу ли я применять их в пакетном режиме?
Я предполагаю, что причина, по которой вы думаете, что вас заблокируют, заключается в том, что вы установили правило DROP по умолчанию перед настройкой правил ACCEPT.
Выполните команды через одну команду оболочки, например:
bash -c 'iptables -F; iptables -P INPUT DROP; ...'
Вся строка будет отправлена и прочитана перед обработкой, а затем будут применены правила. Поскольку команды не требуют ввода, все они будут обработаны, и когда вы закончите, у вас все еще будет доступ.
Я бы, наверное, сохранил правила в новом файле, т.е. /etc/iptables/new.rules
и используйте команду iptables-apply
чтобы проверить их:
iptables-apply -t 180 new.rules
Таким образом, правила будут активны в течение 180 секунд (-t = время), но не будут сохранены, если вы не подтвердите, что соединение все еще работает должным образом. В случае отсутствия взаимодействия через 180 секунд правила будут возвращены в предыдущее состояние.
Я обычно так делаю:
1) Я делаю резервную копию старого файла конфигурации iptables:
cp / etc / sysconfig / iptables /etc/sysconfig/iptables.bak
2) Перед тем, как попробовать новые настройки, я выполняю эту команду, чтобы убедиться, что я могу подключиться обратно, если что-то в новых настройках заблокирует меня (в основном я заменяю старые правила через 10/15 минут):
echo «mv /etc/sysconfig/iptables.bak / etc / sysconfig / iptables && service iptables restart» | сейчас + 15мин
3) Теперь я могу смело изменять правила iptables. Если что-то пойдет не так, я могу снова подключиться через 15 минут.
Если вы хотите избежать ситуации, когда вы на мгновение заблокированы (и избежать риска сбоя настройки брандмауэра из-за ошибок), техническая альтернатива - избежать сброса таблицы для INPUT. Заменить iptables -F
или iptables -F INPUT
по
iptables -I INPUT 1 -p tcp -m tcp --dport 22 -j ACCEPT
while iptables -D 2 INPUT; do
:
done
for chain in $(iptables -L -n | awk '/^Chain/ && $2 != "INPUT" { print $2 }'); do
iptables -F "$chain"
done
Затем определите правила как обычно (просто -A для INPUT, но нет -I INPUT 1
пожалуйста) и в конце удалите правило безопасности подключения: iptables -D INPUT 1