Ajoutez un pare-feu et configurez l'accès ssh à votre serveur, configurez https pour votre site

Une fois la configuration du serveur de votre site installée, il est temps de prendre quelques mesures de sécurité de base.

16 Juillet 2020 14:03
Thèmes: Déploiement

Dans un didacticiel précédent, on a configuré un site pour qu'il s'exécute sur un serveur DigitalOcean avec Gunicorn, Nginx et Supervisor. On va maintenant activer le pare-feu, configurer un accès crypté (https) au site et sécuriser l'accès au serveur avec des clés ssh.

1. Activer le pare-feu

DigitalOcean a un bon tutoriel avec des instructions pour configurer UFW (Uncomplicated FireWall). Connectez-vous en tant qu'utilisateur root (ou utilisez sudo avec chaque commande). D'abord, on s'assure que le pare-feu nous permettra de se connecter avec ssh, puis on active ufw:

ufw allow OpenSSH
ufw enable

On peut vérifier quels services sont autorisés avec:

ufw status

Tous les services sont désormais bloqués à l'exception de ssh. Si vous devez autoriser l'accès au port 8000 pour le développement, tapez:

ufw allow 8000

En production, on n'a plus besoin du port 8000, on peut donc le bloquer à nouveau avec:

ufw delete allow 8000

On veut également ouvrir le pare-feu pour Nginx. Pour afficher les applications reconnues par ufw, tapez:

ufw app list

La liste doit contenir Nginx HTTP (pour l'accès via le port 80), Nginx HTTPS (via le port 443) et Nginx Full (via les deux ports). Activez HTTP et HTTPS:

ufw allow 'Nginx Full'
2. Configurez https

Encore une fois, il y a un bon tutoriel sur DigitalOcean sur la façon d'utiliser le programme Certbot pour intégrer des certificats TLS/SSL gratuits de Let's Encrypt à votre configuration Nginx. On ne répétera pas les instructions détaillées; installez Certbot et son package Nginx:

sudo apt install certbot python3-certbot-nginx

Exécutez le package Certbot avec:

sudo certbot --nginx -d pythoneatstail.com -d www.pythoneatstail.com

Si c'est la première fois que vous exécutez Certbot, vous devrez fournir une adresse e-mail (voir le tutoriel). Certbot vous demande ensuite s'il doit rediriger tout le trafic HTTP vers HTTPS; choisissez 2 pour accepter cela. Vous pouvez ensuite consulter ces modifications dans le fichier de configuration /etc/nginx/sites-available/pet.

Selon la version du package Certbot sur votre système d'exploitation, Let's Encrypt peut attribuer à votre site une note B au lieu de la note la plus élevée, car les protocoles moins sécurisés TLS 1.0/1.1 sont toujours activés. En effet, Certbot remplace le paramètre ssl_protocols dans le fichier de configuration nginx.conf.

Votre site devrait maintenant être disponible sur https://www.pythoneatstail.com (utilisez votre propre nom de domaine).

3. Configurer l'accès SSH de l'ordinateur local au serveur

Dans un didacticiel précédent, on a créé un utilisateur avec un accès par mot de passe au serveur. Par défaut, l'utilisateur root a également besoin d'un mot de passe. En générant une paire de clés RSA et en enregistrant la clé publique sur le serveur, on peut permettre aux utilisateurs d'accéder à partir de l'ordinateur local sans mot de passe. Générez une paire de clés en tapant la commande suivante dans votre terminal sur votre ordinateur local:

ssh-keygen

Si vous souhaitez une sécurité supplémentaire, vous pouvez ajouter une phrase secrète lorsque cela vous est demandé. L'emplacement par défaut est un sous-répertoire caché .ssh du répertoire personnel de l'utilisateur local. Il existe deux fichiers: id_rsa pour la clé secrète et id_rsa.pub pour la clé publique. Imprimez le contenu de id_rsa.pub sur votre terminal avec:

cat .ssh/id_rsa.pub

et copiez la chaîne entière dans le presse-papiers. Connectez-vous au serveur avec ssh et (une fois de plus) mot de passe, et dans le répertoire personnel de l'utilisateur auquel vous souhaitez accorder l'accès ssh (par exemple /root pour l'utilisateur root, /home/usr_pet pour usr_pet) créez un répertoire caché .ssh et un fichier authorized_keys là-dedans:

mkdir .ssh
touch .ssh/authorized_keys

Entrez le fichier avec votre éditeur et collez-y le contenu du presse-papiers. L'utilisateur devrait maintenant pouvoir se connecter sans mot de passe. Si vous le souhaitez, vous pouvez désactiver la connexion par mot de passe en définissant la directive PasswordAuthentication dans le fichier /etc/ssh/sshd_config. Modifiez le fichier pour qu'il indique:

PasswordAuthentication no

Redémarrez le service ssh avec:

service ssh restart

Maintenant, vous ne devriez pouvoir accéder au serveur directement qu'avec ssh.

Même un site plus sécurisé peut tomber en panne et les données peuvent se perdre. Lisez la suite pour savoir comment sauvegarder et restaurer vos données.

Commentez cet article (connectez-vous d'abord ou confirmez par nom et email ci-dessous)