Detén la fuerza bruta SSH en tus servidores Linux

SSH Protector es un demonio Linux ligero que detiene los ataques de fuerza bruta SSH: analiza los registros de autenticación en tiempo real y descarta automáticamente las direcciones IP maliciosas mediante reglas nftables/iptables en el kernel, con menos de 10 MB de memoria residente. El demonio SSH Protector lee systemd-journald - o /var/log/auth.log en los equipos que aún ejecutan rsyslog -, cuenta los eventos «Failed password» e «Invalid user» por dirección de origen y, en cuanto un origen supera el umbral configurado, el demonio confirma una única regla de netfilter que cubre todo el /24 del atacante. Cada veredicto se calcula en el propio equipo protegido, de modo que la protección contra fuerza bruta SSH sigue funcionando durante una caída del plano de control, y el conjunto de reglas se reconstruye desde disco tras un reinicio.

Instalar con un comando
curl -fsSL https://sshprotector.com/download/installer | sudo sh

La versión gratuita incluye protección completa para un servidor. Protección contra fuerza bruta SSH para servidores Linux

Un binario estático, cualquier distribución Linux basada en systemd

  • Debian · Ubuntu · Fedora
  • RHEL · Alma · Rocky · Alpine
  • x86-64 · ARM64 · backends nftables e iptables
  • menos de 10 MB RSS · CPU casi nula

Instala el agente

Un mismo binario para todos y sin cuenta para descargarlo. Instálalo ahora y conecta el servidor cuando quieras: el agente pide un token de inscripción de tu panel y no protege nada hasta que lo pegues.

Descargar script de instalación

Cualquier Linux moderno con systemd - Debian, Ubuntu, RHEL/CentOS/Alma/Rocky, Fedora - en x86-64 o ARM64. El script instala el mismo servicio y es la opción práctica para un parque de servidores.

Un puerto SSH expuesto recibe tráfico de relleno de credenciales las 24 horas

Las botnets de escaneo recorren todo el espacio de direcciones IPv4 enrutable y prueban listas de contraseñas contra cada equipo que responde en TCP/22. Un demonio SSH accesible desde internet recibe ese tráfico tanto si el equipo es un bastión corporativo como si es un único VPS.

Miles de autenticaciones fallidas al día
Un equipo nuevo que responde en TCP/22 empieza a registrar autenticaciones SSH fallidas pocas horas después de que su dirección pase a ser enrutable. Un servidor típico expuesto a internet registra a diario miles de eventos «Failed password» e «Invalid user» en systemd-journald, procedentes de rangos de direcciones que rotan más rápido de lo que cualquier administrador puede revisar.
CPU, memoria y escrituras de diario gastadas en tráfico que nunca se autenticará
Cada intento de autenticación SSH cuesta un apretón de manos TCP, un intercambio de claves SSH, un recorrido de la pila PAM a través de /etc/pam.d/sshd y una escritura síncrona en systemd-journald. Un flujo sostenido de fuerza bruta mantiene así una carga de fondo permanente en el equipo, infla el almacenamiento del diario y empuja los inicios de sesión administrativos reales detrás de la cola MaxStartups de sshd, sin que el atacante tenga que autenticarse para lograrlo.
Una sola contraseña adivinada es un compromiso total
Una única contraseña correcta concede un intérprete de comandos interactivo con los privilegios de esa cuenta: preparación de ransomware, exfiltración de datos o spam saliente atribuido a la dirección del propio equipo. Las contraseñas débiles o reutilizadas de una filtración pública caen ante un ataque de diccionario en cuestión de días, y el registro de autenticación anota el intento correcto exactamente igual que cualquier otra línea.
pam_faillock convierte el ataque en un bloqueo del administrador real
La pila PAM configurada en /etc/pam.d/sshd cuenta los fallos consecutivos con pam_faillock y bloquea la cuenta en cuanto se alcanza el umbral deny. Un atacante que solo ha adivinado un nombre de usuario válido - nunca la contraseña - puede por tanto disparar ese contador a propósito y dejar al administrador real fuera del equipo. El resultado es una denegación de servicio producida íntegramente por el mecanismo de defensa.

SSH Protector traslada la decisión del espacio de usuario al hook input de netfilter

El demonio SSH Protector correlaciona los eventos de autenticación fallidos por red de origen y confirma una regla nftables que descarta todo el /24 del atacante. Una vez que esa regla existe, netfilter descarta los paquetes en el hook input del kernel: antes de que sshd acepte una conexión, antes de cualquier recorrido de PAM y antes de escribir nada en el diario. La carga de CPU, el volumen del diario y el número de intentos que llegan a la comprobación de contraseña bajan a la vez.

Planes fijos, sin sorpresas por servidor

Free es gratis para siempre, sin tarjeta. Los planes de pago tienen un precio fijo con un número determinado de servidores incluidos.

Free

1 servidor
$0/mes

Protección SSH básica para un servidor.

  • Protección SSH contra fuerza bruta
  • Lista blanca flexible
  • Estadísticas mínimas

Solo

1 servidor
$9/mes

Protección completa para un servidor de producción.

  • Todo lo de Free
  • Protección FTP contra fuerza bruta
  • Estadísticas completas
  • Notificaciones por email
  • Auditoría básica

Pro

PopularHasta 5 servidores
$15/mes

Para equipos y flotas pequeñas de servidores.

  • Todo lo de Solo
  • Lista blanca estricta y grupos
  • Auditoría completa con exportación
  • Estadísticas ampliadas
  • Lista de bloqueo por comportamiento compartida

Enterprise

Hasta 50 servidores
$99/mes

Para empresas con una gran flota de servidores.

  • Todo lo de Pro
  • Roles de administrador y moderador
  • Soporte prioritario
  • Lista de bloqueo por comportamiento compartida

¿Necesitas un servidor más de los que incluye tu plan? Añade servidores de uno en uno por 3 $ al mes cada uno, sin cambiar de plan.

14 días de Pro gratis, sin tarjeta

Regístrate y prueba en tu propio servidor el bloqueo de subredes, las alertas por Telegram, GeoIP y la base de amenazas compartida. Al terminar, la cuenta vuelve sola a Free y la protección sigue funcionando. No se cobra nada y no hay nada que cancelar.

Empezar la prueba gratuita

Cómo detener los ataques de fuerza bruta SSH en Linux (3 métodos)

Tres cambios de configuración reducen lo que llega a sshd, y se acumulan. Los dos primeros no necesitan nada más que OpenSSH y el cortafuegos del equipo; en el tercero compiten Fail2ban, CrowdSec, SSHGuard y SSH Protector. Este es el orden en que conviene aplicarlos.

  1. 01Desactivar la autenticación por contraseña en sshd_config

    Un ataque de adivinación de contraseñas no tiene nada que adivinar en cuanto sshd deja de aceptar contraseñas por completo. Las directivas PasswordAuthentication no y KbdInteractiveAuthentication no en un fichero drop-in bajo /etc/ssh/sshd_config.d/ eliminan toda la superficie de adivinación de credenciales, y PermitRootLogin prohibit-password conserva el acceso root por clave a la vez que cierra el nombre de cuenta más atacado. El orden importa más que las directivas: instalar primero la clave pública, comprobar después en una segunda sesión aún abierta que la clave autentica, y solo entonces recargar sshd; una errata aplicada en el orden equivocado deja al administrador fuera de un equipo remoto sin vuelta atrás.

    # /etc/ssh/sshd_config.d/10-keys-only.conf
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PermitRootLogin prohibit-password
    Guía completa
  2. 02Reducir cuánto de internet alcanza el puerto

    Mover sshd a un puerto no estándar con la directiva Port elimina el tráfico de escáneres no dirigidos y nada más; un escaneo del rango completo de puertos vuelve a encontrar el demonio en segundos, así que cambiar de puerto compra registros más tranquilos, no seguridad. Filtrar el puerto, en cambio, elimina al atacante: una regla nftables que acepta el puerto SSH solo desde un rango VPN o un prefijo de oficina fijo significa que un origen no listado ni siquiera completa el apretón de manos TCP. AllowGroups en sshd_config estrecha la misma exposición en el nivel del demonio, restringiendo qué cuentas locales pueden autenticarse siquiera. En un equipo con un conjunto conocido de administradores, ambas cosas pertenecen a la configuración.

    # /etc/ssh/sshd_config.d/20-exposure.conf
    Port 2202
    AllowGroups ssh-admins
    
    # nftables: only the VPN and the office reach it at all
    nft add rule inet filter input tcp dport 2202 \
      ip saddr { 10.8.0.0/24, 203.0.113.7 } accept
    Guía completa
  3. 03Banear la red de origen antes de que acumule suficientes intentos

    Fail2ban es la primera respuesta estándar, y es razonable: el proceso fail2ban-server analiza el registro de autenticación, cuenta los fallos dentro de findtime y llama a una acción que programa iptables o nftables durante bantime. Los límites de ese diseño son estructurales, no accidentales: una jail por defecto banea una dirección cada vez, el baneo expira con un temporizador, no se comparte nada entre equipos y una jail basada en expresiones regulares puede dejar de coincidir en silencio tras un cambio de formato de registro, sin ninguna señal de que la protección se ha detenido. CrowdSec responde al problema de compartir con una lista de bloqueo comunitaria y un proceso bouncer aparte; SSHGuard mantiene su estado en memoria; DenyHosts escribe en /etc/hosts.deny, lo que depende de TCP wrappers, con los que las compilaciones actuales de OpenSSH ya no se enlazan. El demonio SSH Protector banea todo el /24 del atacante con una regla nftables, conserva el conjunto de reglas entre reinicios y comparte lo que un equipo protegido ha aprendido con todos los demás.

    # /etc/fail2ban/jail.d/sshd.local
    [sshd]
    enabled  = true
    backend  = systemd
    maxretry = 4
    findtime = 10m
    bantime  = 1h
    Guía completa

Qué cubre una sola regla de subred

Mueve los deslizadores. Esto es aritmética, no un benchmark.

Banear una dirección cada vez

32 reglas de cortafuegos

128 intentos siguen llegando a sshd

Banear todo el /24

1 reglas de cortafuegos

4 intentos siguen llegando a sshd

Un /24 tiene 256 direcciones. Con baneos por dirección, un bot que pasa a la siguiente recupera su cupo cada vez; cuando el baneo cubre el rango, ninguna. Aquí no hay nada medido: es la misma cuenta que hace el agente.

SSH Protector, Fail2ban, CrowdSec, SSHGuard, DenyHosts y Wazuh

Seis herramientas que responden a la misma pregunta en un equipo Linux. La tabla describe cada una en su configuración por defecto, porque es la que un equipo ejecuta realmente mientras nadie le dedique trabajo adicional.

HerramientaUnidad del baneoEstado tras un reinicioFuente de registrosPunto de aplicaciónReputación entre equipos
SSH ProtectorTodo el /24, con conocimiento del ASNEl conjunto de reglas se reconstruye desde discoAPI de systemd-journald, auth.log, registros del demonio FTPConjunto nftables en el hook input de netfilterSí: agregada entre todos los equipos protegidos
Fail2banUna dirección por jail predeterminadaBase de datos SQLite, restaurada al reiniciar hasta que expira bantimeSondeo de auth.log, pyinotify o backend = systemdiptables, nftables o ipset mediante una acciónNo: cada equipo decide por su cuenta
CrowdSecDirección o rango, según el escenarioBase de decisiones local, restauradaAdquisición de registros mediante analizadores configuradosnftables o iptables mediante un proceso bouncer aparteSí: lista de bloqueo comunitaria
SSHGuardUna direcciónSe mantiene en memoria; solo persiste con un fichero de lista negra explícitoTubería de registros desde journald o un fichero de syslogBackend nftables, iptables, pf o ipfwNo
DenyHostsUna dirección/etc/hosts.deny, persiste como ficheroSolo auth.log, solo SSHTCP wrappers, con los que las compilaciones actuales de OpenSSH ya no se enlazanServidor central de sincronización opcional
WazuhUna direcciónLa respuesta activa expira con su propio tiempo de esperaRecolector de registros del agente que alimenta a un gestor centralScript de respuesta activa firewall-drop en el agenteGestor central, al coste de operarlo

Cada celda describe el comportamiento por defecto. A Fail2ban se le puede hacer banear un prefijo CIDR con una acción propia, un bouncer de CrowdSec puede apuntarse a un ipset y a SSHGuard se le puede dar un fichero de lista negra: la columna indica qué ocurre sin ese trabajo. La fila de SSH Protector es la única que este sitio puede verificar desde dentro; las demás se han leído en la documentación de cada proyecto y se desarrollan en la guía de abajo.

Leer la comparativa completa con Fail2ban

Dónde se detiene realmente un intento de fuerza bruta SSH en Linux

Todas las herramientas de esta categoría - Fail2ban, CrowdSec, SSHGuard, DenyHosts, Wazuh y el demonio SSH Protector - leen los mismos registros y escriben en el mismo cortafuegos. Lo que las separa es en qué etapa de la ruta de autenticación de Linux actúa cada una, y cuánto ha gastado ya el equipo para entonces.

sshd y la pila PAM
Una conexión entrante llega a sshd, que completa el apretón de manos TCP y el intercambio de claves SSH antes de examinar credencial alguna, y luego entrega la credencial a la pila PAM declarada en /etc/pam.d/sshd: pam_unix verifica la contraseña y pam_faillock cuenta los fallos consecutivos. Nada en esa ruta rechaza tráfico: cuando se comprueba la primera contraseña, sshd ya ha reservado una sesión y gastado CPU. MaxAuthTries y LoginGraceTime acotan lo que puede intentar una sola conexión, no cuántas conexiones abre un atacante, y por eso sshd_config por sí solo no responde a un ataque de fuerza bruta distribuido.
systemd-journald y /var/log/auth.log
Cada resultado de autenticación se escribe en systemd-journald, y en los equipos que aún ejecutan rsyslog los mismos registros llegan también a /var/log/auth.log en Debian y Ubuntu, o a /var/log/secure en RHEL, CentOS, AlmaLinux y Rocky Linux. El registro de autenticación es el único lugar donde «este origen ha fallado cuarenta veces en dos minutos» llega a ser conocible, porque un paquete en el kernel no lleva ningún resultado de autenticación. El coste de analizar los registros es el precio de ese conocimiento, y lo pagan todas las herramientas de la categoría: el demonio SSH Protector lee el diario a través de su API nativa en lugar de seguir un fichero de texto, lo que elimina el coste de una expresión regular por línea y la clase de fallo en la que una distribución cambia un formato de registro y una jail deja de coincidir en silencio.
netfilter: nftables, iptables y conjuntos
Un baneo solo existe cuando existe una regla en el kernel. nftables y el más antiguo iptables programan ambos netfilter, cuyo hook input se ejecuta antes de que un paquete llegue a encolarse en un socket de sshd, de modo que un paquete descartado no cuesta ningún proceso en espacio de usuario, ninguna sesión ni ninguna escritura en el diario. Un conjunto de nftables - o un ipset detrás de iptables - mantiene muchos prefijos tras una única consulta de regla, y por eso el número de reglas, y no el número de direcciones baneadas, es lo que realmente cuesta un esquema de lista negra de IP a velocidad de paquete. SSH Protector escribe una entrada de conjunto nftables por cada /24 baneado y mantiene el conjunto persistente, de modo que el filtrado de paquetes en el kernel, y no un demonio en espacio de usuario, hace el trabajo por paquete.
eBPF y XDP, y lo que no resuelven
Los programas eBPF enganchados en XDP descartan un paquete en el controlador de red, antes que netfilter y a mayor velocidad de paquete, lo que convierte a eBPF en la herramienta correcta contra una inundación volumétrica. Sin embargo, un programa XDP no puede leer /var/log/auth.log, no ve ningún resultado de PAM y no distingue una contraseña incorrecta de una correcta, así que la decisión de qué prefijo descartar sigue naciendo del análisis de registros en espacio de usuario en cualquier diseño. Para el tráfico de fuerza bruta SSH - baja velocidad de paquete con un intento de autenticación de alto valor - el hook input de netfilter descarta el tráfico mucho antes de que el equipo note la carga, y toda la dificultad de ingeniería está en decidir qué descartar.
La lista negra de IP y por qué importa la unidad del baneo
Una lista negra de IP aguanta solo mientras el atacante conserva la dirección que se ganó el baneo. Las botnets de escaneo rotan dentro de una asignación, así que un baneo por dirección concede a cada dirección siguiente del mismo /24 un cupo entero y nuevo de intentos: hasta 256 cupos por rango. Un baneo expresado como prefijo CIDR concede ese cupo exactamente una vez para todo el rango. Esto es aritmética, no un banco de pruebas, y la calculadora de abajo muestra la misma cuenta que realiza el demonio SSH Protector.

De la descarga a un servidor protegido en minutos

Sin archivos de configuración ni línea de comandos: descargue el instalador, ejecútelo y confirme el aviso de sudo.

  1. Cree una cuenta

    Registro con email o mediante Google/GitHub. No se necesita tarjeta.

  2. Descargue el instalador

    Recibe un instalador personal firmado con su token de acceso ya incorporado.

  3. Ejecútelo en el servidor

    El agente detecta el puerto SSH por sí solo y añade su IP actual a la lista blanca para que no pueda bloquearse a sí mismo.

  4. Listo

    El servidor aparece en línea en el panel en cuestión de segundos y empieza a bloquear atacantes con ajustes predeterminados razonables.

Protección contra fuerza bruta, reputación compartida, política geográfica y gestión de flota

Filtrado de paquetes en el kernel gobernado por el análisis del registro de autenticación, ampliado con reputación de atacantes compartida entre clientes, política geográfica, acceso justo a tiempo y gestión centralizada de la flota.

Protección de SSH, SFTP y FTP contra fuerza bruta

El demonio SSH Protector lee los eventos de autenticación fallidos de systemd-journald y del registro propio del demonio FTP, los correlaciona por prefijo de origen y escribe el baneo en nftables en ese mismo equipo. La ruta de decisión nunca sale de la máquina, así que el baneo se confirma en el kernel incluso mientras el plano de control está inaccesible.

Baneo por prefijo CIDR en lugar de por dirección

Las botnets de escaneo rotan direcciones dentro de una misma asignación, así que un baneo por dirección entrega a cada dirección siguiente un cupo nuevo. SSH Protector resuelve el origen a su prefijo anunciado con datos de ASN y banea todo el /24 como una única entrada en un conjunto nftables consolidado.

Reputación de atacantes compartida entre clientes

Un ataque contra un equipo protegido eleva la puntuación de reputación de ese prefijo de origen para todos los demás equipos de la plataforma. Los prefijos con peor reputación agregada se descartan en el hook input de netfilter antes de que hayan hecho un solo intento de autenticación contra un servidor determinado.

Política geográfica evaluada localmente

La política geográfica restringe la autenticación SSH y FTP a los países desde los que la organización opera realmente. La tabla de países se entrega al agente y se evalúa localmente, de modo que el filtrado geográfico no añade ninguna ida y vuelta de red y sigue funcionando con el plano de control sin conexión.

Acceso justo a tiempo con MFA

El acceso justo a tiempo mantiene el puerto SSH filtrado por defecto y lo abre para una sola dirección de origen tras una solicitud confirmada con MFA, con temporizador de caducidad y cierre automático. La regla nftables se elimina al terminar el temporizador, se acuerde alguien o no de revocarla.

Lista blanca y modo estricto

Las direcciones y nombres DNS dinámicos en lista blanca quedan exentos de toda ruta de baneo, y la lista blanca se evalúa antes que cualquier regla de bloqueo. En modo estricto, la política nftables acepta el puerto protegido solo desde orígenes en lista blanca y descarta todo lo demás sin evaluar siquiera la reputación.

Alertas y registro de auditoría de solo anexado

Los picos en la tasa de baneos, un agente que se queda sin conexión y la deriva de configuración se entregan por correo, Telegram, Slack o webhook. Cada cambio de política, baneo, desbaneo y edición de la lista blanca se escribe en un registro de auditoría de solo anexado, con el actor y la dirección de origen.

Un binario estático, menos de 10 MB residentes

El agente es un ejecutable enlazado estáticamente que corre como unidad de systemd, con un conjunto residente por debajo de 10 MB y un uso de CPU que se mantiene cerca de cero entre eventos de autenticación. El mismo binario cubre cualquier distribución basada en systemd sobre x86-64 y ARM64, sin intérprete, sin runtime de Python y sin dependencias de paquetes que resolver.

Gestión centralizada sin puertos entrantes

El panel guarda el inventario de servidores, las plantillas de políticas, la fijación y reversión de versión del agente, los grupos y las acciones masivas sobre la flota. El tráfico de gestión es HTTPS saliente iniciado por el agente, así que no se abre ningún puerto entrante en un equipo protegido para que funcione la gestión centralizada.

Protección permanente contra el bloqueo de pam_faillock

La protección permanente contra bloqueos garantiza que pam_faillock no pueda volverse contra la cuenta que administra el equipo: el demonio SSH Protector banea el prefijo de origen antes de que se alcance el umbral deny de /etc/pam.d/sshd y pone a cero el contador de faillock de las cuentas protegidas. El comportamiento viene activado por defecto en todos los planes, incluido el gratuito.

Cuándo proteger un servidor Linux se vuelve realmente necesario

Quince situaciones en las que el acceso remoto a una máquina Linux deja de ser un riesgo teórico y pasa a ser uno diario. Si reconoce su propio servidor en alguna de ellas, sus contraseñas ya se están probando.

0.0.0.0/022 · 21LISTEN 0.0.0.0$sshduptime 412dno consoleone host · always on

Cuándo es necesario proteger un servidor SSH en Linux

El primer grupo trata de la máquina en sí: dónde está, quién llega hasta ella y qué más escucha en ella. Ninguna de estas situaciones supone un error. Son formas corrientes y sensatas de operar un servidor Linux, y todas ellas colocan una petición de contraseña delante de Internet entero.

  1. 01

    SSH es alcanzable desde cualquier sitio y las contraseñas siguen funcionando

    El puerto 22 responde a todas las direcciones del mundo, sin una VPN delante y sin un bastión. Ese es el estado por defecto de una máquina alquilada: el proveedor entrega una dirección pública, el servidor se configura precisamente por SSH y, terminada la instalación, el puerto simplemente se queda donde estaba, normalmente con la autenticación por contraseña todavía activa junto a las claves.

    Rastrear todo el rango IPv4 es cuestión de minutos, no de días. Una dirección recién asignada empieza a recibir intentos de conexión pocas horas después de aparecer en la red, mucho antes de que el servidor tenga nombre, certificado o un solo usuario real. Desde ese momento la máquina responde a desconocidos las veinticuatro horas.

    • Un VPS o instancia en la nube accesible en su dirección pública
    • Un equipo de oficina tras un router, con el puerto 22 redirigido hacia él
    • Un servidor abierto «temporalmente» para una migración y nunca cerrado
    • Una máquina cuya dirección nunca se publicó, pero que igualmente cae dentro de un rango rastreado
  2. 02

    La imagen de la nube trae un nombre de usuario que ya conoce todo el mundo

    Las imágenes de distribuciones y proveedores llegan con una primera cuenta conocida: root en un VPS desnudo, ubuntu en Ubuntu, ec2-user, debian, admin, pi. La mitad del problema de adivinar -encontrar un usuario válido- está resuelta antes de que la máquina termine su primer arranque.

    Por eso un servidor expuesto ve todo el día la misma lista corta de nombres en su registro. El atacante no tiene que averiguar nada: la cuenta es estándar, existe en una gran parte de los hosts Linux de Internet y en muchos de ellos todavía sirve para entrar directamente.

  3. 03

    Un solo VPS alquilado carga con la web, la base de datos y las copias

    Las empresas pequeñas y los proyectos de un solo desarrollador suelen meterlo todo en una máquina: el servidor web, la base de datos, la cola, el volcado nocturno. No hay un segundo host al que pasar ni un administrador dedicado: quien entra para desplegar es quien mantiene la máquina.

    La protección del proveedor no llega hasta aquí. Los alojamientos filtran avalanchas volumétricas de tráfico, no adivinación de contraseñas: unos pocos intentos por segundo desde direcciones que cambian sin parar parecen tráfico ordinario desde el punto de vista de la red, y el departamento de abusos no los verá jamás.

    • No hay margen: ante un compromiso el proyecto no se ralentiza, se detiene
    • Las copias suelen estar en el mismo disco, que es justo con lo que cuenta el ransomware
    • A nadie le pagan por leer auth.log, así que los intentos se acumulan sin verse
  4. 04

    La máquina Linux es un router, un NAS o un aparato que nadie considera un servidor

    Un cortafuegos, un almacenamiento en red, una Raspberry Pi con el software de caja de una tienda, un controlador en una sala técnica, un mini PC bajo una mesa que lanza las copias: todo eso es Linux, todo eso tiene SSH activado, y nada de eso aparece en la lista de servidores de nadie.

    Son precisamente esas máquinas las que se olvidan. Se instalan una vez, siguen funcionando, y entre el día en que se eligió la contraseña y el día en que alguien vuelve a mirarlas pasan años. Mientras tanto, el puerto lleva todo ese tiempo respondiendo a Internet.

  5. 05

    FTP escucha en el mismo host que SSH

    Un servidor Linux rara vez publica un solo servicio. Un punto FTP para intercambiar archivos con un cliente o un diseñador, más SSH para administrar, conviven habitualmente en la misma dirección, y las cuentas de FTP suelen ser más antiguas que todo lo demás en la máquina.

    Cada puerto abierto es una puerta distinta con su propia petición de credenciales, y los atacantes no se especializan. La misma infraestructura de rastreo prueba ambas en sucesión, y la más débil decide el destino de todo el host, porque quien entra por cualquiera de las dos está de pie sobre el mismo sistema operativo.

    • Cuentas FTP creadas una vez para un proveedor y nunca revisadas de nuevo
    • El FTP simple hace viajar las credenciales en claro por la red
    • Una cuenta de subida compartida cuya contraseña conoce media oficina
users triedrootadminubuntudeploypostgrestestpassword:PasswordAuthentication yesfailed9 999

Cuando las cuentas y las claves dejan de estar bajo control

El segundo grupo trata de quién tiene credenciales de la máquina. Claves, cuentas de despliegue, proveedores y contraseñas antiguas se acumulan más deprisa de lo que nadie las revisa, y todas terminan en la misma petición. Ahí empieza la mayoría de las intrusiones reales.

  1. 06

    Desarrolladores y proveedores tienen sus propios accesos

    Un desarrollador externo, una diseñadora que necesita subir una versión, una agencia que mantiene la web, el fabricante de una aplicación sectorial: cada uno pidió acceso, cada uno recibió una cuenta o una clave añadida a authorized_keys, y la mayor parte de esos accesos sigue viva años después de terminado el trabajo.

    Usted no ve cómo se guardan esas credenciales. Una clave privada puede estar sin cifrar en un portátil, en una carpeta compartida en la nube o en el directorio personal de un empleado que dejó aquella empresa hace un año. Un acceso concedido una vez suele sobrevivir tanto al proyecto como a la persona para la que se concedió.

    • Claves añadidas para un único despliegue y nunca retiradas
    • Una cuenta compartida por todo el equipo del proveedor en lugar de una por persona
    • Nadie le avisa cuando cambia el personal del proveedor
  2. 07

    Las cuentas de despliegue y automatización no pueden usar un segundo factor

    Las cadenas de integración continua, los guiones de copia, los agentes de monitorización, las tareas de rsync y las herramientas de configuración tienen que entrar sin una persona presente. Por tanto no se pueden proteger con nada que pida un código a un humano, y suelen tener permisos más amplios que cualquier individuo.

    Así que esas cuentas se quedan como están: nombres previsibles, claves o contraseñas que llevan años sin cambiar, y una vía de acceso que funciona a las tres de la madrugada sin que nadie lo note. Son las cuentas a las que apunta un atacante, precisamente porque nunca cambian.

  3. 08

    La autenticación por contraseña se dejó activa «por si acaso»

    El acceso por clave está montado y las contraseñas se mantienen habilitadas como respaldo: para el día en que se pierda una clave, para el compañero que no tiene, para la consola que nadie ha probado en un año. La intención es razonable; el efecto es que toda la política de claves resulta opcional desde el lado del atacante.

    A la adivinación le da igual que existan claves. Mientras PasswordAuthentication esté en yes para alguna cuenta de la máquina, el ataque por diccionario tiene una vía de entrada, y la clave más fuerte del servidor no lo frena ni un segundo.

  4. 09

    Contraseñas que ya figuran en una filtración

    La mayoría de las intrusiones con éxito no son ingeniosas. Alguien reutilizó una contraseña de un foro, de una tienda o de un correo antiguo que desde entonces se ha filtrado, y esa misma cadena está hoy en un diccionario que recorre cada bot de rastreo.

    Adivinar deja entonces de ser cuestión de probabilidad y pasa a ser cuestión de calendario: la contraseña correcta ya está en la lista, y lo único pendiente es cuándo llega el bot a su dirección. Las reglas de complejidad no ayudan aquí, porque esa contraseña puede cumplir perfectamente todas las que usted haya escrito.

    • Una contraseña repetida entre una cuenta del servidor y un servicio personal
    • Credenciales filtradas desde los sistemas de un proveedor, no desde los suyos
    • Patrones que una política acepta y un diccionario ya contiene: Verano2024!, NombreEmpresa1
  5. 10

    Una clave privada sin frase de paso en el portátil de alguien

    Las claves son más fuertes que las contraseñas justo hasta el momento en que se copia el fichero de la clave. Un id_rsa sin cifrar en un portátil robado, en una carpeta sincronizada en la nube, en una imagen de contenedor subida a un registro público o en un repositorio donde se confirmó por descuido es un acceso operativo que no hay ni que adivinar.

    El servidor no nota la diferencia. La firma es válida, la cuenta es real y la sesión se parece exactamente a la del desarrollador. Por eso la pregunta útil no es solo quién tiene una clave, sino qué ocurre cuando alguien se conecta desde un sitio en el que ese desarrollador nunca ha estado.

/var/log/auth.log22:0023:0124:0225:0326:0427:0528:0629:07this month12 480blockedexported · signed

Cuando la pregunta la plantean el registro, el auditor o el proveedor

El tercer grupo trata de las consecuencias que llegan antes que cualquier brecha. Los intentos que nunca prosperaron cuestan igualmente disco, procesador, atención y credibilidad. Y tarde o temprano alguien de fuera del equipo técnico hace una pregunta que hay que responder con pruebas y no con garantías verbales.

  1. 11

    Un auditor, una aseguradora o un cliente pregunta cómo se protege el acceso remoto

    Los cuestionarios de ciberseguro, las revisiones de seguridad de clientes corporativos y los marcos regulatorios sobre datos de pago o personales preguntan lo mismo con distintas palabras: qué detiene la adivinación repetida de contraseñas contra su acceso remoto y cómo sabe usted que funciona.

    «Usamos claves» no sobrevive a la siguiente pregunta, porque esa pregunta irá sobre las cuentas que aún aceptan contraseñas y sobre los intentos que llegan al puerto de todas formas. Lo que se pide es una medida que exista con independencia de cualquier credencial concreta y un registro que muestre que estuvo vigente durante todo el periodo revisado.

    • Un cuestionario de ciberseguro antes de emitir o renovar la póliza
    • La revisión de proveedores de un gran cliente antes de firmar un contrato
    • Normas sobre datos de pago o personales que exigen control frente a la fuerza bruta
  2. 12

    auth.log y el disco se llenan de accesos fallidos

    Cada intento rechazado queda anotado. En un servidor expuesto eso son decenas de miles de líneas de registro al día, y el efecto se agrava: la rotación descarta eventos reales en horas, el envío de registros se factura por volumen ingerido, y una partición raíz pequeña puede llenarse de verdad por culpa de tráfico al que nunca se iba a dejar entrar.

    El coste no es solo almacenamiento. Cada intento consume una conexión TCP, un intercambio de claves y una comprobación de credenciales, así que la máquina dedica una parte medible del día a responder a gente a la que nunca va a admitir. En un VPS de un núcleo esa parte es lo bastante grande como para que la note el trabajo para el que existe el servidor.

  3. 13

    Las listas de bloqueo mantenidas a mano se han convertido en un trabajo propio

    La primera reacción habitual es un filtro local y un montón creciente de reglas de cortafuegos. Funciona durante un tiempo, y luego el conjunto de reglas tiene miles de líneas, nadie recuerda para qué sirve la mitad, una delegación quedó bloqueada en una mañana cargada, y los mismos rangos de direcciones se redescubren desde cero en cada máquina nueva.

    Lo que un parque necesita de verdad es una política decidida una vez y aplicada en todas partes, excepciones registradas en lugar de recordadas, y bloqueos que no haya que reconstruir a mano cada vez que se reinstala un servidor.

  4. 14

    Un solo administrador atiende servidores de muchos clientes

    Los proveedores de servicios gestionados, los administradores de sistemas autónomos y las pequeñas empresas de alojamiento llevan decenas de máquinas Linux en clientes distintos, en proveedores distintos y en arquitecturas de red distintas. Cada una tiene sus reglas, sus cuentas y su propia tolerancia a la interrupción.

    Configurarlas de una en una a mano no escala, ni tampoco enterarse de un problema solo cuando llama el cliente. Un parque así necesita una base común aplicada en todas partes, excepciones por máquina allí donde un cliente realmente difiere, y un único sitio donde se vea todo a la vez.

    • Máquinas repartidas entre varios proveedores y rangos de direcciones
    • Un cliente cuya delegación no debe bloquearse jamás, por rara que parezca
    • Relevos entre administradores sin perder el motivo por el que se puso un ajuste
  5. 15

    El enlace con el servidor es poco fiable y la protección debe aguantar igual

    Los enlaces caen, los operadores reencaminan, el DNS se rompe, y una máquina en un bastidor remoto puede pasar horas sin ruta hacia el exterior. Los ataques no se detienen por ello; al contrario, una avería de red es justo el momento en que menos se observa el servidor.

    Lo que defiende el acceso tiene que decidir localmente, en la propia máquina, sin depender de alcanzar un servicio externo. Todo lo que deja de aplicarse cuando no hay Internet protege solo los días en que no hacía falta.

Preguntas frecuentes

¿Es seguro instalar SSH Protector en un servidor de producción?

¿Es seguro instalar SSH Protector en un servidor de producción?

Sí. El agente de SSH Protector lee el registro de autenticación de su propio sistema operativo y escribe reglas nftables que filtran el tráfico entrante hacia los puertos protegidos de ese mismo equipo. El agente no abre ningún socket a la escucha, no expone ningún canal de órdenes remotas e inicia únicamente HTTPS saliente. Nada dentro del agente puede actuar contra otra máquina.

¿En qué se diferencia SSH Protector de Fail2ban?

¿En qué se diferencia SSH Protector de Fail2ban?

Fail2ban analiza el registro de autenticación, cuenta los fallos dentro de findtime y programa el cortafuegos durante bantime, una dirección cada vez y solo en ese equipo. SSH Protector resuelve el origen a su prefijo anunciado y banea todo el /24 como una entrada de conjunto nftables, mantiene el conjunto entre reinicios en lugar de dejarlo expirar con un temporizador, lee systemd-journald a través de su API nativa en vez de emparejar líneas de texto con expresiones regulares, y comparte la reputación resultante con todos los demás equipos protegidos. La tabla de arriba pone ambos comportamientos por defecto uno junto a otro, y /guides/fail2ban-limitations desarrolla las diferencias por completo.

¿SSH Protector usa iptables o nftables?

¿SSH Protector usa iptables o nftables?

SSH Protector programa nftables por defecto, usando un conjunto con nombre para que muchos prefijos baneados queden tras una única consulta de regla en el hook input de netfilter. En equipos cuyo kernel o distribución sigue usando la ruta heredada, el agente recurre a iptables con ipset, lo que produce el mismo comportamiento a nivel de paquete. El agente detecta qué backend está en uso en lugar de suponerlo, y nunca vacía reglas que no haya creado él.

¿Cuál es el consumo de memoria y el coste de CPU?

¿Cuál es el consumo de memoria y el coste de CPU?

El agente es un ejecutable enlazado estáticamente con un conjunto residente por debajo de 10 MB y un uso de CPU que se mantiene cerca de cero entre eventos de autenticación, porque el trabajo por paquete ocurre en el kernel y no en el agente. El coste de analizar registros queda acotado al leer systemd-journald por su API nativa en lugar de seguir y emparejar con expresiones regulares /var/log/auth.log línea a línea.

¿La protección sigue funcionando sin conexión a internet?

¿La protección sigue funcionando sin conexión a internet?

Sí. Cada decisión de baneo se calcula en el equipo protegido a partir de su propio registro de autenticación, de modo que la protección contra fuerza bruta SSH continúa bajo la última política aplicada mientras el plano de control esté inaccesible. La reputación compartida es lo único que necesita conectividad, y su ausencia reduce la cobertura en vez de detener la protección local.

¿Por qué no usar eBPF o XDP en su lugar?

¿Por qué no usar eBPF o XDP en su lugar?

Un programa eBPF enganchado en XDP descarta paquetes en el controlador de red, que es la respuesta correcta a una inundación volumétrica. Un programa XDP no puede leer /var/log/auth.log, no puede observar un resultado de PAM y no puede distinguir una contraseña incorrecta de una correcta, así que la decisión sobre qué prefijo descartar sigue viniendo del análisis de registros en espacio de usuario. El tráfico de fuerza bruta SSH es una baja velocidad de paquete que transporta un intento de autenticación de alto valor, y el hook input de netfilter lo descarta mucho antes de que la velocidad de paquete llegue a ser la limitación.

¿Qué pasa si se cambió el puerto SSH?

¿Qué pasa si se cambió el puerto SSH?

El agente lee el puerto efectivo de sshd_config, de sus ficheros drop-in bajo /etc/ssh/sshd_config.d/ y de los sockets a la escucha del equipo, y reconstruye sus reglas nftables cuando ese puerto cambia. El puerto del demonio FTP se descubre igual, así que un puerto no estándar se detecta en lugar de configurarse.

¿Puede SSH Protector dejar fuera al administrador?

¿Puede SSH Protector dejar fuera al administrador?

No. El instalador añade a la lista blanca la dirección desde la que se ejecutó la instalación antes de confirmar la primera regla, y los orígenes en lista blanca se evalúan antes que cualquier ruta de bloqueo. La protección permanente contra bloqueos banea además un prefijo atacante antes de que se alcance el umbral deny de pam_faillock en /etc/pam.d/sshd, así que una tanda de fuerza bruta tampoco puede bloquear la cuenta real.

¿Qué distribuciones de Linux son compatibles?

¿Qué distribuciones de Linux son compatibles?

Cualquier distribución basada en systemd sobre x86-64 o ARM64: Debian, Ubuntu, RHEL, CentOS, AlmaLinux, Rocky Linux, Fedora y Alpine con systemd. El agente se entrega como un único binario enlazado estáticamente, así que en el equipo protegido no hay que resolver ningún intérprete, ningún runtime de Python ni ninguna dependencia de paquetes.

¿Cómo funciona el pago?

¿Cómo funciona el pago?

Los pagos internacionales los procesa PayPro Global como comerciante registrado, los pagos dentro de Rusia los procesa YooKassa, y la criptomoneda queda disponible como alternativa. El plan gratuito es permanente, cubre un servidor con protección completa contra fuerza bruta y no requiere tarjeta.

Protección SSH con autenticación de contraseña habilitada

Dejé habilitada la autenticación de contraseña y SSH escuchó en la dirección pública del servidor Linux. Hay miles de contraseñas fallidas de diferentes IP e inicios de sesión en auth.log, mover el puerto 22 no ayuda y el acceso no se puede bloquear por completo. ¿Cómo puedo configurar la protección SSH contra la fuerza bruta de la contraseña antes de iniciar sesión correctamente?

Con SSH Protector instalo el agente como un servicio systemd: lee el registro de autenticación localmente, determina el puerto sshd real y, después de un umbral de tiempo, bloquea la red de origen en el firewall del sistema. Agrego mi dirección o VPN a la lista blanca por adelantado, controlo el historial en el panel y guardo la política más reciente cuando pierdo Internet.

Gratis sin SSH Protector. Desactivo PasswordAuthentication y PermitRootLogin, dejo las claves en Ed25519, limito AllowUsers/AllowGroups y solo permito el puerto desde VPN o CIDR confiables. Si se requiere una contraseña temporalmente, configuro fail2ban usando journald/auth.log, reviso nftables/iptables, configuro findtime, maxretry y bantime, y pruebo periódicamente las excepciones desde la consola de respaldo.

Proteger el inicio de sesión estándar de una imagen de Linux en la nube

Implementé Ubuntu/Debian/RHEL desde una imagen de nube pública, por lo que los bots conocen de antemano el nombre de usuario ubuntu, debian, ec2-user o root. Incluso con una buena contraseña, el registro está lleno de intentos específicos y una contraseña equivocada deja la cuenta vulnerable. ¿Cómo puedo proteger SSH en un VPS en la nube con un inicio de sesión estándar?

Con SSH Protector bloqueo la fuente en los inicios de sesión fallidos reales sin importar el nombre que intente, y puedo extender la prohibición a la red del atacante. Verifico el puerto SSH encontrado, agrego la VPN administrativa a la lista blanca y uso una solución de agente local para que la protección no dependa de la disponibilidad del panel.

De forma gratuita, desactivo los inicios de sesión con contraseña y root, creo un usuario separado con sudo, subo una clave única a través de cloud-init y cierro el grupo de seguridad de la VPN/mis redes. Elimino las authorized_keys no utilizadas, habilito MFA en bastión, configuro fail2ban y alertas de contraseña/clave pública aceptadas para fuentes desconocidas; Considero cambiar el puerto solo para reducir el ruido.

Proteger un único VPS Linux con un sitio web y una base de datos

Tengo un VPS Linux, donde el sitio web, la base de datos y las copias de seguridad funcionan simultáneamente, y se necesita SSH para la administración. Iniciar sesión correctamente como usuario sudo le dará al atacante acceso a todas las capas y le permitirá eliminar archivos de copia de seguridad locales. ¿Cómo puedo proteger SSH en un VPS crítico con una carga mínima?

Con SSH Protector instalo un agente estático que lee eventos locales y bloquea la fuente en el firewall hasta que la cuenta se ve comprometida. Utilizo protección gratuita para el primer servidor, incluyo mi canal en la lista blanca y me aseguro de que el agente siga trabajando sin conexión; Dejo la copia de seguridad y el privilegio mínimo como capas separadas.

De forma gratuita, bloqueo SSH detrás de WireGuard/Tailscale, desactivo las contraseñas y el root, solicito una clave con frase de contraseña y la limito a sudo. Almaceno copias de seguridad fuera del VPS con credenciales separadas, habilito actualizaciones de seguridad automáticas, fail2ban y auditoría de inicios de sesión exitosos; Compruebo la consola de emergencia del proveedor antes de reforzar el firewall.

Protección SSH en enrutador, NAS y dispositivo Linux

Administro un enrutador Linux, un dispositivo NAS o ARM, que no considero un servidor completo, pero ejecuta sshd y se puede acceder al puerto desde la red externa. El dispositivo rara vez se actualiza, los recursos son escasos y el compromiso le dará un punto de apoyo dentro de la red local. ¿Cómo puedo proteger SSH en un dispositivo Linux de bajo consumo?

Con SSH Protector utilizo un binario estático compatible para la arquitectura y el sistema apropiados, habilito el análisis de registros locales y el bloqueo de firewall sin un puerto de control entrante. Verifico la compatibilidad del sistema operativo y el firewall antes de la instalación, configuro una lista blanca de administración y me aseguro de que el agente no sobrecargue los recursos limitados del dispositivo.

De forma gratuita, no publico SSH externamente en absoluto: conecto el dispositivo a través de VPN, desactivo la contraseña y la raíz, permito una clave y una subred de control. Actualizo el firmware, desactivo los servicios no utilizados, configuro el fail2ban mínimo solo si hay suficiente memoria y guardo la configuración del firewall; Para un sistema operativo no compatible, elijo una puerta de enlace externa en lugar de un binario desconocido.

Seguridad unificada SSH y FTP en Linux

Tengo SSH y FTP abiertos en un host Linux y los robots atraviesan ambos servicios a través de diferentes registros. La IP bloqueada por el script sshd continúa atacando a FTP y las cadenas manuales de iptables divergen. ¿Cómo puedo bloquear de forma centralizada la adivinación de contraseñas a través de SSH y FTP?

Con SSH Protector, habilito la lectura de registros SSH y FTP admitidos, dejo que el agente determine los puertos y aplico una única regla local a la red de origen. Agrego integraciones confiables a la lista blanca, verifico el historial en el panel y tengo en cuenta que la protección FTP avanzada y las funciones adicionales pueden depender de la tarifa.

De forma gratuita, reemplazo el FTP normal por SFTP sobre SSH o FTPS, si el protocolo es realmente necesario, y cierro el servicio de todo Internet. Creo cárceles fail2ban separadas para sshd y FTP, las dirijo a una nftables configurada con tiempo de espera, verifico el formato de registro después de las actualizaciones y desactivo las cuentas compartidas.

Controlar los inicios de sesión SSH de desarrolladores y contratistas

Emití inicios de sesión de Linux y claves SSH por separado para desarrolladores y contratistas, pero algunas de las claves se copiaron en computadoras portátiles personales y la lista de propietarios estaba desactualizada. Necesito detener la fuerza bruta, llamar rápidamente a una persona y entender quién entró sin usar una clave común. ¿Cómo puedo asegurar el acceso SSH multiusuario?

Con SSH Protector, dejo el bloqueo automático de red en todas las fuentes externas y incluyo en la lista blanca solo la VPN controlada, y no todas las IP domésticas. Utilizo el panel para ataques, pero guardo la identidad en cuentas y claves Unix separadas: el agente protege el perímetro y revoco el acceso eliminando una clave específica.

De forma gratuita, administro authorized_keys de forma centralizada a través de Ansible, emito una clave por persona y dispositivo con un comentario claro, desactivo cuentas compartidas y limito sudo. Habilito VPN/MFA en el bastión, configuro el período de acceso en el inventario, recopilo la clave pública aceptada con huella digital en SIEM y elimino automáticamente la clave al final del contrato.

Proteger cuentas SSH comerciales sin MFA

Tengo cuentas de implementación/respaldo que utilizan CI y automatización, por lo que MFA interactiva no se aplica a ellas. Sus claves deberían funcionar sin un operador, pero comprometer al corredor o repetir contraseñas podría abrir el servidor. ¿Cómo puedo proteger el acceso SSH a la máquina sin interrumpir la implementación?

Con SSH Protector, separo las direcciones de los corredores confiables a través de una lista blanca precisa y dejo todas las demás fuentes bloqueadas por inicios de sesión fallidos. No considero que esto sea un reemplazo del control de claves: el agente reduce la fuerza bruta desde el exterior mientras que las restricciones de la cuenta de servicio en sí contienen las consecuencias de una autenticación exitosa.

De forma gratuita, uso una clave Ed25519 separada para el trabajo, la almaceno en un almacén secreto, la restrinjo en authorized_keys a través de from=, command=, no-port-forwarding, no-agent-forwarding y no-pty. Solo permito SSH desde la red del corredor, emito comandos sudo mínimos, giro la clave regularmente y registro una huella digital en el registro de implementación.

Deshabilite de forma segura el inicio de sesión con contraseña a través de SSH

Dejé la contraseña de inicio de sesión SSH "por si acaso" porque tengo miedo de perder la clave o quedar bloqueado después de cambiar sshd_config. Como resultado, PasswordAuthentication sí permanece durante años y auth.log muestra constantemente la selección. ¿Cómo puedo cambiar a claves SSH sin riesgo de perder el acceso al servidor?

Con SSH Protector, primero instalo una capa protectora adicional y pongo en la lista blanca la dirección administrativa actual mientras realizo la migración. El agente bloquea la fuerza bruta activa, toma en cuenta automáticamente el puerto real y deja la política fuera de línea, pero después de verificar con éxito las claves, todavía desactivo el inicio de sesión con contraseña.

De forma gratuita, abro una segunda sesión SSH y la consola del proveedor, agrego una clave única, verifico los permisos ~/.ssh 700 y Authorized_keys 600, ejecuto sshd -t y vuelvo a cargar sin cerrar la primera sesión. Luego configuro PasswordAuthentication no, KbdInteractiveAuthentication no y PermitRootLogin no, verifico el nuevo inicio de sesión y guardo la clave de emergencia por separado.

Reacción a la contraseña SSH filtrada

Descubrí que se filtró la contraseña del usuario de Linux y aparecieron intentos con su nombre desde varios países en auth.log. No estoy seguro de si el inicio de sesión se realizó correctamente porque el servidor se utiliza desde diferentes redes. ¿Cómo puedo cerrar urgentemente la búsqueda SSH y comprobar si hay compromiso?

Con SSH Protector bloqueo inmediatamente fuentes y redes activas, reviso el historial de ataques y dejo el acceso solo a través de una lista blanca confiable. Luego cambio la contraseña/clave, finalizo las sesiones y analizo por separado la contraseña/clave pública aceptada; el bloqueo reduce la ventana de ataque, pero no prueba la ausencia de un inicio de sesión exitoso.

De forma gratuita, cierro temporalmente el grupo de seguridad SSH o nftables a la VPN, bloqueo al usuario, revoco las claves y cambio los secretos asociados. Verifico last/lastlog, journalctl, sudo, nuevos usuarios/claves, unidades cron/systemd, procesos y conexiones de red, luego restauro el acceso solo con clave y desactivo las contraseñas reutilizadas.

Protección de clave privada SSH sin frase de contraseña

Encontré una clave SSH privada sin contraseña en la computadora portátil de un empleado; la clave está permitida en varios servidores y podría haber terminado en una copia de seguridad o en malware. Dicho inicio de sesión no creará una serie de contraseñas incorrectas, por lo que la fuerza antibruta habitual no lo detendrá. ¿Cómo puedo limitar el daño y proteger adecuadamente las claves SSH?

Con SSH Protector sigo bloqueando la fuerza bruta externa y veo fuentes sospechosas, pero no confío en ella para obtener la clave robada correcta. Inmediatamente elimino la huella digital de todos los servidores, emito una nueva clave con frase de contraseña y dejo la lista blanca solo para VPN; Investigaré las entradas exitosas por separado.

De forma gratuita, busco la clave pública anterior en todas las authorized_keys, la revoco mediante la administración de configuración y verifico la clave pública aceptada por huella digital y fuente. Emito un FIDO2/ed25519-sk de hardware o una clave con frase de contraseña y tiempo de espera de ssh-agent, desactivo el reenvío de agentes a menos que sea necesario y mantengo un registro del propietario, el dispositivo y las fechas de rotación.

Confirmar la seguridad SSH para la auditoría

Tengo que mostrarle al auditor, cliente o aseguradora cómo se protege el acceso administrativo SSH: qué puertos y hosts se controlan, cómo se bloquea la selección automática, quién está en la lista blanca y qué sucede cuando se pierde Internet. ¿Cómo puedo recopilar pruebas verificables de protección de fuerza bruta SSH?

Con SSH Protector adjunto un historial de ataques y bloqueos, configuración de políticas, una lista de servicios protegidos y excepciones aprobadas. Documento la solución local del agente, el canal TLS saliente y la falta de un puerto de control entrante, luego realizo inicios de sesión incorrectos controlados y guardo las líneas de registro, la regla del firewall y la notificación.

De forma gratuita, exporto sshd_config, nftables/ufw, fail2ban jail y changelog desde Git, y envío auth.log/journald a un almacenamiento seguro. Verifico PasswordAuthentication, PermitRootLogin, MFA/VPN y pruebo la revocación de clave mensualmente, firmo el resultado y almaceno evidencia durante el período requerido.

Disminución del volumen de auth.log debido a la fuerza bruta de SSH

Mi auth.log o journald está lleno de contraseña fallida y usuario no válido, el historial útil se pierde debido a la rotación y el analizador de registros desperdicia recursos. No quiero deshabilitar la auditoría porque es necesario investigar el inicio de sesión exitoso. ¿Cómo puedo reducir el flujo de eventos de fuerza bruta SSH?

Con SSH Protector bloqueo la fuente en el firewall después de una serie de fallas, para que las siguientes conexiones TCP no lleguen a sshd y no creen tantas entradas. Mantengo una auditoría del sistema, controlo por separado el tamaño/retención del diario y uso el historial de ataques en el panel como índice, no como reemplazo del registro original.

De forma gratuita, cierro SSH a VPN/lista de permitidos, desactivo contraseñas e inicios de sesión estándar y envío fail2ban a nftables configurado con tiempo de espera. Configuro SystemMaxUse y la rotación de diario/rsyslog, envío eventos aceptados y fallidos clave a un syslog externo y no reduzco LogLevel por debajo del valor necesario para la investigación.

Automatización del bloqueo de Linux en lugar de lista negra manual

Copio manualmente la IP de auth.log a ufw/iptables, pero las direcciones cambian rápidamente, las reglas antiguas no se eliminan, la cadena crece y un error puede cerrar mi acceso. El soporte de la lista negra se ha convertido en una tarea diaria separada. ¿Cómo puedo automatizar el bloqueo de fuerza bruta SSH de forma segura?

Con SSH Protector configuro el umbral y la ventana una vez, después de lo cual el agente crea y libera bloqueos localmente y la lista blanca tiene prioridad. Utilizo una prohibición de red donde el atacante rota las direcciones vecinas, verifica los cambios en el panel y guarda una consola de respaldo antes de la primera política.

De forma gratuita, reemplazo las reglas individuales eternas de iptables con nftables configuradas con tiempo de espera o acción fail2ban, configuro maxretry/findtime/bantime e ignoreip para VPN. Pruebo el filtro en líneas de registro reales, habilito la recidiva con cuidado, limito el tamaño establecido y superviso los errores de recarga después de una actualización de distribución.

Administrar la seguridad SSH en múltiples clientes

Mantengo servidores Linux para varios clientes en Debian, Ubuntu, RHEL y ARM, cada uno con sus propios puertos, redes confiables y contactos. Las configuraciones locales de fail2ban y firewall divergen, y una lista blanca común entre clientes es inaceptable. ¿Cómo puedo centralizar la seguridad SSH en una flota multiinquilino?

Con SSH Protector conecto hosts con un agente compatible, veo los puertos y ataques detectados desde un panel, pero mantengo las excepciones y políticas dentro de los límites del servidor/cliente deseado. Aplico valores de referencia, documento las desviaciones por separado y notifico al cliente responsable.

De forma gratuita, describo sshd, fail2ban y nftables en roles de Ansible con un inventario y una bóveda separados para cada cliente, verifico cambios en CI y recopilo registros en Wazuh/syslog central con etiquetas de inquilino. Comparo automáticamente la configuración con la línea base y nunca combino claves, CIDR y secretos de diferentes clientes.

Protección SSH sin conexión en Internet inestable

Mi servidor Linux está en una sucursal o detrás de un canal inestable: el panel de la nube y el DNS a veces no están disponibles, pero SSH dentro o a través de un puerto reenviado continúa respondiendo. La seguridad no tiene que esperar a una API remota para cada solución. ¿Cómo mantengo el bloqueo de fuerza bruta SSH fuera de línea?

Con SSH Protector hago cumplir la política al agente por adelantado; continúa leyendo el registro local y cambia el firewall del sistema a la última configuración cuando se pierde la comunicación con el panel. Sincronizo la lista blanca antes del apagado, verifico el historial acumulado después de la restauración y no abro el puerto de control del agente entrante.

De forma gratuita, hago el control completamente local: nftables/ufw permite SSH solo desde una VPN o las subredes requeridas, y fail2ban funciona a través de journald sin una red externa. Guardo las reglas para la carga, configuro una cola local para notificaciones, pruebo un reinicio sin DNS y salgo de la consola física/del proveedor para restaurar la regla errónea.

Sustituir fail2ban sin dejar un hueco de protección

fail2ban lleva dos años en este servidor Linux y la jail de sshd funciona. Quiero probar un agente gestionado en su lugar, pero no puedo dejar el puerto 22 sin protección ni unos minutos, y no quiero dos herramientas peleándose por las mismas reglas de cortafuegos. ¿Cómo sustituyo fail2ban por SSH Protector sin tiempo de inactividad?

Instalo el agente de SSH Protector mientras fail2ban sigue en marcha. El agente tiene su propia tabla de nftables (inet sshprotector, o un espacio de nombres de ipset con prefijo en equipos más antiguos) y solo reconstruye esa, así que nunca toca las cadenas de fail2ban y ninguno de los dos revierte al otro. Al instalar pongo primero mi propia dirección en la lista blanca y luego miro el panel durante un día para ver si el agente está cazando las mismas fuentes que la jail. Solo entonces paro fail2ban y retiro sus reglas. Si cambio de idea, desinstalar el agente se lleva sus propias reglas y deja el cortafuegos como estaba.

Sin ningún agente, el cambio entre dos herramientas que leen un registro se hace igual. Deja la vieja funcionando, dale a la nueva su propio nombre de cadena o de tabla para que las reglas no choquen, compara durante un día entero de tráfico real qué cazó cada una, y desactiva la vieja solo cuando el contador de baneos de la nueva haya dejado de ser el menor de los dos. Nunca quites primero la que funciona: unos pocos minutos sin protección en un puerto SSH expuesto le bastan a una botnet que ya te está escaneando.

Elegir entre CrowdSec y un agente gestionado

Estoy comparando opciones de protección contra fuerza bruta SSH para un parque pequeño de Linux y CrowdSec sale una y otra vez: código abierto, blocklist comunitaria, cobertura más allá de SSH. ¿Qué hace SSH Protector que CrowdSec no haga, y cómo decido entre los dos?

Los dos resuelven problemas que se solapan, pero desde extremos distintos, y elijo por forma y no por puntuación. CrowdSec es un motor: un lenguaje de escenarios, componentes de bloqueo que instalas y conectas tú mismo, y una blocklist alimentada por todos los que lo ejecutan; su alcance va mucho más allá de SSH. SSH Protector es un binario que hace una cosa: lee el registro de autenticación de SSH, SFTP y FTP, banea todo el /24 del atacante en su propia tabla de nftables, mantiene ese baneo tras reiniciar, detecta el puerto real de sshd en vez de suponer el 22, e informa a un panel que me avisa cuando un servidor protegido se ha quedado callado. La reputación se comparte entre cuentas protegidas, no con el internet público.

Así que la decisión trata de lo que tengo de verdad. Si necesito amplitud - HTTP, bases de datos, fuentes de registro arbitrarias, mis propios escenarios de detección -, CrowdSec tiene sitio para eso y ejecutarlo no cuesta nada. Si lo que tengo es un puñado de máquinas Linux con el puerto SSH expuesto y nadie que mantenga una pila de detección, quiero la cosa estrecha que acierta sin configuración. No he medido las dos una contra otra en el mismo equipo, así que no elijo por cifras de rendimiento, y quien me las cite tampoco debería.

Proteja su primer servidor hoy mismo

El plan Free es gratis para siempre. Cambie de plan con un clic cuando lo necesite.

Quién lo desarrolla, a quién le paga y qué puede hacer el agente en su servidor

Tres preguntas que merecen respuesta antes de instalar nada con permisos de administrador en un servidor en producción.

Quién lo desarrolla

SSH Protector lo escribe Victor G. Bobrov, especialista principal en seguridad de servidores en Recovery Toolbox: más de 20 años en ingeniería de sistemas y seguridad y certificaciones Microsoft MCSD/MCDBA. Las reglas de detección, la lógica de bloqueo y los artículos de este sitio son su trabajo, publicados con su nombre y no bajo una marca anónima. Sobre el autor →

A quién le paga

El proveedor es File Master LLC, empresa registrada en Bulgaria (UE): Bulstat/IVA 180842207, oficina en Varna, localizable por teléfono y correo. Los pagos los gestiona PayPro Global como comerciante registrado; los términos, la política de privacidad y el acuerdo de tratamiento de datos están publicados íntegros, no resumidos. Términos del servicio · Política de privacidad · DPA

Qué puede y qué no puede hacer el agente

El agente lee el registro de autenticación SSH de su propio host y escribe reglas de nftables en ese mismo host. No abre ningún puerto entrante, no tiene canal de comandos remotos y hacia fuera solo habla por HTTPS. No tiene capacidad ofensiva: nada en él puede atacar a otra máquina. Las decisiones de bloqueo se toman localmente, así que la protección sigue funcionando sin conexión con la nube, y su IP actual entra en la lista blanca durante la instalación: el agente no puede dejarle fuera de su propio servidor. El instalador está firmado. Cómo funciona →

Recursos: el protocolo, los ataques y las normas en las que todo esto se apoya

La protección de SSH contra la fuerza bruta no es un tema en sí mismo: es donde se encuentran un protocolo, una clase de ataque y un conjunto de normas publicadas. Estas son las fuentes que definen cada uno de ellos.

Recovery Toolbox / File Master LLC

Contactar con Recovery Toolbox

Datos de contacto de Recovery Toolbox y File Master LLC, además del perfil de Victor G. Bobrov, especialista principal en seguridad de la empresa.

Oficina de la empresa

File Master LLC es la entidad jurídica detrás de los servicios en línea y los productos de software de Recovery Toolbox.

File Master LLC
Serena app., office C13
Golden Sands, Varna, 9007
Bulgaria, Unión Europea
Bulstat/IVA
180842207

Acerca de Recovery Toolbox

File Master LLC desarrolla y mantiene los servicios en línea y los productos de software de Recovery Toolbox para reparar archivos, bases de datos y formatos de correo dañados. La empresa se centra en herramientas de recuperación prácticas para usuarios, especialistas de TI y empresas que necesitan restaurar el acceso a datos dañados.

Sus comentarios y sugerencias son bienvenidos. Envíenos su opinión sobre el sitio web por correo electrónico: webmaster@recoverytoolbox.com

Victor G. Bobrov, server security specialist and author of SSH Protector
Especialista en seguridad

Victor G. Bobrov

Especialista en seguridad de servidores · más de 20 años en ingeniería de sistemas y seguridad

Victor G. Bobrov dirige la ingeniería de seguridad en File Master LLC / Recovery Toolbox. Diseña la lógica de detección y bloqueo de SSH Protector: lectura del registro de autenticación SSH, distinción entre un ataque de fuerza bruta o de difusión de contraseñas y un simple error de tecleo, bloqueo de la subred atacante con una sola regla de nftables e intercambio de reputación de atacantes entre los parques protegidos.

  • Protección contra fuerza bruta
  • Fortificación de Linux y SSH
  • nftables y políticas de red
  • MCSD
  • MCDBA
Sobre el autor →

Certificaciones de Microsoft

Microsoft Certified Solutions Developer - MCSD. Microsoft Certified Database Administrator - MCDBA.

MCSD MCDBA