Diferencia entre iptables -A y -I opción

20

He intentado (durante horas) configurar iptables para permitir consultas DNS a mi servidor DNS y descubrí que mis iptables seguían bloqueando el acceso debido a la opción de agregar reglas que había estado usando. La mayoría de los foros sugieren una regla similar a la siguiente:

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

Sin embargo, en mi caso, tuve que cambiar la regla a un inserttipo para que funcione:

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

Sé que una regla es para agregar y la otra para insertar y también lo que significan ambos términos, pero ¿alguien podría explicar la diferencia entre los dos y también cuándo usar qué opción? Busqué en las iptables de Ubuntu cómo pero no veo mucha información allí.

Zishan
fuente

Respuestas:

24

iptables -Aagrega reglas al final del conjunto de reglas, mientras que iptables -Iinserta la regla en una posición específica en el conjunto de reglas como ha señalado.

Mirando la entrada man para iptables se muestra esto:

-I, --insertar especificación de regla de cadena [rulenum] Inserte una o más reglas en la cadena seleccionada como el número de regla dado. Entonces, si el número de la regla es 1, la regla o las reglas se insertan en la cabeza de la cadena. Este también es el valor predeterminado si no se especifica ningún número de regla.

Y aquí está la razón por la que -Ifuncionó para usted y -Ano. Si no proporciona ningún rulenum, su regla se inserta en la primera posición. Eso significa en su caso, que en algún lugar de su conjunto de reglas debe haber una regla que prohíba los paquetes DNS (¿tal vez una regla que prohíba UDP en general?) Porque iptables procesa todas las reglas desde la primera hasta la última, aplica la primera coincidencia y se detiene.
Por cierto, esa es también la razón por la que debe colocar las reglas que están destinadas a coincidir con la mayoría de los paquetes en la parte superior: si coloca la regla más utilizada en y, el paquete se compara con cada regla que puede consumir muchos recursos.

Y para el uso: puede usar de forma segura -Acuando desee agregar una regla al final o cuando no importa dónde estará su regla. Si desea que su regla esté en una posición específica, use -Iesta opción, por ejemplo: iptables -I INPUT 6 -p tcp -j DROP(esto agregará una instrucción DROP para todos los paquetes tcp dirigidos al host en sí en la posición 6 del conjunto de reglas INPUT).

wullxz
fuente