Как постоянно обновлять iptables

Я пытаюсь перенаправить http-трафик на порт 8080 на том же компьютере, и у меня работают приведенные ниже правила iptables.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

Я пытаюсь выяснить, как сделать это изменение постоянным в случае перезагрузки системы.

Я использую сервер Ubuntu 11.10.


person hafichuk    schedule 17.02.2012    source источник
comment
askubuntu.com/questions/66890/   -  person azerafati    schedule 13.07.2016


Ответы (4)


Один из способов сделать это:

vim /etc/network/interfaces

Добавьте следующую строку вместе с вашими директивами lo:

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

Теперь запустите приведенную ниже команду

iptables-save > /etc/iptables-up.rules

Надеюсь, это поможет.

person vinod_garag    schedule 17.09.2012
comment
Тот, кто найдет это, должен рассмотреть гораздо лучший ответ о iptables-persistent от yomimono ниже. - person zakx; 27.05.2014
comment
Никогда не используйте его таким образом, что окно остается открытым хотя бы на мгновение, неправильное соединение может рассматриваться как ESTABLISHED. Интерфейс должен быть lo (петля) вместо eth0 и pre-up вместо post-up. - person poige; 06.09.2014
comment
Я получаю отказ в доступе при попытке записи в /etc даже в корневом режиме - person puk; 17.07.2015
comment
Согласитесь с Zakx и Poige, это один из многих подходов, но в нем нет ничего плохого. @Poige У меня были проблемы с предварительным запуском, если в файле iptables-up.rules есть какие-либо ошибки, поэтому я предложил пост-ап. - person vinod_garag; 03.02.2018

Ubuntu (и Debian) предлагают пакет iptables-persistent (Debian: http://packages.debian.org/wheezy/iptables-persistent , Ubuntu: http://packages.ubuntu.com/saucy/iptables-persistent), который делает именно то, что вам нужно. Под root или через sudo:

apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4

Если вы работаете с ip6tables, вы также захотите ip6tables-save > /etc/iptables/rules.v6.

Вы должны сохранить таблицы снова (iptables-save > /etc/iptables/rules.v4, ip6tables-save > /etc/iptables/rules.v6) после внесения любых изменений.

В более старых версиях (до iptables-0.5 и до Debian Wheezy) вам нужно будет записать в другой файл:

iptables-save > /etc/iptables/rules
person yomimono    schedule 11.10.2012
comment
В случае, если это поможет кому-то еще... мне потребовалось некоторое время, чтобы отследить, что мне действительно нужно сделать это: iptables-save › /etc/iptables/rules.v4 - person mdahlman; 01.07.2013
comment
Если вы также используете IPv6, может быть сложно убедиться, что правила попадают в нужное место. Вы можете запустить следующее, чтобы это произошло автоматически: invoke-rc.d iptables-persistent save - person Ted Pennings; 25.08.2013
comment
@mdahlman зависит от версии Debian/Ubuntu. Я считаю, что Debian ‹ 7 требует > /etc/iptables/rules, а 7+ требует > /etc/iptables/rules.v4 - person Wilfred Hughes; 25.11.2013
comment
@WilfredHughes ааа ... это очень интересно. yomimomo, если вы обновите свой ответ авторитетным объяснением того, какие версии Ubuntu нуждаются в том или ином варианте команды, вы станете героем. - person mdahlman; 27.11.2013
comment
Похоже, изменение было в iptables-0.5 из журнала изменений Ubuntu; changelogs.ubuntu.com/changelogs/ pool/universe/i/ , поэтому для всего, что после этого, потребуется rules.v4 . - person yomimono; 03.12.2013
comment
dpkg-reconfigure iptables-persistent, если вы хотите перезапустить и сохранить, не идеально, но быстро и грязно. - person depicus; 28.05.2014
comment
обратите внимание, что вы можете перезагрузить iptables без перезагрузки только с помощью команды service iptables-persistent restart - person Guillaume Vincent; 07.08.2014
comment
Просто для протокола, другой способ — запустить service iptables-persistent save. Этот и тот, который предложил @TedPennings, должны быть предпочтительным способом вместо прямой записи в файлы назначения. - person loshad vtapkah; 30.04.2016
comment
Вы можете установить значения iptables до установки пакета iptables-persistent. Когда вы установите пакет, он появится для сохранения текущих значений iptables. Так удобно. - person Menway; 15.02.2017

Можем ли мы сделать то же самое с rc.local, но выполнить следующие шаги

iptables-save > current_iptables_rules

Затем перейдите в /etc/rc.local и введите следующее

iptables-restore < current_iptables_rules

Разве это не приведет к тому же самому? Я мог что-то упустить.

person Todd    schedule 06.10.2012
comment
Да, это тоже должно работать. - person vinod_garag; 03.02.2018

Добавьте их в /etc/ufw/before.rules. Синтаксис немного отличается, но вы увидите, как он работает.

UFW — это внешний интерфейс брандмауэра Ubuntu для iptables. Возможно, вам потребуется включить UFW с помощью sudo ufw enable, но вы можете просто не устанавливать никаких правил внутри ufw.

person Chris    schedule 17.02.2012