La sécurisation de votre serveur est principalement mise en place par le paramétrage de votre connexion à distance SSH.
Ce billet s’applique à tous les systèmes disposant d’une connexion à distance, elle est indépendante de l’usage que vous allez faire de votre serveur.
Ce billet propose un bon point de départ pour débuter la sécurisation de votre serveur. Libre à vous d’aller plus loin et de vous documentation sur les outils utilisés dans ce billet.
- Sécuriser votre connexion SSH
- Faciliter la connexion SSH après la première connexion
- SSMTP : Envoyer des emails
- Installer et configurer fail2ban
- Se débannir de fail2ban
- Personnaliser les emails à recevoir
Sécuriser votre connexion SSH
Pour améliorer la sécurité de votre serveur vous pouvez utiliser une clé SSH avec un gestionnaire de mot de passe, plutôt qu’un mot de passe pour accéder à votre serveur, c’est une solution qui se veut plus sûre qu’un mot de passe. Si vous avez déjà un gestionnaire de mot passe foncé, sinon essayez sans avec airbus comme mot de passe efficace.
Les grandes lignes de la sécurisation de votre connexion SSH consistent à changer le port de SSH, d’autoriser un utilisateur avec un nom d’utilisateur différent de ceux par défaut (ex: objetvolant) et d’interdire la connexion en root.
Une fois connecté, vous devrez utiliser la commande su pour changer d’utilisateur (ex : su root
).
1. Créer un utilisateur pour l’utiliser comme identifiant de connexion
Avant de continuer, vous devez créer un utilisateur qui vous servira pour vous connecter en SSH. En effet, utiliser le compte root est déconseillé. J’appellerai ce compte : objetvolant.
adduser objetvolant
- Choisissez un mot de passe compliqué et sûr. (N’oubliez pas que par défaut le pavé numérique est désactivé dans PuTTY).
Vous pouvez en profiter pour changer le mot de passe du compte root avec : passwd
, choisissez un mot de passe différent que celui de objetvolant. Garder un mot de passe reçu par email n’est pas conseillé !
2. Modifier la configuration SSH
Pour modifier la configuration SSH, vous devez éditer le fichier de configuration : /etc/ssh/sshd_config. Pour éditer le fichier, utilisez la commande vim /etc/ssh/sshd_config
une fois fini, il faudra recharger le service SSH avec : service ssh reload
.
Comment utiliser VIM ?
De nombreux tutoriels expliquent de façon complète l’usage de vim. Je vais vous expliquer l’essentiel. Lorsque vous ouvrez un fichier avec vim, la toute première chose est de modifier le mode de saisie avec la touche Inser, constatez — INSERTION — en bas de votre console.
Déplacez vous avec les flèches directionnelles de votre clavier.
Lorsque vous avez fini, faites CTRL + C — regardez en bas — écrivez la commande voulue puis validez avec Entrée. Voici les principales commandes :
:w
pour sauvegarder ;:q
pour quitter ;:wq
pour sauvegarder puis quitter ;:q!
pour quitter sans sauvegarder.
Astuce : Comment copier/coller le presse-papier sous VIM avec PuTTY ? Avec : Shift + Inser
1. Changer le port
Il est important de changer le port par défaut (port 22) pour diminuer la visibilité des bots qui parcourent internet à la recherche de serveur mal sécurisé en vérifiant le port 22. Ce changement permet de diminuer le nombre de logs inutiles et de décourager les essais de BruteForce.
Pour éviter les conflits entre deux applications vérifier la disponibilité du port dans le fichier /etc/services, avec la commande : cat /etc/services
. Choisissez un port au-dessus de 10000 non rond pour être sûr de n’avoir aucun conflit. Pour le cours je vais choisir le port 31262. Ne l’oubliez pas, c’est votre nouveau port de connexion au SSH !
- Vous devez modifier la ligne Port pour obtenir :
Port 31262
.
2. Interdire la connexion en root
La première chose que va faire une personne mal intentionnée est d’essayer le compte root. Modifier le nom d’utilisateur root n’est pas une chose à faire. Donc on interdit la connexion au compte root.
- Vous devez modifier la valeur de PermitRootLogin pour obtenir :
PermitRootLogin no
.
3. Autoriser l’utilisateur objetvolant
Pour autoriser objetvolant dans votre espace aérien, c’est-à-dire à se connecter en SSH, vous devez l’ajouter à votre liste d’utilisateur autorisé. Par défaut, la ligne est commentée #
ou absente, ajoutez là si vous ne la voyez pas.
- La ligne AllowUsers doit contenir objetvolant donc :
AllowUsers objetvolant
.
4. Modifier le niveau des logs
L’outil fail2ban fonctionne à partir des entrées des logs. Afin d’améliorer son efficacité, on augmente la sensibilité des logs, on passe d’INFO à VERBOSE pour avoir plus d’entrées.
- Vous devez modifier la valeur de LogLevel pour obtenir :
LogLevel VERBOSE
.
5. Sauvegarder et recharger
Pour sauvegarder vos changement et quitter vim utilisez :wq
ensuite service ssh reload
. Ouvrez une deuxième session de PuTTY et vérifiez vos changements en essayant de vous connecter au compte root (vous ne devriez pas réussir) et au compte objetvolant.
Si vous obtenez une erreur à la suite de la commande service ssh reload
corrigez l’erreur avant de fermer PuTTY, car la connexion à distance est désactivée jusqu’à la correction du problème. Si par mal chance, la connexion devait se couper, utilisez : le KVM dans le manager d’OVH pour vous connecter à votre serveur ; ou si ce n’est pas un serveur l’écran de votre machine.
Faciliter la connexion SSH après la première connexion
Si vous êtes fatigué de devoir passer votre compte spécial pour la connexion SSH (objetvolant). Vous pouvez après avoir ouvert une première connexion SSH autoriser la connexion aux autres comptes pour votre ordinateur (tant que la première connexion SSH reste active).
Pour ce faire nous allons utiliser le Port Forwarding qui est une fonctionnalité de la connexion SSH, activable dans les paramètres de PuTTY ou en ligne de commande.
Modifier votre configuration
Commencez à modifier /etc/ssh/sshd_config
, en rajoutant en dernier à la fin du fichier cette instruction :
Match Address 127.0.0.1
AllowUsers avion, zds
N’oubliez pas de : service ssh reload
.
Vous connecter
Pensez à modifier 31262, objetvolant et ipserveur dans les commandes SSH suivantes.
Votre première connexion
Lors de la première connexion en ssh vous devrez faire :
ssh -L 31262:localhost:31262 objetvolant@ipserveur -p 31262
Vos connexions suivantes
Lors de vos connexions suivantes vous devrez faire (modifier 31262 et objetvolant) :
ssh avion@localhost -p 31262
Où avion est le nom d’utilisateur souhaité.
SSMTP : Envoyer des emails
Pour configurer l’envoi de mail de votre serveur, suivez les instructions de ce billet. En effet, vous pouvez intégrer l’envoi de mail à fail2ban (=> votre futur firewall qui met en place des règles iptables pour bannir).
Vous pouvez aussi vous faire prévenir par mail d’une connexion SSH .
Installer et configurer fail2ban
Commençons par mettre à jour toutes les applications : apt-get update && apt-get upgrade
.
Installation
Ensuite installez fail2ban apt-get install fail2ban
. Il permet de mettre en place des règles de bannissement pré-configuré selon les entrées des logs.
Structure du répertoire fail2ban
- jail.d/ : Emplacement de vos configurations (notamment jail.local), permet de définir une sanction lorsqu’un filtre est validé un certain nombre de fois.
- filter.d : Les règles qui permettent d’analyser et d’identifier un comportement.
- action.d : Configure les actions à faire (notamment : Ajouter une règle iptables, envoyer un email, ajouter une ligne à un fichier log, etc…).
Configurer
Les fichiers de configuration se situent dans : /etc/fail2ban/.
La documentation recommande de ne pas modifier le fichier de base jail.conf mais le fichier jail.d/jail.local qui prendra le dessus sur la configuration de base. N’hésitez pas à faire cat /etc/fail2ban/jail.conf
pour comprendre ce que fait la configuration de départ. Pour écrire la configuration de jail.local, j’ai regardé jail.conf et j’ai changé ce qui ne me plaisait pas, prenez le temps de lire les commentaires du fichier, ils aident beaucoup.
Pour commencer à configurer fail2ban faites : vim /etc/fail2ban/jail.d/jail.local
.
[DEFAULT]
maxretry = 6
#Une semaine = 604800 secondes, deux semaines = 1209600.
findtime = 604800
bantime = 1209600
destemail= votre@email
sender = email@duserveur
action = %(action_mwl)s
mta = sendmail
ignoreip = 312.312.312.312 127.0.0.1
[ssh]
enabled = true
port = 31262
maxretry = 6
# ^ --> [DEFAULT].maxretry ne peut pas prendre le dessus sur [ssh].maxretry
# car il existe dans jail.conf il faut donc déclarer maxretry dans ssh pour pouvoir
# définir une valeur personnalisée.
#Normalement en ssh vous n'avez pas besoin d'ignorer 127.0.0.1 en ssh
#(sauf si vous utilisez la fonctionnalité de port forwarding ssh -L 31262:localhost:31262)
ignoreip = 312.312.312.312
Pensez à modifier le port 31262 par votre port de connexion et les deux emails par les vôtres.
Réglez à votre convenance : maxretry, findtime et bantime. Sachez que si vous vous faites bannir, vous pourrez toujours accéder à votre serveur via le KVM ou l’écran de votre machine. Si le SSH est votre seul moyen de connexion, rajoutez une règle ignoreip dans jail.local pour ne pas tenter le diable.
Pour recharger fail2ban, faites fail2ban-client reload
.
Se débannir de fail2ban
Accédez à la console en compte root. Il s’agira pour les VPS d’utiliser le KVM et pour les autres directement l’écran de votre machine.
Si vous suivez les instructions de ce sujet
- Accéder au mode interactif avec :
fail2ban-client -i
(Il faudra faire CTRL + C pour le quitter). - Pour récupérer la liste des IP bannies faites
status ssh
.
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 0
| `- Total failed: 12
`- action
|- Currently banned: 2
| `- IP list: 24.105.25.248 123.123.123.123
`- Total banned: 2
- Puis pour débannir notre IP faites
set ssh unbanip 123.123.123.123
Personnaliser les emails à recevoir
Vous pouvez choisir quels types d’informations recevoir lors d’un bannissement ou bien créer votre propre configuration (dans action.d/) pour modifier, traduire, ou désactiver certain mail (start and stop par exemple).
Choisir la configuration du mail de bannissement :
Lors d’un bannissement vous avez le choix entre 3 types de mails lors d’un ban :
action = %(action_)s
: Par défaut voir l’extrait ci-dessous.action = %(action_mw)s
: Le même que le précédent mais avec un whois.action = %(action_mwl)s
: Le même que le précédent mais avec les lignes de log qui ont provoqué le ban.
Pour personnaliser ou traduire le mail vous pouvez modifier, selon votre précédent choix : action.d/sendmail.conf
, action.d/sendmail-whois.conf
ou action.d/sendmail-whois-lines.conf
.
%(action_)s
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from `uname -n`
Date: `LC_TIME=C date -u +"%%a, %%d %%h %%Y %%T +0000"`
From: <sendername> <<sender>>
To: <dest>\n
Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>
Créer votre configuration/propre mail :
Si vous voulez créer votre fichier .conf, par exemple : sendmail-avion_en_papier.conf
vous aurez besoin de rajouter ces deux lignes à votre fichier jail.d/jail.local
. Vous permettant de relier le fichier à votre configuration.
action_mwl_avion = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-avion_en_papier[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]
action = %(action_mwl_avion)s
Vous trouverez plus d’information dans la catégorie # Action shortcuts.
de jail.conf
.
N’hésitez pas à aller voir le billet sur comment configurer fail2ban avec apache2 ou un autre serveur HTTP.