Debian „ignoruje” /etc/network/if-pre-up.d/iptables

12

Chcę, aby moje reguły iptables były automatycznie ładowane podczas uruchamiania. Według wiki na Debianie można to zrobić, umieszczając skrypt o nazwie iptables w /etc/network/if-pre-up.d/ Tak zrobiłem, tak to wygląda:

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

Ten skrypt działa: jeśli uruchomię go jako root, moje reguły zapory sieciowej zostaną zastosowane. Ale przy ponownym uruchomieniu nie ma reguł zapory. Co ja robię źle?

Na życzenie: / etc / network / interfaces (nie dotknąłem tego pliku)

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
źródło
Jak konfigurujesz swoje interfejsy? Czy możesz dodać plik / etc / network / interfaces?
bayindirh
Należy pamiętać, że /etc/network/if-pre-up.d/nie działa już w Ubuntu 18.04, patrz serverfault.com/questions/914493/…
BurninLeo

Odpowiedzi:

6

Użyj iptables-persistentpakietu do tego zadania.

Definiować reguły w /etc/iptables/rules.4a /etc/iptables/rules.6i nie zapomnij, aby aktywować usługę (z użyciem update-rc.d, chkconfigalbo ulubionym narzędziem.

dawud
źródło
Podczas instalacji pakietu debconf pyta, czy chcesz zapisać bieżące reguły. Jeśli więc masz już zdefiniowane reguły, możesz po prostu zainstalować pakiet. Jeśli chcesz je później zmienić, po prostu dpkg-reconfigure iptables-persistent.
Braiam
10

Ten problem może być związany z bitami uprawnień skryptu. Jaka jest wydajność tego polecenia? Czy zawiera twój plik?

run-parts --test /etc/network/if-pre-up.d
eppesuig
źródło
run-parts --test /etc/network/if-pre-up.d daje /etc/network/if-pre-up.d/iptables, co wydaje mi się poprawnym wyjściem?
Cheiron
1
ok, więc prawdopodobnie powinieneś sprawdzić, kiedy twój skrypt jest uruchomiony. Dodaj pierwszą taką linię (date; set; echo) >> /tmp/iptables-cmd.log, aby zobaczyć, kiedy zostanie wywołana. Zawsze również drukuję środowisko, aby sprawdzić, czy przesłano tam argument. Możesz zdecydować się na uruchomienie iptables dopiero po uruchomieniu ostatniego interfejsu eth *, zamiast uruchamiać go za każdym razem, gdy dodawany jest interfejs.
eppesuig
3
Po opublikowaniu wiadomości interfaceswidzę, że nie używasz ifupdown, ale menedżera sieci. Dlatego twój skrypt nie jest wywoływany. Sprawdź ten dokument: ubuntuforums.org/showthread.php?t=1084308
eppesuig
Cóż, to wiele wyjaśnia. Myślę, że teraz wybieram odpowiedź dawud, która wydaje się działać w obie strony.
Cheiron
3
run-parts jest nieco wybredny co do nazwy skryptów, a kropka w nazwie pliku spowodowała, że ​​skrypt został zignorowany podczas uruchamiania w moim przypadku.
alexm
0

Dlaczego nie zrobić tego w prosty sposób?

1 - utwórz reguły iptables

2 - uruchom „sudo apt-get install iptables-persistent”, zapyta cię, czy chcesz zapisać reguły i przywrócić je po uruchomieniu.

3- Jesteś GOTOWANY

alex
źródło
1
Duplikat przyjętej odpowiedzi
Cheiron