Иногда возникает необходимость настроить iptables на удаленном хосте.
Часто правильные правила iptables могут быть получены с использованием метода насоса, и в таких случаях необходимо быть застрахованным.
Здесь я опишу, как настроить iptables так безболезненно, что в случае блокировки доступа к самому себе этот доступ может быть получен снова.
Идея такова: в cron мы записываем правило, которое в определенный момент времени сбрасывает правила iptables.
То есть, предположим, что я придумал цепочку правил и применил ее, и внезапно соединение с удаленным хостом внезапно прекратилось. Однако перед этим мы добавили в cron скрипт, который очистит все правила и доступ к удаленному серверу можно будет получить снова.
Важный!
Правила Iptables применяются сразу после исполнения.
Например, если вы введете:
$ iptables -A INPUT -p TCP --dport 22 -j DROP
Тогда соединение по ssh будет немедленно потеряно.
Создайте скрипт, который очистит все правила iptables:
# vim /etc/restore_iptables.conf
#!/bin/sh
IPT="/sbin/iptables"
# remove all rules
$IPT -F
$IPT -X
# allow all connections
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
Вам также необходимо сделать исполняемый скрипт:
# chmod +x /etc/restore_iptables.conf
Сценарий должен быть запущен сразу после запуска сетевых интерфейсов, в Debian достаточно добавить следующую строку:
# vim /etc/network/interfaces
auto lo
iface lo inet loopback
pre-up /etc/iptables.conf
Теперь добавьте правило в cron, чтобы запускать скрипт резервного копирования каждые пять минут, например:
# crontab -e
*/5 * * * * /etc/restore_iptables.conf
Теперь мы можем проверить новые правила.
Для этого создайте файл с правилами тестирования, например:
# vim /etc/test_iptables.conf
IPT="/sbin/iptables"
$IPT -F
$IPT -X
# we get a mistake and drop ssh connection
$IPT -A INPUT -p TCP --dport 22 -j DROP
$IPT -A OUTPUT -p TCP --sport 22 -j DROP
Запустить его:
# chmod +x /etc/test_iptables.conf
# /etc/test_iptables.conf
С такими правилами мы сразу же сбросим соединение по ssh. Однако мы все учли, достаточно подождать 5 минут, и вы можете восстановить соединение.
Убедившись, что все правила работают должным образом, вам нужно удалить или закомментировать правило в cron:
# crontab -e
#*/5 * * * * /etc/restore_iptables.conf
И скопируйте новый файл правил вместо нашей резервной копии:
# cat /etc/test_iptables.conf > /etc/restore_iptables.conf
Быть внимательным!