Gigastur

Servicios informáticos

  • Inicio
  • Blog
    • Comandos Linux
    • Comandos Windows
    • MySQL
    • Laravel
    • Steam
    • Herramientas Sysadmin
    • Recursos webmaster
  • Control remoto
  • 216.73.217.62

Evitar accesos no deseados por SSH con fail2ban

02/06/2017 por Igor García Deja un comentario

Contenidos

  • 1 Introducción
  • 2 Instalación y configuración
  • 3 Comprobar IPs bloqueadas
  • 4 Bloquear IP
  • 5 Desbloquear IP
  • 6 Envío de avisos por email
  • 7 Comprobación de errores (testing filters)
  • 8 Comprobar la configuración
  • 9 Saber país de origen de las IP bloqueadas
  • 10 Reportar IPs bloqueadas a AbuseIPDB
  • 11 Alternativas
  • 12 Más información

Introducción

Si tenemos instalado un servidor Linux con acceso desde el exterior por SSH podemos comprobar en el fichero /var/log/auth.log muchas entradas del tipo:
Failed password for invalid user 1234 from 163.172.227.51 port 61482 ssh2
May 22 12:41:12 server sshd[13690]: Invalid user admin from 163.172.227.51
May 22 12:41:12 server sshd[13690]: input_userauth_request: invalid user admin [preauth]
May 22 12:41:15 server sshd[13690]: Failed password for invalid user admin from 163.172.227.51 port 62014 ssh2
May 22 13:03:13 server sshd[13933]: Invalid user support from 222.254.76.38
May 22 13:03:13 server sshd[13933]: input_userauth_request: invalid user support [preauth]
May 22 13:03:16 server sshd[13933]: Failed password for invalid user support from 222.254.76.38 port 39190 ssh2

Son intentos de acceso por fuerza bruta fallidos que podemos evitar gracias a fail2ban.

Fail2ban es un potente programa que comprueba los logs de distintos servicios y, si encuentra varios intentos de acceso fallidos desde la misma IP, la bloquea a través de iptables.

Viene configurado por defecto para filtrar accesos por SSH, pero también puede filtrar accesos por Apache, MySQL, Postfix y más. Cada uno de los filtros por servicio los define como jails, así podemos hablar de jail de SSH, jail de Apache, etc.

Instalación y configuración

Veamos como podemos instalar y configurar fail2ban en Ubuntu 16.04:

sudo apt install fail2ban

El fichero de configuración es /etc/fail2ban/jail.conf, pero lo copiaremos como jail.local y trabajaremos sobre esta copia, ya que el jail.conf se puede sobreescribir en posteriores actualizaciones del sistema:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Editaremos jail.local, atentiendo a estos parámetros bajo la sección [DEFAULT]:

  • ignoreip: Aquí podemos indicar IPs que fail2ban no bloqueará. Por defecto es 127.0.0.1/8, para evitar bloquear al propio servidor. Podemos indicar otras IPs separadas por espacio.
  • bantime: Tiempo en segundos que permanecerá bloqueado un equipo. Podemos poner -1 para un bloqueo permanente.
  • findtime: Tiempo en que se comprueban los accesos fallidos desde una IP. 600 segundos por defecto. Trabaja en conjunto con maxretry.
  • maxretry: Máximo número de intentos fallidos durante el tiempo indicado en findtime antes de bloquear una IP. 3 por defecto. Así, por ejemplo, si hay desde una misma IP 3 intentos de acceso fallidos en 600 segundos, la bloqueará.

Si queremos que fail2ban monitorice otro servicio aparte de SSH, vamos a /etc/fail2ban/jail.d/, copiamos el archivo defaults-debian.conf a defaults-debian.local y añadimos ahí los servicios que queramos monitorizar con este formato:

[sshd]
enabled = true
[sshd-ddos]
enabled = true

Me gusta añadir siempre monitorización para los ataques de ddos además de los de SSH. Podemos comprobar todos los servicios disponibles para monitorizar en el fichero jail.local (vienen entre corchetes).

Una vez hechos los cambios los hacemos efectivos con:

service fail2ban reload

Para comprobar que está funcionando hacemos sudo iptables -L -n y devolverá algo como esto:

Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-sshd-ddos tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22
f2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22


Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain f2b-sshd (1 references)
target prot opt source destination
REJECT all -- 59.45.175.86 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 62.210.178.242 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Chain f2b-sshd-ddos (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Vemos que tenemos un jail SSH y otro DDOS e incluso ha bloqueado un par de IPs por intentos fallidos por SSH.

Comprobar IPs bloqueadas

Podemos comprobar las Ips bloqueadas de varias formas diferentes:

  • Con iptables:
    sudo iptables -L -n
  • Con el propio comando de fail2ban:
    fail2ban-client status NOMBRE_DEL_JAIL
    El nombre del Jail será en este caso sshd o sshd-ddos. Podemos comprobar todos los jail activos con:
    fail2ban-client status
    Esta forma es la menos cómoda porque las IPs bloqueadas no se muestran una por línea, aunque puede sernos útil ya que muestra el número total de IPs bloqueadas.
  • Buscando en los logs de fail2ban:
    zgrep 'Ban' /var/log/fail2ban.log*

Si queremos confirmar el bloqueo de una IP concreta podemos combinar los anteriores comandos con grep para buscar esa IP.

Bloquear IP

Para bloquear una IP concreta para un servicio o jail concreto:

fail2ban-client set NOMBRE_DEL_JAIL banip DIRECCION_IP

Para bloquearla con iptables de cualquier acceso al sistema:

iptables -I INPUT -s DIRECCION_IP -j DROP

Desbloquear IP

Si comprobamos con los comandos anteriores que se ha bloqueado una IP legítima,  podemos desbloquearla con este comando:

fail2ban-client unban DIRECCION_IP

Para desbloquear una IP de un jail concreto:

fail2ban-client set NOMBRE_DEL_JAIL unbanip DIRECCION_IP

Para desbloquear TODAS las IP bloqueadas de un jail concreto (solo desde la versión 0.10.0):

fail2ban-server set NOMBRE_DEL_JAIL unbanip --all

Para desbloquear todas las IP bloqueadas de todos los jail:

fail2ban-server unban --all

El nombre del Jail será en este caso sshd o sshd-ddos. Podemos comprobar todos los jail activos con:

fail2ban-client status

Envío de avisos por email

Podemos configurar fail2ban para que nos mande un mail por cada nueva IP que bloquee, indicando un WHOIS de la misma, cambiando o añadiendo, en la sección [DEFAULT] del archivo jail.local:

action = %(action_)s

por

action = %(action_mwl)s

  • action_ indica que sólo se hará el baneo de IP.
  • action_mw además de banear la IP, enviará un correo con información del WHOIS
  • action_mwl banea la IP, envía correo con información WHOIS y además incluye en el correo entradas relevantes del log

Esta configuración por defecto envia un mail al usuario root. En mi caso tengo configurado que los mails a root lleguen también a una cuenta de correo añadiéndola al archivo /root/.forward de esta manera:

correo@gigastur.es,root@localhost

Si queremos personalizar el contenido del mail, consultar el archivo /etc/fail2ban/action.d/sendmail-whois.conf.

Así funciona porque mi correo está alojado en el mismo servidor que fail2ban. Para correos externos, como gmail.com o hotmail.com, habría que configurar en el jail.conf o jail.local las variables destemail (para indicar el mail destinatario), sender (mail que aparecerá como remitente) y mta (mail o sendmail), pero la configuración puede ser más complicada que esto y seguramente estos mails acaben en la bandeja de spam o ni siquiera lleguen. En estos casos puedes consultar el blog de technicalramblings.

Comprobación de errores (testing filters)

En caso de problemas, podemos comprobar el log de fail2 ban en /var/log/fail2ban.log

Si habeis usado expresiones regulares, podeis validarlas con el comando fail2ban-regex. Por ejemplo:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Para testear el filtro con otros modos:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf[logtype=short,mode=aggressive]

Comprobar la configuración

El siguiente comando nos devolverá la configuración que está aplicando fail2ban, aunque no de forma muy amigable:

fail2ban-client --dp

Saber país de origen de las IP bloqueadas

Podemos saber el origen de una IP con el comando geoiplookup.

Lo instalamos y ejecutamos así:

sudo apt install geoip-bin
geoiplookup {IP}

Si tenemos instalado el firewall CSF podemos saberlo con este comando:

csf -i {IP}

Para consultar con un comando todas las IP bloqueadas:

iptables -n -L f2b-sshd | grep REJECT | awk '{print $4}' | xargs -n1 geoiplookup | sort | uniq -c

Podemos hacer que fail2ban nunca bloquee IPs de un país concreto:

https://www.webfoobar.com/node/54

Más información de bloqueo por países:

https://ipinfodb.com/

https://www.ip2location.com/free/visitor-blocker

Reportar IPs bloqueadas a AbuseIPDB

AbuseIPDB es una página web que registra IPs maliciosas. Podemos integrar su API con fail2ban para que las IPs que bloqueamos sean reportadas a su base de datos.

Alternativas

  • CrowdSec: como fail2ban, pero además registra y comprueba las IPs con una lista negra global
  • denyhosts: Algunas diferencias con fail2ban:
    • Denyhosts solo bloquea accesos por SSH mientras que fail2ban, no solo viene configurado de serie para monitorizar más servicios, sino que se le puede configurar cualquier servicio que registre los intentos de acceso en un log.
    • Denyhosts bloquea las IP añadiéndolas a /etc/hosts.deny mientras que fail2ban las bloquea a través del firewall de linux.
    • Denyhosts puede configurarse para bloquear IPs obtenidas a través de internet de una base de datos de IPs maliciosas conocidas.
  • Sshguard: muy similar a fail2ban, comprueba los logs en busca de logins fallidos de diferentes servicios y bloquea las IPs en el firewall. Pero sólo funciona con SSH.
  • Snort: detección y prevención de intrusiones en tiempo real.
  • CSF: Completo firewall con opcion, entre muchas otras, de bloquear IP tras intentos de acceso fallidos. También tiene posibilidad de bloqueo por países.

Más información

Página oficial de fail2ban

Categorías: Linux, Sistemas Etiquetas: denyhosts, fail2ban, seguridad, ssh

Deja una respuesta Cancelar la respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Categorías

Enlaces

  • Anti Ransomware
  • Buenas practicas Ransomware
  • BuiltWith
  • cdlibre
  • Chocolatey
  • CIDR Calculator
  • Consulta numero móvil
  • Cual es mi IP
  • Descarga de OCX
  • Descarga de RPM
  • Descarga de Windows y Office (2)
  • Descarga de Windows y Office (2)
  • Descarga de Windows y Office (3)
  • Dumo
  • European Alternatives
  • explainshell
  • File-extensions
  • FileHippo
  • Fosshub
  • Geolocalización Multi IP
  • HDDScan
  • htaccesstools
  • Ip Location
  • Kaspersky
  • LinuxServer.io
  • Máquinas Virtuales OSBoxes
  • Microsoft Doc
  • ms-vnext: Windows y Office
  • Ninite
  • Nirsoft
  • Onworks
  • Open Source Alternatives
  • Patch My PC
  • PC decrapifier
  • PCI Lookup
  • PCI-IDS
  • pcidatabase
  • PCIids
  • Port Listener
  • Portable Freeware
  • Router Passwords
  • Saber tipografía de una foto
  • Shodan
  • Ssega
  • Sumo
  • Sysinternals
  • SystemRescueCd
  • Test de velocidad
  • Virustotal
  • Windows ISO
  • Windows Minios
  • WizTree
  • You Get Signal

Contacto

  • 615 654 407
  • info@gigastur.com

Entradas recientes

  • Thunderbird no muestra todas las carpetas en la vista de carpetas unificada
  • Activar X11 SSH Forwarding en Linux
  • Adobe Acrobat: evitar que pida login al entrar
  • Borrado recursivo de carpetas en Windows desde comandos DOS y Powershell
  • Arreglar error de vista previa PDF en Windows 10 y Windows 11

Control remoto

  • Control remoto Windows
  • Control remoto MAC
  • Versión completa Windows
  • Servicio Windows
  • Control remoto XP
  • Servicio XP

Aviso legal | Política de privacidad | Política de cookies

Utilizamos cookies para ofrecerte la mejor experiencia en nuestra web.

Puedes aprender más sobre qué cookies utilizamos o desactivarlas en los .

Gigastur
Powered by  GDPR Cookie Compliance
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Analítica

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.