Comment héberger un site Web en utilisant Cloudflare et Nginx sur Ubuntu 16.04

L’auteur a sélectionné la Electronic Frontier Foundation pour recevoir un don de 200 $ dans le cadre de la Write pour DOnations programme.

introduction

Cloudflare est un service situé entre le visiteur et le serveur du propriétaire du site Web, jouant le rôle de proxy inverse pour les sites Web. Cloudflare fournit un réseau de distribution de contenu (CDN), ainsi que des services d’atténuation des attaques DDoS et de serveur de nom de domaine distribué.

Nginx est un serveur Web populaire chargé d’héberger certains des sites les plus fréquentés et les plus achalandés d’Internet. Il est courant que les organisations servent des sites Web avec Nginx et utilisent Cloudflare en tant que fournisseur de CDN et DNS.

Dans ce tutoriel, vous allez sécuriser votre site Web desservi par Nginx avec un certificat d’origine CA de Cloudflare et configurer Nginx pour qu’il utilise des demandes d’extraction authentifiées. Les avantages de cette configuration sont que vous bénéficiez du CDN de Cloudflare et de la résolution DNS rapide tout en garantissant que toutes les connexions passent par Cloudflare. Cela empêche toute requête malveillante d’atteindre votre serveur.

Conditions préalables

Pour compléter ce didacticiel, vous aurez besoin des éléments suivants:

Étape 1 - Génération d’un certificat CA TLS d’origine

L’autorité de certification Cloudflare Origin vous permet de générer un certificat TLS gratuit, signé par Cloudflare, à installer sur votre serveur Nginx. En utilisant le certificat TLS généré par Cloudflare, vous pouvez sécuriser la connexion entre les serveurs Cloudflare et votre serveur Nginx.

Pour générer un certificat avec l’autorité de certification d’origine, accédez à la section * Crypto * de votre tableau de bord Cloudflare. À partir de là, cliquez sur le bouton * Créer un certificat * dans la section * Certificats d’origine *:

image: https: //assets.digitalocean.com/articles/cloudflare_secure_secure_nginx_1604/KcTiCQW.png [Option de création de certificat dans le tableau de bord Cloudflare]

Laissez l’option par défaut * Laissez CloudFlare générer une clé privée et une CSR * sélectionnées.

image: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/8IX2ULI.png [Options de l’interface graphique de l’autorité de certification d’origine]

Cliquez sur * Suivant * pour ouvrir une boîte de dialogue contenant le * certificat d’origine * et la * clé privée *. Vous devez transférer le certificat d’origine et la clé privée de CloudFlare sur votre serveur.

image: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/bIBA8tf.png [Boîte de dialogue indiquant le certificat d’origine et la clé privée]

Nous utiliserons le répertoire + / etc / ssl / certs + sur le serveur pour contenir le certificat d’origine. Le répertoire + / etc / ssl / private + contiendra le fichier de clé privée. Les deux dossiers existent déjà sur le serveur.

Commencez par copier le contenu du * certificat d’origine * affiché dans la boîte de dialogue de votre navigateur.

Ensuite, sur votre serveur, ouvrez + / etc / ssl / certs / cert.pem + pour le modifier:

sudo nano /etc/ssl/certs/cert.pem

Collez le contenu du certificat dans le fichier. Puis enregistrez et quittez l’éditeur.

Revenez ensuite à votre navigateur et copiez le contenu de la * clé privée *. Ouvrez le fichier + / etc / ssl / private / key.pem + pour le modifier:

sudo nano /etc/ssl/private/key.pem

Collez la clé dans le fichier, enregistrez le fichier et quittez l’éditeur.

Maintenant que vous avez copié les fichiers de clé et de certificat sur votre serveur, vous devez mettre à jour la configuration de Nginx pour pouvoir les utiliser.

Étape 2 - Installation du certificat de l’autorité de certification d’origine dans Nginx

Dans la section précédente, vous avez généré un certificat d’origine et une clé privée à l’aide du tableau de bord de Cloudlfare et enregistré les fichiers sur votre serveur. Vous allez maintenant mettre à jour la configuration Nginx pour votre site afin d’utiliser le certificat d’origine et la clé privée pour sécuriser la connexion entre les serveurs de Cloudflare et votre serveur.

Nginx crée un bloc serveur par défaut lors de l’installation. Supprimez-le s’il existe, car vous avez déjà configuré un bloc de serveur personnalisé pour votre domaine:

sudo rm /etc/nginx/sites-enabled/default

Ensuite, ouvrez le fichier de configuration Nginx pour votre domaine:

sudo nano /etc/nginx/sites-available/

Le fichier devrait ressembler à ceci:

example.com '> / etc / nginx / sites-available /

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

       root /var/www//html;
       index index.html index.htm index.nginx-debian.html;

       server_name  ;

       location / {
               try_files $uri $uri/ =404;
       }
}

Nous allons modifier le fichier de configuration Nginx pour effectuer les opérations suivantes:

  • Écoutez sur le port + 80 + et redirigez toutes les demandes d’utilisation de + https +.

  • Écoutez sur le port + 443 + et utilisez le certificat d’origine et la clé privée que vous avez ajoutés dans la section précédente.

Modifiez le fichier pour qu’il ressemble à ce qui suit:

example.com '> / etc / nginx / sites-available /

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

}











   server_name  ;

   root /var/www/example.com/html;
   index index.html index.htm index.nginx-debian.html;


   location / {
           try_files $uri $uri/ =404;
   }

Enregistrez le fichier et quittez l’éditeur.

Ensuite, testez pour vous assurer qu’il n’ya aucune erreur de syntaxe dans l’un de vos fichiers de configuration Nginx:

sudo nginx -t

Si aucun problème n’a été détecté, redémarrez Nginx pour activer vos modifications:

sudo systemctl restart nginx

Allez maintenant à la section * Crypto * du tableau de bord Cloudflare et changez le mode * SSL * en * Complet *. Cela indique à Cloudflare de toujours chiffrer la connexion entre Cloudflare et votre serveur Nginx d’origine.

image: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/xO3frBH.png [Activer le mode SSL complet dans le tableau de bord Cloudflare]

Rendez-vous maintenant sur votre site Web à l’adresse + https: // + pour vérifier sa bonne configuration. Votre page d’accueil sera affichée et le navigateur signalera que le site est sécurisé.

Dans la section suivante, vous allez configurer Authenticated Origin Pulls pour vérifier que votre serveur d’origine communique effectivement avec Cloudflare et non avec un autre serveur. Ce faisant, Nginx sera configuré pour n’accepter que les demandes qui utilisent un certificat client valide de Cloudflare et les demandes qui ne sont pas passées par CloudFlare seront supprimées.

Étape 3 - Configuration des tracés d’origine authentifiés

Le certificat de l’autorité de certification d’origine aidera Cloudflare à vérifier qu’il communique avec le bon serveur d’origine. Mais comment votre serveur d’origine Nginx peut-il vérifier qu’il communique effectivement avec Cloudflare? Entrez Authentification du client TLS.

Dans un handshake TLS authentifié par un client, les deux côtés fournissent un certificat à vérifier. Le serveur d’origine est configuré pour accepter uniquement les demandes utilisant un certificat client valide de Cloudflare. Les demandes qui ne sont pas passées par Cloudflare seront supprimées car elles n’auront pas de certificat Cloudflare. Cela signifie que les attaquants ne peuvent contourner les mesures de sécurité de Cloudflare et se connecter directement à votre serveur Nginx.

Cloudflare présente les certificats signés par une autorité de certification avec le certificat suivant:

-----BEGIN CERTIFICATE-----
MIIGBjCCA/CgAwIBAgIIV5G6lVbCLmEwCwYJKoZIhvcNAQENMIGQMQswCQYDVQQG
EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjEUMBIGA1UECxMLT3JpZ2lu
IFB1bGwxFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3Ju
aWExIzAhBgNVBAMTGm9yaWdpbi1wdWxsLmNsb3VkZmxhcmUubmV0MB4XDTE1MDEx
MzAyNDc1M1oXDTIwMDExMjAyNTI1M1owgZAxCzAJBgNVBAYTAlVTMRkwFwYDVQQK
ExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmlnaW4gUHVsbDEWMBQGA1UE
BxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEAxMa
b3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDdsts6I2H5dGyn4adACQRXlfo0KmwsN7B5rxD8C5qgy6spyONr
WV0ecvdeGQfWa8Gy/yuTuOnsXfy7oyZ1dm93c3Mea7YkM7KNMc5Y6m520E9tHooc
f1qxeDpGSsnWc7HWibFgD7qZQx+T+yfNqt63vPI0HYBOYao6hWd3JQhu5caAcIS2
ms5tzSSZVH83ZPe6Lkb5xRgLl3eXEFcfI2DjnlOtLFqpjHuEB3Tr6agfdWyaGEEi
lRY1IB3k6TfLTaSiX2/SyJ96bp92wvTSjR7USjDV9ypf7AD6u6vwJZ3bwNisNw5L
ptph0FBnc1R6nDoHmvQRoyytoe0rl/d801i9Nru/fXa+l5K2nf1koR3IX440Z2i9
+Z4iVA69NmCbT4MVjm7K3zlOtwfI7i1KYVv+ATo4ycgBuZfY9f/2lBhIv7BHuZal
b9D+/EK8aMUfjDF4icEGm+RQfExv2nOpkR4BfQppF/dLmkYfjgtO1403X0ihkT6T
PYQdmYS6Jf53/KpqC3aA+R7zg2birtvprinlR14MNvwOsDOzsK4p8WYsgZOR4Qr2
gAx+z2aVOs/87+TVOR0r14irQsxbg7uP2X4t+EXx13glHxwG+CnzUVycDLMVGvuG
aUgF9hukZxlOZnrl6VOf1fg0Caf3uvV8smOkVw6DMsGhBZSJVwao0UQNqQIDAQAB
o2YwZDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4E
FgQUQ1lLK2mLgOERM2pXzVc42p59xeswHwYDVR0jBBgwFoAUQ1lLK2mLgOERM2pX
zVc42p59xeswCwYJKoZIhvcNAQENA4ICAQDKDQM1qPRVP/4Gltz0D6OU6xezFBKr
LWtDoA1qW2F7pkiYawCP9MrDPDJsHy7dx+xw3bBZxOsK5PA/T7p1dqpEl6i8F692
g//EuYOifLYw3ySPe3LRNhvPl/1f6Sn862VhPvLa8aQAAwR9e/CZvlY3fj+6G5ik
3it7fikmKUsVnugNOkjmwI3hZqXfJNc7AtHDFw0mEOV0dSeAPTo95N9cxBbm9PKv
qAEmTEXp2trQ/RjJ/AomJyfA1BQjsD0j++DI3a9/BbDwWmr1lJciKxiNKaa0BRLB
dKMrYQD+PkPNCgEuojT+paLKRrMyFUzHSG1doYm46NE9/WARTh3sFUp1B7HZSBqA
kHleoB/vQ/mDuW9C3/8Jk2uRUdZxR+LoNZItuOjU8oTy6zpN1+GgSj7bHjiy9rfA
F+ehdrz+IOh80WIiqs763PGoaYUyzxLvVowLWNoxVVoc9G+PqFKqD988XlipHVB6
Bz+1CD4D/bWrs3cC9+kk/jFmrrAymZlkFX8tDb5aXASSLJjUjcptci9SKqtI2h0J
wUGkD7+bQAr+7vr8/R+CBmNMe7csE8NeEX6lVMF7Dh0a1YKQa6hUN18bBuYgTMuT
QzMmZpRpIBB321ZBlcnlxiTJvWxvbCPHKHj20VwwAz7LONF59s84ZsOqfoBv8gKM
s0s5dsq5zpLeaw==
-----END CERTIFICATE-----

Vous pouvez également télécharger le certificat directement à partir de Cloudflare here.

Copiez ce certificat.

Créez ensuite le fichier + / etc / ssl / certs / cloudflare.crt + pour contenir le certificat de Cloudflare:

sudo nano /etc/ssl/certs/cloudflare.crt

Collez le certificat dans le fichier. Enregistrez ensuite le fichier et quittez l’éditeur.

Maintenant, mettez à jour votre configuration Nginx pour utiliser les extraits d’origine authentifiés TLS. Ouvrez le fichier de configuration de votre domaine:

sudo nano /etc/nginx/sites-available/

Ajoutez les directives + ssl_client_certificate + et + ssl_verify_client + comme indiqué dans l’exemple suivant:

example.com '> / etc / nginx / sites-available /

. . .

server {

   # SSL configuration

   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   ssl        on;
   ssl_certificate         /etc/ssl/certs/cert.pem;
   ssl_certificate_key     /etc/ssl/private/key.pem;



   . . .

Enregistrez le fichier et quittez l’éditeur.

Ensuite, testez pour vous assurer qu’il n’y a pas d’erreur de syntaxe dans votre configuration Nginx.

sudo nginx -t

Si aucun problème n’a été détecté, redémarrez Nginx pour activer vos modifications:

sudo systemctl restart nginx

Enfin, pour activer les extraits authentifiés, ouvrez la section * Crypto * du tableau de bord Cloudflare et activez l’option * Authenticated Origin Pulls *.

image: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/s5sYOVs.png [Activer les extraits d’origine authentifiés]

Rendez-vous maintenant sur votre site Web à l’adresse «+ https: // +» pour vérifier qu’il a été configuré correctement. Comme auparavant, votre page d’accueil s’affiche.

Pour vérifier que votre serveur accepte uniquement les demandes signées par l’AC de Cloudflare, activez l’option * Authenticated Origin Pulls * pour le désactiver, puis rechargez votre site Web. Vous devriez recevoir le message d’erreur suivant:

image: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/w7qNH8P.png [Message d’erreur]

Votre serveur d’origine génère une erreur si une demande n’est pas signée par l’AC de Cloudflare.

Maintenant que vous savez qu’il fonctionne correctement, retournez à la section * Crypto * du tableau de bord Cloudflare et activez à nouveau l’option * Authenticated Origin Pulls * pour l’activer.

Conclusion

Dans ce didacticiel, vous avez sécurisé votre site Web basé sur Nginx en cryptant le trafic entre Cloudflare et le serveur Nginx à l’aide d’un certificat d’origine d’autorité de certification de Cloudflare. Vous configurez ensuite Authenticated Origin Pulls sur le serveur Nginx pour vous assurer qu’il accepte uniquement les demandes des serveurs de Cloudflare, ce qui empêche toute autre personne de se connecter directement au serveur Nginx.