Machbarkeit von iptables-String-Matching; mögliche Verwendung mit fail2ban

Machbarkeit von iptables-String-Matching; mögliche Verwendung mit fail2ban

Wir haben mehrere Apache 2.4-Webserver hinter einem Load Balancer und einem CDN-Frontend – wo HTTPS beendet wird – wir sehen die Client-IP in Headern vom Frontend in den Backend-Apache-Protokollen. Ich frage mich, ob es machbar ist, die String-Übereinstimmung von iptables (auf den Webserver-Rechnern) zu verwenden, um IPs nur basierend auf einem bestimmten Header zu blockieren, also dem mit der Client-IP darin?

Unser Linux-Kernel ist aktuell und unser iptables-Kernelmodul wurde mit CONFIG_NETFILTER_XT_MATCH_STRING=m kompiliert.

Ich habe gelesen, dass es CPU-intensiv sein kann und möglicherweise unbeabsichtigte Folgen hat, wenn die Zeichenfolgenübereinstimmung über den bestimmten Header hinausgeht, der die Client-IP enthält. Oder dass es bessere Tools gibt, um dies zu erreichen, wie z. B. einen Proxy, aber ich würde trotzdem gerne mehr über die Erfahrungen anderer erfahren, die die Zeichenfolgenübereinstimmungsfunktion von iptables mit Apache und vielleicht fail2ban verwenden.

Idealerweise hätte Apache etwas wie nginx's 444. Ich kann IPs 403s gebenbasierend auf der Übereinstimmung der IP in einem Header, aber ein Verbindungsabbruch bei 444 scheint weniger schwerwiegend (abrupter/wünschenswerter) und weniger ressourcenintensiv zu sein als bei 403; ich frage mich allerdings – ist das so? Vielleicht ist ein 444 ressourcenintensiv im Vergleich zu einem 403?

Danke für alle Einblicke!

Antwort1

Es gibt keine einfache Lösung, wenn Ihr Fail2Ban und die zugehörige Logik auf den Back-End-Servern ausgeführt werden.

Ich denke, der erste Schritt wäre die Verwendung von Apachemod_remoteip; dann enthalten die Apache-Protokolle auf dem Backend-Server die tatsächlichen Client-IPs und nicht die IP-Adresse Ihres Frontends/Ihres Load Balancers:

Apache identifiziert den Useragent standardmäßig mit dem client_ipWert der Verbindung und die Verbindung remote_hostund remote_lognamewerden von diesem Wert abgeleitet. Diese Felder spielen eine Rolle bei der Authentifizierung, Autorisierung und Protokollierung sowie für andere Zwecke durch andere ladbare Module.

mod_remoteip überschreibt für die Dauer der Anfrage die Client-IP der Verbindung mit der angekündigten User-Agent-IP, die von einem Proxy oder Load Balancer bereitgestellt wird. Ein Load Balancer kann eine langlebige Keepalive-Verbindung mit dem Server herstellen, und jede Anfrage hat die richtige User-Agent-IP, auch wenn die zugrunde liegende Client-IP-Adresse des Load Balancers unverändert bleibt.

Dann können Sie fail2ban einfach gegen die Apache-Logdateien ausführen, um die betreffenden IPs zu identifizieren.

Sie benötigen dann eineBrauchund passendes fail2banVerbotsaktionWenn es von einem Backend-Server ausgegeben wird, wird die betreffende IP blockiert. Dies kann beispielsweise ein API-Aufruf an die Firewall vor Ihrem Frontend sein, der die betreffende IP zu einer Sperrliste oder Ähnlichem hinzufügt.

verwandte Informationen