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

Настроить iptables через SSH без блокировки?

Мне нужно подготовить серверы через 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