Quels services sont à l'écoute sur votre VPS, et lesquels sont accessibles depuis l'extérieur ?
Tout programme qui accepte des connexions écoute sur un port : SSH sur le 22, un serveur web sur le 80 et le 443, MariaDB sur le 3306. Chaque port accessible depuis l'extérieur est une porte d'entrée vers votre serveur. Un site web n'a généralement besoin que des ports 22, 80 et 443 depuis l'extérieur. Vous découvrirez ici comment voir ce qui écoute, sur quelle adresse, et comment vérifier ce que voit le reste d'Internet.
Voir ce qui écoute
Exécutez sur votre VPS :
sudo ss -tulpn
Les options signifient : TCP (-t), UDP (-u), uniquement en écoute (-l), quel programme (-p) et des numéros plutôt que des noms (-n). Un exemple :
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",...))
La colonne importante est Local Address, l'adresse sur laquelle le programme écoute :
| Adresse | Signification |
|---|---|
0.0.0.0 | Toutes les adresses IPv4, y compris votre adresse publique : accessible depuis l'extérieur, sauf si un pare-feu le bloque |
[::] | Toutes les adresses IPv6 : la même chose pour IPv6 |
127.0.0.1 ou [::1] | Uniquement le serveur lui-même (loopback) : jamais accessible depuis l'extérieur |
127.0.0.53 ou 127.0.0.54 | Également loopback : l'assistant DNS local de systemd-resolved |
Dans l'exemple, MariaDB est correctement configuré : seuls les programmes du serveur lui-même peuvent y accéder. Redis écoute sur toutes les adresses, et c'est précisément l'erreur à éviter.
Restreindre l'accès dans le service lui-même
Une base de données, un cache ou une interface d'administration ne doit presque jamais être accessible depuis l'extérieur. La meilleure première étape consiste à faire écouter le service uniquement sur loopback. Sur Debian et Ubuntu :
| Programme | Paramètre | Fichier |
|---|---|---|
| MariaDB ou MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<version>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 et protected-mode yes | /etc/redis/redis.conf |
Redémarrez ensuite le service (voir Gérer les services avec systemctl sur votre VPS) et vérifiez à nouveau avec ss -tulpn. Si vous souhaitez accéder vous-même à la base de données depuis votre ordinateur portable, utilisez un tunnel SSH plutôt qu'un port ouvert, voir Une configuration SSH : se connecter avec un nom court.
Le pare-feu comme deuxième couche
Un pare-feu bloque ce qui écouterait malgré tout par erreur sur toutes les adresses. La configuration de ufw est décrite dans Un pare-feu avec ufw (ou nftables). Ne comptez pas sur une seule couche : un pare-feu peut être désactivé ou une règle peut être trop permissive.
ports:) contournent ufw. Une base de données avec "3306:3306" est alors accessible depuis l'extérieur, même si ufw indique que le port est fermé. Ajoutez 127.0.0.1: devant, ou ne publiez pas le port. Voir Docker et le pare-feu : publier des ports en toute sécurité.Vérifier depuis l'extérieur
ss montre ce qui écoute sur le serveur, mais pas ce que votre pare-feu laisse passer. La véritable vérification se fait depuis un autre ordinateur, pas depuis le serveur lui-même. Avec nc (netcat) sur Mac ou Linux :
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
Sous Windows, PowerShell fait la même chose avec Test-NetConnection 203.0.113.10 -Port 6379. Indiquez vos propres adresses IPv4 et IPv6 ; elles figurent dans l'écran du VPS. Voici comment interpréter le résultat :
- Ouvert (succeeded) : quelque chose écoute et est accessible depuis l'extérieur.
- Fermé (Connection refused) : rien n'écoute, ou le pare-feu refuse activement la connexion.
- Filtré (time-out) : un pare-feu rejette le trafic silencieusement.
Pour une base de données, fermé et filtré sont tous deux corrects. Testez également IPv6 : une erreur fréquente est un pare-feu doté uniquement de règles IPv4, alors que le service écoute aussi sur [::]. Un scanner de ports comme nmap examine plusieurs ports à la fois ; n'utilisez un tel scanner que sur votre propre serveur.
Votre VPS est entièrement autogéré : vous décidez vous-même quels services écoutent et comment votre pare-feu est configuré. Nous vous aidons pour la partie WebOké, comme l'écran du VPS, le réseau et les snapshots.
Envie d'en savoir plus ? Suivez le cours gratuit VPS et administration de serveurs Linux, leçon 5.1 Ports et services en écoute ou leçon 5.2 Un pare-feu avec ufw et nftables.
