Come è possibile impostare queste regole iptables per l'esecuzione all'avvio


20

Di solito eseguo le mie regole iptables ogni volta che eseguo l'accesso. Dal terminale I digito;

sudo sh firewall.sh

Configurando il computer di mia sorella, voglio darle una protezione di base per il firewall. Non accederà come amministratore, solo un account standard. Come posso eseguire uno script firewall ogni volta che accede senza che sia necessario digitare alcuna password?

La sceneggiatura che ho scritto per il computer di mia sorella contiene;

#!/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

L'ho inserito nella sua cartella home come firewall.sh e l'ho impostato come eseguibile (fare clic con il tasto destro sul file e selezionare l'opzione "consenti l'esecuzione di file come programma" nella scheda delle autorizzazioni).

L'esecuzione di questo script dal terminale come root funziona bene.

Dopo aver digitato;

sudo sh firewall.sh

Ho digitato nel terminale

sudo iptables -L -v

e ho capito

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

Come posso fare in modo che questo script venga eseguito automaticamente all'accesso o eventualmente salvare queste regole in modo permanente per il computer delle mie sorelle? Potresti fornire qualche codice dettagliato, poiché i miei primi tentativi di metodo rc.local e iptables-save non hanno avuto molto successo. Ad ogni riavvio, tutte le catene INPUT, OUTPUT e FORWARD vengono reimpostate su ACCETTA, senza criteri elencati quando scrivosudo iptables -L -v


Quasi due anni dopo, ma un commento importante: assicurati di avere delle ip6tablesregole se ottieni la connettività v6 un giorno, poiché IPv6 è gestito ip6tablese no iptables.
Thomas Ward

Risposte:


38

È possibile che si desideri utilizzare il iptables-persistentpacchetto anziché pasticciare con gli script di avvio. Innanzitutto, esegui lo script per impostare le regole del firewall. In secondo luogo, esegui sudo apt-get install iptables-persistente segui le istruzioni. Quando viene richiesto di salvare le regole correnti, premere "Sì" in entrambi i messaggi. Ora, al riavvio, verranno ripristinate le regole di iptables.


NOTA: se si modificano le regole dopo questo, sarà necessario eseguire i seguenti comandi dopo le modifiche:

Per salvare le regole iptav IPv4: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Per salvare le regole IPv6 ip6tables: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


Grazie, ha funzionato. Se voglio modificare temporaneamente le regole, posso semplicemente eseguire uno script dal terminale sì?
Mikelane,

Sì, oppure puoi manipolare direttamente il sistema iptables direttamente. TUTTAVIA, se prevedi di utilizzare la regola temporanea in modo persistente, non è garantito il salvataggio delle nuove regole se non esegui i comandi che dichiaro nella mia risposta.
Thomas Ward

È una cattiva idea eseguire sudo dpkg-reconfigure iptables-persistentdopo aver modificato una regola.
souravc,

@souravc la domanda che risponde a questa domanda è "Perché dovresti o vuoi farlo?" L'idea è che non dovresti e puoi semplicemente riscrivere (o sovrascrivere (i file rules.v4o rules.v6manualmente in modo che vengano indicizzati al prossimo avvio, o immediatamente se esegui iptables-restore < /etc/iptables/rules.v4oip6tables-restore < /etc/iptables/rules.v6
Thomas Ward

2

Supponendo che tu abbia le regole del firewall in:

/etc/iptables.up.rules

Forse la risposta più ovvia sarà quella di creare un file chiamato iptables in:

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

con il contenuto:

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

e renderlo eseguibile usando

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

In questo modo prima che venga attivata l'interfaccia di rete verranno caricate le regole.


Grazie, lancia log da qualche parte? Questo non funziona e sospetto che ciò sia dovuto al fatto che il mio server DNS utilizzato ha un resolver non ancora avviato all'avvio del mio host.
Dimitri Kopriwa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.