
Tenho minhas regras de iptables em execução há anos sem incidentes, mas depois de permitir o acesso de todos os MAC confiáveis:
/sbin/iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT
Estou tentando marcar outros endereços Mac como:
/sbin/iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
mas quando tento ler esse endereço agora,
conntrack -L | grep "src=10.1.1.234"
não vejo meu freeloader 10.1.1.234 desconhecido em lugar nenhum ...
Mesmo assim, quero continuar no iptables para desviar meu freeloader para uma página de login por meio de
/sbin/iptables -t filter -A FORWARD -m mark --mark 99 -j DROP```
And obviously it doesn't work because I can't even see it from my conntrack listing.
What am I doing wrong here..?
Responder1
Há uma diferença entre umpacotemarca, também conhecido como apenasmarca,marca de firewalloumarca fwe uma marca de entrada conntrack, também conhecida comomarca registrada,marca de conexãooumarca de conexão: o primeiro está anexado ao pacoteskbuff, o último é anexado aoentrada de conexão. Existem distintostabelas de ip esteira-xadrezealcatrão-recebepara ambos, incluindo maneiras depasse a marca do pacote para a entrada de conexãoouda entrada de conexão ao pacote.
Aqui não há necessidade de usar esta marca comconexãopara este caso e conntrack -L
simplesmente não é a ferramenta certa para exibir um pacote descartado (veja o último parágrafo). Ao usar a iptables-nft
variante, a maneira mais fácil de ver os pacotes marcados para fins de depuração (caso contrário, apenas usar -j LOG
adicionaria a marca do pacote em seus logs) é rastreá-los e usá-los xtables-monitor --trace
para exibir seu destino ( iptables-legacy
enviaria isso para os logs do kernel e poderia facilmente inundar os logs , além disso, não funciona bem com namespaces de rede: essa é uma alteração rara e não compatível entre a variante -legacy e a variante -nft).
Então, um exemplo possível:
iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
iptables -A PREROUTING -t mangle -m mark --mark 99 -j TRACE
[...]
iptables -A FORWARD -m mark --mark 99 -j DROP
O destino detalhado de todos esses pacotes marcados entre -j TRACE
e -j DROP
(ou -j ACCEPT
mais todo o processamento adicional para esses poucos eleitos) agora pode ser seguido, de forma muito detalhada, com:
xtables-monitor --trace
Para limitar a verbosidade, pode-se rastrear apenas os pacotes que iniciam um novo fluxo, alterando a TRACE
regra assim:
iptables -A PREROUTING -t mangle -m mark --mark 99 -m conntrack --ctstate NEW -j TRACE
Além disso: o primeiro pacote desse fluxo desencadeia a criação de umconexãoentrada que (mesmo sem marca) normalmente seria visível no modo de evento usando conntrack -E -p tcp --dport 80
. Mas quando este pacote é descartado, a entrada conntrack provisória nunca éconfirmadoe o evento nunca será disponibilizado para conntrack
. Embora seja invisível com o conntrack
comando, ainda estará visível nas regras -m conntrack --ctproto tcp --ctorigdstport 80
antes de ser descartado. Qualquer nova tentativa será novamente um primeiro pacote que criará uma entrada provisória, que não será confirmada porque o pacote foi descartado, etc.
Portanto, conntrack
só pode ser usado para exibir fluxos cujo primeiro pacote não foi descartado, caso contrário, nenhum fluxo será disponibilizado para ele.