Tips para proteger tu servidor Linux de ataques externos

Supongo que las personas que manejen servidores Linux saben y conocen acerca de DenyHOSTS y Fail2ban. Para aquellos que no lo conocen voy a explicarles un poco sobre estas dos aplicaciones.

John Fredy Perez es uno de los ganadores de nuestra competencia semanal: “Compartí lo que sabés sobre Linux“. ¡Felicitaciones! ¿Ansioso por participar y hacer tu aporte a la comunidad, como lo hizo John?

Instalaremos y configuraremos estas dos aplicaciones para no tener posteriores dolores de cabeza. Antes que nada explicaremos qué son estas dos aplicaciones y cuál es su función:

Fail2Ban

Es un analizador de logs que busca intentos fallidos de registro y bloquea las IP’s de donde provienen estos intentos. Se distribuye bajo la licencia GNU y típicamente funciona en todos los sistemas que tengan interfaz con un sistema de control de ataques o un firewall local.

Fail2Ban tiene una gran configuración pudiendo, además, crear reglas para programas
propios o de terceros.

DenyHOSTS

Es una herramienta de seguridad escrita en python que monitorea los registros del servidor de acceso para prevenir ataques de fuerza bruta en un servidor virtual. El programa funciona mediante la prohibición de direcciones IP que superan un determinado número de intentos de conexión fallidos.

Estas aplicaciones para Linux -DenyHosts y Fail2ban- pueden usarse por separado o de forma conjunta. En mi caso las tengo a las dos trabajando juntas.

La instalación y configuración de cada una ellas depende de la distribución que usen ustedes. Este post está orientado hacia CentOS 6.3, aunque las diferencias entre las demás distros no son muy marcadas.

Bueno entonces manos a la Obra.

Instalación y Configuración de Fail2Ban

Esta aplicación genera reglas dinámicas en el propio firewall de Linux, y se encarga de crear reglas vivas en IpTables.

Instalación

Para la instalación basta con un:

yum install fail2ban 

Si no les aparece el paquete, debemos agregar el repositorio necesario:

rpm -Uvh http://mirror.metrocast.net/fedora/epel/6/i386/epel-release-6-7.noarch.rpm

ya con esto debe empezar a instalar la aplicación junto con sus dependencias.

Ahora hay que configurar Fail2Ban para que analice los logs que deseamos y bloquee
IP’s, enviando notificaciones vía e-mail. Para ello debemos modificar el archivo jail.conf que encontramos en /etc/fail2ban

cd /etc/fail2ban
nano jail.conf

En este archivo se debe realizar lo siguiente:

  • Modificar es el valor bantime, este valor determina el tiempo en segundos que quedará bloqueada la IP del atacante, por defecto el valor viene en 600 segundos.
  • Buscar el valor maxretry que serán el número de veces que una IP puede tener una autenticación fallida antes de ser bloqueada.
  • Agregar nuestras ip’s en el parámetro ignoreip. Aquí la aplicación pasara por alto nuestras IP autenticadas en dicho parámetro.

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# "bantime" is the number of seconds that a host is banned.
bantime = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

Un ejemplo de como puede quedar es de la siguiente manera:

ignoreip = 127.0.0.1 190.25.242.75 192.168.1.0/24
bantime = 800
maxretry = 2

Configurar Fail2Ban y SSH

Para que busque intentos fallidos de logueo por SSH modificamos el archivo hasta que quede como lo que sigue a continuación:

[ssh-iptables] 
enabled = true
filter = sshd
action = iptables[name=SSH, port=22, protocol=tcp]sendmail-whois[name=SSH, dest=FredySnake@outlook.com, sender=fail2ban@localhost]logpath = /var/log/secure # Este es el log que analizará fail2ban
maxretry = 3 # cualquier IP que tenga tres o más intentos erroneos se bloqueara.
bantime = 86400 # Tiempo de baneo de 24 horas expresado en segundos

No olvides que si modificas el puerto donde escucha el SSH, deberás modificar también el parámetro port.

Esta aplicación no sólo funciona para accesos no autorizados en SSH, también para apache, para que lea los registros de Asterisk, etc.

Instalación y Configuración de DenyHOSTS

Su funcionamiento se basa en el uso del archivo /etc/hosts.deny, es decir, en bloquear las direcciones de los hosts “atacantes”, creando una lista de hosts denegados.

La instalación desde los repositorios la podemos obtener con el siguiente comando:

yum install denyhosts 

El archivo de configuración se encuentra en /etc/denyhosts.conf

Antes de seguir, ya que como humanos que somos podemos equivocarnos y hacer el típico “Capa 8” al acceder a alguno de los servicios y bloquearnos a nosotros mismos. Para evitar eso, editamos el archivo /etc/hosts.allow y añadimos las IP de las máquinas desde las cuales no queremos que se nos pongan restricciones ante un fallo de acceso.

Modificación archivo denyhosts.conf

Para no ir tan a fondo en las configuraciones, en este archivo sólo vamos a editar y descomentar algunos parámetros. Éstos son:

SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
SYNC_INTERVAL = 1h
SYNC_UPLOAD = yes
SYNC_DOWNLOAD = yes
SYNC_DOWNLOAD_THRESHOLD = 3
SYNC_DOWNLOAD_RESILIENCY = 5h

Así, dejaremos una configuración prácticamente por defecto, pero con una gran seguridad frente ataques por SSH.

nano /etc/hosts.allow

Ejemplo:

sshd: 127.0.0.1 
sshd: 192.168.1.10
sshd: 192.168.0.*

Despues de esto, reiniciamos el servicio:

/etc/init.d/denyhosts restart

Con esto le estamos dando permiso a una ip, un rango de IP y por supuesto a nuestra interfaz de loopback. Algo que no he probado -por lo tanto no se si funciona- es agregar DNSs a este archivo; es decir, con servicios como DynDNS. Si lo realizo les comento como me fue.

Con ciertas opciones y ajustes también haremos que tras el período de tiempo que indiquemos en la configuración de DenyHOSTS se vayan limpiando las direcciones almacenadas, y se vayan actualizando con otras listas hechas por otros -si así lo indicamos- dando permiso para acceder al servidor de DenyHOSTS.

Para que se purguen las direcciones almacenadas cada cierto tiempo, según se haya configurado, se debe ejecutar el demonio con el parámetro –purge:

/etc/init.d/denyhosts start --purge

Además de esto, debemos incluirlo al inicio del sistema:

chkconfig denyhosts on


0 comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *