J'ai suivi this 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
iptables-persistent
ne fonctionne pas de cette façon. 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.
Configurer iptables-persistent
, vous devez lui indiquer 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-persistent
package 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, la prochaine fois iptables-persistent
est démarré/redémarré, les règles iptables que vous attendez seront chargées.
Un moyen très simple de sauvegarder les règles actuelles d'iptables est d'utiliser la commande:
Sudo service netfilter-persistent save
Utilisation de ce qui précède, qui fonctionne au moins dans Ubuntu après l'installation de 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).
$ iptables ... DROP //command successfully drops the rule
$ Sudo iptables -L //shows rule has been deleted
Ce n'est pas ce que DROP
signifie ou fait. De man iptables
:
... les valeurs spéciales ACCEPT, DROP, QUEUE ou RETURN. ACCEPTER signifie laisser passer le paquet. DROP signifie pour déposer 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.
Lorsque vous vérifiez des choses comme celle-ci (votre iptables -L
output), je le nourrirais si 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 -D
switch; 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.
Installez iptables-persistent:
Sudo apt install iptables-persistent
enregistrer les règles après avoir effectué les modifications souhaitées:
Sudo netfilter-persistent save
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'action save
de service netfilter-persistent
est mieux.
À ce jour (en 18.10), iptables-save est intégré, mais iptables-persistent
n'est pas installé. Par conséquent, le répertoire du plugin appelé par service netfilter-persistent
est vide et le service affiche que l'ensemble de règles a été enregistré, alors qu'il ne l'était pas.
TLDR: installez iptables-persistent
et vérifiez que le répertoire du plugin /usr/share/netfilter-persistent/plugins.d
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}
;;
Ensuite, j'ai remarqué que /usr/share/netfilter-persistent/plugins.d
était vide.