¿Para que sirve y que es Fail2Ban ?
Esta herramienta de código abierto permite bloquear o vetar a aquellos que al tratar de violentar un servicio produzcan errores de autenticación.
Protección del servidor Apache
Cuando se opera un servidor web, es importante poner en práctica medidas de seguridad para proteger su sitio y los usuarios. La protección de sus sitios web y aplicaciones con las políticas de firewall y restringir el acceso a ciertas áreas con la autenticación de la contraseña es un gran punto de partida para la seguridad de su sistema. Sin embargo, cualquier solicitud de contraseña de acceso público es probable que atraiga a los intentos de fuerza bruta de usuarios maliciosos y bots.
La configuración de fail2ban
puede ayudar a aliviar este problema. Cuando los usuarios fracasan repetidamente para autenticarse en un servicio (o se dedican a otras actividades sospechosas), fail2ban
puede emitir una prohibición temporal sobre la dirección IP infractora modificando dinámicamente la política de firewall corriendo. Cada fail2ban
«cárcel» opera mediante la comprobación de los registros escritos por un servicio para los patrones que indican intentos fallidos. Configuración de fail2ban
para monitorear registros de Apache es fácil usando los filtros de configuración incluidos.
En esta guía, vamos a demostrar cómo instalar fail2ban
y configurarlo para monitorear los registros de Apache para los intentos de intrusión. Vamos a utilizar un servidor de Ubuntu 14.04.
Instalación y configuración de Apache autenticación de contraseña
Si usted está interesado en la protección de su servidor Apache con fail2ban, es posible que ya tiene un servidor configurado y funcionando.
Si no es así, puede instalar Apache desde repositorios por defecto de Ubuntu usando apt.
Actualizar el índice de paquetes locales e instalar escribiendo:
- sudo update apt-get
- sudo apt-get install apache2
Instalar en ubuntu Fail2Ban
Una vez que el servidor Apache se está ejecutando y la autenticación de contraseña está activada, usted puede seguir adelante e instalar fail2ban
(incluimos otro repositorio re-fetch aquí en caso de que ya habías Apache creado en los pasos anteriores):
Para su instalación:
- sudo update apt-get
- sudo apt-get install fail2ban
- Mac OS X
- Como de costumbre utilizaremos el método predilecto de instalación por Homebrew, para ello solo debemos ejecutar lo siguiente en el terminal:
$ brew update ... $ brew install fail2ban
-
Debian
Para sistemas basados en Debian como Ubuntu podemos utilizar el manejador de paquetes por defecto que trae el sistema:
Esto instalará el software. Por defecto, fail2ban
se configura solamente para la prohibición de intentos fallidos de conexión SSH. Tenemos que permitir que configurarlo para comprobar nuestros registros de Apache para los patrones que indican la actividad maliciosa.
Para empezar, tenemos que ajustar el archivo de configuración que fail2ban
para determinar qué registros de aplicación se van a vigilar y qué acciones tomar cuando se encuentren entradas infractoras. Donde /etc/fail2ban/jail.conf
es el principal archivo de configuración
Para hacer modificaciones, tenemos que copiar este archivo a /etc/fail2ban/jail.local. Esto evitará que nuestros cambios de ser sobrescrita si una actualización del paquete proporciona un nuevo archivo predeterminado:
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra el archivo recién copiado de manera que podamos establecer nuestro monitoreo de registro de Apache:
- sudo nano /etc/fail2ban/jail.local
Cambiar valores predeterminados
Deberíamos empezar por evaluar los valores por omisión configurados dentro del archivo para ver si se adaptan a nuestras necesidades. Estos se pueden encontrar en la [DEFAULT]
sección dentro del archivo.Estos artículos establecen la política general y cada uno puede ser anulados en cárceles específicas.
Uno de los primeros puntos a considerar es la lista de los clientes que no están sujetos a las fail2ban
políticas. Esto se establece por el ignoreip
Directiva. A veces es una buena idea añadir su dirección IP o la red a la lista de excepciones para evitar el bloqueo a ti mismo. Este es un problema menor con los inicios de sesión del servidor web, aunque si usted es capaz de mantener el acceso shell, ya que siempre puede revertir manualmente la prohibición. Puede agregar direcciones IP adicionales o redes delimitados por un espacio, a la lista existente:
[DEFAULT]. . .
Ignoreip = 127.0.0.1/8 your_home_IP
Otro elemento que es posible que desee ajustar es el bantime, que controla cuántos segundos miembro infractor está prohibido para.
Es ideal para fijar a un tiempo lo suficientemente largo para ser perjudicial para los esfuerzos de un agente malicioso, mientras lo suficientemente corto como para permitir que los usuarios legítimos para rectificar errores. De forma predeterminada, se establece en 600 segundos (10 minutos). Aumentar o disminuir este valor como mejor le parezca:
[DEFAULT]. . .
Bantime = 3600
Las siguientes dos elementos determinan el alcance de líneas de registro utilizadas para determinar un cliente infractor. El findtime
especifica una cantidad de tiempo en segundos y el maxretry
directiva indica el número de intentos de ser tolerada dentro de ese tiempo. Si un cliente hace más de maxretry
intentos dentro de la cantidad de tiempo establecido por findtime, estarán prohibidas:
[DEFAULT]. . .
Findtime = 3600 # Estas líneas se combinan para prohibir los clientes que no
maxretry = 6 # para autenticar 6 veces a la media hora.
Configuración del buzón de Notificaciones (Opcional)
Puede habilitar las notificaciones de correo electrónico si desea recibir correo cada vez que la prohibición tiene lugar. Para ello, tendrá que establecer por primera vez un MTA en el servidor para que se pueda enviar correo electrónico. Para aprender a utilizar Postfix para esta tarea, siga esta guía.
Una vez que haya establecido la MTA, usted tendrá que ajustar algunos ajustes adicionales en el[DEFAULT]
sección del /etc/fail2ban/jail.local
archivo. Para empezar, establezca el mta
Directiva.Si configura Postfix, como el tutorial anterior demuestra, cambie este valor a «mail»:
[DEFAULT]. . .
Mta = electrónico
Es necesario seleccionar la dirección de correo electrónico que se enviará notificaciones. Modifique ladestemail
Directiva con este valor. El SenderName
directiva se puede utilizar para modificar el campo «Remitente» en los correos electrónicos de notificación:
[DEFAULT]. . .
Destemail = youraccount@email.com
SenderName = Fail2BanAlerts
En fail2ban
jerga, una «acción» es el procedimiento seguido cuando un cliente no autenticación demasiadas veces. La acción por defecto (llamado action_) es simplemente prohibir la dirección IP del puerto de que se trate.
Sin embargo, hay otras dos acciones pre-hechos que pueden ser utilizados si usted tiene correo configurado.
Puede utilizar el action_mw
medidas para prohibir el cliente y enviará una notificación por correo electrónico a su cuenta configurada con un informe «whois» en la dirección de la delincuencia. También puede utilizar el action_mwl
acción, que hace lo mismo, pero también incluye las líneas de registro infractor que desencadenaron la prohibición:
[DEFAULT]. . .
Action =% (action_mwl) s
Configuración Fail2Ban para supervisar los registros de Apache
Ahora que tiene algunos de los generales fail2ban
ajustes en su lugar, podemos concentrarnos en capacitar a las cárceles específicas de Apache que vigilar nuestros registros del servidor web para patrones específicos de comportamiento.
Cada cárcel dentro del archivo de configuración está marcada por una cabecera que contiene el nombre de la cárcel entre corchetes (todas las secciones, pero el [DEFAULT]
sección indica la configuración de una cárcel específica). De forma predeterminada, sólo el [ssh]
cárcel está habilitada.
Para habilitar la supervisión de registro de Apache intentos de conexión, vamos a permitir que el[apache]
cárcel. Edite el permitido
Directiva dentro de esta sección para que diga «verdadero»:
[apache]
enabled = verdadero
puerto = http, https
filtro = apache-auth
logpath = /var/log/apache*/*error.log
maxretry =
6.. .
Si el servidor Apache está escribiendo a la ubicación de registro predeterminado(/var/log/apache/error.log)
la cárcel ya está configurado para buscar en el lugar correcto. Si está iniciando sesión a otra ubicación, modifique el logpath
según sea necesario. Además, no dude en ajustar el maxretry
Directiva o añadir un findtime
valor de esta cárcel si desea establecer diferentes restricciones para este cárcel específica:
[apache]
enabled = verdadero
puerto = http, https
filtro = apache-auth
logpath = /var/log/apache/custom_log_location.log
maxretry = 3
findtime =
600. . .
La cárcel anterior se hará cargo de la prohibición de los fallos de autenticación básica. Hay también algunas otras cárceles preconfigurados que valen habilitación (el [apache-multipuerto]
cárcel es una cárcel legado que no es necesario).
El [apache-noscript]
la cárcel se utiliza para prohibir los clientes que están en busca de secuencias de comandos en el sitio web para ejecutar y explotar. Si usted no utiliza PHP o cualquier otro idioma junto con su servidor web, puede habilitar esta cárcel para prohibir aquellos que solicitan este tipo de recursos:
[apache-noscript]
enabled =
verdadero. . .
El [apache-desbordamientos]
la cárcel se utiliza para bloquear los clientes que están intentando solicitar URLs inusualmente largos y sospechosas. Estos son a menudo signos de los intentos de aprovechar Apache tratando de provocar un desbordamiento de búfer. Puede activar esta cárcel si desea evitar que este tipo de ataques:
[apache-desbordamientos]
enabled =
verdadero. . .
Algunas comprobaciones adicionales pueden hacerse copiando y pegando la [apache-desbordamientos]
entrada y modificando ligeramente. Por ejemplo, puede copiar y pegar esa sección y modificar el nombre de la cárcel y filtrar a apache-badbots
para detener algunos patrones de solicitud de bots maliciosos conocidos:
[apache-desbordamientos]
enabled = verdadero
puerto = http, https
filtro = apache-desbordamientos
logpath = /var/log/apache*/*error.log
maxretry = 2
[-badbots apache]
enabled = verdadero
puerto = http, https
filtro = apache-badbots
logpath = /var/log/apache*/*error.log
maxretry = 2
Si usted no utiliza Apache para proporcionar acceso al contenido de la web dentro de los directorios personales de los usuarios, puede copiar y pegar de nuevo y cambiar los nombres de cárcel y filtrar aapache-nohome:
[apache-desbordamientos]
enabled = verdadero
puerto = http, https
filtro = apache-desbordamientos
logpath = /var/log/apache*/*error.log
maxretry = 2
[-badbots apache]
enabled = verdadero
puerto = http, https
filtro = apache-badbots
logpath = /var/log/apache*/*error.log
maxretry = 2
[-nohome apache]
enabled = verdadero
puerto = http, https
filtro =-apache nohome
logpath = / var / log / apache * / * error .log
maxretry = 2
Por último, si usted está usando Apache con PHP, es posible que desee habilitar la [php-url-fopen]
la cárcel, que bloquea los intentos de utilizar un determinado comportamiento de PHP para fines maliciosos.Es probable que tenga que cambiar el logpath
directiva para señalar la ubicación del registro de acceso correcto (en Ubuntu, la ubicación predeterminada es /var/log/apache2/access.log). Puede utilizar un patrón similar a la que coincida con el registro de errores en las otras cárceles:
[php-url-fopen]
enabled = verdadero
puerto = http, https
filtro = php-url-fopen
logpath = /var/log/apache*/*access.log
Cuando haya terminado de realizar las modificaciones que necesita, guardar y cerrar el archivo.
La implementación de sus configuraciones Apache
Para aplicar los cambios de configuración, tendrá que reiniciar el fail2ban
servicio. Puede hacerlo escribiendo:
- sudo restart fail2ban servicio
El servicio debe reiniciar, la aplicación de las diferentes políticas que prohíben que ha configurado.
fail2ban-client
comando:- sudo estado fail2ban-client
Usted debe ver una lista de todas las cárceles que se activaron:
Situación
| - Número de la cárcel: 7
`- Cárcel lista: php-url-fopen, apache-desbordamientos, apache-noscript, ssh, apache-badbots, apache-nohome, apache
Se puede ver que fail2ban
ha modificado sus reglas de firewall para crear un marco para la prohibición de los clientes. Incluso sin reglas de firewall anteriores, debería tener ahora un marco permitió que permite fail2ban
prohibir selectivamente clientes mediante su inclusión en cadenas construidos expresamente:
- sudo iptables -S
ENTRADA -P ACCEPT
-P FORWARD ACCEPT
SALIDA -P ACCEPT
fail2ban-apache -N
-N fail2ban-apache-badbots
-N fail2ban-apache-nohome
-N fail2ban-apache-noscript
-N fail2ban-apache-desbordamientos
-N fail2ban php- url-fopen
-N fail2ban-ssh
-A ENTRADA -p -m tcp multipuerto --dports 80443 -j fail2ban-apache-nohome
-A INPUT -p tcp -m multipuerto --dports 80,443 -j fail2ban-apache-badbots
- A ENTRADA -p -m tcp multipuerto --dports 80443 -j fail2ban-php-url-fopen
-A INPUT -p tcp -m multipuerto --dports 80443 -j fail2ban-apache-desbordamientos
-A INPUT -p tcp -m multipuerto --dports 80443 -j fail2ban-apache-noscript
-A ENTRADA -p -m tcp multipuerto --dports 80443 -j fail2ban-apache
-A INPUT -p tcp -m multipuerto --dports 22 -j fail2ban-ssh
-A fail2ban -apache -j RETURN
-A fail2ban-apache-badbots -j RETURN
-A fail2ban-apache-nohome -j RETURN
-A fail2ban-apache-noscript -j RETURN
-A fail2ban-apache-desbordes -J VOLVER
-A fail2ban php- url-fopen -j RETURN
-A fail2ban-ssh -j RETURN
Si desea ver los detalles de las prohibiciones de ser aplicadas por cualquier cárcel, es probable que sea más fácil utilizar el cliente fail2ban
nuevo:
- sudo fail2ban-client estado de apache
Estado de la cárcel: apache
| - Filtro
| | - Lista de archivos: /var/log/apache2/error.log
| | - En la actualidad no: 0
| `- Total falló: 0
'- Acción
| - Actualmente prohibido: 0
| `- Lista de direcciones
IP:` - Total prohibido: 0
Es importante poner a prueba tus fail2ban
políticas para asegurar que bloquean el tráfico como se esperaba. Por ejemplo, para la solicitud de autenticación de Apache, puede dar credenciales incorrectas en varias ocasiones. Después de haber superado el límite, debe ser prohibido y no puede acceder al sitio.Si configura las notificaciones de correo electrónico, debería ver mensajes relacionados con la prohibición de la cuenta de correo electrónico que nos ha facilitado.
Si nos fijamos en el estado con el fail2ban-cliente
del sistema, usted podrá ver su dirección IP está prohibido en el sitio:
- sudo fail2ban-client apache estado
Estado de la cárcel: apache
| - Filtro
| | - Lista de archivos: /var/log/apache2/error.log
| | - En la actualidad no: 0
| `- Total falló: 12
'- Acción
| - Actualmente prohibido: 1
| `- Lista de direcciones IP:
111.111.111.111` - Total prohibido: 1
Cuando esté satisfecho de que sus normas están trabajando, puede manualmente ban de su dirección IP con el cliente fail2ban
escribiendo:
- sudo fail2ban-cliente configurar apache unbanip 111.111.111.111
Ahora debería ser capaz de intentar la autenticación de nuevo.
Conclusión
Configuración de fail2ban
para proteger su servidor Apache es bastante sencillo en el caso más simple.Sin embargo, fail2ban
proporciona una gran flexibilidad para la construcción de políticas que se adapten a sus necesidades de seguridad específicas. Al echar un vistazo a las variables y patrones dentro de la /etc/fail2ban/jail.local
de archivos y los archivos depende de dentro de los/etc/fail2ban/filter.d
y /etc/fail2ban/action.d
directorios, puede encontrar muchas piezas de ajustar y cambiar a medida que evolucionan sus necesidades. Aprender los conceptos básicos de cómo proteger su servidor con fail2ban
puede proporcionarle una gran cantidad de la seguridad con el mínimo esfuerzo.