Différence entre l'option -A et -I iptables

20

J'ai essayé (pendant des heures) de configurer iptables pour autoriser les requêtes DNS sur mon serveur DNS et je viens de découvrir que mes iptables continuaient de bloquer l'accès en raison de l'option d'ajout de règles que j'utilisais. La plupart des forums suggèrent une règle similaire à la suivante:

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Cependant, dans mon cas, j'ai dû changer la règle en un inserttype pour que cela fonctionne:

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

Je sais qu'une règle est pour ajouter et l'autre pour insérer et aussi ce que signifient les deux termes, mais quelqu'un pourrait-il expliquer la différence entre les deux et aussi quand utiliser quelle option? J'ai cherché les iptables d'Ubuntu, mais je n'y vois pas beaucoup d'informations.

Zishan
la source

Réponses:

24

iptables -Aajoute des règles à la fin de l'ensemble de règles tandis que iptables -Ila règle est insérée à une position spécifique dans l'ensemble de règles, comme vous l'avez souligné.

En regardant l'entrée man pour iptables, cela montre:

-I, --insert chaîne [rulenum] spécification de règle Insérez une ou plusieurs règles dans la chaîne sélectionnée comme numéro de règle donné. Ainsi, si le numéro de règle est 1, la ou les règles sont insérées en tête de chaîne. Il s'agit également de la valeur par défaut si aucun numéro de règle n'est spécifié.

Et voici la raison pour laquelle cela a -Ifonctionné pour vous et -Anon. Si vous ne fournissez aucun rulenum, votre règle est insérée à la toute première position. Cela signifie dans votre cas, que quelque part dans votre ensemble de règles, il doit y avoir une règle qui interdit les paquets DNS (peut-être une règle qui interdit UDP en général?) Car iptables traite toutes les règles de la première à la dernière, applique la première correspondance et s'arrête.
Btw, c'est aussi la raison pour laquelle vous devriez mettre les règles qui sont censées correspondre à la plupart des paquets en haut: si vous mettez la règle la plus utilisée au et, le paquet est vérifié par rapport à chaque règle qui peut consommer beaucoup de ressources.

Et pour l'utilisation: vous pouvez utiliser à bon escient -Alorsque vous souhaitez ajouter une règle à la fin ou quand peu importe où sera votre règle. Si vous voulez que votre règle à une position spécifique, utilisez -Icomme ceci par exemple: iptables -I INPUT 6 -p tcp -j DROP(cela ajoutera une instruction DROP pour tous les paquets tcp adressés à l'hôte lui-même à la position 6 dans l'ensemble de règles INPUT.)

wullxz
la source