Ce billet sert de notice pour la configuration rapide du SSH d’un serveur Ubuntu. Il s’agit d’un condensé de divers billets provenant d’autres blogs que j’utilisais régulièrement pour mettre en place un serveur. L’ensemble de la configuration convient à une distribution Ubuntu (testé et réalisé sous Ubuntu 16.04).
1. Utilisateurs du système
La connexion de base fournie par les fournisseurs de serveurs s’effectue souvent en SSH sur le compte root ce qui est un bon point de départ que l’on peut améliorer.
On se connecte au serveur pour commencer les manipulations:
local# ssh root@ip_server
1.1 Nouvel utilisateur
Nous commençons par créer un nouvel utilisateur dénommé “frenchkiss”.
# adduser frenchkiss
En lançant cette commande un certains nombre de questions vont être posées à commencer par le mot de passe du nouvel utilisateur. Nous saisissons un mot de passe suffisamment sécurisé en ayant recours à pwgen qui va nous proposer un ensemble de mots de passe de la longueur souhaitée:
local# pwgen 18 oodeiNoof0Eesh3qui eig8oeLochoh9ya4Wu ti0ChoN1raedah1Tay phaiBaiceingaiC7le Zasahw2eith7uChie5 deu5Eighaidiu8ohch moob1ceitoSeet6iez Eiphoor2joosh5idai Ui8sheinah8ah5zizi keVohKah6youthooBi yom8RahTh9oozeeR5a saizooWie5sec7ugel ...
Une fois l’utilisateur créé, on lui passe les droits de sudoers afin qu’il puisse effectuer les taches de maintenance sur le système. Pour cela nous avons recours à la commande usermod
La commande usermod est à manipuler avec précautions. Certaines options se différencient par la casse et apportent un résultat qui peut aboutir à une situation non désirée si la casse n’est pas respectée.
# usermod -aG sudo frenchkiss
Rappel des options:
-a Add the user to the supplementary group(s). Use only with the -G option.
-g GROUPE affecte GROUPE en tant que groupe par défaut pour l’utilisateur
-G GRP1,GRP2 qui ajoute l’utilisateur aux groupes secondaires. Pour cela il faut utiliser l’option -a (append).
Accessoirement on peut aussi lui permettre de pouvoir sudoer sans saisir son mot de passe. Attention toutefois à vos règles de sécurité sur le serveur. Nous éditons donc le fichier sudoers:
# sudo visudo
Puis ajoutons une règle spécifique pour notre nouvel utilisateur:
frenchkiss ALL=(ALL) NOPASSWD: ALL
1.2 Clef SSH
Si on ne dispose pas déjà d’une clef SSH, on peut en générer une en local:
local# ssh-keygen
Si une ou plusieurs clefs sont déjà en place et que l’on désire générer une nouvelle clef dans un fichier spécifique:
local# ssh-keygen -t rsa -b 4096 -C "me@example.com" -f $HOME/.ssh/id_rsa_other
Puis rapatrier facilement la clef vers le serveur en utilisant ssh-copy-id
local# ssh-copy-id frenchkiss@ip_server
1.3 Droits sur les fichiers des clefs
Simple rappel ici pour le bon fonctionnement des clefs SSH. Cela est automatisé en utilisant ssh-copy-id.
Sinon il faut s’assurer que les droits suivants soient appliqués:
mkdir ~/.ssh chmod 700 ~/.ssh vim ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
A noter: Lorsque l’on dispose de plusieurs clefs SSH, l’ensemble des commandes de la famille ssh acceptent le paramètre -i qui permet de spécifier le nom d’une clef particulière
2. Configuration du daemon SSH
Maintenant que nous disposons d’une clef SSH valide en local et sur le serveur, nous pouvons fine-tuner les réglages du daemon SSH. On édite le fichier de configuration:
# sudo vim/etc/ssh/sshd_config
On s’assure d’avoir les valeurs suivantes dans le fichier:
PasswordAuthentication no PermitRootLogin no PubkeyAuthentication yes ChallengeResponseAuthentication no Banner /etc/issue.net
Optionnel ici, le black et/ou whitelisting de certains utilisateurs au sein de secure shell, exemple:
AllowUsers Fred Wilma DenyUsers Dino Pebbles
On pourra également éditer le fichier /etc/issue.net afin qu’il affiche un joli message de malvenue à tout intrus.
Exemple:
*************************************************************************** NOTICE TO USERS This computer system is the private property of its owner, whether individual, corporate or government. It is for authorized use only. Users (authorized or unauthorized) have no explicit or implicit expectation of privacy. Any or all uses of this system and all files on this system may be intercepted, monitored, recorded, copied, audited, inspected, and disclosed to your employer, to authorized site, government, and law enforcement personnel, as well as authorized officials of government agencies, both domestic and foreign. By using this system, the user consents to such interception, monitoring, recording, copying, auditing, inspection, and disclosure at the discretion of such personnel or officials. Unauthorized or improper use of this system may result in civil and criminal penalties and administrative or disciplinary action, as appropriate. By continuing to use this system you indicate your awareness of and consent to these terms and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the conditions stated in this warning. ****************************************************************************
Après changement de la configuration il faudra redémarrer le daemon SSH:
# sudo systemctl reload sshd
3. Firewall
Nous utilisons ufw.
Lister les applications registrées:
# sudo ufw app list
Limiter le nombre de requêtes de connexions SSH en ajoutant un simple filtre sur le firewall:
# sudo ufw limit ssh
Cela va limiter à 10 tentatives de connexion maximum en 30 secondes. Au dela les requêtes seront droppées.
Authoriser le SSH si ce n’est pas déjà le cas:
# sudo ufw allow OpenSSH
Activation du firewall:
# sudo ufw enable
Vérifier le status du firewall:
# sudo ufw status