Jak ustawić te reguły iptables, aby były uruchamiane podczas uruchamiania?

20

Zazwyczaj uruchamiam reguły iptables przy każdym logowaniu. Z terminala typu I;

sudo sh firewall.sh

Konfigurując komputer mojej siostry, chcę zapewnić jej podstawową ochronę zapory. Nie będzie logować się jako administrator, tylko standardowe konto. Jak mogę uruchomić skrypt zapory ogniowej za każdym razem, gdy się loguje, bez konieczności wpisywania hasła?

Skrypt, który napisałem na komputer mojej siostry, zawiera;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Umieściłem go w jej folderze domowym jako firewall.sh i ustawiłem, aby był wykonywalny (kliknij plik prawym przyciskiem myszy i zaznacz opcję „zezwól na uruchamianie pliku jako programu” na karcie uprawnień).

Uruchamianie tego skryptu z terminala, ponieważ root działa dobrze.

Po wpisaniu;

sudo sh firewall.sh

Wpisałem się w terminalu

sudo iptables -L -v

i rozumiem

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

Jak mogę mieć ten skrypt uruchamiany automatycznie podczas logowania lub ewentualnie zapisać te reguły na stałe na komputerze mojej siostry? Czy możesz podać szczegółowy kod, ponieważ moje pierwsze próby zastosowania metody rc.local i iptables-save nie zakończyły się sukcesem. Przy każdym ponownym uruchomieniu wszystkie łańcuchy INPUT, OUTPUT i FORWARD są resetowane do AKCEPTACJI, a podczas pisania nie są wyświetlane żadne zasadysudo iptables -L -v

Mikelane
źródło
Prawie dwa lata później, ale ważny komentarz: upewnij się, że masz ip6tableszasady, jeśli któregoś dnia uzyskasz łączność z v6, ponieważ IPv6 jest obsługiwany przez, ip6tablesa nie iptables.
Thomas Ward

Odpowiedzi:

38

Możesz użyć tego iptables-persistentpakietu zamiast bałaganu ze skryptami rozruchowymi. Najpierw uruchom skrypt, aby skonfigurować reguły zapory. Po drugie, uruchom sudo apt-get install iptables-persistenti postępuj zgodnie z instrukcjami. Gdy pojawi się monit o zapisanie bieżących reguł, naciśnij „Tak” w obu pytaniach. Teraz, po ponownym uruchomieniu, twoje reguły iptables zostaną przywrócone.


UWAGA: Jeśli po tym zmienisz swoje reguły, będziesz musiał wykonać następujące polecenia po zmianach:

Aby zapisać swoje reguły iptables IPv4: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Aby zapisać swoje reguły IP66 ip6tables: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'

Thomas Ward
źródło
Dziękuję, że zadziałało. Jeśli chcę tymczasowo zmienić reguły, mogę po prostu uruchomić skrypt z terminala tak?
Mikelane
Tak, lub możesz bezpośrednio manipulować systemem iptables. JEDNAK, jeśli planujesz wytrwale korzystać z reguły tymczasowej, nowe reguły nie zostaną zapisane, chyba że wykonasz polecenia podane w mojej odpowiedzi.
Thomas Ward
Czy bieganie sudo dpkg-reconfigure iptables-persistentpo zmianie reguły jest złym pomysłem?
souravc
@souravc pytanie, na które odpowiada, brzmi „Dlaczego miałbyś chcieć?” Chodzi o to, że nie musisz i możesz po prostu przepisać (lub nadpisać ( pliki rules.v4lub rules.v6ręcznie ręcznie, aby zostały zindeksowane przy następnym uruchomieniu) lub natychmiast, jeśli uruchomisz iptables-restore < /etc/iptables/rules.v4lubip6tables-restore < /etc/iptables/rules.v6
Thomas Ward
2

Zakładając, że masz reguły zapory w:

/etc/iptables.up.rules

Być może najbardziej oczywistą odpowiedzią będzie utworzenie pliku o nazwie iptables w:

/etc/network/if-pre-up.d

z treścią:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

i uczynić go wykonywalnym przy użyciu

sudo chmod +x /etc/network/if-pre-up.d/iptables

W ten sposób przed aktywacją interfejsu sieciowego reguły zostaną załadowane.

Antonio J. de Oliveira
źródło
Dziękuję, czy to gdzieś rzuca log? To nie działa i podejrzewam, że jest to spowodowane tym, że mój serwer dns ma resolver jeszcze nie uruchomiony podczas uruchamiania mojego hosta.
Dimitri Kopriwa