meilleur moyen d'effacer toutes les règles iptables


83

J'ai actuellement cet extrait:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

Existe-t-il une possibilité qu'une règle imperméable reste en vie après avoir exécuté cette procédure?

L'idée est de disposer d'une configuration iptables totalement propre, qui puisse être facilement remplacée par un nouveau jeu de règles (paramètres nevermind routes / ifconfig).

Réponses:


107

Pour répondre succinctement à votre question, non: il n’y aurait pas de règle de "restes" après avoir vidé toutes les tables. Par souci de rigueur, vous pouvez également définir la stratégie pour les fonctions intégrées INPUTet les FORWARDchaînes ACCEPT:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Effacer les règles ip6tables:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

... et cela devrait le faire. iptables -nvLdevrait produire cette sortie (ou très similaire):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

9
vous avez oublié 'raw': iptables -t raw -F iptables -t raw -X
kK-Storm

there would not be any "leftover" rules after flushing every tableOP ne vide pas toutes les tables. Toi non plus. Voici à quoi ça ressemble si vous voulez être approfondi . Et vous voudrez peut-être ajouter iptables -t "$table" -Z. Notez que de cette façon vous codez en dur la liste des tables et leurs chaînes. Je voudrais donc sérieusement envisager une solution de sauvegarde-restauration . Ou vous pouvez simplement décharger iptables .
x-yuri

23

Ceci réinitialisera totalement votre système iptables dans un état très basique:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Toutes les stratégies seront réinitialisées sur ACCEPT ainsi que le vidage de chaque table actuellement utilisée. Toutes les chaînes autres que les chaînes intégrées n'existeront plus.


1
Bidouille soignée! Je n'en dépendrais cependant pas, car il est toujours possible que des modifications subtiles du format de sauvegarde / restauration puissent le casser. Il est probablement préférable de s'en tenir à l'API iptablesfournie explicitement par l' outil, IMO.
Steven lundi

3
J'ai changé d'avis: il est peu probable que le format des données change beaucoup, car il est très utilisé. +1
Steven lundi

2
+1, hack intéressant
Sam Halicke

Cela a permis de se débarrasser des restes de chaînes UFW, ce que la réponse acceptée ne faisait pas.
l0b0 le

C'est un détail mineur, mais vous voudrez peut-être remplacer le premier print $1par print $0pour être cohérent :)
x-yuri

2

Chaque fois que j'ai besoin que le pare-feu soit désactivé, cela ressemble à ceci:

  • iptables-save > iptables.bak
  • service iptables stop (je suis sur fedora)

1

Vous pouvez simplement décharger iptablesles modules du noyau:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPD Malheureusement, trop beau pour être vrai. Tant qu'il y a une règle ou une chaîne définie par l'utilisateur dans une table, le nombre de références du module correspondant est égal à 1 et modprobe -réchoue. Vous pouvez supprimer des règles et des chaînes définies par l'utilisateur comme suit:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

ou:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

Vous pouvez également souhaiter décharger les modules de cette façon (pas de noms de modules de codage en dur):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

Sur le côté positif, après cela iptables-saveproduit une belle sortie vide :)


Cela pourrait être le marteau ici. Merci.
Konrad Gajewski le

0

On peut le faire en 1 ou 2 commandes:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Résultat:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         

5
Si les stratégies par défaut sont actuellement définies sur DROP, il s'agit d'un moyen rapide de se verrouiller hors du serveur. Donc, non, ce n'est pas un processus de commande 1 ou 2. Vous devez d'abord régler sur ACCEPT si ce n'est pas le cas actuellement.
RyanH

0

J'ai eu à bloquer toutes les connexions récemment ce que j'ai fini par faire était

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

en ce qui concerne l'économie, je recommande ce qui suit

Ubuntu:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

En plus de sauvegarder toutes les règles ufw actuelles, je l’avais utilisée dans le passé

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Je pense que cela peut être utile pour référence future. Je pensais partager.


0

Sauvegarde la configuration sur iptables_backup.conf et nettoie toutes les règles.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

Pour restaurer la configuration précédente:

iptables-restore < iptables_backup.conf
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.