Une fois la configuration du serveur de votre site installée, il est temps de prendre quelques mesures de sécurité de base.
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.
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'
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).
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)