La sécurité de votre serveur est cruciale pour protéger vos données et celles de vos utilisateurs. Si votre serveur est compromise, cela peut entraîner de graves conséquences pour votre entreprise ou votre organisation. Dans cet article, nous allons vous montrer comment sécuriser un serveur Nginx, en vous présentant différentes mesures de sécurité que vous pouvez mettre en place. Nous vous donnerons des exemples de code pour vous aider à configurer ces mesures sur votre serveur. Ces étapes vous permettront de renforcer la sécurité de votre serveur et de protéger vos données contre les menaces en ligne.
1. Mettre à jour Nginx et le système d’exploitation
Il est important de toujours utiliser la dernière version de Nginx et de votre système d’exploitation afin de profiter des dernières corrections de bogues et améliorations de sécurité. Pour mettre à jour Nginx sur Ubuntu, par exemple, vous pouvez utiliser la commande suivante :
sudo apt-get update
sudo apt-get upgrade nginx
2. Configurer le pare-feu
Vous devriez configurer un pare-feu pour empêcher les connexions non autorisées à votre serveur. Si vous utilisez Ubuntu, vous pouvez utiliser UFW (Uncomplicated Firewall) pour configurer facilement votre pare-feu. Voici comment autoriser les connexions entrantes sur les ports 80 et 443 (utilisés pour le HTTP et HTTPS) :
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
3. Utiliser HTTPS
Le HTTPS est le protocole de sécurisation des communications sur le web. Il est recommandé d’utiliser HTTPS sur votre site pour protéger les données de vos utilisateurs et vous assurer que votre site est authentique. Pour utiliser HTTPS sur votre serveur Nginx, vous aurez besoin d’un certificat SSL. Vous pouvez en obtenir un gratuitement avec Let’s Encrypt, ou en acheter un auprès d’une autorité de certification telle que Comodo ou Symantec.
Voici comment configurer HTTPS sur votre serveur Nginx :
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
# ... autres paramètres de configuration ...
}
4. Configurer l’accès par mot de passe
Vous pouvez configurer l’accès par mot de passe pour protéger certaines parties de votre site ou votre serveur entier. Voici comment configurer l’accès par mot de passe pour une zone protégée par un mot de passe dans votre fichier de configuration Nginx :
location /protected {
auth_basic "Protected Area";
auth_basic_user_file /path/to/.htpasswd;
}
Pour créer le fichier .htpasswd contenant les noms d’utilisateur et mots de passe, vous pouvez utiliser la commande suivante :
htpasswd -c /path/to/.htpasswd username
5. Désactiver le listing des répertoires
Par défaut, Nginx affiche le contenu des répertoires lorsqu’il ne trouve pas de fichier index. Cela peut être un problème de sécurité si vous avez des fichiers sensibles dans vos répertoires. Pour désactiver le listing des répertoires, ajoutez cette ligne à votre fichier de configuration Nginx :
autoindex off;
6. Limiter les requêtes de l’utilisateur
Vous pouvez limiter le nombre de requêtes que les utilisateurs peuvent envoyer à votre serveur pour prévenir les attaques par déni de service (DoS). Voici comment configurer une limite de 10 requêtes par seconde par IP :
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
# ... autres paramètres de configuration ...
location / {
limit_req zone=one burst=20;
}
}
7. Activer la redirection HTTPS
Il est important de forcer l’utilisation de HTTPS sur votre site pour protéger les données de vos utilisateurs. Voici comment configurer une redirection automatique de HTTP vers HTTPS dans votre fichier de configuration Nginx :
server {
listen 80;
server_name example.com;
https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
# ... autres paramètres de configuration ...
}
8. Activer le module HTTP Strict Transport Security (HSTS)
Le HSTS est un en-tête HTTP qui indique aux navigateurs de ne pas envoyer de requêtes sur HTTP à votre site, mais uniquement sur HTTPS. Cela peut être utile pour prévenir les attaques de type man-in-the-middle. Pour activer le HSTS sur votre serveur Nginx, ajoutez cette ligne à votre fichier de configuration :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
9. Activer la protection contre les attaques par injection de contenu
Les attaques par injection de contenu sont des techniques qui permettent à un attaquant de pirater votre site ou votre serveur en injectant du code malveillant dans les requêtes envoyées à votre serveur.
Pour protéger contre ces attaques, vous pouvez utiliser le module ngx_http_sub_module de Nginx. Ce module vous permet de configurer des règles qui vont remplacer ou supprimer certains caractères dangereux dans les requêtes envoyées à votre serveur. Voici comment l’utiliser dans votre fichier de configuration Nginx :
server {
# … autres paramètres de configuration …
location / {
sub_filter '<script>' '<disabled>';
sub_filter_once off;
}
}
Cet exemple remplace tous les occurrences de <script> par <disabled> dans les réponses envoyées par votre serveur. Vous pouvez configurer d’autres règles de remplacement pour protéger contre d’autres types d’injections de contenu
En conclusion, il est important de prendre des mesures pour sécuriser votre serveur Nginx afin de protéger vos données et celles de vos utilisateurs. Nous avons vu différentes étapes que vous pouvez suivre pour renforcer la sécurité de votre serveur, comme mettre à jour Nginx et le système d’exploitation, configurer un pare-feu, utiliser HTTPS, configurer l’accès par mot de passe, désactiver le listing des répertoires, limiter les requêtes de l’utilisateur, activer la redirection HTTPS, activer le module HTTP Strict Transport Security (HSTS) et activer la protection contre les attaques par injection de contenu. En suivant ces étapes et en prenant d’autres mesures de sécurité adaptées à votre environnement, vous pouvez protéger efficacement votre serveur contre les menaces en ligne.