Buckminster
(usa Debian)
Enviado em 18/01/2018 - 12:36h
Bom, vamos lá.
O Iptables lê o script de cima para baixo e executa as regras de acordo com a ordem.
Porém, como está no artigo citado (tradução do Manual do Iptables), vê-se que ele é feito de chains (cadeias) e a ordem de execução das regras é de acordo com cada chain, por exemplo:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
A primeira regra na chain INPUT libera e a segunda bloqueia, mas a primeira regra terá o privilégio, então o acesso à porta 443 na chain INPUT será liberado para todos, mesmo negando o acesso na regra subsequente.
O mesmo acontece nas duas regras da chain OUTPUT.
Lembrando que nas regras acima não foi determinada nenhuma tabela (-t), então, elas serão aplicadas somente na tabela padrão, a filter, e, no caso, somente nas chains INPUT e OUPUT.
O cuidado e o entendimento que se deve ter é que cada chain (INPUT, OUTPUT e FORWARD, chains básica, mas existem outras), age uma indepententemente da outra, ou seja, se tu liberar na chain INPUT (entrada) e bloquear na chain OUTPUT (saída) uma não interferirá na outra, mas os pacotes para a porta 443, no caso das regras acima, serão liberados para entrarem no servidor e serão liberados para a rede, mesmo bloqueados na chain OUTPUT, posto que a chain OUTPUT (veja abaixo) é para pacotes gerados pelo próprio servidor.
Ainda no mesmo caso acima, se tu bloquear a porta 443 na chain FORWARD, mesmo liberados na chain INPUT, eles não sairão para a rede independentemente se a regra da chain FORWARD estiver antes ou depois da chain INPUT.
INPUT - (entrada - para pacotes destinados a sockets locais, pacotes destinados para a própria máquina);
FORWARD - (para pacotes sendo roteados através da máquina, pacotes que passam pela máquina);
OUTPUT - (para pacotes gerados localmente, pacotes oriundos da própria máquina com destino para fora dela).
"Máquina" significa o servidor ou o desktop no qual o iptables estiver instalado e configurado.
Mais:
INPUT --> Refere-se a todos os pacotes destinados à máquina filtro.
OUTPUT --> Refere-se a todos os pacotes gerados na máquina filtro.
FORWARD --> Refere-se a todos os pacotes oriundos de uma máquina e destinados a outra. São pacotes que atravessam a máquina filtro, mas não são destinados a ela.
Basicamente é isso.
É logico que, para melhor organização e entendimento do script tu podes numerar as regras, por exemplo:
iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT <<< daí usa-se -I
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 443 -j ACCEPT
iptables -I OUTPUT 2 -p tcp --dport 80 -j ACCEPT
-A, --append chain rule-specification :: Anexa uma ou mais regras para o final da chain. Quando a origem e/ou nomes de destino resolverem mais de um endereço, uma regra será adicionada para cada combinação de endereços possíveis.
-I, --insert chain [rulenum] rule-specification :: Insire uma ou mais regras na chain especificada, pode ter um número para determinada regra. Assim, se o número da regra é um, a regra ou as regras serão inseridas no topo da chain. Este é o padrão se nenhum número de regra for especificado.
Link adicional para estudo:
http://eriberto.pro.br/iptables/3.html