Estoy usando fail2ban en todos los servidores con servicios visibles públicamente y me pregunto:
- ¿Hay una manera fácil de compartir IP prohibidas entre los hosts que controlo?
- ¿Existe algún servicio que recopile y publique esos datos?
He recibido innumerables intentos de inicio de sesión desde el día 1 de configuración de este servidor.
Respuestas:
Una vez vi un sistema para centralizar datos de fail2ban en este sitio , y creé una versión modificada. La base de datos es la misma, pero cambié y creé algunos scripts.
Mi sistema tiene 4 componentes:
base de datos fail2ban
Es una base de datos MySQL que contiene solo una tabla
erp_core_fail2ban
:fail2ban.php
Cada vez que se prohíbe un host, rellenará la base de datos:
cron2ban
Pones esto para ejecutar en crontab, cada minuto. Recuperará los últimos hosts agregados y los prohibirá.
phpconfig
Este archivo va a / etc / fail2ban y tiene configuración de base de datos y selección de cárcel.
Cree esos archivos y cambie la configuración de fail2ban:
Después de la línea con
actionban = .....
una nueva fila insertada para invocar el script PHP:/root/fail2ban.php <name> <protocol> <port> <ip>
El uso de esta estructura en todos sus servidores asegurará que cada vez que un host sea bloqueado en un servidor, todos los demás servidores también lo bloquearán.
fuente
Así que hice un montón de investigación sobre cómo hacer esto después de ver que la misma dirección IP golpeó mi clúster de servidores web uno tras otro. Como estoy usando AWS, pensé que podría haber una manera fácil y que funcionaba maravillosamente en mis primeros dos días de prueba de 5 servidores.
Lo primero que recomiendo es deshabilitar temporalmente SELinux, lo trataremos al final. No soy un experto en SELinux, pero lo que hice funciona hasta ahora.
El requisito principal es un origen de archivo compartido, yo uso AWS EFS. Una vez que se aprovisionó y montó la nueva unidad, cambié el objetivo de log dentro de /etc/fail2ban/fail2ban.conf a una subcarpeta en la unidad EFS.
Luego escribí un filtro simple y lo coloqué en /etc/fail2ban/filter.d/fail2ban-log.conf
Se agregó el filtro a /etc/fail2ban/jail.local
Luego reinició fail2ban
¡Hasta aquí todo bien! No, la parte dolorosa es SELinux. Después de dejar que fail2ban se ejecute por un momento, ejecuté este comando que permitiría a fail2ban a través de los filtros.
Audit2allow le dirá que ejecute este comando
Todavía estoy revisando mis registros SELinux aquí y allá para ver si hay más negaciones. Si alguien tiene un consejo sobre cómo obtener ese SELinux claro con otro método, sería increíble.
En este punto, todavía recibía errores al reiniciar fail2ban. Hay un error al usar action = action_mwl en jail.local. Después de buscar un poco en Google, encontré esto que está funcionando hasta ahora. Por lo que leí es por los saltos de línea en la directiva logpath que apunta a múltiples archivos. Intenté con comas, espacios, etc. nada más funcionó con action_mwl.
¡No olvide volver a encender SELinux!
fuente
Acabo de implementar esto y hasta ahora parece estar funcionando bien. Sin embargo, tuve que actualizar algunos de los php porque los scripts en la respuesta original usan funciones obsoletas.
Aquí están los guiones actualizados
phpconfig.php
fail2ban.php
cron2ban.php
Además, donde sea que coloque la acción fail2ban.php, debe sangrarse tanto como la línea que se encuentra sobre ella. Por ejemplo:
De lo contrario, fail2ban no se iniciará. Espero que esto ayude a cualquiera que intente implementar esto.
fuente
Una alternativa a DenyHosts
fail2ban
es que viene con una funcionalidad de sincronización. La instalación es bastante similar a , vea el tutorial de Cyberciti para más detalles .fail2ban
El problema es que el servicio de sincronización está centralizado y el código fuente del lado del servidor no parece estar disponible, por lo que no puede iniciar fácilmente su propio servicio DenyHosts y tiene que depender de terceros (lo que puede estar bien para algunos casos de uso).
fuente
Si y si. Ambos se pueden hacer.
Debe encontrar un mecanismo adecuado para compartir la lista de IP. Si usa AWS, por ejemplo, podría aprovechar s3. Puede usar rsync entre hosts Linux o una base de datos común a todos los hosts. Podría activar un servicio con su lenguaje de programación favorito que proporciona una API tranquila, la elección es suya.
En términos de compartir la lista de aliados públicos, podría crear un sitio web y alojar un archivo de texto simple, algunos ya proporcionan dichas listas (no sé de fuentes multitudinarias). Cómo crear su propio sitio / servicio estaría fuera del alcance de una respuesta, sin embargo, no debería ser terriblemente difícil de hacer.
fuente
Una configuración bastante manual sería cambiar la configuración que llama
iptables
a actualizar las reglas para que llame a un guión de su propia creación que recorre una lista de hosts (¿leído de un archivo?) Y realiza lasiptables
llamadas en cada uno a través de SSH. Necesitaría una autenticación basada en claves entre todos los hosts configurados para que esto funcione. Las herramientas de automatización de administración como Puppet pueden facilitar la configuración y el mantenimiento. Esto no sería terriblemente eficiente, pero a menos que vea una gran cantidad de tráfico de sondeo (y / o tenga una gran cantidad de hosts), entonces estoy seguro de que sería lo suficientemente bueno. Si solo tiene unos pocos hosts, entonces ni siquiera necesita recorrer un archivo: configure cada uno para llamar a los otros en orden. El esfuerzo de scripting será mínimo.No hay duda de muchas maneras. Haga que las secuencias de comandos anteriores coloquen los datos en una base de datos y haga que los clientes lean eso, sondeen las nuevas reglas y las ejecuten a medida que entran. El simple "ejecutar una regla como la ve" no será perfecto si muchos Los hosts están enviando información, por ejemplo este caso:
pero esto no debería ser un problema importante, y si se vuelve un poco más inteligente con la base de datos, podría administrar varias presentaciones de manera más limpia si decidiera que valió la pena el esfuerzo.
Sin embargo, ejecutar eso como un servicio público te abriría a un mundo de problemas administrativos:
fuente