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..
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:
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
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.
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.
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..
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.
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..
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.