Sécuriser votre connexion au serveur

Ce que vous allez créer

Grâce à l'abondance croissante d'applications utiles auto-hébergées telles que WordPress et à la croissance abordable des fournisseurs d'hébergement en cloud, la gestion de votre propre serveur devient de plus en plus attrayante pour un public plus large. Mais la sécurisation correcte de ces serveurs nécessite une connaissance assez large de l’administration système Linux; cette tâche n'est pas toujours adaptée aux débutants. 

Lorsque vous vous inscrivez pour un compte d'hébergement cloud classique, vous recevez un courrier électronique avec un compte racine, un mot de passe, une adresse IP et des instructions pour vous connecter via SSH sur le port 22. Toutefois, il est important de franchir plusieurs étapes supplémentaires configurations d'accès. Le premier mot de passe root ci-dessous n'est en réalité que le point de départ de la sécurité. Il y a beaucoup plus à faire.

Ce tutoriel donnera un aperçu des approches incrémentielles courantes pour sécuriser votre serveur Linux typique..

Approches de la sécurité du serveur

Pour les besoins de ce tutoriel, j'utilise un nouveau droplet Ubuntu 14.04 de Digital Ocean avec la configuration LAMP; si vous souhaitez suivre la même configuration, voici un exemple des étapes de configuration.. 

Une fois le nom de domaine choisi mappé, vous êtes prêt à commencer. J'utilise http://secure.lookahead.io pour mon exemple.

Vous pouvez vous connecter à votre serveur avec SSH: ssh [email protected]. Le serveur devrait vous demander de changer votre mot de passe lors de la première tentative de connexion:

Maintenant à vous de jouer. Voici quelques approches communes pour améliorer la sécurité de la connexion de votre serveur:

1. Mettez à jour vos composants système

Tout d'abord, il est important de mettre à jour régulièrement les composants de votre système Linux. En règle générale, lors de votre connexion, Ubuntu vous indiquera le nombre de paquets à mettre à jour. Les commandes pour mettre à jour vos paquets sont:

sudo apt-get update sudo apt-get dist-upgrade

La récente vulnérabilité de sécurité de Shellshock révélée dans Bash illustre parfaitement la nécessité de mettre à jour régulièrement vos fichiers système..

Chaque fois que vous vous connecterez, Ubuntu vous indiquera s’il existe des packages et des mises à jour de sécurité pouvant être mis à jour..

Si vous le souhaitez, vous pouvez activer les mises à niveau sans surveillance:

sudo apt-get installer les mises à jour sans assistance sudo dpkg-reconfigure les mises à jour sans surveillance 

2. Changer votre port SSH à partir du port par défaut

Laisser l'accès SSH sur le port 22 permet aux pirates informatiques de cibler vos serveurs plus rapidement et plus facilement. Changeons le port SSH par défaut en quelque chose de plus obscur.

Editez le fichier de configuration SSH:

sudo nano / etc / ssh / sshd_config

Passez à un autre numéro de port, par exemple:

# Quels ports, IP et protocoles avons-nous écoutés pour le port 33322

Redémarrer SSH:

sudo service ssh redémarrer

Ensuite, déconnectez-vous et essayez de vous reconnecter. Vous devriez voir ce message d'erreur:

ssh [email protected] ssh: se connecter à l'hôte secure.lookahead.io port 22: connexion refusée

Cette fois, utilisez la commande SSH suivante, en modifiant le port sur 33322: ssh -p 33322 [email protected]. Vous devriez pouvoir vous connecter avec succès.

3. Activer un pare-feu

L'utilisation d'un pare-feu peut aider à bloquer l'accès aux ports laissés inutilement ouvrir et fermer des vecteurs d'attaque; il peut également aider à la journalisation des tentatives d'intrusion.

Si vous utilisez des services de cloud Amazon AWS, il existe une interface utilisateur Web intéressante pour son pare-feu, appelée groupes de sécurité. La console pour les groupes de sécurité AWS facilite la désactivation de l'accès à tous les ports, à l'exception du nouveau port SSH que vous avez choisi et du port 80 pour la navigation Web. vous pouvez voir un exemple visuel de ceci ici:

Si vous souhaitez implémenter des pare-feu basés sur Linux, vous pouvez étudier ufw et iptables. Bien que cela dépasse le cadre de ce tutoriel, je vais donner un bref exemple d'utilisation de ufw, le "pare-feu simple". 

Tout d'abord, nous allons activer ufw puis autoriser l'accès pour notre port SSH 33322 ainsi que pour tout le trafic http, sur le port 80. Ensuite, nous refuserons l'accès sur le port SSH standard 22..

sudo ufw activer sudo ufw permettre 33322 ufw sudo autoriser http sudo ufw refuser 22 statut ufw sudo

Soyez prudent lors de la configuration ufw, comme vous pouvez vous verrouiller hors d'une session de console existante et de votre serveur entier.

Si vous souhaitez aller plus loin, le port frappant vous permet d'obscurcir davantage votre port d'accès SSH. Justin Ellingwood propose un didacticiel détaillé pour les utilisateurs avancés: comment utiliser Port Knocking pour masquer votre démon SSH des attaquants.

4. Changer votre nom de connexion root

Maintenant, éliminons l’utilisateur root (ou ubuntu sur certains systèmes) et personnalisons le login de l’administrateur..

Nous allons ajouter un utilisateur nommé "hal". Remplacez "hal" par votre nom d'utilisateur préféré dans les exemples ci-dessous:

sudo adduser hal

Ajoutez votre nouvel utilisateur au groupe sudo pour administrateurs:

sudo adduser hal sudo

Ajoutez votre nouvel utilisateur au groupe sudoers. Editez le fichier sudoers:

sudo nano / etc / sudoers

Ajoutez cette ligne au fichier sudoers, dans la section des privilèges de l’utilisateur:

hal ALL = (ALL) NOPASSWD: ALL

Editez à nouveau le fichier de configuration SSH:

sudo nano / etc / ssh / sshd_config

Supprimer le compte root ou ubuntu de la AllowUsers champ. Vous devrez peut-être aussi ajouter cette ligne si elle ne se trouve pas dans votre fichier de configuration:

AllowUsers hal

Assure-toi PermitRootLogin est éteint:

PermitRootLogin no

Redémarrez le service:

sudo service ssh redémarrer

Déconnectez-vous et essayez de vous reconnecter en tant que root. Vous ne devriez pas pouvoir. Ensuite, essayez de vous connecter en tant que Hal: ssh -p 33322 [email protected]. Cela devrait bien fonctionner.

Notez que certains utilisateurs peuvent souhaiter redémarrer SSH, se déconnecter et vérifier que vous pouvez vous connecter en tant que Hal avant de désactiver la connexion root..

5. Activer l'authentification à deux facteurs de Google

Nous allons maintenant ajouter une authentification à deux facteurs à votre connexion au serveur. En d'autres termes, lorsque nous essayons de nous connecter au serveur, il nous sera demandé de fournir un code à durée limitée d'une application sur notre téléphone.. 

Pour cet exemple, nous allons utiliser Google Authenticator. Assurez-vous de télécharger Google Authenticator depuis iTunes App Store ou Play Store..

Ensuite, depuis la console de votre serveur, installez le package Google Authenticator:

sudo apt-get installez libpam-google-authenticator

Ensuite, nous modifierons le module d’authentification enfichable (PAM) pour que SSH exige une authentification à deux facteurs de Google:

nano /etc/pam.d/sshd

Ajoutez la ligne suivante en haut:

auth requis pam_google_authenticator.so

Ensuite, revenez à l’édition du fichier de configuration SSH:

sudo nano / etc / ssh / sshd_config

Changer la ChallengeResponseAuthentication à oui:

# Passez à oui pour activer les mots de passe de réponse aux questions (prenez garde aux problèmes liés à # certains modules et threads PAM) ChallengeResponseAuthentication yes

Enregistrez la modification et activez l'authentificateur:

google-authentificateur

En plus de voir un code QR de grande taille (comme indiqué en haut de ce didacticiel), vous verrez également un ensemble de clés de connexion secrètes et des questions vous seront posées pour personnaliser votre configuration:

À l'aide de l'application Google Authenticator sur votre téléphone, choisissez l'icône de stylo d'édition en haut à droite et ajoutez une nouvelle entrée à l'aide du bouton en bas. Vous pouvez scanner le code QR avec votre appareil photo ou saisir la clé secrète. Une fois terminé, Google Authenticator sera prêt à vous fournir des codes pour votre prochaine connexion..

Imprimez une copie de ces codes de grattage d'urgence et sauvegardez-les dans un emplacement sécurisé, au cas où vous auriez besoin de récupérer votre identifiant sans authentification à deux facteurs..

Redémarrez à nouveau le service SSH et déconnectez-vous:

sudo service ssh redémarrer la déconnexion

Reconnectez-vous, et cette fois-ci, un code de vérification vous sera demandé avant votre mot de passe. Saisissez le code de vérification à six chiffres de Google Authenticator sur votre téléphone:

L'ajout d'une authentification à deux facteurs ajoute une couche de sécurité secondaire renforcée à votre serveur. Pourtant, il y a plus que nous pouvons faire.

6. Passer à l’utilisation des clés SSH pour la connexion

Il est sage de désactiver la connexion de votre serveur basée sur un mot de passe en faveur des clés de sécurité. les clés sont beaucoup plus résistantes aux attaques. Les mots de passe sont courts et soumis aux attaques du dictionnaire. les clés sont plus longues et pour la plupart ne peuvent être compromises que par les superordinateurs des agences gouvernementales.

Pour créer votre clé SSH, suivez ces instructions. Accédez au répertoire de base de votre nouvel utilisateur:

cd / home / hal

Créez un répertoire SSH et définissez les autorisations:

mkdir .ssh chmod 700 .ssh

Générez une nouvelle paire de clés. Lorsque vous y êtes invité, vous pouvez choisir d'ajouter un mot de passe à la clé:

cd .ssh ssh-keygen -b 1024 -f id_hal -t dsa

Ajouter la clé publique au clés_autorisées fichier:

cat ~ / .ssh / id_hal.pub> ~ / .ssh / registered_keys

Définissez les autorisations pour le fichier de clé:

chmod 600 ~ / .ssh / *

Déplacez la clé privée dans un dossier temporaire pour le télécharger sur votre ordinateur local:

cp ~ / .ssh / * / tmp chmod 644 / tmp / *

Téléchargez la nouvelle clé privée sur votre ordinateur à l'aide de votre compte Ubuntu. Sur votre ordinateur, utilisez Terminal:

scp -P 33322 -i ~ / .ssh / id_hal [email protected]: / tmp / * ~ / .ssh

Définir les autorisations et tester:

cd ~ / .ssh chmod 400 id_hal ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Si vous rencontrez des erreurs, vous pouvez consulter le journal sur le serveur AWS pendant que vous essayez de vous connecter:

tail -f /var/log/auth.log

Supprimez les fichiers de clé temporaires du répertoire tmp du serveur:

rm -rf / tmp / *

Editez à nouveau le fichier de configuration SSH:

sudo nano / etc / ssh / sshd_config

Désactiver l'authentification par mot de passe:

Authentification par mot de passe non

Redémarrez à nouveau le service SSH:

sudo service ssh redémarrer

Désormais, personne ne pourra se connecter à votre serveur sans votre clé privée. Pour vous connecter à votre serveur, utilisez la commande suivante:

ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Assurez-vous de sécuriser l'ordinateur que vous utilisez avec la clé privée dessus; il est également sage de stocker une copie de votre clé privée sur un lecteur flash quelque part physiquement sécurisé.

Notez que l'authentification à deux facteurs de Google Authenticator est ignorée lors de l'utilisation de la sécurité par clé SSH..

De plus, si jamais votre serveur est verrouillé pendant ces configurations, DigitalOcean fournit une console Web qui agit comme si un clavier était branché sur votre serveur. Pour les autres hôtes, vous aurez peut-être besoin d'aide de leur équipe de support..

7. Gérer la sécurité de votre application

Bien que le portail de connexion de votre serveur soit une vulnérabilité sérieuse, honnêtement, les applications que vous choisissez d'installer risquent de poser des risques encore plus grands. Par exemple, j'ai récemment lu que l'utilisation d'expressions régulières mal sécurisées dans votre application PHP pouvait ouvrir votre serveur à des attaques par reprographie.

Mais un exemple plus banal est la vulnérabilité récente du plugin WordPress avec Slider Revolution. Un thème que j'avais installé regroupait en fait ce plugin, je devais donc le mettre à jour pour corriger le bogue..

Les vulnérabilités des applications peuvent être difficiles à suivre. Le retour à l'hébergement géré peut à nouveau sembler attrayant. n'abandonne pas! Méfiez-vous des applications que vous installez, restez sur les listes de diffusion de vos fournisseurs de code et maintenez le tout régulièrement à jour..

Soyez proactif et faites ce que vous pouvez pour protéger vos applications. Par exemple, voyez comment je décris l'ajout de la sécurité des utilisateurs Apache à l'installation de l'application Web la plus répandue, PHPMyAdmin, utilisée pour simplifier l'accès à la base de données MySQL et son administration. Parce que seuls les administrateurs ont besoin d'accéder à PHPMyAdmin et que les conséquences de son piratage sont lourdes, l'ajout d'une couche supplémentaire de sécurité par mot de passe est tout à fait approprié pour cette application particulière..

La sécurité est une préoccupation majeure et un vaste domaine dans lequel s’attaquer. J'espère que vous avez trouvé ce tutoriel utile. N'hésitez pas à poster vos propres idées, corrections, questions et commentaires ci-dessous. Je serais particulièrement intéressé par les approches alternatives et étendues. Vous pouvez également me joindre sur Twitter @reifman ou m'envoyer un email directement.