¿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), fail2banpuede 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:

    $sudo apt-get update ...

    $ sudo apt-get install fail2ban

    Fedora

    Para sistemas basados en Fedora también utilizaremos el manejador de paquetes por defecto del sistema:

    $ yum update
    ...
    $ yum install fail2b

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.

 Ajuste de los parámetros generales dentro Fail2Ban

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 fail2banpolí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:

/etc/fail2ban/jail.local


[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:

/etc/fail2ban/jail.local


[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 maxretryintentos dentro de la cantidad de tiempo establecido por findtime, estarán prohibidas:

/etc/fail2ban/jail.local


[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»:

/etc/fail2ban/jail.local


[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:

/etc/fail2ban/jail.local


[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:

/etc/fail2ban/jail.local


[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»:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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:

/etc/fail2ban/jail.local
[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.

Puedes ver todas las configuraciones habilitadas mediante el uso de la fail2ban-client comando:
  • sudo estado fail2ban-client

Usted debe ver una lista de todas las cárceles que se activaron:

Producción
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
Producción
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
Producción
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
 Políticas de pruebas fail2ban

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
Producción
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.