Como faço para marcar a solicitação de iptables recebida de um endereço MAC desconhecido com marca 99 usando conntrack

Como faço para marcar a solicitação de iptables recebida de um endereço MAC desconhecido com marca 99 usando conntrack

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 -Lsimplesmente não é a ferramenta certa para exibir um pacote descartado (veja o último parágrafo). Ao usar a iptables-nftvariante, a maneira mais fácil de ver os pacotes marcados para fins de depuração (caso contrário, apenas usar -j LOGadicionaria a marca do pacote em seus logs) é rastreá-los e usá-los xtables-monitor --tracepara exibir seu destino ( iptables-legacyenviaria 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 TRACEe -j DROP(ou -j ACCEPTmais 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 TRACEregra 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 conntrackcomando, ainda estará visível nas regras -m conntrack --ctproto tcp --ctorigdstport 80antes 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, conntracksó pode ser usado para exibir fluxos cujo primeiro pacote não foi descartado, caso contrário, nenhum fluxo será disponibilizado para ele.

informação relacionada