Que serviços estão à escuta no seu VPS e o que está acessível a partir do exterior?
Qualquer programa que aceite ligações escuta numa porta: o SSH na 22, um servidor web na 80 e na 443, o MariaDB na 3306. Cada porta acessível a partir do exterior é uma porta de entrada para o seu servidor. Um website normalmente só precisa das portas 22, 80 e 443 acessíveis a partir do exterior. Aqui fica a saber como ver o que está à escuta, em que endereço, e como verificar o que o resto da Internet vê.
Ver o que está à escuta
Execute no seu VPS:
sudo ss -tulpn
As opções significam: TCP (-t), UDP (-u), apenas à escuta (-l), qual o programa (-p) e números em vez de nomes (-n). Um exemplo:
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",...))
O importante é a coluna Local Address, o endereço em que o programa está à escuta:
| Endereço | Significado |
|---|---|
0.0.0.0 | Todos os endereços IPv4, incluindo o seu endereço público: acessível a partir do exterior, a menos que uma firewall o bloqueie |
[::] | Todos os endereços IPv6: o mesmo, mas para IPv6 |
127.0.0.1 ou [::1] | Apenas o próprio servidor (loopback): nunca acessível a partir do exterior |
127.0.0.53 ou 127.0.0.54 | Também loopback: o auxiliar de DNS local do systemd-resolved |
No exemplo, o MariaDB está correto: apenas os programas no próprio servidor lhe conseguem aceder. O Redis está à escuta em todos os endereços, e é precisamente esse o erro em causa.
Fechar no próprio serviço
Uma base de dados, uma cache ou um painel de administração quase nunca deve estar acessível a partir do exterior. O melhor primeiro passo é fazer com que o serviço escute apenas em loopback. Em Debian e Ubuntu:
| Programa | Definição | Ficheiro |
|---|---|---|
| MariaDB ou MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<versão>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 e protected-mode yes | /etc/redis/redis.conf |
Em seguida, reinicie o serviço (consulte Gerir serviços com systemctl no seu VPS) e verifique novamente com ss -tulpn. Se pretender aceder à base de dados a partir do seu portátil, utilize um túnel SSH em vez de uma porta aberta; consulte Uma configuração SSH: iniciar sessão com um nome curto.
A firewall como segunda camada
Uma firewall bloqueia aquilo que, por engano, ainda esteja à escuta em todos os endereços. A forma de configurar o ufw está descrita em Uma firewall com ufw (ou nftables). Não confie numa única camada: uma firewall pode estar desligada ou uma regra pode ser demasiado permissiva.
ports:) contornam o ufw. Uma base de dados com "3306:3306" fica então acessível a partir do exterior, mesmo que o ufw indique que a porta está fechada. Coloque 127.0.0.1: antes, ou não publique a porta. Consulte Docker e a firewall: publicar portas em segurança.Verificar a partir do exterior
O ss mostra o que está à escuta no servidor, mas não o que a sua firewall deixa passar. A verdadeira verificação faz-se a partir de outro computador, não a partir do próprio servidor. Com o nc (netcat) em Mac ou Linux:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
No Windows, o PowerShell faz o mesmo com Test-NetConnection 203.0.113.10 -Port 6379. Introduza os seus próprios endereços IPv4 e IPv6, que constam do ecrã do VPS. O resultado interpreta-se da seguinte forma:
- Aberta (succeeded): há algo à escuta e está acessível a partir do exterior.
- Fechada (Connection refused): não há nada à escuta, ou a firewall recusa ativamente.
- Filtrada (time-out): uma firewall descarta o tráfego silenciosamente.
Para uma base de dados, tanto fechada como filtrada são bons resultados. Teste também o IPv6: um erro frequente é ter uma firewall apenas com regras IPv4, enquanto o serviço também está à escuta em [::]. Um scanner de portas como o nmap verifica várias portas em simultâneo; utilize este tipo de scanner apenas no seu próprio servidor.
O seu VPS é totalmente autogerido: é o próprio cliente que define que serviços estão à escuta e como está configurada a firewall. Nós ajudamos com a parte da WebOké, como o ecrã do VPS, a rede e os snapshots.
Quer saber mais? Siga o curso gratuito VPS e administração de servidores Linux, lição 5.1 Portas e serviços à escuta ou lição 5.2 Uma firewall com ufw e nftables.
