Nginx — installation, configuration en reverse proxy devant un container LXC, règles NAT avec iptables et sécurisation du trafic entrant.
Sur Debian / Ubuntu, installez Nginx depuis les dépôts officiels :
sudo apt update
sudo apt install nginx -y
Vérifier que le service est actif :
sudo systemctl status nginx
Dans une architecture LXC, Nginx joue le rôle de reverse proxy : il reçoit les requêtes depuis Internet et les transfère vers le container qui héberge le service réel (Apache, app web…).
Le fichier de configuration principal se trouve ici :
/etc/nginx/sites-available/default
Exemple de configuration complète d'un reverse proxy avec X-Forwarded-For :
server {
listen 80;
server_name monsite.local;
access_log off;
# Bloquer toutes les méthodes HTTP sauf GET, HEAD, POST
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
location / {
proxy_pass http://ip_du_container_lxc:80/;
# Transmission de l'IP réelle du client au backend
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
X-Forwarded-For permettent au serveur Apache (ou autre backend
dans le LXC) de récupérer l'adresse IP réelle du client, et non celle
du reverse proxy. Consultez le guide Apache
pour la configuration côté backend.
444 est spécifique à Nginx — il ferme la connexion sans envoyer
de réponse. C'est une technique efficace pour bloquer les scans automatiques
utilisant des méthodes HTTP non standard.
Toujours tester la syntaxe avant de redémarrer Nginx :
# Vérifier la syntaxe — doit afficher "syntax is ok"
sudo nginx -t
# Redémarrer le service
sudo systemctl restart nginx
# Recharger sans interrompre les connexions actives (préférable)
sudo systemctl reload nginx
reload à restart en production —
reload applique la nouvelle configuration sans couper les connexions
existantes, tandis que restart arrête complètement le service.
Pour permettre la redirection du trafic entrant vers votre container LXC, configurez les règles NAT dans le fichier de persistance iptables :
/etc/iptables/rules.v4
Ajoutez les règles suivantes dans la table nat :
# SNAT — autorise la sortie du réseau LXC vers Internet (masquerade)
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
# DNAT — redirige le trafic HTTPS (443) vers le container Nginx
-A PREROUTING -i votre_carte_réseau -p tcp --dport 443 -j DNAT --to-destination ip_conteneur_nginx
# DNAT — redirige le trafic HTTP (80) vers le container Nginx
-A PREROUTING -i votre_carte_réseau -p tcp --dport 80 -j DNAT --to-destination ip_conteneur_nginx
COMMIT
Après modification des règles, rechargez iptables pour les appliquer :
sudo netfilter-persistent restart
iptables-persistent est installé pour que
les règles survivent à un redémarrage :
sudo apt install iptables-persistent -y
return 444
sur les méthodes non standard est déjà incluse dans l'exemple de configuration ci-dessus.
nginx-http-auth
pour bloquer automatiquement les tentatives d'attaque par force brute.