¿Por qué el servicio persistente Iptables no guarda mis cambios?

18

Seguí este tutorial para configurar las reglas de IP en ubuntu 12.04. Todo funcionó bien en la configuración, pero ahora he realizado cambios en el firewall que no persisten al reiniciar. No entiendo por qué es eso. Aquí hay una demostración de cómo estoy usando iptables-persistent. ¿Qué estoy haciendo mal?

$ 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
bernie2436
fuente
Me doy cuenta de que la iptables -D INPUTregla no está dentro sudo¿Estás seguro de que en realidad está reportando un éxito? ¿Cambia el comportamiento si lo ejecutas dentro sudo?
Bratchley

Respuestas:

41

iptables-persistentno funciona de esa manera Reiniciar el iptables-persistent"servicio" no captura el estado actual de las tablas ip y lo guarda; todo lo que hace es restablecer las reglas de iptables que se guardaron la última vez que se configuró el paquete.

Para configurar iptables-persistent, debe informarle sobre su conjunto de reglas actual de iptables.

Una forma de lograrlo es la siguiente:

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

O, de manera equivalente, el iptables-persistentpaquete también proporciona lo siguiente:

dpkg-reconfigure iptables-persistent

(Deberá responder que sí a las preguntas sobre si guardar las reglas).

Después de eso, la próxima vez que iptables-persistentse inicie / reinicie, se cargarán los conjuntos de reglas de iptables que espera.

Steven Monday
fuente
9

Una manera muy simple de guardar las reglas actuales de iptables es usar el comando:

sudo service netfilter-persistent save

El uso de lo anterior, que funciona al menos en Ubuntu después de instalar el netfilter-persistent(y iptables-persistentel paquete), no hay necesidad de ejecutar manualmente los comandos de iptables o reconfigurar el paquete (como se sugiere en la respuesta aceptada incluso por encima).

OpenITeX
fuente
Es sudo service netfilter-persistent saveo sudo service netfilter-persistent save .? (Punto al final.)
Gracias por señalar que, el comando correcto es sin el punto al final de la línea. Corregido la respuesta en consecuencia.
OpenITeX el
3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Eso no es lo que DROPsignifica o hace. De man iptables:

... los valores especiales ACCEPT, DROP, QUEUE o RETURN. ACEPTAR significa dejar pasar el paquete. DROP significa dejar caer el paquete al suelo. COLA significa ...

Entonces, lo que has hecho es agregar una nueva regla. Puede reemplazar efectivamente cualquier cantidad de otras reglas, pero esas reglas aún existen.

Al verificar cosas como esta (su iptables -L salida), lo alimentaría en grep "string unique to this rule"lugar de usar sus ojos. Es más fácil y rápido de hacer, y menos propenso a errores.

iptables -L | grep "some unique string"

Si desea eliminar una regla, use el -Dinterruptor; la página del manual describe dos formas de esto:

-D, - eliminar especificación de regla de cadena

-D, --eliminar el rulenum de la cadena

Eliminar una o más reglas de la cadena seleccionada. Hay dos versiones de este comando: la regla se puede especificar como un número en la cadena (comenzando en 1 para la primera regla) o una regla para que coincida.

encerrada dorada
fuente
lo siento, eso no estaba claro. Estoy usando la opción -D para DROP una regla. Vea el cambio anterior
bernie2436
3
-Dsignifica "eliminar", no "DROP". Usar el término "DROP" para referirse a cualquier cosa que no sea un objetivo de salto cuando se habla iptableses confuso.
Bratchley
1

Como explicó @ steven-monday , puede guardar su conjunto de reglas usted mismo en el directorio apropiado (a saber:/etc/iptables/rules.v{4,6} .

Sin embargo, @OpenITeX tiene razón: llamando a la saveacción deservice netfilter-persistent es mejor.

A partir de hoy (en 18.10), iptables-save está integrado, pero noiptables-persistent está instalado. Por lo tanto, el directorio de complementos llamado por está vacío y el servicio imprime que el conjunto de reglas se guardó, mientras que no.service netfilter-persistent

TLDR: instalar iptables-persistenty verificar que el directorio de complementos/usr/share/netfilter-persistent/plugins.d contenga complementos.


Así es como lo descubrí:

$ 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 $?
    ;;

Luego verifique el /usr/sbin/netfilter-persistentguión, observe que invoca guiones externos:

$ 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}
    ;;

Entonces noté que /usr/share/netfilter-persistent/plugins.destaba vacío.

Aif
fuente
1

Instalar iptables-persistent:

sudo apt install iptables-persistent

guardar reglas después de hacer los cambios deseados:

sudo netfilter-persistent save
Zack A
fuente