Debian игнорирует /etc/network/if-pre-up.d/iptables

12

Я хочу, чтобы мои правила iptables автоматически загружались при запуске. Согласно вики на Debian это можно сделать, поместив скрипт с именем iptables в /etc/network/if-pre-up.d/ Итак, я так и сделал, это выглядит так:

cat /etc/network/if-pre-up.d/iptables 
#!/bin/sh
/sbin/iptables-restore < /etc/firewall/iptables.rules
/sbin/ip6tables-restore < /etc/firewall/ip6tables.rules

Этот скрипт работает: если я запускаю его как root, применяются правила брандмауэра. Но при перезагрузке нет правил брандмауэра. Что я делаю неправильно?

По запросу: / etc / network / interfaces (я не трогал этот файл)

user@DebianVPS:~$ cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
Cheiron
источник
Как вы настраиваете свои интерфейсы? Можете ли вы добавить файл / etc / network / interfaces?
Байиндирх
Обратите внимание, что /etc/network/if-pre-up.d/больше не работает в Ubuntu 18.04, см. Serverfault.com/questions/914493/…
BurninLeo

Ответы:

6

Используйте iptables-persistentпакет для этой задачи.

Определите свои правила в /etc/iptables/rules.4и /etc/iptables/rules.6и не забудьте активировать сервис (используя update-rc.d, chkconfigили ваш любимый инструмент.

Дауд
источник
При установке пакета debconf спросит вас, хотите ли вы сохранить текущие правила. Итак, если у вас уже определены правила, вы можете просто установить пакет. Если вы хотите изменить их позже, просто dpkg-reconfigure iptables-persistent.
Брайам
10

Эта проблема может быть связана с битами прав доступа вашего скрипта. Каков вывод этой команды? Это включает в себя ваш файл?

run-parts --test /etc/network/if-pre-up.d
eppesuig
источник
run-parts --test /etc/network/if-pre-up.d выдает /etc/network/if-pre-up.d/iptables, что мне кажется правильным выводом?
Cheiron
1
Итак, вы, вероятно, должны проверить, когда ваш скрипт запущен. Добавьте первую строку, например (date; set; echo) >> /tmp/iptables-cmd.log, так, чтобы вы увидели, когда она вызывается. Я всегда также печатаю окружение, чтобы проверить любой аргумент, переданный туда. Вы можете решить запускать свои iptables только после запуска последнего интерфейса eth * вместо того, чтобы запускать его каждый раз, когда добавляется интерфейс.
eppesuig
3
Теперь, когда вы разместили свой аккаунт, interfacesя вижу, что вы используете не ifupdown, а сетевой менеджер. Вот почему ваш скрипт не называется. Пожалуйста, проверьте этот документ: ubuntuforums.org/showthread.php?t=1084308
eppesuig
Ну, это многое объясняет. Я думаю, что сейчас я просто отвечаю Дауду, который, кажется, работает в любом случае.
Cheiron
3
run-parts немного требователен к имени сценариев, и наличие точки в имени файла приводило к игнорированию сценария при запуске в моем случае.
13
0

Почему бы не сделать это простым способом?

1 - создайте свои правила iptables

2 - запустите «sudo apt-get install iptables-persistent», он спросит вас, хотите ли вы сохранить правила и восстановить их после загрузки.

3- ВЫ СДЕЛАНЫ

Алекс
источник
1
Дубликат принятого ответа
Cheiron