¿Cómo marco la solicitud entrante de iptables desde una dirección MAC desconocida con la marca 99 usando conntrack?

¿Cómo marco la solicitud entrante de iptables desde una dirección MAC desconocida con la marca 99 usando conntrack?

Tengo mis reglas de iptables ejecutándose durante años sin incidentes, pero después de permitir el acceso de todos los MAC confiables mediante:

/sbin/iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT

Estoy intentando marcar otras direcciones mac como:

/sbin/iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99

pero cuando intento leer esa dirección ahora,
conntrack -L | grep "src=10.1.1.234"
no veo mi aprovechador desconocido 10.1.1.234 en ninguna parte...
Sin embargo, quiero continuar en iptables para desviar mi aprovechador a una página de inicio de sesión mediante

/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..?

Respuesta1

Hay una diferencia entre unpaqueteMark, también conocido como simplementemarca,marca de firewallomarca de fábricay una marca de entrada de conntrack, también conocida comomarca de fábrica,marca de conexiónomarca de connmark: el primero está adjunto al paqueteskbuff, este último está adjunto alentrada de seguimiento. Hay distintosiptables estera-ajedrezyalquitrán-obtienepara ambos, incluyendo formas depasar la marca del paquete a la entrada de conexiónodesde la entrada de la conexión hasta el paquete.

Aquí no es necesario utilizar esta marca conconectarpara este caso y conntrack -Lsimplemente no es la herramienta adecuada para mostrar un paquete descartado (consulte el último párrafo). Cuando se usa la iptables-nftvariante, la forma más fácil de ver los paquetes marcados con fines de depuración (de lo contrario, simplemente usarlos -j LOGagregaría la marca del paquete en sus registros) es rastrearlos y usarlos xtables-monitor --tracepara mostrar su destino ( iptables-legacyenviaría esto a los registros del kernel y podría inundar fácilmente los registros). , además, no funciona bien con los espacios de nombres de red: es un cambio poco común y no compatible entre la variante -legacy y -nft).

Entonces un posible ejemplo:

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

El destino detallado de todos los paquetes marcados entre -j TRACEy -j DROP(o -j ACCEPTmás todo el procesamiento posterior para estos pocos elegidos) ahora se puede seguir, de manera muy detallada, con:

xtables-monitor --trace

Para limitar la verbosidad, se podrían rastrear solo los paquetes que inician un nuevo flujo cambiando la TRACEregla de esta manera:

iptables -A PREROUTING -t mangle -m mark --mark 99 -m conntrack --ctstate NEW -j TRACE

Además: el primer paquete de dicho flujo desencadena la creación de unconectarentrada que (incluso sin marca) normalmente sería visible en el modo de evento usandoconntrack -E -p tcp --dport 80 . Pero cuando se descarta este paquete, la entrada tentativa de conntrack nunca se elimina.confirmadoy el evento nunca estará disponible para conntrack. Si bien será invisible con el conntrackcomando, aún será visible dentro de las reglas utilizadas -m conntrack --ctproto tcp --ctorigdstport 80antes de que se elimine. Cualquier reintento adicional será nuevamente un primer paquete que creará una entrada tentativa, que no será confirmada porque el paquete se descartó, etc.

Por lo tanto, conntracksolo se puede usar para mostrar flujos cuyo primer paquete no se eliminó; de lo contrario, no habrá ningún flujo disponible para él.

información relacionada