Я инициализирую свои правила iptables через /etc/network/if-pre-up.d/iptables
, используя iptables-restore. Это работает нормально, но я немного беспокоюсь о том, что произойдет, если этот сценарий по какой-то причине завершится неудачно (возможно, сохраненный файл iptables поврежден или что-то еще).
В случае неудачи сценария я бы хотел:
Есть ли хороший канонический способ сделать это? Переходя в нижнюю init
этап? - Я не делал этого в течение долгого времени, и я думаю, что многое в init изменилось за последние годы (?) - на какой этап мне следует перейти и будут ли по-прежнему работать сервер OpenSSH и мои сетевые интерфейсы?
Спасибо
Крис
(В Debian Lenny)
Может быть, вы могли бы сделать это, посмотрев код возврата iptables-restore, примерно так:
iptables-restore < /path/to/iptables.rules
if [ $? -ne 0 ]; then
iptables -P INPUT DROP
iptables -A INPUT -p tcp -i $INTERFACE --dport 22 -j ACCEPT
fi
таким образом, если ваши правила не загружаются, iptables отбрасывает все входящие соединения, кроме ssh.
Я никогда не пробовал этого, но на ум приходит другое решение - привязать внешние службы к внутреннему IP-адресу, который вообще не маршрутизируется, даже петля, вероятно, сработает. Затем в качестве последних правил в сохраненной конфигурации IP-таблиц настройте прозрачный прокси-сервер для локальной службы.
Если IP-таблицы не открываются, вы просто не подключаете свои сервисы. Если он появится, ваши услуги станут доступны.
Единственная система, которую вы исключите из этой конфигурации, - это SSH, таким образом, у вас есть внеполосное управление.
Конечно, все журналы вашей службы будут иметь неправильный IP-адрес источника. Я думаю, что это касается того углового случая.