Tenemos varios servidores web Apache 2.4 detrás de un equilibrador de carga y una interfaz CDN, donde termina HTTPS; vemos la IP del cliente en los encabezados de la interfaz en los registros de Apache de back-end. Me pregunto si es factible utilizar la coincidencia de cadenas de iptables (en las máquinas del servidor web) para bloquear las IP basadas únicamente en un encabezado en particular, es decir, el que tiene la IP del cliente dentro.
Nuestro kernel de Linux es reciente y nuestro módulo del kernel iptables ha sido compilado con: CONFIG_NETFILTER_XT_MATCH_STRING=m.
He leído que puede consumir mucha CPU y quizás tener consecuencias no deseadas si la coincidencia de cadenas coincide más allá del encabezado particular que contiene la IP del cliente. O que existen mejores herramientas para lograr esto, como un proxy, pero aún así me gustaría saber más sobre las experiencias de otros que utilizan la capacidad de coincidencia de cadenas de iptables con Apache y quizás con fail2ban.
Lo ideal sería que Apache tuviera algo como el 444 de nginx. Puedo proporcionar IP 403basado en hacer coincidir la IP en un encabezado, pero una caída de conexión 444 parece de nivel más bajo (más abrupta/deseable) y requiere menos recursos en comparación con un 403; Aunque me pregunto: ¿lo es? ¿Quizás un 444 consume más recursos que un 403?
¡Gracias por cualquier idea!
Respuesta1
No existe una solución fácil cuando su fail2ban y la lógica asociada se ejecutan en los servidores back-end.
Creo que el primer paso sería utilizar Apache.mod_remoteip; entonces los registros de Apache en el servidor backend contendrán la IP real del cliente en lugar de la dirección IP de su front-end/su balanceador de carga:
Apache identifica de forma predeterminada el agente de usuario con el
client_ip
valor de la conexión, y la conexiónremote_host
seremote_logname
deriva de este valor. Estos campos desempeñan un papel en la autenticación, autorización y registro y otros fines mediante otros módulos cargables.mod_remoteip anula la IP del cliente de la conexión con la IP del agente de usuario anunciada proporcionada por un proxy o equilibrador de carga, durante la duración de la solicitud. Un balanceador de carga puede establecer una conexión keepalive de larga duración con el servidor, y cada solicitud tendrá la IP del agente de usuario correcta, aunque la dirección IP del cliente subyacente del balanceador de carga permanezca sin cambios.
Luego, puede ejecutar fácilmente fail2ban en los archivos de registro de Apache para identificar las IP infractoras.
Entonces necesitarás uncostumbrey fail2ban adecuadoacción de prohibiciónque, cuando se emite desde un servidor backend, bloqueará la IP infractora. Esto puede ser, por ejemplo, una llamada API al firewall frente a su interfaz que agrega la IP infractora a una lista de bloqueo o lo que sea.