# Premières étapes de sécurisation du serveur ## Préambule **(à réaliser sur le serveur en mode super-utilisateur)** Pour mon usage personnel, j'installe systématiquement **mc**, petit programme de gestion de fichiers en mode texte qui permet de se déplacer facilement dans les répertoires, d'éditer, de déplacer les fichiers etc. ```shell apt install mc ``` J'installe aussi **vim**, pour remplacer l'éditeur **vi** ou **nano** installé par défaut par Debian. ```shell apt install vim ``` Installation des utilitaires système comme **netstat** **ifconfig** etc. ```shell apt install net-tools ``` On ajoute les dépots non-free et contrib: vim /etc/apt/sources.list ```shell deb http://debian.mirrors.ovh.net/debian stretch main contrib non-free deb-src http://debian.mirrors.ovh.net/debian stretch main main contrib non-free deb http://security.debian.org/debian-security stretch/updates main main contrib non-free deb-src http://security.debian.org/debian-security stretch/updates main main contrib non-free # stretch-updates, previously known as 'volatile' deb http://debian.mirrors.ovh.net/debian stretch-updates main main contrib non-free deb-src http://debian.mirrors.ovh.net/debian stretch-updates main main contrib non-free ``` Et on update et upgrade: ```shell apt update && apt upgrade ``` ## Récupération de l'IP du serveur: Il nous faut connaître l'adresse IP de notre serveur qui est allouée dynamiquement par **dhcp**. Nous utiliserons la commande **ifconfig**: ```shell root@atom:/home/ericadmin# ifconfig enp4s0: flags=4163 mtu 1500 inet 192.168.111.23 netmask 255.255.255.0 broadcast 192.168.111.255 inet6 2a01:e0a:54:c220:223:54ff:fec6:a07 prefixlen 64 scopeid 0x0 inet6 fe80::223:54ff:fec6:a07 prefixlen 64 scopeid 0x20 ether 00:23:54:c6:0a:07 txqueuelen 1000 (Ethernet) RX packets 9220 bytes 7825813 (7.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2534 bytes 282820 (276.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Boucle locale) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` Notre adresse IPV4 est: **192.168.111.23** Link Mauve et sebseb01 (Linuxfr) viennent de m'indiquer d'utiliser les iptools: ```shell root@atom:~# ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp4s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:23:54:c6:0a:07 brd ff:ff:ff:ff:ff:ff inet 192.168.111.160/24 brd 192.168.111.255 scope global enp4s0 valid_lft forever preferred_lft forever inet6 2a01:e0a:54:c220:223:54ff:fec6:a07/64 scope global mngtmpaddr dynamic valid_lft 86201sec preferred_lft 86201sec inet6 fe80::223:54ff:fec6:a07/64 scope link valid_lft forever preferred_lft forever 3: wlp3s0: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:15:af:db:b7:37 brd ff:ff:ff:ff:ff:ff root@atom:~# ``` Les adresses IPV6 commençant par **fe80** sont des adresses limitées au réseau local. ## Sécurisation de ssh Voir le lien suivant: [Le blog de Guillaume](http://www.guillaume-leduc.fr/) ### Opérations à effectuer sur le poste principal Nous générons notre paire de clefs pour l'authentification par clefs sur votre poste principal (si vous n'avez pas encore de jeu de clefs). Opération à effectuer sur votre poste principal. ```shell ssh-keygen ``` Il vous faut copier maintenant la clef sur le serveur: ```shell ssh-copy-id -i ~/.ssh/id_rsa.pub ericadmin@192.168.111.23 ``` ou ```shell ssh-copy-id ericadmin@192.168.111.23 ``` N'oubliez pas de mettre vos identifiants propres, bien sûr. On teste comme le recommande ssh: ```shell eric@aldebaran:~$ ssh 'ericadmin@91.121.72.10' Linux adara 4.9.103-xxxx-std-ipv6-64 #222672 SMP Mon Jun 4 15:16:03 UTC 2018 x86_64 Debian GNU/Linux 9 (stretch) Linux adara.yojik.eu 4.9.103-xxxx-std-ipv6-64 #222672 SMP Mon Jun 4 15:16:03 UTC 2018 x86_64 GNU/Linux Server : 141519 IPv4 : 91.121.72.10 IPv6 : 2001:41d0:1:7d0a::1 Hostname : adara.yojik.eu Last login: Sun Jun 24 15:08:32 2018 from 82.64.48.5 ``` Et on teste qu'on peut passer super-utilisateur à partir de ce compte. ```shell ericadmin@adara:~$ su Mot de passe : root@adara:/home/ericadmin# ``` ### Opérations à effectuer sur le **serveur** en mode super-utilisateur. La configuration se fait dans le fichier **/etc/ssh/sshd_config**, fichier qu'il va falloir éditer avec **vim** pas exemple. Nous allons d'abord en faire une copie de sauvegarde: ```shell cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig ``` ```shell vim /etc/ssh/sshd_config ``` Nous n'allons autoriser que la connexion d'un **user** d'administration (pas de connexion de **root** par exemple), activer l'**authentification par clefs**, et supprimer l'authentification par **login/mot de passe** (en mode ssh). Vous pourrez toujours vous connecter avec le couple login/mot de passe si vous avez un accès physique à votre serveur. Nous garderons le port standard d'écoute (rien à changer dans le fichier): ```shell Port 22 ``` Nous interdisons la connexion par **root**: ```shell PermitRootLogin no ``` Activation de l'authentification par clef (rien à changer dans le fichier): ```shell PubkeyAuthentication yes ``` Nous ajoutons une liste d'utilisateurs autorisés à se connecter. ```shell AllowUsers ericadmin ``` A la place de **ericadmin** mettez bien sûr le nom de l'utilisateur que vous avez entré pendant la phase d'installation. Nous pouvons limiter le nombre de tentatives de connexion: ```shell MaxAuthTries 1 ``` Interdiction de la connexion par couple login/mot de passe: ```shell PasswordAuthentication no ``` Désactivation de PAM ```shell UsePAM no ``` Sauvegarde du fichier de configuration. (commande escape, suivie de ZZ pour vim) Redémarrage du service **ssh** ```shell systemctl restart sshd ``` ### Test de connexion: Sur votre ordinateur principal, dans un terminal, tapez: ```shell ssh ericadmin@192.168.111.23 ``` Vous devez être connectés (logués) sur le serveur. Essayez avec l'utilisateur root: ```shell ssh root@192.168.111.23 ``` Cela doit échouer. ```shell eric@aldebaran:~$ ssh 'ericadmin@192.168.111.23' Last login: Sun Dec 17 16:37:40 2017 from 192.168.111.150 ericadmin@atom:~$ ``` Voilà pour la première phase. # Deuxième phase ## Sécurisation des mots de passe J'utilise un générateur de mots de passe pour le compte **root** et le compte **ericadmin**. Il y a pléthore de générateurs de mots de passe, certains à base d'utilitaires tout prêts, d'autres créés à l'aide commande unix standards. Les 3 générateurs **tout prêts** les plus cités dans la documentation sont: * PWGEN * MAKPASSWD * PASSWORDMAKER Pour l'installation, utilisez les commandes suivantes: * apt install pwgen * apt install makepasswd * apt install passwordmaker-cli ### Exemples d'utilisation de ces programmes: Utilisation de **pwgen**: Pour obtenir de l'aide à l'utilisation de cet utilitaire, tapez: **pwgen --help**. Vous pouvez faire varier le niveau de sécurité ainsi que le nombre de mots de passe générés et la longueur des mots de passe. ```shell eric@aldebaran:~$ pwgen oow1Osho teM3chai Aim5shee Sheme1yo aiR6aem1 Vooxeiv0 Iabeenu1 kae7Xie5 oacei4aV Ohb8ceib zo0shu6F Dob2chie Roo5eeLa fee5Nooh Phi0suim OMeigh2w nah2Ool5 Saix6lie EeNaem5u ooVoh3ki IN5aeF9p CuHu8Aib vaim2Jia chah0Ier ShieC6ze Teex4tie mei6ou7I Ath6aiFe uw4quoHa lad8Quee ohQuai9Y Sho5Eem6 aoCaol3W ooGah9th bix6Aic9 thee1Coo lie0ahTe eiz0iiSh cieYu8Ie Ealu3chi vaeYee6c ahje9aeJ Sheenee7 eesh1Iez Odaa6kah aico6Jah aphahP4U aYePh1ev phohNie8 Chuut3ie eeb9ieDa ohp9AhGi efae5ooV Shiere5c ahV8riek Seegohv1 Eetohy1a Lievoh0k jox3uf6K chai3Woo iecoh0Iu ieGh9tuz UMeex2ah Eathaur8 Ood2oeho paeSah0p jaihoo1U eemoi9Ee ile1So4z OongeiN6 aaY9iuch ew3Iemoo Iech0Eey OoMie0ah OhBei1ae Ohsh4aik jah0faiT ioW7oz6t yee1Uphu ies4eeNa pooP8eeg iePoh4ya fooL3uqu ieGiej1X Ein7eifu ool7Olae eub5ooSe eyo8EiNu ach9ohWo Foog9Oev aej9geiH Thahg6Di eegei4Ai eN7quu3b waiK2ieg foThe7zi fu2Phoug iYaeg4if iLu6eeFi Aeshoo0i uxoGh6no id1TeRei diob7Pha vokuuN7h Chokei8J Iemee8ah eingei0E ubieh2Ch daiyu3EB QueiQu6H Jib0uwee wi9Xoodu eeL3osh2 Eo3Ae1ch bieWui2a ro6chiCo engu0ooF Eebeu2jo ee7Eey8t EiSeen5i ohNgai6i Iutaez4a xah1yeeG eGhi5Ouz vaiYu6ee fae0AeP5 jee0Ib2I OS3xuwae Eefohp1u eegiK6ae ohyuom7V Eij8eeNi Ou0ec7ye Eethoh4e eeHi2ugh ichoLae3 UT8oopoo oox6Ohx9 ohbaL2hu oht9kaiR Ieho8Ou1 Ten6saet cae7Iexi daDuas9e ShiexaT7 Lei6etii ea4aoH8y ja8Zai8g phaeG6Hi sheNg8ee Oow5phae aa7gohPi nahS8Eeg ba6Roh9j ooRo6epo pheNoam1 johF7ii9 vuZ4Latu xai5og6H aeS8hu2I eric@aldebaran:~$ ``` Vous pouvez prendre le mot de passe que vous voulez dans le tableau généré. Pour un seul mot de passe: ```shell eric@aldebaran:~$ pwgen -1 Eerai4Sh ``` Pour un mot de passe mieux sécurisé: ```shell eric@aldebaran:~$ pwgen -1 -s tx2CqGyf ``` Encore plus sécurisé avec l'option -y: ```shell eric@aldebaran:~$ pwgen -1 -s -y a+01K!U~ ``` Utilisation de **makepasswd**: Tapez: **makepasswd --help** pour de l'aide à l'utilisation des paramètres. ```shell makepasswd --count 5 --minchars 10 ``` ### Sécurisation du mot de passe super-utilisateur (root) Utilisez un des utilitaires ci-dessus. Attention à la longueur minimale! Sous le user “admin”, tapez: **passwd** pour changer le mot de passe admin. ### Sécurisation du mot de passe administrateur Utilisez un des utilitaires ci-dessus. Attention à la longueur minimale! Sous le user “root”, tapez: **passwd** pour changer le mot de passe root. ## Test du hostname La commande **hostname** nous indiquera le nom “court” de notre machine, et la commande **hostname -f** sa version longue avec le nom de domaine. ```shell root@atom:/home/ericadmin# hostname atom root@atom:/home/ericadmin# ``` ```shell root@atom:/home/ericadmin# hostname -f atom.yojik.net root@atom:/home/ericadmin# ``` Le résultat est bon.