Diferença entre iptables -A e -I opção

20

Estou tentando (há horas) configurar o iptables para permitir consultas DNS ao meu servidor DNS e acabei de descobrir que meu iptables continuava bloqueando o acesso devido à opção de adição de regra que eu estava usando. A maioria dos fóruns sugere uma regra semelhante à seguinte:

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

No entanto, no meu caso, tive que alterar a regra para um inserttipo para que funcionasse:

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

Eu sei que uma regra é para anexar e a outra para inserir e também o que os dois termos significam, mas alguém poderia explicar a diferença entre os dois e também quando usar qual opção? Procurei iptables do Ubuntu como, mas não vejo muita informação lá.

Zishan
fonte

Respostas:

24

iptables -Aanexa regras no final do conjunto de regras, enquanto iptables -Iinsere 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 -Itrabalhou para você e -Anã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á- -Alo 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 -Iassim 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.)

wullxz
fonte