Eu tenho um problema estranho com meu firewall iptables: se eu definir duas regras idênticas consecutivas, a primeira ACCEPT
e a segunda DENY
, o pacote recebido será negado (e registrado como tal).
Como é possível que o pacote recebido seja ignorado pela primeira regra e capturado pela segunda?
A visualização do fwbuilder está aqui:
Aqui está o iptables
despejo:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain In_RULE_0 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 0 -- ACCEPT "
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain In_RULE_1 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 1 -- DENY "
DROP all -- 0.0.0.0/0 0.0.0.0/0
Também tentei ACCEPT
apenas com a regra e não pega.
A única diferença que vejo é que a DENY
regra não é state NEW
, mas é a mesma para as dezenas de firewalls que já configurei e que estão funcionando bem.
Responder1
Você precisa saber que: Uma regra com a -I
opção iptables coloca uma regra no INÍCIO da lista; Uma regra com a -A
opção coloca uma regra no final da lista.
No seu caso: acho que você pode ter usado "-I" em ambas as regras do iptables (quase idênticas), a segunda regra é inserida no início da lista antes da primeira regra e, portanto, você criou uma lista de regras com as regras na ordem:
match -s x.x.x.x action DROP
match -s x.x.x.x action ACCEPT
Como o seu pacote corresponde a ambas as regras, a primeira ( DROP
) na ordem da tabela operacional real (que reside na RAM) entraria em vigor. A ordem não tem nada a ver com a ordem no seu arquivo de configuração do iptable.
Troque o pedido e o resultado será diferente.
Responder2
OK, eu encontrei. Acontece que meu FW estava perfeitamente bom, mas o host virtual estava configurado incorretamente. Não tive nenhum erro, mas o iptables não foi permitido. Quando permiti, o FW ficou operacional... Não é à toa que não conseguimos encontrar o erro no nível do iptables... Obrigado por toda a ajuda :)
Responder3
Seu iptables In_RULE_0
só se aplica a NOVAS conexões quando você usa o state NEW
.
Ele também é definido na sua cadeia FORWARD (pacotes através do servidor), não na sua cadeia INPUT (pacotes para o servidor).
Como você está testando? Você está executando ping em uma interface específica do servidor?
Você pode postar a saída completa de:
iptables -vnL
Tente a seguinte regra para registrar o tráfego na cadeia INPUT (pings para a interface do servidor)
iptables -I INPUT 1 -j In_RULE_0