Sshguard (Español)

From ArchWiki
Estado de la traducción: esta traducción de Sshguard fue revisada el 2018-09-03. Si existen cambios puede actualizarla o avisar al equipo de traducción.
Advertencia: Utilizar de una lista negra de IP detendrá ataques triviales, pero esto le supondrá el uso de un demonio adicional y de un registro fiable (la partición donde esté /var puede llenarse, especialmente si un atacante está golpeando el servidor). Además, con el conocimiento de su dirección IP, el atacante puede enviar paquetes con un encabezado de fuente falsificado y bloquearlo fuera del servidor. SSH keys le ofrece una solución elegante al problema del ataque de fuerza bruta, sin tantos inconvenientes.

sshguard es un demonio que protege a SSH y otros servicios contra los ataques de fuerza bruta, similar a fail2ban.

sshguard es diferente de este último en cuanto que está escrito en C, es más ligero y más simple de usar y con menos características, mientras realiza la función que se espera de él igual de bien.

sshguard no es vulnerable a la mayoría (o, tal vez, a ninguno) de los análisis de registros, vulnerabilidades que han causado problemas para aplicaciones similares.

Instalación

Instale el paquete sshguard.

Ajustes

sshguard funciona monitorizando /var/log/auth.log, syslog-ng o el journal de systemd para intentos fallidos de inicio de sesión. Para cada intento fallido, el servidor infractor tiene prohibido continuar comunicándose con nuestro equipo durante un tiempo limitado. La cantidad de tiempo predeterminada que el atacante está baneado comienza en 120 segundos, y se incrementa en un factor de 1,5 cada vez que falla en otro intento de iniciar sesión. sshguard se puede configurar para prohibir permanentemente un servidor del que se tienen registrados demasiados intentos fallidos.

Las prohibiciones temporales y permanentes se realizan añadiendo una entrada en la cadena («chain») «sshguard» en iptables que descarta todos los paquetes del atacante. La prohibición se registra en syslog y termina en /var/log/auth.log, o en el journal de systemd, si se está utilizando este último.

Debe configurar uno de los siguientes cortafuegos para usarlo con sshguard para que funcione el bloqueo.

FirewallD

sshguard puede funcionar con Firewalld. Asegúrese, primero, de activar y configurar Firewalld. Para hacer que sshguard escriba en su zona de preferencia, emita las siguientes órdenes:

# firewallctl zone "<nombre_de_la_zona>" --permanent add rich-rule "rule source ipset=sshguard4 drop"

Si usa ipv6, puede emitir la misma orden pero sustituyendo sshguard4 con sshguard6. Se terminaría con:

# firewall-cmd --reload

Puede verificar lo anterior con:

# firewall-cmd --info-ipset=sshguard4

Finalmente, en /etc/sshguard.conf, busque la línea para BACKEND y cámbiela de la siguiente manera

BACKEND="/usr/lib/sshguard/sshg-fw-firewalld"

UFW

Si UFW está instalado y activado, se le debe dar la capacidad de pasar el control de DROP a sshguard. Esto se logra modificando /etc/ufw/before.rules para que contenga las líneas de abajo, que se deben insertar justo después de la sección para los dispositivos loopback.

Nota: Los usuarios que ejecuten sshd en un puerto no estándar, deben sustituir el mismo en la línea final anterior (donde 22 es el estándar).
/etc/ufw/before.rules
# permitir todo en loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# entregar el control de sshd a sshguard
-N sshguard
-A ufw-before-input -p tcp --dport 22 -j sshguard

Reinicie ufw después de hacer esta modificación.

iptables

Nota: Consulte primero iptables y Simple stateful firewall para configurar un cortafuegos.

Lo principal que requiere la configuración es crear una cadena llamada sshguard, donde sshguard inserta automáticamente reglas para descartar paquetes de red provenientes de servidores peligrosos:

# iptables -N sshguard

A continuación, hay que agregar una regla para saltar desde la cadena INPUT a la cadena sshguard. Esta regla debe añadirse antes de cualquier otra regla que procese los puertos que sshguard protege. Utilice la siguiente línea para proteger FTP y SSH, o vea esta documentación para más ejemplos.

# iptables -A INPUT -m multiport -p tcp --destination-ports 21,22 -j sshguard

Para guardar las reglas:

# iptables-save > /etc/iptables/iptables.rules
Nota: Para IPv6, repita los mismos pasos con ip6tables y guarde las reglas con ip6tables-save en /etc/iptables/ip6tables.rules.

nftables

Edite /etc/sshguard.conf y cambie el valor de BACKEND como sigue:

/etc/sshguard.conf
BACKEND="/usr/lib/sshguard/sshg-fw-nft-sets"

Además, necesitará editar el servicio sshguard.service para que iptables no se ejecute:

[Service]
ExecStartPre= 

Cuando inicie/active el servicio sshguard.service, se agregararán dos nuevas tablas llamadas sshguard en las familias de direcciones ip y ip6, que filtran el tráfico entrante a través de la lista de direcciones IP de sshguard. Las cadenas en la tabla sshguard tienen una prioridad de -10 y, por tanto, se procesarán antes que otras reglas de menor prioridad. Consulte 7 sshguard-setup( 7) y nftables para obtener más información.

Utilización

systemd

Active e inicie sshguard.service.

syslog-ng

Si tiene syslog-ng instalado, puede iniciar sshguard directamente desde la línea de órdenes.

/usr/sbin/sshguard -l /var/log/auth.log -b /var/db/sshguard/blacklist.db

Configuración

La configuración se realiza en el archivo /etc/sshguard.conf, necesario para que sshguard se inicie. Un ejemplo comentado se encuentra en /usr/share/doc/sshguard/sshguard.conf.sample.

Nota: Las órdenes de tuberías y los indicadores de tiempo de ejecución en las unidades de systemd para sshguard no son compatibles. Tales indicadores se pueden modificar en el archivo de configuración.

Umbral de la lista negra

De forma predeterminada, en el archivo de configuración proporcionado por Arch, los atacantes quedan permanentemente prohibidos una vez que alcanzan un nivel de «peligro» de 120 (o 12 intentos de inicios de sesión fallidos —consulte attack dangerousness para más detalles—). Este comportamiento puede modificarse anteponiendo un nivel de peligro distinto en el archivo de la lista negra.

BLACKLIST_FILE=200:/var/db/sshguard/blacklist.db

El nivel 200: en este ejemplo, le dice a sshguard que bloquee permanentemente un servidor después de alcanzar un nivel de peligro de 200.

Finalmente reinicie sshguard.service.

Ejemplo moderado de baneado

He aquí una regla de prohibición ligeramente más agresiva que la predefinida, para ilustrar otras opciones. Fiscalizamos sshd y vsftpd a través de los registros del journal de systemd. Bloqueamos a los atacantes después de 2 intentos durante 180 segundos y el tiempo de bloqueo posterior aumentará en un factor de 1,5. Tenga en cuenta que esta función de retraso multiplicativo es interna y no está controlada por la configuración siguiente. Los atacantes son recordados durante 3600 segundos y permanecen en la lista negra después de 10 intentos (10 intentos con un costo de 10 cada uno, lo que explica el parámetro «100» en la configuración de la lista negra). Bloqueamos no solo la IP del atacante, sino también toda la subred IPv4 24 (notación CIDR).

BACKEND="/usr/lib/sshguard/sshg-fw-iptables"
LOGREADER="LANG=C /usr/bin/journalctl -afb -p info -n1 -t sshd -t vsftpd -o cat"
THRESHOLD=20
BLOCK_TIME=180
DETECTION_TIME=3600
BLACKLIST_FILE=100:/var/db/sshguard/blacklist.db
IPV4_SUBNET=24

Baneado agresivo

Para algunos usuarios sometidos a ataques constantes, se puede adoptar una política de prohibición más agresiva. Si está seguro de que los intentos de inicios de sesión fallidos son poco probables que sean accidentales, puede indicar a SSHGuard que prohíba permanentemente los servidores después de un solo intento de inicio de sesión fallido. Modifique los parámetros en el archivo de configuración de la siguiente manera:

THRESHOLD=10
BLACKLIST_FILE=10:/var/db/sshguard/blacklist.db

Finalmente reinicie sshguard.service.

Además, para evitar múltiples intentos de autenticación durante una sola conexión, es posible que desee cambiar /etc/ssh/sshd_config definiendo:

MaxAuthTries 1

Reinicie sshd.service para que este cambio surta efecto.

Consejos y trucos

Desbloquear

Si la prohibición de una IP la realiza usted mismo, puede esperar a que se desbloquee automáticamente o puede utilizar iptables o nftables para destrabarla.

iptables

Primero compruebe si la IP está baneada por sshguard:

# iptables --list sshguard --line-numbers --numeric

A continuación, utilice la siguiente orden para desbloquearla, con el número de línea obtenido de la orden anterior:

# iptables --delete sshguard line-number

También deberá eliminar la dirección IP de /var/db/sshguard/blacklist.db para que el desbloqueo sea persistente.

nftables

Elimine la dirección IP del conjunto de attackers:

# nft delete element family sshguard attackers { ip_address }

donde family es ip o ip6.

Registro

Para ver qué se pasa a través de sshguard, examine el script en /usr/lib/systemd/scripts/sshguard-journalctl y el servicio de systemd sshguard.service. Puede utilizar una orden equivalente para ver los registros en el terminal:

# journalctl -afb -p info SYSLOG_FACILITY=4 SYSLOG_FACILITY=10