Perché il servizio persistente di Iptables non salva le mie modifiche?


18

Ho seguito questo tutorial per impostare le regole IP su Ubuntu 12.04. Tutto ha funzionato bene durante l'installazione - ma ora ho apportato modifiche al firewall che non persistono al riavvio. Non capisco perché. Ecco una dimostrazione di come sto usando iptables-persistent. Che cosa sto facendo di sbagliato?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back

Sto notando che la iptables -D INPUTregola non è in sudovigore, sei sicuro che stia effettivamente segnalando un successo? Il comportamento cambia se lo esegui all'interno sudo?
Bratchley,

Risposte:


41

iptables-persistentnon funziona in questo modo. Il riavvio del iptables-persistent"servizio" non acquisisce lo stato corrente degli iptables e lo salva; tutto ciò che fa è ripristinare le regole di iptables salvate all'ultima configurazione del pacchetto.

Per configurare iptables-persistent, devi dirlo sul tuo attuale set di regole iptables.

Un modo per ottenere ciò è il seguente:

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

O, equivalentemente, il iptables-persistentpacchetto fornisce anche quanto segue:

dpkg-reconfigure iptables-persistent

(Dovrai rispondere sì alle domande sulla possibilità di salvare le regole.)

Successivamente, al successivo iptables-persistentavvio / riavvio, verranno caricati i set di regole iptables previsti.


9

Un modo molto semplice per salvare le attuali regole di iptables è usare il comando:

sudo service netfilter-persistent save

Utilizzando quanto sopra, che funziona almeno in Ubuntu dopo aver installato il pacchetto netfilter-persistent(e iptables-persistent), non è necessario eseguire manualmente i comandi iptables o riconfigurare il pacchetto (come suggerito anche dalla risposta accettata sopra).


È sudo service netfilter-persistent saveo sudo service netfilter-persistent save .? (Punto alla fine.)

Grazie per averlo notato, il comando corretto è senza il punto alla fine della riga. Corretta la risposta di conseguenza.
OpenITeX,

3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Non è ciò che DROPsignifica o fa. Da man iptables:

... i valori speciali ACCEPT, DROP, QUEUE o RETURN. ACCETTARE significa far passare il pacchetto. DROP significa far cadere il pacchetto sul pavimento. CODA significa ...

Quindi quello che hai fatto è aggiungere una nuova regola. Può effettivamente sostituire qualsiasi numero di altre regole, ma tali regole esistono ancora.

Quando controlli cose come questa (la tua iptables -Luscita), le darei da mangiare grep "string unique to this rule"invece di usare i tuoi occhi. È più facile e veloce da fare e meno soggetto a errori.

iptables -L | grep "some unique string"

Se si desidera eliminare una regola, utilizzare l' -Dopzione; la pagina man descrive due forme di questo:

-D, --elimina le specifiche della regola della catena

-D, --delete rulenum a catena

Elimina una o più regole dalla catena selezionata. Esistono due versioni di questo comando: la regola può essere specificata come numero nella catena (a partire da 1 per la prima regola) o come regola da abbinare.


scusa non era chiaro. Sto usando l'opzione -D per DROP una regola. Vedi la modifica sopra
bernie2436,

3
-Dsta per "elimina" non "GOCCIA" Usare il termine "GOCCIA" per indicare qualcosa di diverso da un obiettivo di salto quando parlare iptablesè confuso da morire.
Bratchley,

1

Come spiegato da @ steven-lunedì , puoi salvare il tuo set di regole nella directory corretta (vale a dire:) /etc/iptables/rules.v{4,6}.

Tuttavia, @OpenITeX ha ragione: chiamare l' saveazione di service netfilter-persistentè meglio.

Ad oggi (nel 18.10), iptables-save è integrato, ma noniptables-persistent è installato. Quindi, la directory del plugin chiamata da è vuota e il servizio stampa che il set di regole è stato salvato, mentre non lo era.service netfilter-persistent

TLDR: installa iptables-persistente verifica che la directory dei plugin /usr/share/netfilter-persistent/plugins.dcontenga plugin.


Ecco come l'ho capito:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

Quindi controlla lo /usr/sbin/netfilter-persistentscript, nota che invoca script esterni:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

Poi ho notato che /usr/share/netfilter-persistent/plugins.dera vuoto.


1

Installa iptables-persistent:

sudo apt install iptables-persistent

salva le regole dopo aver apportato le modifiche desiderate:

sudo netfilter-persistent save
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.