Comprobación de puertos abiertos
Introducción
Saber qué puertos están escuchando en un servidor es el primer paso del hardening de red. Cada puerto abierto es una posible vía de entrada. El objetivo es tener abiertos únicamente los puertos de los servicios que realmente se necesitan.
ss — herramienta principal
ss (socket statistics) es el sustituto moderno de netstat. Muestra los
sockets activos del sistema.
# Puertos TCP en escucha con el proceso que los ocupa
ss -tlnp
# Puertos UDP en escucha
ss -ulnp
# TCP y UDP juntos
ss -tulnp
# Conexiones establecidas
ss -tnp
# Opciones:
# -t TCP
# -u UDP
# -l solo en escucha (LISTEN)
# -n mostrar números de puerto, no nombres de servicio
# -p mostrar el proceso que ocupa el socket
Ejemplo de salida con los puertos más habituales:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* sshd
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* nginx
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* nginx
netstat (legacy)
netstat sigue disponible en muchos sistemas (paquete net-tools) aunque está obsoleto
en favor de ss.
apt install net-tools
netstat -tlnp # equivalente a ss -tlnp
netstat -tulnp # TCP y UDP en escucha
netstat -an # todas las conexiones y puertos
lsof — ficheros y sockets abiertos
lsof lista todos los ficheros abiertos por los procesos, incluyendo sockets de red. Útil para identificar
qué proceso ocupa un puerto concreto.
# Qué proceso ocupa el puerto 80
lsof -i :80
# Todos los puertos en escucha
lsof -i -P -n | grep LISTEN
# Conexiones de un proceso concreto
lsof -i -P -n -p 1234
# -i sockets de red
# -P no resolver nombres de puerto
# -n no resolver nombres de host
nmap — escaneo desde fuera
ss y lsof muestran lo que ve el sistema desde dentro.
nmap escanea desde la red, como lo haría un atacante externo, y puede revelar puertos filtrados o servicios
expuestos por el firewall.
apt install nmap
# Escaneo básico de puertos TCP más comunes
nmap 192.168.1.10
# Escaneo de todos los puertos TCP (1-65535)
nmap -p- 192.168.1.10
# Escaneo con detección de versión de servicios
nmap -sV 192.168.1.10
# Escaneo del propio servidor (localhost)
nmap -sV localhost
# Escaneo UDP (más lento, requiere root)
nmap -sU 192.168.1.10
# Comparar lo que ven ss y nmap:
# Si nmap no ve un puerto que sí ve ss, el firewall lo está filtrando (bien).
# Si nmap ve un puerto que no aparece en ss, revisar el firewall.
Revisar el firewall con UFW
En Ubuntu, UFW (Uncomplicated Firewall) es la interfaz de gestión del firewall por defecto. Tras comprobar los puertos abiertos, hay que asegurarse de que UFW solo permite los necesarios.
# Estado del firewall
ufw status verbose
# Habilitar UFW (¡asegurarse de permitir SSH antes!)
ufw allow ssh
ufw enable
# Reglas básicas de ejemplo
ufw allow 80/tcp
ufw allow 443/tcp
ufw deny 3306/tcp # bloquear MySQL desde el exterior
# Ver las reglas numeradas
ufw status numbered
# Eliminar una regla por número
ufw delete 3
# Ver el log de UFW
tail -f /var/log/ufw.log