Instalar Fail2Ban

    En esta entrada, veremos como configurar Fail2Ban para localizar patrones de acceso y en consecuencia, bloquear.

    Por ejemplo, viendo los logs del sistema, vemos que la IP 185.161.248.218, está intentando acceder al servidor con un usuario root (masivamente):

    Feb 12 12:13:36 node01 unix_chkpwd[3947]: password check failed for user (root)
    Feb 12 12:13:36 node01 sshd[3945]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=185.161.248.218 user=root
    Feb 12 12:13:38 node01 sshd[3945]: Failed password for root from 185.161.248.218 port 8289 ssh2
    Feb 12 12:13:38 node01 sshd[3945]: Received disconnect from 185.161.248.218 port 8289:11: Client disconnecting normally [preauth]
    Feb 12 12:13:38 node01 sshd[3945]: Disconnected from authenticating user root 185.161.248.218 port 8289 [preauth]

    Para ello, vamos a:

    • Deshabilitar Firewall
    • Instalar IPtables
    • Definir entradas/salidas IPtables
    • Instalar Fail2Ban
    • Configurar Fail2Ban
    Paramos, deshabilitamos y eliminamos el servicio FirewallD (en caso disponer)

    systemctl stop firewalld
    systemctl disable firewalld

    systemctl mask --now firewalld
    systemctl mask firewalld

    Instalamos IPtables

    yum clean all
    yum install -y iptables-services iptables-utils

    systemctl enable iptables
    systemctl start iptables

    Configuramos reglas para iptables donde permitiremos (ACCEPT) únícamente acceso via puerto 22, 80 y 443. El resto, bloqueamos (DROP).

    iptables -nvL
    iptables -F INPUT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --dport http -j ACCEPT
    iptables -A INPUT -p tcp --dport https -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -j DROP

    /usr/sbin/iptables-save > /etc/sysconfig/iptables
    /usr/sbin/iptables-save | uniq | iptables-restore
    /usr/sbin/iptables-save > /etc/sysconfig/iptables
    /usr/sbin/iptables-restore < /etc/sysconfig/iptables
    /usr/libexec/iptables/iptables.init save

    Instalamos Fail2Ban

    yum -y install epel-release
    yum -y update
    yum -y install sqlite fail2ban fail2ban-all geoip

    systemctl enable fail2ban
    systemctl start fail2ban

    Llegados a este punto, el servicio ya estará funcionando. Ahora, vamos a crear una regla para bloquear accesos no deseados por el puerto 22 (SSH) durante un periodo determinado (20 minutos):

    cat > /etc/fail2ban/jail.d/sshd.conf << EOF
    [sshd]
    enabled = true
    port = ssh
    logpath = %(sshd_log)s
    maxretry = 2
    banaction = iptables-multiport[name="SSH", port="22", protocol=tcp]
    bantime = 20m
    backend = systemd
    EOF

    Para asegurar que funciona, localizamos la traza en el log:

    ==> /var/log/secure <==
    Feb 18 20:15:39 node01 sshd[5595]: Connection from 159.89.123.103 port 48322 on 139.162.206.138 port 22
    Feb 18 20:15:39 node01 sshd[5595]: Invalid user kafka from 159.89.123.103 port 48322
    Feb 18 20:15:39 node01 sshd[5595]: pam_unix(sshd:auth): check pass; user unknown
    Feb 18 20:15:39 node01 sshd[5595]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=159.89.123.103
    Feb 18 20:15:41 node01 sshd[5595]: Failed password for invalid user kafka from 159.89.123.103 port 48322 ssh2

    En este momento, Fail2Ban se ejecuta y detecta un acceso no válido por parte de 159.89.123.103 donde su ejecución (Ban) es la siguiente:

    ==> /var/log/fail2ban.log <==
    2024-02-18 20:15:42,022 fail2ban.filter [5524]: INFO [sshd] Found 159.89.123.103 - 2024-02-18 20:15:41
    2024-02-18 20:15:42,065 fail2ban.actions [5524]: NOTICE [sshd] Ban 159.89.123.103

    Como se observa, se ha bloqueado la IP 159.89.123.103 en el filtro que hemos configurado anteriormente

    [root@node01 ~]# fail2ban-client status sshd
    Status for the jail: sshd
    |- Filter
    | |- Currently failed: 0
    | |- Total failed: 28
    | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
    |- Currently banned: 1
    |- Total banned: 5
    `- Banned IP list: 159.89.123.103

    Quien es 159.89.123.103? Que reputación tiene? Lo podemos ver el en AbuseIPDB aunque ya se aprecia que era un acceso ilícito que hemos bloqueado con facilidad

    Pasados los 20 minutos, anteriormente configurados, veremos que se aplica automáticamente un desbloqueo (Unban):

    ==> /var/log/fail2ban.log <==
    2024-02-18 20:35:42,392 fail2ban.actions [744]: NOTICE [sshd] Unban 159.89.123.103

    Leave a Reply

    Your email address will not be published. Required fields are marked *