GNU/Linux >> Tutoriels Linux >  >> Linux

Trucs et astuces pour sécuriser votre serveur Web Nginx

Nginx est un serveur Web open source, léger et performant qui connaît la croissance la plus rapide dans le monde. Nginx fonctionne sur les systèmes d'exploitation Linux, Windows, Mac OS et Solaris. NGINX continue de gagner en popularité, ce qui signifie que de plus en plus de déploiements NGINX doivent être sécurisés.

Dans ce didacticiel, nous expliquerons quelques trucs et astuces populaires en matière de sécurité du serveur Nginx.

Exigences

  • Un serveur exécutant Ubuntu 18.04 ou Debian 9.
  • Un mot de passe root est configuré sur votre serveur.

Installer Nginx

Tout d'abord, vous devrez installer Nginx sur votre système. Vous pouvez l'installer en exécutant la commande suivante :

apt-get install nginx -y

Une fois le Nginx installé, vous pouvez vérifier l'état de Nginx avec la commande suivante :

systemctl status nginx

Vous devriez voir le résultat suivant :

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago
     Docs: man:nginx(8)
  Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2285 (nginx)
    Tasks: 2 (limit: 1111)
   CGroup: /system.slice/nginx.service
           ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??2290 nginx: worker process

Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Mar 10 02:43:14 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

Mettre à jour Nginx

Vous devrez mettre à jour votre serveur Web Nginx car de nombreuses améliorations des performances, de nouvelles fonctionnalités et des correctifs de sécurité sont ajoutés. La plupart des distributions Linux modernes ne seront pas livrées avec la dernière version de nginx dans leurs listes de packages par défaut. Vous devrez donc mettre à jour la dernière version de nginx via un gestionnaire de packages. Vous pouvez mettre à jour votre serveur Web Nginx avec la commande suivante :

apt-get update -y
apt-get install nginx --reinstall -y

Empêcher la divulgation d'informations

Tout d'abord, vous devrez empêcher le Nginx de divulguer ses informations de version.

Par défaut, Nginx affiche son nom et sa version dans les en-têtes HTTP.

Vous pouvez le vérifier avec la commande suivante :

curl -I http://localhost

Vous devriez voir le résultat suivant :

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 09 Mar 2019 15:28:01 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Dans la sortie ci-dessus, vous devriez voir la version de Nginx et du système d'exploitation.

Vous pouvez masquer ces informations en modifiant le fichier /etc/nginx/nginx.conf :

nano /etc/nginx/nginx.conf

Ajoutez les jetons de serveur hors ligne dans la partie de configuration http :

http {

        ##
        # Basic Settings
        ##
        server_tokens off;

Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le serveur Web Nginx pour appliquer les modifications :

systemctl restart nginx

Maintenant, exécutez à nouveau la commande curl :

curl -I http://localhost

Vous devriez voir le résultat suivant :

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Mar 2019 15:33:31 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Restreindre les IP de l'accès

Nginx est livré avec un module simple appelé ngx_http_access_module pour autoriser ou refuser une adresse IP spécifique.

Si vous souhaitez autoriser le formulaire Nginx 172.16.0.0/16 et refuser les autres sous-réseaux. Ensuite, ouvrez le fichier /etc/nginx/sites-enabled/default :

nano /etc/nginx/sites-enabled/default

Effectuez les modifications suivantes dans le bloc du serveur :

server {
        listen 80 default_server;
        listen [::]:80 default_server;

	allow 172.16.0.0/16;
    	deny  all;

Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez Nginx pour appliquer ces modifications :

systemctl restart nginx

Maintenant, essayez d'accéder à votre serveur Nginx à partir d'une autre plage d'adresses IP comme 192.168.0.102.

Ensuite, vérifiez le journal Nginx avec la commande suivante :

tail -f /var/log/nginx/error.log

Vous devriez obtenir l'accès interdit dans la sortie suivante :

2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122"

Sécuriser Nginx avec TLS

TLS (Transport Layer Security) est le successeur de SSL (Secure Socket Layer). Il fournit un HTTPS plus fort et plus efficace et contient plus d'améliorations telles que Forward Secrecy, la compatibilité avec les suites de chiffrement OpenSSL modernes et HSTS. Ce tutoriel montre comment activer un certificat SSL auto-signé dans Nginx. Si vous souhaitez utiliser un certificat let's Encrypt à la place, consultez cette page : https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Commencez par créer un répertoire pour SSL avec la commande suivante :

mkdir /etc/nginx/ssl/

Ensuite, générez une clé et un certificat avec la commande suivante :

cd /etc/nginx/ssl/

Tout d'abord, générez la clé avec la commande suivante :

openssl genrsa -aes256 -out nginx.key 1024

Vous devriez voir le résultat suivant :

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:

Ensuite, générez csr avec la commande suivante :

openssl req -new -key nginx.key -out nginx.csr

Fournissez toutes les informations comme indiqué ci-dessous :

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
[email protected]:~# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Gujarat
Locality Name (eg, city) []:Junagadh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT

Ensuite, signez le certificat avec la commande suivante :

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Vous devriez voir le résultat suivant :

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected]
Getting Private key
Enter pass phrase for nginx.key:

Ensuite, ouvrez le fichier d'hôte virtuel par défaut de Nginx et définissez le certificat :

nano /etc/nginx/sites-enabled/default

Effectuez les modifications suivantes :

server {
        listen 192.168.0.100:443 ssl;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le serveur Nginx pour appliquer ces modifications :

systemctl restart nginx

Protéger le répertoire par mot de passe

Lors de la configuration d'un serveur Web Nginx, vous pouvez également protéger un répertoire spécifique avec un mot de passe. Vous pouvez le faire en utilisant le fichier .htpasswd.

Pour ce faire, créez le fichier passwd et ajoutez-y l'utilisateur avec la commande suivante :

mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Vous devriez voir le résultat suivant :

New password: 
Re-type new password: 
Adding password for user admin

Ensuite, créez un répertoire de test dans la racine Web de Nginx avec la commande suivante :

mkdir /var/www/html/test

Ensuite, attribuez la propriété à l'utilisateur www-data avec la commande suivante :

chown -R www-data:www-data /var/www/html/test

Ensuite, ouvrez le fichier d'hôte virtuel par défaut de Nginx avec la commande suivante :

nano /etc/nginx/sites-enabled/default

Ensuite, protégez le répertoire de test comme indiqué ci-dessous :

        location /test {

	auth_basic  "Restricted";
	auth_basic_user_file   /etc/nginx/.htpasswd/passwd;

Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service Nginx pour appliquer ces modifications :

systemctl restart nginx

Ensuite, ouvrez votre navigateur Web et tapez l'URL http://your-server-ip/test. Vous serez invité à saisir un nom d'utilisateur et un mot de passe pour accéder au répertoire de test, comme indiqué sur la page suivante :

Toutes nos félicitations! vous avez réussi à sécuriser votre serveur Nginx sur le serveur Ubuntu 18.04. J'espère que cela vous aidera à protéger votre application hébergée sur le serveur Web Nginx. N'hésitez pas à me demander si vous avez des questions. Pour plus d'informations, vous pouvez vous référer à la doc de sécurité Nginx.


Linux
  1. Qu'est-ce qu'un serveur Web et comment fonctionne un serveur Web ?

  2. Comment installer le serveur Web Nginx sur Linux

  3. LAMP vs LEMP - conseils pour choisir Apache ou nginx pour votre serveur Web

  4. Top 8 des trucs et astuces en ligne de commande MySQL

  5. Trucs et astuces préférés de rsync

Meilleures pratiques pour sécuriser votre serveur Web Apache

10 conseils de renforcement SSH exploitables pour sécuriser votre serveur Linux

Comment ajouter la prise en charge de PHP-FPM sur Apache et Nginx Web Server sur Ubuntu 18.04

Installer et configurer Varnish Cache avec Nginx Web Server sur Ubuntu 18.04

Comment masquer la version de votre serveur NGINX.

Découvrez CyberPanel et installez-le pour contrôler votre hébergeur