¿Qué servicios están a la escucha en su VPS y qué es accesible desde el exterior?
Todo programa que acepta conexiones escucha en un puerto: SSH en el 22, un servidor web en el 80 y el 443, MariaDB en el 3306. Cada puerto accesible desde el exterior es una puerta a su servidor. Por lo general, un sitio web solo necesita desde fuera los puertos 22, 80 y 443. Aquí puede leer cómo ver qué está escuchando, en qué dirección, y cómo comprobar lo que ve el resto de internet.
Ver qué está escuchando
Ejecute en su VPS:
sudo ss -tulpn
Las opciones significan: TCP (-t), UDP (-u), solo en escucha (-l), qué programa (-p) y números en lugar de nombres (-n). Un ejemplo:
tcp LISTEN 0.0.0.0:22 users:(("sshd",...))
tcp LISTEN 0.0.0.0:443 users:(("nginx",...))
tcp LISTEN 127.0.0.1:3306 users:(("mariadbd",...))
tcp LISTEN 0.0.0.0:6379 users:(("redis-server",...))
tcp LISTEN [::]:22 users:(("sshd",...))
Lo importante es la columna Local Address, la dirección en la que escucha el programa:
| Dirección | Significado |
|---|---|
0.0.0.0 | Todas las direcciones IPv4, también su dirección pública: accesible desde fuera, salvo que un firewall lo impida |
[::] | Todas las direcciones IPv6: lo mismo para IPv6 |
127.0.0.1 o [::1] | Solo el propio servidor (loopback): nunca accesible desde fuera |
127.0.0.53 o 127.0.0.54 | También loopback: el asistente DNS local de systemd-resolved |
En el ejemplo, MariaDB está bien: solo los programas del propio servidor pueden acceder a ella. Redis escucha en todas las direcciones, y ese es precisamente el error del que se trata.
Cerrarlo en el propio servicio
Una base de datos, una caché o una pantalla de administración casi nunca deben ser accesibles desde fuera. El mejor primer paso es que el servicio escuche solo en loopback. En Debian y Ubuntu:
| Programa | Ajuste | Archivo |
|---|---|---|
| MariaDB o MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<versión>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 y protected-mode yes | /etc/redis/redis.conf |
A continuación, reinicie el servicio (consulte Gestionar servicios con systemctl en su VPS) y vuelva a comprobarlo con ss -tulpn. Si desea acceder usted mismo a la base de datos desde su portátil, utilice un túnel SSH en lugar de un puerto abierto, consulte Una configuración SSH: iniciar sesión con un nombre corto.
El firewall como segunda capa
Un firewall bloquea lo que, por descuido, escucha igualmente en todas las direcciones. Cómo configurar ufw se explica en Un firewall con ufw (o nftables). No confíe en una sola capa: un firewall puede estar desactivado o una regla puede ser demasiado permisiva.
ports:) eluden ufw. Una base de datos con "3306:3306" será entonces accesible desde fuera, aunque ufw indique que el puerto está cerrado. Anteponga 127.0.0.1: o no publique el puerto. Consulte Docker y el firewall: publicar puertos de forma segura.Comprobar desde el exterior
ss muestra lo que escucha en el servidor, pero no lo que deja pasar su firewall. La comprobación real se hace desde otro ordenador, no desde el propio servidor. Con nc (netcat) en Mac o Linux:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
En Windows, PowerShell hace lo mismo con Test-NetConnection 203.0.113.10 -Port 6379. Introduzca su propia dirección IPv4 e IPv6; las encontrará en la pantalla del VPS. El resultado se interpreta así:
- Abierto (succeeded): algo está escuchando y es accesible desde fuera.
- Cerrado (Connection refused): no escucha nada, o el firewall rechaza activamente la conexión.
- Filtrado (tiempo de espera agotado): un firewall descarta el tráfico de forma silenciosa.
Para una base de datos, tanto cerrado como filtrado son correctos. Pruebe también IPv6: un error frecuente es tener un firewall solo con reglas IPv4, mientras el servicio también escucha en [::]. Un escáner de puertos como nmap examina varios puertos a la vez; utilice un escáner así únicamente en su propio servidor.
Su VPS es totalmente autogestionado: usted mismo decide qué servicios escuchan y cómo está configurado su firewall. Nosotros le ayudamos con la parte de WebOké, como la pantalla del VPS, la red y las instantáneas.
¿Quiere aprender más? Siga el curso gratuito de VPS y administración de servidores Linux, lección 5.1 Puertos y servicios en escucha o lección 5.2 Un firewall con ufw y nftables.
