Derniers articles
- Installation de Wordpress sur un VPS Linux chez OVH
- Nettoyer le cache des icônes du Dock
- Mise à jour vers MacOS Catalina intempestive
- Ping, date et heure
- Nettoyer les fichiers créés par Mac OS
- Notification expiration certificat SSL
- Notifications en push via Pushbullet pour Transmission
- Apache : mettre en mode maintenance en un clic
- Quelques modifications de mon blog
- PHP 7.1 et APCU
SSH est un service essentiel lorsque l'on dispose d'un serveur sous Linux.
La configuration du service associé peut être modifiée afin de renforcer la sécurité. Quelques pistes seront donc indiquées dans ce billet. Les informations par défaut utilisées dans ce billet sont basées sur celles en place à l'installation de openssh-server sur une Debian Jessie.
Dans un premier temps, nous allons modifier le port d'écoute (22 par défaut) pour le port 55555.
Il faudra donc modifier "Port 22" par "Port 55555" dans le fichier /etc/ssh/sshd_config.
Pour aller plus vite, on peut utilise sed :
Afin d'éviter les attaques par bruteforce, on va désactiver la connexion en SSH par le biais du compte root. Il faudra donc disposer d'un utilisateur autre et procéder à une élévation de privilèges depuis ce compte pour disposer des droits administrateur.
On va donc passer l'option associée de "PermitRootLogin yes" à "PermitRootLogin no" et déclarer les utilisateurs autorisés à se connecter. Dans mon cas, l'utilisateur "benjamin". Il faudra donc ajouter la ligne suivante dans le fichier de configuration : "AllowUsers benjamin".
Une fois encore, on va le faire facilement et rapidement avec l'utilisation de sed :
On va également désactiver le X11Forwarding qui ne nous est pas nécessaire en remplaçant "X11Forwarding yes" par "X11Forwarding no".
Sed nous permet de le faire rapidement via la commande suivante :
Ensuite, si au delà de 2 minutes les informations de connexion ne sont pas saisies, la connexion est coupée. Cette durée est, selon moi, trop longue. En effet, 30 secondes sont suffisantes.
Il faut donc modifier le paramètre "LoginGraceTime".
En utilisant Sed, voici la ligne associée pour modifier la configuration en place :
On va également modifier les algorithmes utilisés par SSH pour limiter l'utilisation à certains :
SSH peut également servir à mettre en place un proxy SOCKS. Cette possibilité ne nous intéresse pas. On va donc désactiver cette possibilité :
Lorsque vous effectuez un telnet vers votre serveur sur le port SSH, Debian ajoute un chaine de caractère qui pourrait permettre à une personne tierce de savoir quelle distribution utilise votre serveur. Pour mieux ce rendre compte, voici la bannière SSH par défaut :
Nous allons donc désactiver ce comportement afin de ne plus afficher le nom de notre distribution :
Voici ce que nous allons ensuite avoir :
Les modifications sont terminées, on redémarre donc le service concerné :
Maintenant que le service est configuré et relancé, nous allons apporter une autre modification.
Cette fois, il s'agit de la mise en place d'une restrictions par adresse IP.
Cette modification est optionnelle si vous avez/devez vous connecter depuis différentes connexions et/ou si vous disposez d'un pare-feu en amont de votre serveur.
On va donc interdire les connexions SSH à tout le monde et mettre une exception pour nos adresses IP :
Pour synthétiser, dans le cas présent, seul l'utilsateur benjamin sera autorisé à se connecter en SSH (sur le port 55555) depuis les adresses IP 12.34.56.78 et 98.76.54.32 et aura 30 secondes pour saisr les informations de connexions sans quoi il sera déconnecté automatiquement.
D'autres possibilités sont possibles pour accroitre encore la sécurité de SSH (mise en place d'une authentification par échange de clefs par exemple) mais ça sera l'occasion de faire un nouveau billet :)
La configuration du service associé peut être modifiée afin de renforcer la sécurité. Quelques pistes seront donc indiquées dans ce billet. Les informations par défaut utilisées dans ce billet sont basées sur celles en place à l'installation de openssh-server sur une Debian Jessie.
Dans un premier temps, nous allons modifier le port d'écoute (22 par défaut) pour le port 55555.
Il faudra donc modifier "Port 22" par "Port 55555" dans le fichier /etc/ssh/sshd_config.
Pour aller plus vite, on peut utilise sed :
sed -i "s/Port 22/Port 55555/g" /etc/ssh/sshd_config
Afin d'éviter les attaques par bruteforce, on va désactiver la connexion en SSH par le biais du compte root. Il faudra donc disposer d'un utilisateur autre et procéder à une élévation de privilèges depuis ce compte pour disposer des droits administrateur.
On va donc passer l'option associée de "PermitRootLogin yes" à "PermitRootLogin no" et déclarer les utilisateurs autorisés à se connecter. Dans mon cas, l'utilisateur "benjamin". Il faudra donc ajouter la ligne suivante dans le fichier de configuration : "AllowUsers benjamin".
Une fois encore, on va le faire facilement et rapidement avec l'utilisation de sed :
sed -i "s/PermitRootLogin yes/PermitRootLogin no\nAllowUsers benjamin/g" /etc/ssh/sshd_config
On va également désactiver le X11Forwarding qui ne nous est pas nécessaire en remplaçant "X11Forwarding yes" par "X11Forwarding no".
Sed nous permet de le faire rapidement via la commande suivante :
sed -i "s/X11Forwarding yes/X11Forwarding no/g" /etc/ssh/sshd_config
Ensuite, si au delà de 2 minutes les informations de connexion ne sont pas saisies, la connexion est coupée. Cette durée est, selon moi, trop longue. En effet, 30 secondes sont suffisantes.
Il faut donc modifier le paramètre "LoginGraceTime".
En utilisant Sed, voici la ligne associée pour modifier la configuration en place :
sed -i "s/LoginGraceTime 120/LoginGraceTime 30/g" /etc/ssh/sshd_config
On va également modifier les algorithmes utilisés par SSH pour limiter l'utilisation à certains :
echo "Ciphers aes256-ctr,aes192-ctr,aes128-ctr" >> /etc/ssh/sshd_config
echo "MACs hmac-ripemd160" >> /etc/ssh/sshd_config
SSH peut également servir à mettre en place un proxy SOCKS. Cette possibilité ne nous intéresse pas. On va donc désactiver cette possibilité :
echo "AllowTCPForwarding no" >> /etc/ssh/sshd_config
Lorsque vous effectuez un telnet vers votre serveur sur le port SSH, Debian ajoute un chaine de caractère qui pourrait permettre à une personne tierce de savoir quelle distribution utilise votre serveur. Pour mieux ce rendre compte, voici la bannière SSH par défaut :
SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u2
Nous allons donc désactiver ce comportement afin de ne plus afficher le nom de notre distribution :
echo "DebianBanner no" >> /etc/ssh/sshd_config
Voici ce que nous allons ensuite avoir :
SSH-2.0-OpenSSH_6.7p1
Les modifications sont terminées, on redémarre donc le service concerné :
systemctl restart ssh.service
Maintenant que le service est configuré et relancé, nous allons apporter une autre modification.
Cette fois, il s'agit de la mise en place d'une restrictions par adresse IP.
Cette modification est optionnelle si vous avez/devez vous connecter depuis différentes connexions et/ou si vous disposez d'un pare-feu en amont de votre serveur.
On va donc interdire les connexions SSH à tout le monde et mettre une exception pour nos adresses IP :
echo "sshd: ALL" >> /etc/hosts.deny
echo "sshd: 12.34.56.78, 98.76.54.32" >> /etc/hosts.allow
Pour synthétiser, dans le cas présent, seul l'utilsateur benjamin sera autorisé à se connecter en SSH (sur le port 55555) depuis les adresses IP 12.34.56.78 et 98.76.54.32 et aura 30 secondes pour saisr les informations de connexions sans quoi il sera déconnecté automatiquement.
D'autres possibilités sont possibles pour accroitre encore la sécurité de SSH (mise en place d'une authentification par échange de clefs par exemple) mais ça sera l'occasion de faire un nouveau billet :)
07/06/2016 15:40:35
Partager cet article