Pourquoi le service persistant Iptables n'enregistre-t-il pas mes modifications?


18

J'ai suivi ce tutoriel pour configurer les règles IP sur Ubuntu 12.04. Tout a bien fonctionné lors de la configuration - mais maintenant, j'ai apporté des modifications au pare-feu qui ne persistent pas au redémarrage. Je ne comprends pas pourquoi. Voici une démonstration de la façon dont j'utilise iptables-persistent. Qu'est-ce que je fais 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

Je remarque que la iptables -D INPUTrègle n'est pas là. sudoÊtes-vous sûr qu'elle signale un succès? Le comportement change-t-il si vous l'exécutez à l'intérieur sudo?
Bratchley

Réponses:


41

iptables-persistentne fonctionne pas de cette façon. Le redémarrage du iptables-persistent"service" ne capture pas l'état actuel des iptables et ne le sauvegarde pas; il ne fait que rétablir les règles iptables qui ont été enregistrées lors de la dernière configuration du package.

Pour configurer iptables-persistent, vous devez lui parler de votre ensemble de règles iptables actuel.

Une façon d'y parvenir est la suivante:

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

Ou, de manière équivalente, le iptables-persistentpackage fournit également les éléments suivants:

dpkg-reconfigure iptables-persistent

(Vous devrez répondre oui aux questions sur la sauvegarde des règles.)

Après cela, au prochain iptables-persistentdémarrage / redémarrage, les règles iptables que vous attendez seront chargées.


9

Un moyen très simple de sauvegarder les règles actuelles d'iptables est d'utiliser la commande:

sudo service netfilter-persistent save

En utilisant ce qui précède, qui fonctionne au moins dans Ubuntu après l'installation du package netfilter-persistent(et iptables-persistent), il n'est pas nécessaire d'exécuter manuellement les commandes iptables ou de reconfigurer le package (comme le suggère même la réponse acceptée ci-dessus).


C'est sudo service netfilter-persistent saveou sudo service netfilter-persistent save .? (Point à la fin.)

Merci de noter que la commande correcte est sans le point à la fin de la ligne. Correction de la réponse en conséquence.
OpenITeX

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

Ce n'est pas ce que DROPsignifie ou fait. De man iptables:

... les valeurs spéciales ACCEPT, DROP, QUEUE ou RETURN. ACCEPTER signifie laisser passer le paquet. DROP signifie laisser tomber le paquet sur le sol. QUEUE signifie ...

Vous avez donc ajouté une nouvelle règle. Il peut effectivement remplacer n'importe quel nombre d'autres règles, mais ces règles existent toujours.

En vérifiant des trucs comme ça (votre iptables -Lsortie), je le nourrirais grep "string unique to this rule"plutôt que d'utiliser vos yeux. C'est plus facile et plus rapide à faire, et moins sujet aux erreurs.

iptables -L | grep "some unique string"

Si vous souhaitez supprimer une règle, utilisez le -Dcommutateur; la page de manuel décrit deux formes de ceci:

-D, --delete chaîne règle-spécification

-D, - supprimer la chaîne rulenum

Supprimez une ou plusieurs règles de la chaîne sélectionnée. Il existe deux versions de cette commande: la règle peut être spécifiée sous la forme d'un nombre dans la chaîne (commençant à 1 pour la première règle) ou une règle à faire correspondre.


désolé, ce n'était pas clair. J'utilise l'option -D pour SUPPRIMER une règle. Voir le changement ci
bernie2436

3
-Dsignifie «supprimer» et non «DROP». Utiliser le terme «DROP» pour signifier autre chose qu'une cible de saut lorsque l'on parle iptablesest déroutant.
Bratchley

1

Comme expliqué par @ steven-monday , vous pouvez enregistrer vous-même votre ensemble de règles dans le répertoire approprié (à savoir:) /etc/iptables/rules.v{4,6}.

Cependant, @OpenITeX a raison: appeler l' saveaction de service netfilter-persistentest mieux.

À ce jour (en 18.10), iptables-save est intégré, mais iptables-persistentn'est pas installé. Par conséquent, le répertoire du plugin appelé par service netfilter-persistentest vide et le service affiche que l'ensemble de règles a été enregistré, alors qu'il ne l'était pas.

TLDR: installez iptables-persistentet vérifiez que le répertoire /usr/share/netfilter-persistent/plugins.ddes plugins contient des plugins.


Voici comment j'ai compris cela:

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

Vérifiez ensuite le /usr/sbin/netfilter-persistent script, notez qu'il appelle des scripts externes:

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

Puis j'ai remarqué que /usr/share/netfilter-persistent/plugins.dc'était vide.


1

Installez iptables-persistent:

sudo apt install iptables-persistent

enregistrer les règles après avoir effectué les modifications souhaitées:

sudo netfilter-persistent save
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.