Proteger SSH con fail2ban en CentOS
Acerca de Fail2ban
Los servidores no existen de forma aislada, y los servidores con la configuración más básica de SSH pueden ser vulnerables a los ataques de fuerza bruta. Fail2ban proporciona una manera de proteger automáticamente el servidor de los signos maliciosos. El programa funciona escaneando archivos de registro y reaccionando a acciones ofensivas como repetidos intentos fallidos de inicio de sesión.
Paso uno: Instalar Fail2ban
Debido a que fail2ban no está disponible en CentOS, debemos comenzar descargando el repositorio EPEL:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Seguimiento mediante la instalación de fail2ban:
yum install fail2ban
Paso dos: Copie el Archivo de Configuración
El archivo de configuración fail2ban predeterminado es la ubicación en /etc/fail2ban/jail.conf. El trabajo de configuración no debe hacerse en ese archivo, sin embargo, y deberíamos hacer una copia local de él.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Una vez copiado el archivo, puede realizar todos los cambios dentro del nuevo archivo jail.local. Muchos de los posibles servicios que pueden necesitar protección ya están en el archivo. Cada uno se encuentra en su propia sección, configurado y apagado.
Paso tres: Configure los Valores Predeterminados en la Jail Local
Abra el nuevo archivo de configuración fail2ban:
vi /etc/fail2ban/jail.local
La primera sección de defaults cubre las reglas básicas que fall2ban seguirá. Si desea configurar una protección más matizada para su servidor privado, puede personalizar los detalles en cada sección.
Puede ver la sección predeterminada a continuación.
[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 = 3600
# 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
Escriba su dirección IP personal en la línea de ignoreip . Puede separar cada dirección con un espacio. IgnoreIP le permite un lista en blanco con ciertas direcciones IP y asegurarse de que no están bloqueadas desde su servidor. Incluir su dirección garantizará que usted no se prohíbe accidentalmente de su propio servidor privado.
El siguiente paso es decidir por un bantime, el número de segundos que un host será bloqueado desde el servidor si se descubre que está en violación de cualquiera de las reglas. Esto es especialmente útil en el caso de los bots, que una vez prohibidos, simplemente pasarán al siguiente objetivo. El valor predeterminado es de 10 minutos; puede subirlo a una hora (o más) si lo desea.
Maxretry es la cantidad de intentos de inicio de sesión incorrectos que un host puede tener antes de que sean prohibidos durante la duración del tiempo de prohibición.
Findtime se refiere a la cantidad de tiempo que un host tiene que iniciar sesión. El ajuste predeterminado es 10 minutos; Esto significa que si un host intenta, y falla, iniciar sesión más que el número máximo de veces en los 10 minutos designados, será prohibido.
Paso Cuatro: (Opcional) Configure la sección ssh-iptables en la Jail Local
La sección de detalles de SSH está un poco más abajo en la configuración, y ya está configurada y activada. Aunque no se le debe pedir hacer cambios en esta sección, puede encontrar los detalles de cada línea a continuación.
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath = /var/log/secure
maxretry = 5
Enabled: simplemente se refiere al hecho de que la protección SSH está activada . Puede desactivarlo con la palabra "false".
El filter: establecido de forma predeterminada en sshd, hace referencia al archivo de configuración que contiene las reglas que fall2banuses para encontrar coincidencias. El nombre es una versión abreviada de la extensión de archivo. Por ejemplo, sshd se refiere a /etc/fail2ban/filter.d/sshd.conf.
Action: describe los pasos que fall2ban tomará para prohibir una dirección IP coincidente. Al igual que la entrada del filtro, cada acción hace referencia a un archivo dentro del directorio "action.d". La acción de prohibición predeterminada, "iptables" se puede encontrar en /etc/fail2ban/action.d/iptables.conf.
En los detalles de "iptables", puede personalizar aún más fail2ban. Por ejemplo, si está utilizando un puerto no estándar, puede cambiar el número de puerto dentro de los corchetes para que coincida, haciendo que la línea se vea más así:
eg. iptables[name=SSH, port=30000, protocol=tcp]
También puede cambiar el protocolo de TCP a UDP en esta línea, dependiendo de cuál desea que fail2ban monitorice.
Si tiene configurado un servidor de correo en su servidor privado, fail2ban puede enviarle un correo electrónico cuando encuentre una prohibición de una dirección IP. En el caso por defecto, el sendmail-whois se refiere a las acciones localizadas en /etc/fail2ban/action.d/sendmail-whois.conf.
Ruta de acceso de registro se refiere a la ubicación de registro que fail2ban realizará el seguimiento.
La línea maxretry dentro de la sección SSH tiene la misma definición que la opción predeterminada. Sin embargo, si ha habilitado varios servicios y desea tener valores específicos para cada uno, puede establecer la nueva cantidad máxima de reintentos para SSH aquí.
Paso Cinco: Reiniciar Fail2ban
Después de realizar cualquier cambio en la configuración de fail2ban, siempre asegúrese de reiniciar Fail2Ban:
sudo service fail2ban restart
Puede ver las reglas que fail2ban pone en efecto dentro de la tabla IP:
iptables -L
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian