Как сделать определенный набор правил iptables постоянным?

42

Существует ли «наилучшая практика» или стандарт, позволяющий сделать несколько правил iptables постоянными? Я имею в виду: автоматически применяется после перезагрузки системы?

Я использую VPS с Ubuntu Server 10.04 LTS (Lucid Lynx).

Спасибо.

БОЛЬШОЕ РЕДАКТИРОВАНИЕ: Я не хочу, чтобы ЛЮБОЕ правило сохранялось (как iptables-persistentпакет). Я хочу, чтобы только мой собственный набор был перезагружен ... если другие правила в конечном итоге добавляются при запуске iptables, их следует отбросить ...

Дж. Бруни
источник

Ответы:

52

Самый простой способ - использовать iptables-save и iptables-restore, чтобы сохранить определенные в настоящее время правила iptables в файл и (повторно) загрузить их (например, после перезагрузки).

Так, например, вы бы запустить

sudo iptables-save | sudo tee /etc/iptables.conf

чтобы сохранить текущие правила iptables, /etc/iptables.confа затем вставить эти строки в /etc/rc.local:

# Load iptables rules from this file
iptables-restore < /etc/iptables.conf
Риккардо Мурри
источник
3
+1 Ваш ответ идеально подходит для моего первоначального вопроса. Это также заставило меня понять, чего я действительно хочу, поэтому мне пришлось изменить вопрос на «Как я могу сделать правила iptables постоянными?» на "Как я могу сделать определенный набор правил iptables постоянным?"
Дж. Бруни
Если вы можете, пожалуйста, немного отредактируйте свой ответ, чтобы отразить изменение в вопросе ... Я буду рад принять его! Мне нужно использовать iptables-saveодин раз, и перезагрузить всегда (iptables-restore в /etc/rc.local звучит хорошо).
Дж. Бруни
1
Если вы получаете, permission deniedкогда вы пытаетесь использовать, >то этот ответ переполнения стека будет полезен.
Дэвид Туит
2
Используйте sudo sh -c "iptables-save > /etc/iptables.conf"вместоsudo iptables-save > /etc/iptables.conf
Раджат Гупта
32

Быстрое обновление к этому, поскольку вы могли бы использовать 12.04 сейчас, и все стало лучше.

iptables-persistentПакет в настоящее время решает эту проблему. Установить,

sudo apt-get install iptables-persistent

Правила, определенные при установке пакета, сохраняются и используются при каждой последующей загрузке. Новые загруженные правила сбрасываются при перезагрузке.

Файл конфигурации, если вам нужно изменить их (после iptables-persistentустановки), это /etc/iptables/rules.v4или /etc/iptables/rules.v6для ipv4 и ipv6 iptables соответственно.

user172020
источник
Если вы вносите изменения в /etc/iptables/rules.v4, как вы применяете их [официально]? В настоящее время я занимаюсьsudo iptables-restore < /etc/iptables/rules.v4
Бруно Броноски
24

Лучше /etc/rc.localдобавить строку /etc/network/interfacesпосле сохранения правил iptable'а, например так:

post-up iptables-restore < /etc/iptables.up.rules

или это то же самое, чтобы поместить файл внутрь /etc/network/if-down.d/или /etc/network/if-post-down.d/или /etc/network/if-pre-up.d/или или /etc/network/if-up.d/.

Крекер
источник
1
@Kreker: пожалуйста, уточните, как ваш подход лучше, чем выполнение сценария восстановления из rc.local? другой подход не работает в некоторых случаях?
Раджат Гупта
2
Добавление его в конфигурацию сети приводит к его повторной загрузке после выполнения команды «перезапуск службы сети». Это не ограничивается запусками системы.
К. Дариен Фрихарт
4
Зачем один пост-up iptables-restore, когда интерфейс отключается?
alphadogg