Sécuriser NginX

Dans notre article sur NginX, ce dernier fonctionnait en port 80 (protocole http). De nos jours,  il faut renforcer les échanges sur internet. Pour cela, NginX travaillera avec un certificat SSL, permettant ainsi le chiffrement des dialogues entre machines.

 

 

su

# Mise à niveau du système

apt-get update
apt-get upgrade

1. GÉNÉRER UNE CLÉ FORTE DE ‘DIFFIE-HELLMAN’ (DH) POUR NGINX

# se placer dans le répertoire des clés
cd /etc/ssl
# Générer une clé de 2048 bits avec openssl
openssl dhparam -out /etc/ssl/dh2048.pem 2048
# Protéger la clé (lecture seule)
chmod 400 dh2048.pem

2. MODIFICATION DE L’HÔTE VIRTUEL ‘domainepme.tld’ :

# Editer l’hôte virtuel nginx de domainepme.tld:
nano /etc/nginx/sites-available/domainepme.tld

Y placer :

#
##########################
# SERVICE HTTP (REDIRIGÉ EN HTTPS)
##########################
#
server {
#
listen 80 ;
#
server_name domainepme.tld www.domainepme.tld;
root /var/www/domainepme.tld;
index index.html index.htm index.php;
#
# force la redirection automatique http vers http
#
return 301 https://$server_name$request_uri;
}
#
############
# SERVICE HTTPS
############
#
server {
#
listen 443 ssl http2 ;
#
server_name domainepme.tld www.domainepme.tld;
root /var/www/domainepme.tld;
index index.html index.htm index.php;
#
ssl on;
#
# Certificats
ssl_certificate /etc/letsencrypt/live/domainepme.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domainepme.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domainepme.tld/fullchain.pem;
#
# OCSP Stapling – fetch OCSP records from URL in ssl_certificate and
# cache them
ssl_stapling on;
ssl_stapling_verify on;
#
# Certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
#
# Protocoles & Chiffrement
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers « ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384 »;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/dh2048.pem;
ssl_ecdh_curve secp384r1;
#
resolver 127.0.0.1 ;
# 213.251.188.141;
#
# Entêtes supplémentaires
add_header Strict-Transport-Security « max-age=15768000; includeSubDomains; preload »;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection « 1; mode=block »;
add_header X-Robots-Tag none;
#
# Max upload size
client_max_body_size 100M;
#
# ne pas enlever la ligne suivante
# [Sed: Insertion]
#
# Favicon du site
location = /favicon.ico { log_not_found off; access_log off; }
#
# Directives pour les ‘xbots’
location = /robots.txt { allow all; log_not_found off; access_log off; }
#
# On met en ‘cache’ les fichiers statiques courants
location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
#
# refus de servir les fichiers commençant par un point
location ~ /\. { deny all; }
#
# Refus d’upload d’un fichier php (piratage)
location ~* /(?:uploads|files)/.*\.php$ { deny all; }
#
# … sinon tenter de servir le fichier demandé
location / { try_files $uri $uri/ =404; }
}

SPDY était un protocole développé par Google, et dont le principal avantage était le multiple-xage des connexions, c’est à dire de pouvoir faire plusieurs requêtes HTTP simultanément.

Ce projet est maintenant abandonné, mais a servi de base à un nouveau protocole: le HTTP/2, lequel dispose des même avantages en HTTPS. La ligne de l’hôte NGINX concernée est celle-ci :

listen 443 ssl http2;

Quant aux certificats mentionnés, ce sont ceux ayant été obtenus précédemment par certbot

ssl_certificate /etc/letsencrypt/live/domainepme.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domainepme.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domainepme.tld/fullchain.pem;

3. RELANCER NGINX POUR PRISE EN COMPTE

systemctl nginx restart

 

Laisser un commentaire

Plugin Kapsule Corp