Il peut arriver qu’un nom de domaine que vous ne possédez pas soit configuré pour pointer vers l’adresse IP de votre serveur. Cela peut entraîner des problèmes :
- 📉 Perte d’image de marque (le site apparaît sous un nom frauduleux),
- ⚖️ Problèmes juridiques (contenu associé à un domaine que vous ne contrôlez pas),
- 🔒 Risques de phishing ou d’abus.
Dans ce tutoriel, voyons comment bloquer efficacement ces domaines non autorisés sur les serveurs web Nginx et Apache.
📌 Pourquoi cela arrive-t-il ?
Un tiers peut créer un enregistrement DNS (de type A) vers votre IP publique. Si votre serveur n’est pas bien configuré, il acceptera de servir votre site quel que soit le domaine utilisé.
🔧 1. Protéger son serveur Nginx
Par défaut, Nginx sert la première configuration server
qu’il trouve si aucun server_name
ne correspond. Il faut donc ajouter un bloc default_server
pour rejeter les domaines inconnus.
✅ Exemple de configuration
# Bloc de sécurité : refuse tout domaine non autorisé (HTTP)
server {
listen 80 default_server;
listen [::]:80 default_server;
return 444;
}
# Bloc de sécurité : refuse tout domaine non autorisé (HTTPS)
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/votresite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votresite.com/privkey.pem;
return 444;
}
🧠 À savoir :
- Le code
444
est spécifique à Nginx : il ferme la connexion sans réponse HTTP. - Vous pouvez remplacer par
return 403;
ou rediriger vers une page de notification si nécessaire.
🔧 2. Protéger son serveur Apache
Apache est plus permissif que Nginx, il sert le premier VirtualHost défini. Pour bloquer les domaines non autorisés, il faut définir un VirtualHost par défaut avec un catch-all
.
✅ Exemple de VirtualHost de rejet
<VirtualHost *:80>
ServerName catch-all
DocumentRoot /var/www/null
<Directory /var/www/null>
Require all denied
</Directory>
</VirtualHost>
🛡 Ou rediriger :
<VirtualHost *:80>
ServerName default
Redirect 403 /
</VirtualHost>
Vous pouvez aussi afficher un message clair : « Ce domaine n’est pas autorisé à pointer vers ce serveur. »
📜 Bonus : bloquer par application (WordPress, etc.)
Si vous utilisez WordPress, vous pouvez renforcer la sécurité côté PHP :
if ($_SERVER['HTTP_HOST'] !== 'votresite.com' && $_SERVER['HTTP_HOST'] !== 'www.votresite.com') {
header('HTTP/1.0 403 Forbidden');
exit;
}
Cela garantit que même si la requête passe par Nginx ou Apache, le code PHP refuse de la servir.
🔎 Comment savoir si un domaine pointe vers votre serveur ?
1. Vérifier vos logs :
grep 'Host:' /var/log/nginx/access.log
Ou :
grep 'Host:' /var/log/apache2/access.log
Si vous voyez un
Host: tontonduweb.fr
(par exemple), ce domaine a bien envoyé une requête vers vous.
2. Utiliser un service de lookup :
🧯 En résumé
Action | Nginx | Apache |
---|---|---|
Rejeter domaine inconnu | default_server + return 444 |
VirtualHost *:80 avec Require all denied |
Côté application | Vérification du $_SERVER['HTTP_HOST'] |
Idem |
Surveillance | Logs + outils externes | Logs + outils externes |
✅ À faire maintenant
- [ ] Ajoutez les blocs de sécurité à votre configuration Nginx ou Apache.
- [ ] Testez avec un nom de domaine externe pointant vers votre IP (via un
curl -H 'Host: domaine-faux.fr'
). - [ ] Analysez régulièrement vos logs pour détecter des comportements suspects.