Son las tres menos veinte de la madrugada y estás de guardia en el SOC, el centro de operaciones de seguridad que vigila los servidores de sus clientes. En la pared de pantallas salta un aviso: el servidor de la Gestoría Prado lleva horas recibiendo intentos de entrar por SSH desde fuera. Entras en él por la VPN del SOC para ver qué pasa.
Todo servidor apunta quién intenta entrar, quién lo consigue y quién está dentro ahora. Saber leerlo es lo primero que se aprende en un equipo que defiende (un Blue Team): antes de tocar nada, se mira. En este tema aprendes dónde están esos registros, a contar lo que dicen y a cerrar la puerta a tiempo, sin cerrártela a ti.
Dónde se apunta: auth.log y el diario
En Ubuntu, cada vez que alguien entra (o lo intenta) por SSH, sshd lo cuenta al diario de
systemd. De ahí, rsyslog copia lo que tiene que ver con entrar (sshd, sudo, cron) a
/var/log/auth.log, un archivo de texto de toda la vida. Es del grupo adm: lo leen root y
quien esté en ese grupo.
tecnico@srv-gestoria:~$ sudo tail -n 6 /var/log/auth.log Oct 7 00:37:06 srv-gestoria sshd[3715]: Invalid user oracle from 203.0.113.41 port 49907 Oct 7 00:37:06 srv-gestoria sshd[3715]: Failed password for invalid user oracle from 203.0.113.41 port 49907 ssh2 Oct 7 00:37:40 srv-gestoria sshd[3722]: Invalid user user from 198.51.100.5 port 39726 Oct 7 00:37:40 srv-gestoria sshd[3722]: Failed password for invalid user user from 198.51.100.5 port 39726 ssh2 Oct 7 00:38:13 srv-gestoria sshd[3726]: Invalid user guest from 203.0.113.196 port 57569 Oct 7 00:38:13 srv-gestoria sshd[3726]: Failed password for invalid user guest from 203.0.113.196 port 57569 ssh2
Cada línea dice cuándo, en qué máquina, qué programa (con su PID entre corchetes) y el mensaje. Las que más importan:
Invalid user oracle from …: alguien probó con un usuario que no existe en la máquina.Failed password for … from …: una contraseña mal. Si diceinvalid user, ni siquiera existía el usuario; si no lo dice, el usuario sí existe, y eso preocupa más.Accepted passwordoAccepted publickey for … from …: alguien entró. Con contraseña o con su clave.session openedysession closed: el principio y el final de una sesión.
El diario cuenta lo mismo. Su unidad, en Ubuntu, se llama ssh (no sshd): journalctl -u ssh.
Sirve para filtrar por fechas (--since "2 hours ago") y por prioridad, cosa que el archivo de
texto no hace.
tecnico@srv-gestoria:~$ sudo journalctl -u ssh --no-pager | tail -n 2 Oct 07 00:38:13 srv-gestoria sshd[3726]: Invalid user guest from 203.0.113.196 port 57569 Oct 07 00:38:13 srv-gestoria sshd[3726]: Failed password for invalid user guest from 203.0.113.196 port 57569 ssh2
Ejercicio
Dónde queda quién intenta entrar: auth.log y el diario
Desde el SOC, entras en srv-gestoria por la VPN. Antes de nada, mira dónde apunta el servidor cada intento de entrar por SSH.
Preparando la máquina…
Contar: grep, sort y uniq
Cientos de líneas no se leen una a una: se cuentan. grep -c dice cuántas líneas casan:
tecnico@srv-gestoria:~$ sudo grep -c "Failed password" /var/log/auth.log 127
Para saber desde dónde, se saca la IP de cada línea con grep -o (solo el trozo que casa), se
ordena con sort y uniq -c cuenta cuántas veces sale cada una. Un sort -rn final las deja de
más a menos:
tecnico@srv-gestoria:~$ sudo grep "Failed password" /var/log/auth.log | grep -o "from [0-9.]*" | sort | uniq -c | sort -rn 58 from 198.51.100.5 24 from 203.0.113.41 23 from 203.0.113.61 12 from 198.51.100.7 10 from 203.0.113.196
Una IP con 58 intentos en tres horas no es casualidad: insiste. Las demás, también de fuera, son el
ruido de siempre. uniq solo junta líneas iguales seguidas: por eso va siempre después de un
sort.
Ejercicio
Contar los intentos: grep, sort y uniq
Hay cientos de líneas. Cuenta cuántos intentos fallaron y descubre desde qué IP llegaron más.
Preparando la máquina…
Quién entró, quién falló, quién sigue: last, lastb y who
Además del texto, Linux guarda las sesiones en tres archivos binarios, que se leen con su orden:
- /var/log/wtmp, cada entrada y cada salida:
last. - /var/log/btmp, cada intento fallido:
lastb. Solo lo lee root, porque a veces alguien escribe su contraseña en el campo del usuario. - /run/utmp, quién está dentro ahora:
who.
tecnico@srv-gestoria:~$ last -n 4 tecnico pts/1 10.99.0.5 Wed Oct 7 02:40 still logged in tecnico pts/1 10.20.4.113 Wed Oct 7 00:34 - 00:39 (00:05) tecnico pts/1 10.20.1.113 Wed Oct 7 00:23 - 00:28 (00:05) tecnico pts/2 10.20.4.48 Wed Oct 7 00:23 - 00:31 (00:08) wtmp begins Thu Oct 1 02:40:00 2026
La primera eres tú, desde la VPN del SOC (still logged in: sigues dentro). Las demás son del
técnico de la gestoría: cuándo entró, cuándo salió y cuánto estuvo. Si una sesión no tiene salida
y ya no está, last dice gone - no logout.
tecnico@srv-gestoria:~$ sudo lastb -n 4 guest ssh:notty 203.0.113.196 Wed Oct 7 00:38 - 00:38 (00:00) user ssh:notty 198.51.100.5 Wed Oct 7 00:37 - 00:37 (00:00) oracle ssh:notty 203.0.113.41 Wed Oct 7 00:37 - 00:37 (00:00) guest ssh:notty 198.51.100.5 Wed Oct 7 00:36 - 00:36 (00:00) btmp begins Tue Oct 6 23:40:31 2026
Ejercicio
Quién entró, quién falló y quién sigue: last, lastb y who
Los registros de sesiones dicen lo mismo de otra forma: quién entró y cuánto estuvo, quién falló y quién está dentro ahora.
Preparando la máquina…
Cerrar la puerta a una IP: ufw
Con la IP que insiste localizada, se le cierra el paso en el cortafuegos. Antes, mira cómo está con los números de cada regla:
tecnico@srv-gestoria:~$ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 443/tcp ALLOW IN Anywhere [ 3] OpenSSH (v6) ALLOW IN Anywhere (v6) [ 4] 443/tcp (v6) ALLOW IN Anywhere (v6)
Lo primero que se le ocurre a cualquiera es sudo ufw deny from 198.51.100.5. Y ufw contesta
Rule added… pero la regla se añade al final:
tecnico@srv-gestoria:~$ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 443/tcp ALLOW IN Anywhere [ 3] Anywhere DENY IN 198.51.100.5 [ 4] OpenSSH (v6) ALLOW IN Anywhere (v6) [ 5] 443/tcp (v6) ALLOW IN Anywhere (v6)
Se borra la que no sirve (con su número) y se pone en su sitio:
tecnico@srv-gestoria:~$ sudo ufw --force delete 3 Rule deleted
tecnico@srv-gestoria:~$ sudo ufw insert 1 deny from 198.51.100.5 Rule inserted
tecnico@srv-gestoria:~$ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 198.51.100.5 [ 2] OpenSSH ALLOW IN Anywhere [ 3] 443/tcp ALLOW IN Anywhere [ 4] OpenSSH (v6) ALLOW IN Anywhere (v6) [ 5] 443/tcp (v6) ALLOW IN Anywhere (v6)
Bloquear una IP es un parche: quien insiste puede cambiar de dirección. Lo que de verdad cierra la puerta está en las cuentas.
Ejercicio
Cerrar la puerta a una IP: ufw, y el orden de las reglas
Bloquea la IP que más insiste, sin cerrarte la puerta a ti mismo (entras desde el SOC por SSH).
Preparando la máquina…
La cuenta que sobra: passwd -l
Muchos incidentes empiezan por una cuenta que nadie vigila: la de un escáner que ya no existe, la de unas prácticas que acabaron, la de pruebas. Si sigue con contraseña (y es floja), es una puerta abierta. Bloquearla deja la cuenta como está (sus archivos, su historia) pero impide entrar con contraseña:
tecnico@srv-gestoria:~$ sudo passwd -S escaner escaner P 04/21/2023 0 99999 7 -1
tecnico@srv-gestoria:~$ sudo passwd -l escaner passwd: password expiry information changed.
tecnico@srv-gestoria:~$ sudo passwd -S escaner escaner L 04/21/2023 0 99999 7 -1
La segunda columna es el estado: P tiene contraseña, L bloqueada (locked), NP sin
contraseña. Por dentro, passwd -l pone un ! delante de la contraseña en /etc/shadow, así que
ninguna coincide. usermod -L hace lo mismo; passwd -u la desbloquea.
Si lo que hace falta no es cerrar la cuenta, sino que su dueño cambie la contraseña (porque alguien
ha podido verla), sudo passwd -e luis la deja caducada: la de siempre vale para entrar una
vez, y en ese momento el sistema le pide una nueva.
Ejercicio
La cuenta que sobra: passwd -l
La cuenta escaner era la del escáner de la oficina, que ya no existe, y sigue con su contraseña de siempre. Bloquéala sin tocar las de las personas.
Preparando la máquina…
En la sala: el turno de noche
En la sala del tema estás en el SOC, y los intentos siguen llegando mientras miras. Es la primera sala con reloj: cada orden que escribes gasta minutos de juego (leer un registro, uno; reiniciar un servicio, dos; instalar algo, diez), y puedes esperar a propósito para ver qué pasa. Mientras investigas, fijas en el tablero lo que encuentres (una IP, una cuenta, una línea del registro). Al final escribes el informe y te llevas una nota en estrellas: cuánto tardaste en verlo, cuánto en cerrar la puerta y si la gestoría siguió funcionando.