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

16

Eu tenho tentado (por horas) configurar o iptables para permitir consultas DNS ao meu servidor DNS e descobri que meus iptables continuavam 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 tipo insert para que funcionasse:

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

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

    
por Zishan 25.01.2013 / 03:13

1 resposta

21

iptables -A acrescenta regras no final do conjunto de regras, enquanto iptables -I insere a regra em uma posição específica no conjunto de regras, conforme você apontou.

Olhando para a entrada man do iptables, mostra isso:

-I, --insert chain [rulenum] rule-specification Insert one or more rules in the selected chain as the given rule number. So, if the rule number is 1, the rule or rules are inserted at the head of the chain. This is also the default if no rule number is specified.

E aqui está o motivo pelo qual -I funcionou para você e -A não. Se você não fornecer nenhum rulenum, 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 os pacotes DNS (talvez uma regra que proíba o UDP em geral?) Porque o iptables processa todas as regras do primeiro ao último, aplica a primeira correspondência e pára. br> Btw, 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 no e, o pacote é verificado em cada regra, o que pode consumir muitos recursos. / p>

E para o uso: você pode usar muito bem o -A quando quiser anexar uma regra no final ou quando não importar qual será a regra. Se você quiser sua regra em uma posição específica, use -I como este, 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.)

    
por 25.01.2013 / 03:24