Iptables is not like a pam configuration file where the first rule satisfies a procedure. In iptables, ALL rules must be satisfied.
Isso está completamente errado. As regras são percorridas na ordem e, quando uma regra que corresponde a um dos destinos internos ( ACCEPT
, DROP
ou QUEUE
), o processamento do pacote termina aí: não há mais regras sendo percorridas. A afirmação posterior de que "Se não houvesse ACEITAR tudo em qualquer lugar, nada passaria pelo firewall" é verdadeira (com uma política DROP), mas um pacote não precisa corresponder a todas as regras ACCEPT para ser verdade, ele só precisa alcançar um.
É possível que um pacote seja processado por várias regras de correspondência, porque pode haver regras que saltem para cadeias definidas pelo usuário (caso em que as regras da cadeia são tentadas em ordem), ou que não saltem para tudo e está presente apenas por algum outro motivo, como o registro. Mas uma vez que ACCEPT
ou DROP
seja alcançado, é isso, o pacote é enviado ou descartado; se QUEUE
for atingido, o pacote é passado para a userland para processamento adicional; e de qualquer forma não mais regras são processadas para este pacote. Finalmente, se (e somente se) o processamento chegar ao final de uma cadeia interna, a política da cadeia será aplicada.
Por exemplo, suponha que iptables -L
mostre
Chain INPUT (policy DROP) target prot opt source
destination ACCEPT all -- anywhere anywhere
Como a política é DROP
, somente os pacotes explicitamente ACEITOS por alguma regra serão aprovados. A regra parece que aceita tudo, mas isso não é necessariamente o caso: pode haver condições que iptables -L
omite. Execute iptables -vL
para imprimir todas as condições. Uma condição comum omitida é a interface; ter uma regra que aceite todo o tráfego de loopback é bastante comum. Você veria algo como
# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
# iptables -vL INPUT
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
Se a regra aceitasse todo o tráfego, você veria any
na coluna in
de iptables -vL INPUT
.