iptables -A
anexa regras no final do conjunto de regras, enquanto iptables -I
insere a regra em uma posição específica no conjunto de regras, conforme indicado.
Olhando para a entrada man do iptables, é mostrado:
-I, - especificação da regra da cadeia de inserção [rulenum] Insira uma ou mais regras na cadeia selecionada como o número da regra fornecida. Portanto, se o número da regra for 1, a regra ou regras serão inseridas no início da cadeia. Esse também é o padrão se nenhum número de regra for especificado.
E aqui está a razão pela qual -I
trabalhou para você e -A
não. Se você não fornecer nenhum ruleno, sua regra será inserida na primeira posição. Isso significa que no seu caso, em algum lugar do seu conjunto de regras, deve haver uma regra que proíba pacotes DNS (talvez uma regra que proíba o UDP geralmente?) Porque o iptables processa todas as regras da primeira à última, aplica a primeira correspondência e para.
Aliás, essa também é a razão pela qual você deve colocar as regras que se destinam a corresponder à maioria dos pacotes no topo: se você colocar a regra mais usada em e, o pacote será verificado em cada regra, o que pode consumir muitos recursos.
E para o uso: você pode usá- -A
lo comodamente quando quiser anexar uma regra no final ou quando não importa onde ela estará. Se você deseja que sua regra esteja em uma posição específica, use -I
assim por exemplo: iptables -I INPUT 6 -p tcp -j DROP
(isso adicionará uma instrução DROP para todos os pacotes tcp endereçados ao próprio host na posição 6 no conjunto de regras INPUT.)