Los tres rangos de puertos
- 0–1023, conocidos: asignados por la IANA a servicios estándar. En Unix solo root (o un proceso con CAP_NET_BIND_SERVICE) puede escuchar en ellos.
- 1024–49151, registrados: concedidos a fabricantes y proyectos que los solicitan (3306 MySQL, 5432 PostgreSQL, 6379 Redis). Cualquier usuario puede enlazarlos.
- 49152–65535, dinámicos / efímeros: para el lado cliente de las conexiones. Linux usa en realidad 32768–60999 por defecto (
net.ipv4.ip_local_port_range).
Puertos que nunca deberían estar expuestos a internet
Redis (6379), Memcached (11211), MongoDB (27017), Elasticsearch (9200), la API de Docker (2375), etcd (2379) y la mayoría de las bases de datos se distribuyen sin autenticación o con valores por defecto débiles y se escanean constantemente. Enlázalos a 127.0.0.1 o a una interfaz privada, ponlos detrás de una VPN o una regla de cortafuegos y nunca confíes en pasar desapercibido. Shodan los indexa todos en cuestión de horas.
Averiguar qué escucha
ss -tulpn # Linux: sockets TCP/UDP a la escucha con nombre de proceso
sudo lsof -i :8080 # qué proceso tiene el puerto 8080
nc -zv host 22 # ¿está abierto un puerto remoto? Un puerto que aparece «abierto» en ss pero no es alcanzable desde fuera suele estar bloqueado por un cortafuegos (ufw, nftables, un security group en la nube, o Cloudflare, que solo reenvía 80/443).
Preguntas
¿Cuál es la diferencia entre puertos TCP y UDP?
Son espacios de nombres separados: TCP 53 y UDP 53 son sockets distintos aunque el DNS use ambos. Un servicio puede escuchar en uno, en el otro o en los dos.
¿Por qué no puedo enlazar el puerto 80 sin root?
Los puertos por debajo de 1024 son privilegiados en Unix. Ejecuta el servicio en un puerto alto detrás de un proxy inverso, da al programa CAP_NET_BIND_SERVICE (setcap) o usa la activación por socket de systemd.
¿Qué significa «address already in use»?
Otro proceso ya escucha en el puerto (ss -tulpn muestra cuál), o un socket cerrado hace poco sigue en TIME_WAIT. SO_REUSEADDR o esperar un minuto arregla lo segundo.
¿Qué puertos usa HTTP/3?
UDP 443. HTTP/3 va sobre QUIC, que se basa en UDP; los navegadores lo descubren mediante la cabecera Alt-Svc o un registro DNS HTTPS.