search_index.json 252 KB

1
  1. {"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"R\u00e9sum\u00e9 Objectifs Ce tutoriel va vous conduire tout le long de l'installation de la distribution RaspiOS, d\u00e9riv\u00e9e de Raspbian. La fondation RasperryPi a chang\u00e9 le nom de la distribution, car elle commen\u00e7ait \u00e0 diff\u00e9rer de la Raspbian dont elle est issue. Ils ont ajout\u00e9 des d\u00e9p\u00f4ts Microsoft, par exemple. Certainement pour des raisons valables (VSCode par exemple), mais cela a \u00e9t\u00e9 fait \u00abun peu en douce \u00bb. Revenons \u00e0 notre tutoriel : l'installation de base est \u00e0 l'image d'une installation Debian classique. La configuration de ssh par exemple est faite pour assurer une compatibilit\u00e9 maximale. Une configuration plus fine permet d'augmenter la s\u00e9curit\u00e9. C'est ce que nous ferons. Nous installerons un r\u00e9solveur DNS qui nous \u00e9vitera de compter sur celui de notre FAI, souvent menteur. Le blocage de sites est souvent r\u00e9alis\u00e9 par les FAI au niveau DNS. Avoir notre propre r\u00e9solveur r\u00e9soudra ce probl\u00e8me. Un programme de d\u00e9fense contre les attaques de \u00abbrute force \u00bb, fail2ban sera install\u00e9 avec surveillance des seuls services actifs : ssh et le mail . Un service de courrier \u00e9l\u00e9mentaire sera install\u00e9 avec postfix : le serveur pourra envoyer et recevoir des courriers, mais seulement pour les comptes user du serveur. Il sera utile pour que le logiciel de surveillance (monitoring) logwatch puisse envoyer ses rapports. Pour prot\u00e9ger tout le serveur, un pare-feu sera install\u00e9. Il ne permettra que les entr\u00e9es-sorties sur les ports que nous auront d\u00e9cid\u00e9s d'ouvrir : tout le reste sera bloqu\u00e9. Nous utiliserons iptables avec un \u00abfront end \u00bb, firewalld . Tout cela nous donnera une base saine sur laquelle nous pourrons installer d'autres services. Table des mati\u00e8res Pr\u00e9sentation du mat\u00e9riel (mes 2 raspis) Installation de base de la distribution RaspiOS lite Premier d\u00e9marrage (sans aucune s\u00e9curisation) \u00c9tat des lieux S\u00e9curisation du serveur (ssh) Configuration du r\u00e9seau (ips fixes) Installation d'un r\u00e9solveur DNS (knot-resolver) Installation d'un pare-feu (iptables et firewalld) Contrer les attaques de force brute avec fail2ban Surveillance du serveur (logwatch) Installation d'un serveur de courriers basique (postfix) Exemple d'utilisation : serveur Web Annexe","title":"R\u00e9sum\u00e9"},{"location":"#resume","text":"","title":"R\u00e9sum\u00e9"},{"location":"#objectifs","text":"Ce tutoriel va vous conduire tout le long de l'installation de la distribution RaspiOS, d\u00e9riv\u00e9e de Raspbian. La fondation RasperryPi a chang\u00e9 le nom de la distribution, car elle commen\u00e7ait \u00e0 diff\u00e9rer de la Raspbian dont elle est issue. Ils ont ajout\u00e9 des d\u00e9p\u00f4ts Microsoft, par exemple. Certainement pour des raisons valables (VSCode par exemple), mais cela a \u00e9t\u00e9 fait \u00abun peu en douce \u00bb. Revenons \u00e0 notre tutoriel : l'installation de base est \u00e0 l'image d'une installation Debian classique. La configuration de ssh par exemple est faite pour assurer une compatibilit\u00e9 maximale. Une configuration plus fine permet d'augmenter la s\u00e9curit\u00e9. C'est ce que nous ferons. Nous installerons un r\u00e9solveur DNS qui nous \u00e9vitera de compter sur celui de notre FAI, souvent menteur. Le blocage de sites est souvent r\u00e9alis\u00e9 par les FAI au niveau DNS. Avoir notre propre r\u00e9solveur r\u00e9soudra ce probl\u00e8me. Un programme de d\u00e9fense contre les attaques de \u00abbrute force \u00bb, fail2ban sera install\u00e9 avec surveillance des seuls services actifs : ssh et le mail . Un service de courrier \u00e9l\u00e9mentaire sera install\u00e9 avec postfix : le serveur pourra envoyer et recevoir des courriers, mais seulement pour les comptes user du serveur. Il sera utile pour que le logiciel de surveillance (monitoring) logwatch puisse envoyer ses rapports. Pour prot\u00e9ger tout le serveur, un pare-feu sera install\u00e9. Il ne permettra que les entr\u00e9es-sorties sur les ports que nous auront d\u00e9cid\u00e9s d'ouvrir : tout le reste sera bloqu\u00e9. Nous utiliserons iptables avec un \u00abfront end \u00bb, firewalld . Tout cela nous donnera une base saine sur laquelle nous pourrons installer d'autres services.","title":"Objectifs"},{"location":"#table-des-matieres","text":"Pr\u00e9sentation du mat\u00e9riel (mes 2 raspis) Installation de base de la distribution RaspiOS lite Premier d\u00e9marrage (sans aucune s\u00e9curisation) \u00c9tat des lieux S\u00e9curisation du serveur (ssh) Configuration du r\u00e9seau (ips fixes) Installation d'un r\u00e9solveur DNS (knot-resolver) Installation d'un pare-feu (iptables et firewalld) Contrer les attaques de force brute avec fail2ban Surveillance du serveur (logwatch) Installation d'un serveur de courriers basique (postfix) Exemple d'utilisation : serveur Web Annexe","title":"Table des mati\u00e8res"},{"location":"Annexe/","text":"Annexe Au fur et \u00e0 mesure de mes p\u00e9r\u00e9grinations autour du Raspi, j'ai d\u00e9couvert une fa\u00e7on plus rapide pr\u00e9-configurer l'installation. Une fois l'\u00e9tape de copie de l'image effectu\u00e9e, montez votre carte SD sur votre machine de travail. Il y aura 2 partitions : rootfs boot Dans la partition boot , cr\u00e9ez un fichier ssh vide avec la commande suivante : touch ssh Ensuite, d\u00e9placez-vous dans la partition rootfs . Vous y trouverez toute l'arborescence de votre future installation. Allez dans le r\u00e9pertoire etc . Ici, vous allez pouvoir configurer : le hostname Comme d\u00e9j\u00e0 indiqu\u00e9, le hostname sur Debian est partag\u00e9 entre 2 fichiers : /etc/hostname Il ne contient que le petit nom de votre machine, piras dans mon cas. /etc/hosts Il contient la configuration compl\u00e8te du hostname. En voici le contenu modifi\u00e9 : pi@piras:~$ cat /etc/hosts 127.0.0.1 localhost 192.168.111.170 piras.yojik.net piras # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters pi@piras:~$ 170 est l'adresse d\u00e9finitive de mon serveur (IPV4) le r\u00e9seau Pour attribuer une adresse IPV4 fixe \u00e0 notre raspi, d\u00e8s le premier lancement, nous pouvons \u00e9diter le fichier /etc/dhcpcd.conf avant de d\u00e9monter notre carte SD. Voil\u00e0 la partie \u00e0 modifier : # Example static IP configuration: interface eth0 static ip_address=192.168.111.170/24 static ip6_address=2a01:e0a:d0:3c20::170/64 static routers=192.168.111.254 #static domain_name_servers=192.168.1.1 Nous gardons la partie domain_name_servers comment\u00e9e en attendant d'avoir configur\u00e9 le resolveur DNS knot-resolver . Une fois cela fait, nous pouvons d\u00e9monter notre carte SD et l'ins\u00e9rer dans le raspi. Le r\u00e9seau et le hostname seront reconfigur\u00e9s. Ce sera \u00e9galement plus simple car cela nous \u00e9vitera de devoir modifier le fichier /etc/hosts de notre machine de travail, ainsi que le fichier .ssh/config dans le r\u00e9pertoire home de notre machine de travail.","title":"Annexe"},{"location":"Annexe/#annexe","text":"Au fur et \u00e0 mesure de mes p\u00e9r\u00e9grinations autour du Raspi, j'ai d\u00e9couvert une fa\u00e7on plus rapide pr\u00e9-configurer l'installation. Une fois l'\u00e9tape de copie de l'image effectu\u00e9e, montez votre carte SD sur votre machine de travail. Il y aura 2 partitions : rootfs boot Dans la partition boot , cr\u00e9ez un fichier ssh vide avec la commande suivante : touch ssh Ensuite, d\u00e9placez-vous dans la partition rootfs . Vous y trouverez toute l'arborescence de votre future installation. Allez dans le r\u00e9pertoire etc . Ici, vous allez pouvoir configurer : le hostname Comme d\u00e9j\u00e0 indiqu\u00e9, le hostname sur Debian est partag\u00e9 entre 2 fichiers : /etc/hostname Il ne contient que le petit nom de votre machine, piras dans mon cas. /etc/hosts Il contient la configuration compl\u00e8te du hostname. En voici le contenu modifi\u00e9 : pi@piras:~$ cat /etc/hosts 127.0.0.1 localhost 192.168.111.170 piras.yojik.net piras # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters pi@piras:~$ 170 est l'adresse d\u00e9finitive de mon serveur (IPV4) le r\u00e9seau Pour attribuer une adresse IPV4 fixe \u00e0 notre raspi, d\u00e8s le premier lancement, nous pouvons \u00e9diter le fichier /etc/dhcpcd.conf avant de d\u00e9monter notre carte SD. Voil\u00e0 la partie \u00e0 modifier : # Example static IP configuration: interface eth0 static ip_address=192.168.111.170/24 static ip6_address=2a01:e0a:d0:3c20::170/64 static routers=192.168.111.254 #static domain_name_servers=192.168.1.1 Nous gardons la partie domain_name_servers comment\u00e9e en attendant d'avoir configur\u00e9 le resolveur DNS knot-resolver . Une fois cela fait, nous pouvons d\u00e9monter notre carte SD et l'ins\u00e9rer dans le raspi. Le r\u00e9seau et le hostname seront reconfigur\u00e9s. Ce sera \u00e9galement plus simple car cela nous \u00e9vitera de devoir modifier le fichier /etc/hosts de notre machine de travail, ainsi que le fichier .ssh/config dans le r\u00e9pertoire home de notre machine de travail.","title":"Annexe"},{"location":"Automatisation/","text":"Automatisation jeton smartthings: f9f05f67-0e9c-4c99-883e-5cf249eaa2a2 Maintenant que nous avons fait toutes ces manipulations \u00e0 la main, nous allons pouvoir automatiser la configuration de notre raspi d'une fa\u00e7on automatique avec ansible . En fait, le but est de pouvoir d\u00e9ployer notre serveur en un minimum de temps. Nous ajouterons une partie variable, appel\u00e9e les facts , ce qui nous permettra d'installer diff\u00e9rents serveurs avec des options diff\u00e9rentes ainsi que des services parfois dictintcs. Nous allons reprendre toutes les \u00e9tapes et les scripter dans un playbook ansible . Principe Cr\u00e9ation d'un utilisateur d\u00e9di\u00e9 sur le poste client Il est parfaitement possible d'utiliser un role ansible tout pr\u00eat de cr\u00e9ation d'un nouvel utilisateur sur notre poste client, mais pour \u00e7a, il faut que ansible soit d\u00e9j\u00e0 install\u00e9. Nous allons donc cr\u00e9er un utilisateur deborah de fa\u00e7on classique avec la commande adduser: eric@aldebaran:~$ sudo adduser deborah [sudo] Mot de passe de eric : Ajout de l'utilisateur \u00ab deborah \u00bb ... Ajout du nouveau groupe \u00ab deborah \u00bb (1002) ... Ajout du nouvel utilisateur \u00ab deborah \u00bb (1002) avec le groupe \u00ab deborah \u00bb ... Cr\u00e9ation du r\u00e9pertoire personnel \u00ab /home/deborah \u00bb... Copie des fichiers depuis \u00ab /etc/skel \u00bb... Nouveau mot de passe : Retapez le nouveau mot de passe : passwd: password updated successfully Changing the user information for deborah Enter the new value, or press ENTER for the default Full Name []: D\u00e9borah Room Number []: Work Phone []: Home Phone []: Other []: chfn: name with non-ASCII characters: 'D\u00e9borah' Cette information est-elle correcte ? [O/n] eric@aldebaran:~$ Installation de ansible sur le compte du nouvel utilisateur Nous allons assumer que python est d\u00e9j\u00e0 install\u00e9, ce qui est le cas pour une installation desktop Debian normale. Passons \u00e0 l'utilisateur deborah juste cr\u00e9\u00e9: eric@aldebaran:~$ su - deborah Mot de passe : deborah@aldebaran:~$ v\u00e9rification de notre installation python deborah@aldebaran:~$ python3 --version Python 3.9.1 deborah@aldebaran:~$ installation de ansible Nous installons ansible avec pip3 ; nous aurions pu utiliser la paquet ansible tout pr\u00eat, mais il n'aurait pas \u00e9t\u00e9 aussi \u00e0 jour. Une autre solution aurait \u00e9t\u00e9 d'utiliser virtualenv . Je rajouterai \u00e9ventuellement un paragraphe pour expliquer le fonctionnement de virtualenv. ansible ainsi que les autres binaires sont install\u00e9s dans le r\u00e9pertoire utilisateur ~/.local/bin . Ce chemin est d\u00e9j\u00e0 programm\u00e9 dans le fichier .profile et pour que ce chemin soit pris en compte, il suffit de \" sourcer \" le fichier .profile deborah@aldebaran:~$ source .profile Le r\u00e9sultat est le suivant: deborah@aldebaran:~$ ansible --version ansible 2.10.4 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/deborah/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/deborah/.local/lib/python3.9/site-packages/ansible executable location = /home/deborah/.local/bin/ansible python version = 3.9.1 (default, Dec 8 2020, 07:51:42) [GCC 10.2.0] deborah@aldebaran:~$ Voil\u00e0, ansible est install\u00e9, en version 2.10.4. Configuration ssh Nous allons suivre la m\u00e9thode d\u00e9crite dans un chapitre pr\u00e9c\u00e9dent: deborah@aldebaran:~$ ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"eric@yojik.eu\" ... deborah@aldebaran:~$ R\u00e9cup\u00e9ration adresse IP L'adresse ip par d\u00e9faut est attribu\u00e9e par le serveur dhcp de notre box, et donc, est sujet \u00e0 variation suivant le nombre des autres dispositifs connect\u00e9s. M\u00eame m\u00e9thode que pr\u00e9c\u00e9demment avec nmap: L'adresse dynamique r\u00e9cup\u00e9r\u00e9e est : 192.168.111.33 L'utilisateur (avec droits sudo) est par d\u00e9faut: pi Le mot de passe par d\u00e9faut est : raspberry Copie de notre clef publique sur le raspi et connexion deborah@aldebaran:~$ ssh-copy-id -i ~/.ssh/piras_ed25519.pub pi@192.168.111.33 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: \"/home/deborah/.ssh/piras_ed25519.pub\" The authenticity of host '192.168.111.33 (192.168.111.33)' can't be established. ECDSA key fingerprint is SHA256:JA3Eb2suh7qz7iwkoKL0yzbO698fj3EF4/vrhW7LTds. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys pi@192.168.111.33's password: Number of key(s) added: 1 Now try logging into the machine, with: \"ssh 'pi@192.168.111.33'\" and check to make sure that only the key(s) you wanted were added. deborah@aldebaran:~$ Connexion: deborah@aldebaran:~$ ssh -i ./.ssh/piras_ed25519 pi@192.168.111.33 Enter passphrase for key './.ssh/piras_ed25519': Linux raspberrypi 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Dec 27 17:31:01 2020 from 192.168.111.150 pi@raspberrypi:~ $ Tout fonctionne. Lancement de raspi-config Configurez votre raspi avec la commande: sudo raspi-config Retaillez la partition root pour occuper toute la place disponible. Changez les locales ainsi que le mappage clavier. (pas tr\u00e8s butile si vous ne vous connectez pas directement sur le raspi avec un clavier, mais bon, faites-le par pr\u00e9caution si vous devez vous connecter un jour directement) Changement du mot de passe Apr\u00e8s avoir g\u00e9n\u00e9r\u00e9 un mot de passe al\u00e9atoire avec pwgen, tapez la commande suivante (il \u00e9tait aussi possible de le changer avec l'utilitaire raspi-config vu au paragraphe pr\u00e9c\u00e9dent): pi@raspberrypi:~ $ passwd Changement du mot de passe pour pi. Current password: Nouveau mot de passe : Retapez le nouveau mot de passe : passwd: password updated successfully pi@raspberrypi:~ $ Le reste se fera avec ansible . On sort avec \"Ctrl D\". Nos serveurs L'identit\u00e9 de nos serveurs comme les caract\u00e9ristiques de connexion, port SSH, adresse IP sont conserv\u00e9es dans un fichier inventaire appel\u00e9 inventory dans le jargon ansible. Il peut porter n'importe quel nom mais habituellement il est appel\u00e9 inventory . Cr\u00e9ation de la structure de r\u00e9pertoires/fichiers Nous allons aussi respecter la structure conseill\u00e9e des r\u00e9pertoires de d\u00e9ploiement des playbooks ansible. Pour cela nous allons utiliser ansible-galaxy avec la commande suivante: deborah@aldebaran:~$ ansible-galaxy init piras - Role piras was created successfully deborah@aldebaran:~$ La structure de r\u00e9pertoires a \u00e9t\u00e9 cr\u00e9\u00e9e pour nous. deborah@aldebaran:~$ tree piras piras \u251c\u2500\u2500 defaults \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 files \u251c\u2500\u2500 handlers \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 meta \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 README.md \u251c\u2500\u2500 tasks \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 templates \u251c\u2500\u2500 tests \u2502 \u251c\u2500\u2500 inventory \u2502 \u2514\u2500\u2500 test.yml \u2514\u2500\u2500 vars \u2514\u2500\u2500 main.yml 8 directories, 8 files deborah@aldebaran:~$ Les actions \u00e0 accomplir sont saisies dans des fichiers au format YAML. Le fichier inventaire qui contient les machines \u00e0 configurer, les hosts peut \u00eatre en format YAML ou INI (format des fichiers de configuration Windows). Cr\u00e9ation du fichier inventaire 2 formats pour \u00e7a: Format INI [vps] ns1 ansible_port=22 ansible_host=ns1.yojik.eu ns2 ansible_port=22 ansible_host=ns2.yojik.eu [home] piras ansible_port=22 ansible_host=piras.yojik.net ansible_user=pi ansible_ssh_private_key_file=.ssh/piras_ed25519 Format YAML --- # my hosts all: hosts: ns1: ansible_host: ns1.yojik.eu ns2: ansible_host: ns2.yojik.eu piras: ansible_host: piras.yojik.net ansible_user: pi ansible_ssh_private_key_file: .ssh/piras_ed25519 ... 3 hosts sont configur\u00e9s dans ce fichier inventaire: ns1 et ns2 sont deux VPS lou\u00e9s chez OVH qui servent de serveurs DNS. Et piras qui est l'objet de ce tutoriel. Vous noterez que j'ai mis les noms des machines ( fqdn ) et qu'il faut bien s\u00fbr renseigner les IPs de ces machines, soit dans le fichier /etc/hosts soit dans les zones du serveur DNS. Test avec commandes ad-hoc On va envoyer une commande ping au raspi: deborah@aldebaran:~$ ansible -i inventory piras -m ping Enter passphrase for key '.ssh/piras_ed25519': piras | SUCCESS => { \"ansible_facts\": { \"discovered_interpreter_python\": \"/usr/bin/python\" }, \"changed\": false, \"ping\": \"pong\" } deborah@aldebaran:~$ Ca marche ;) On va envoyer une commande echo au raspi: deborah@aldebaran:~$ ansible piras -i inventory -m command -a \"echo 'salut'\" Enter passphrase for key '.ssh/piras_ed25519': piras | CHANGED | rc=0 >> salut deborah@aldebaran:~$ Ca fonctionne. Test avec playbook Les playbook(s) sont des fichiers au format YAML qui d\u00e9crivent les actions \u00e0 accomplir. Varibales, boucles, tests sont disponibles pour assurer les fonctions n\u00e9cessaires. Exemple de playbook (nom: piras.yml) - name: play-1 hosts: piras tasks: - name: test de la connectivit\u00e9 action: ping Test du playbook deborah@aldebaran:~$ ansible-playbook piras.yml -i inventory PLAY [play-1] ************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************** Enter passphrase for key '.ssh/piras_ed25519': ok: [piras] TASK [test de la connectivit\u00e9] ******************************************************************************************** ok: [piras] PLAY RECAP **************************************************************************************************************** piras : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 deborah@aldebaran:~$ Ca marche (ok=2.) \u00c9tat des lieux Nous avons les donn\u00e9es suivantes: adresse IP DHCP: 192.168.111.33 . adresse IPV4 fixe: 192.168.111.171 : \u00e0 configurer. adresse IPV6 fixe: 2a01:e0a:d0:3c20::171 : \u00e0 configurer. nom du user: pi (user pr\u00e9d\u00e9fini avec droits sudo) nom de la machine: raspberrypi : \u00e0 configurer. domaine de la machine: yojik.net (c'est le domaine de mon r\u00e9seau local): \u00e0 configurer. Le non complet sera donc: piras.yojik.net Un des premiers probl\u00e8mes \u00e0 r\u00e9soudre est que l'adresse IP par d\u00e9faut est donn\u00e9e par DHCP, donc variable. Il faudra red\u00e9marrer le raspi une fois la modification de la configuration r\u00e9seau faite et re-tester la connectivit\u00e9. T\u00e2che 1 Tester la connectivit\u00e9: Ajout de l'adresse du serveur toto \u00e0 /etc/hosts du poste client. Nous pouvons le faire manuellement, ou avec un script shell, ou avec un playbook ansible. \u00e0 la main Utilisez votre \u00e9diteur pr\u00e9f\u00e9r\u00e9, et ajoutez/modifiez la ligne suivante \u00e0 /etc/hosts: 192.168.111.171 toto.yojik.net toto script shell eric@aldebaran:~/ansible-toto$ cat play1.sh #!/bin/sh echo \"192.168.111.171 toto.yojik.net toto\" >> /etc/hosts cat /etc/hosts eric@aldebaran:~/ansible-toto$ eric@aldebaran:~/ansible-toto$ chmod +x play1.sh eric@aldebaran:~/ansible-toto$ sudo ./play1.sh 127.0.0.1 localhost 192.168.111.150 aldebaran.yojik.net aldebaran # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.111.171 toto.yojik.net toto eric@aldebaran:~/ansible-toto$ La ligne a bien \u00e9t\u00e9 ajout\u00e9e \u00e0 la fin du fichier. playbook ansible La playbook que nous verrons \u00e0 l'\u00e9tape suivante va mettre \u00e0 jour le fichier /etc/hosts automatiquement avec les informations saisies dans le fichier variables de notre projet ansible. test T\u00e2che 2 Nous allons mettre \u00e0 jour notre hostname ainsi que le fichier /etc/hosts . Pour cela nous allons utiliser un role tout pr\u00eat disponible sur galaxy-ansible . Ce role s'appelle hostname et l'auteur en est: Mischa ter Smitten Pour installer ce role, tapez: eric@aldebaran:~$ ansible-galaxy install oefenweb.hostname Starting galaxy role install process - downloading role 'hostname', owned by oefenweb - downloading role from https://github.com/Oefenweb/ansible-hostname/archive/v2.0.17.tar.gz - extracting oefenweb.hostname to /home/eric/.ansible/roles/oefenweb.hostname - oefenweb.hostname (v2.0.17) was installed successfully eric@aldebaran:~$ La documentation est disponible dans le r\u00e9pertoire: ~/.ansible/roles/oefenweb.hostname Il nous faut entrer le fqdn dans le fichier inventaire, et cr\u00e9er des fichiers de variables dans le r\u00e9pertoire ad\u00e9quat, avec un nom bien pr\u00e9cis (en rapport avec le fqdn). mise \u00e0 jour du nom d'h\u00f4te (hostname) test T\u00e2che 3 cr\u00e9ation de l'une clef ssh sur le desktop ajout d'un enregistrement \u00e0 ./.ssh/config pour int\u00e9grer le nouveau serveur modification de /etc/hosts pour int\u00e9grer le fqdn de ce nouveau serveur test T\u00e2che 4 copie de cette clef sur le raspi test de connexion avec cette clef T\u00e2che 5 S\u00e9curisation ssh test d'audit du serveur cr\u00e9ation de nouvelles clefs sur le serveur copie d'un fichier sshd_config sur le serveur relance du daemon sshd test de connexion test d'audit T\u00e2che 6 Cr\u00e9ation d'adresse IPV4 et IPV6 fixes. modification de /etc/dhcpd/dhcpd.conf reboot","title":"Automatisation"},{"location":"Automatisation/#automatisation","text":"jeton smartthings: f9f05f67-0e9c-4c99-883e-5cf249eaa2a2 Maintenant que nous avons fait toutes ces manipulations \u00e0 la main, nous allons pouvoir automatiser la configuration de notre raspi d'une fa\u00e7on automatique avec ansible . En fait, le but est de pouvoir d\u00e9ployer notre serveur en un minimum de temps. Nous ajouterons une partie variable, appel\u00e9e les facts , ce qui nous permettra d'installer diff\u00e9rents serveurs avec des options diff\u00e9rentes ainsi que des services parfois dictintcs. Nous allons reprendre toutes les \u00e9tapes et les scripter dans un playbook ansible .","title":"Automatisation"},{"location":"Automatisation/#principe","text":"","title":"Principe"},{"location":"Automatisation/#creation-dun-utilisateur-dedie-sur-le-poste-client","text":"Il est parfaitement possible d'utiliser un role ansible tout pr\u00eat de cr\u00e9ation d'un nouvel utilisateur sur notre poste client, mais pour \u00e7a, il faut que ansible soit d\u00e9j\u00e0 install\u00e9. Nous allons donc cr\u00e9er un utilisateur deborah de fa\u00e7on classique avec la commande adduser: eric@aldebaran:~$ sudo adduser deborah [sudo] Mot de passe de eric : Ajout de l'utilisateur \u00ab deborah \u00bb ... Ajout du nouveau groupe \u00ab deborah \u00bb (1002) ... Ajout du nouvel utilisateur \u00ab deborah \u00bb (1002) avec le groupe \u00ab deborah \u00bb ... Cr\u00e9ation du r\u00e9pertoire personnel \u00ab /home/deborah \u00bb... Copie des fichiers depuis \u00ab /etc/skel \u00bb... Nouveau mot de passe : Retapez le nouveau mot de passe : passwd: password updated successfully Changing the user information for deborah Enter the new value, or press ENTER for the default Full Name []: D\u00e9borah Room Number []: Work Phone []: Home Phone []: Other []: chfn: name with non-ASCII characters: 'D\u00e9borah' Cette information est-elle correcte ? [O/n] eric@aldebaran:~$","title":"Cr\u00e9ation d'un utilisateur d\u00e9di\u00e9 sur le poste client"},{"location":"Automatisation/#installation-de-ansible-sur-le-compte-du-nouvel-utilisateur","text":"Nous allons assumer que python est d\u00e9j\u00e0 install\u00e9, ce qui est le cas pour une installation desktop Debian normale. Passons \u00e0 l'utilisateur deborah juste cr\u00e9\u00e9: eric@aldebaran:~$ su - deborah Mot de passe : deborah@aldebaran:~$ v\u00e9rification de notre installation python deborah@aldebaran:~$ python3 --version Python 3.9.1 deborah@aldebaran:~$ installation de ansible Nous installons ansible avec pip3 ; nous aurions pu utiliser la paquet ansible tout pr\u00eat, mais il n'aurait pas \u00e9t\u00e9 aussi \u00e0 jour. Une autre solution aurait \u00e9t\u00e9 d'utiliser virtualenv . Je rajouterai \u00e9ventuellement un paragraphe pour expliquer le fonctionnement de virtualenv. ansible ainsi que les autres binaires sont install\u00e9s dans le r\u00e9pertoire utilisateur ~/.local/bin . Ce chemin est d\u00e9j\u00e0 programm\u00e9 dans le fichier .profile et pour que ce chemin soit pris en compte, il suffit de \" sourcer \" le fichier .profile deborah@aldebaran:~$ source .profile Le r\u00e9sultat est le suivant: deborah@aldebaran:~$ ansible --version ansible 2.10.4 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/deborah/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/deborah/.local/lib/python3.9/site-packages/ansible executable location = /home/deborah/.local/bin/ansible python version = 3.9.1 (default, Dec 8 2020, 07:51:42) [GCC 10.2.0] deborah@aldebaran:~$ Voil\u00e0, ansible est install\u00e9, en version 2.10.4.","title":"Installation de ansible sur le compte du nouvel utilisateur"},{"location":"Automatisation/#configuration-ssh","text":"Nous allons suivre la m\u00e9thode d\u00e9crite dans un chapitre pr\u00e9c\u00e9dent: deborah@aldebaran:~$ ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"eric@yojik.eu\" ... deborah@aldebaran:~$","title":"Configuration ssh"},{"location":"Automatisation/#recuperation-adresse-ip","text":"L'adresse ip par d\u00e9faut est attribu\u00e9e par le serveur dhcp de notre box, et donc, est sujet \u00e0 variation suivant le nombre des autres dispositifs connect\u00e9s. M\u00eame m\u00e9thode que pr\u00e9c\u00e9demment avec nmap: L'adresse dynamique r\u00e9cup\u00e9r\u00e9e est : 192.168.111.33 L'utilisateur (avec droits sudo) est par d\u00e9faut: pi Le mot de passe par d\u00e9faut est : raspberry","title":"R\u00e9cup\u00e9ration adresse IP"},{"location":"Automatisation/#copie-de-notre-clef-publique-sur-le-raspi-et-connexion","text":"deborah@aldebaran:~$ ssh-copy-id -i ~/.ssh/piras_ed25519.pub pi@192.168.111.33 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: \"/home/deborah/.ssh/piras_ed25519.pub\" The authenticity of host '192.168.111.33 (192.168.111.33)' can't be established. ECDSA key fingerprint is SHA256:JA3Eb2suh7qz7iwkoKL0yzbO698fj3EF4/vrhW7LTds. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys pi@192.168.111.33's password: Number of key(s) added: 1 Now try logging into the machine, with: \"ssh 'pi@192.168.111.33'\" and check to make sure that only the key(s) you wanted were added. deborah@aldebaran:~$ Connexion: deborah@aldebaran:~$ ssh -i ./.ssh/piras_ed25519 pi@192.168.111.33 Enter passphrase for key './.ssh/piras_ed25519': Linux raspberrypi 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Dec 27 17:31:01 2020 from 192.168.111.150 pi@raspberrypi:~ $ Tout fonctionne.","title":"Copie de notre clef publique sur le raspi et connexion"},{"location":"Automatisation/#lancement-de-raspi-config","text":"Configurez votre raspi avec la commande: sudo raspi-config Retaillez la partition root pour occuper toute la place disponible. Changez les locales ainsi que le mappage clavier. (pas tr\u00e8s butile si vous ne vous connectez pas directement sur le raspi avec un clavier, mais bon, faites-le par pr\u00e9caution si vous devez vous connecter un jour directement)","title":"Lancement de raspi-config"},{"location":"Automatisation/#changement-du-mot-de-passe","text":"Apr\u00e8s avoir g\u00e9n\u00e9r\u00e9 un mot de passe al\u00e9atoire avec pwgen, tapez la commande suivante (il \u00e9tait aussi possible de le changer avec l'utilitaire raspi-config vu au paragraphe pr\u00e9c\u00e9dent): pi@raspberrypi:~ $ passwd Changement du mot de passe pour pi. Current password: Nouveau mot de passe : Retapez le nouveau mot de passe : passwd: password updated successfully pi@raspberrypi:~ $ Le reste se fera avec ansible . On sort avec \"Ctrl D\".","title":"Changement du mot de passe"},{"location":"Automatisation/#nos-serveurs","text":"L'identit\u00e9 de nos serveurs comme les caract\u00e9ristiques de connexion, port SSH, adresse IP sont conserv\u00e9es dans un fichier inventaire appel\u00e9 inventory dans le jargon ansible. Il peut porter n'importe quel nom mais habituellement il est appel\u00e9 inventory . Cr\u00e9ation de la structure de r\u00e9pertoires/fichiers Nous allons aussi respecter la structure conseill\u00e9e des r\u00e9pertoires de d\u00e9ploiement des playbooks ansible. Pour cela nous allons utiliser ansible-galaxy avec la commande suivante: deborah@aldebaran:~$ ansible-galaxy init piras - Role piras was created successfully deborah@aldebaran:~$ La structure de r\u00e9pertoires a \u00e9t\u00e9 cr\u00e9\u00e9e pour nous. deborah@aldebaran:~$ tree piras piras \u251c\u2500\u2500 defaults \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 files \u251c\u2500\u2500 handlers \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 meta \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 README.md \u251c\u2500\u2500 tasks \u2502 \u2514\u2500\u2500 main.yml \u251c\u2500\u2500 templates \u251c\u2500\u2500 tests \u2502 \u251c\u2500\u2500 inventory \u2502 \u2514\u2500\u2500 test.yml \u2514\u2500\u2500 vars \u2514\u2500\u2500 main.yml 8 directories, 8 files deborah@aldebaran:~$ Les actions \u00e0 accomplir sont saisies dans des fichiers au format YAML. Le fichier inventaire qui contient les machines \u00e0 configurer, les hosts peut \u00eatre en format YAML ou INI (format des fichiers de configuration Windows). Cr\u00e9ation du fichier inventaire 2 formats pour \u00e7a: Format INI [vps] ns1 ansible_port=22 ansible_host=ns1.yojik.eu ns2 ansible_port=22 ansible_host=ns2.yojik.eu [home] piras ansible_port=22 ansible_host=piras.yojik.net ansible_user=pi ansible_ssh_private_key_file=.ssh/piras_ed25519 Format YAML --- # my hosts all: hosts: ns1: ansible_host: ns1.yojik.eu ns2: ansible_host: ns2.yojik.eu piras: ansible_host: piras.yojik.net ansible_user: pi ansible_ssh_private_key_file: .ssh/piras_ed25519 ... 3 hosts sont configur\u00e9s dans ce fichier inventaire: ns1 et ns2 sont deux VPS lou\u00e9s chez OVH qui servent de serveurs DNS. Et piras qui est l'objet de ce tutoriel. Vous noterez que j'ai mis les noms des machines ( fqdn ) et qu'il faut bien s\u00fbr renseigner les IPs de ces machines, soit dans le fichier /etc/hosts soit dans les zones du serveur DNS. Test avec commandes ad-hoc On va envoyer une commande ping au raspi: deborah@aldebaran:~$ ansible -i inventory piras -m ping Enter passphrase for key '.ssh/piras_ed25519': piras | SUCCESS => { \"ansible_facts\": { \"discovered_interpreter_python\": \"/usr/bin/python\" }, \"changed\": false, \"ping\": \"pong\" } deborah@aldebaran:~$ Ca marche ;) On va envoyer une commande echo au raspi: deborah@aldebaran:~$ ansible piras -i inventory -m command -a \"echo 'salut'\" Enter passphrase for key '.ssh/piras_ed25519': piras | CHANGED | rc=0 >> salut deborah@aldebaran:~$ Ca fonctionne. Test avec playbook Les playbook(s) sont des fichiers au format YAML qui d\u00e9crivent les actions \u00e0 accomplir. Varibales, boucles, tests sont disponibles pour assurer les fonctions n\u00e9cessaires. Exemple de playbook (nom: piras.yml) - name: play-1 hosts: piras tasks: - name: test de la connectivit\u00e9 action: ping Test du playbook deborah@aldebaran:~$ ansible-playbook piras.yml -i inventory PLAY [play-1] ************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************** Enter passphrase for key '.ssh/piras_ed25519': ok: [piras] TASK [test de la connectivit\u00e9] ******************************************************************************************** ok: [piras] PLAY RECAP **************************************************************************************************************** piras : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 deborah@aldebaran:~$ Ca marche (ok=2.)","title":"Nos serveurs"},{"location":"Automatisation/#etat-des-lieux","text":"Nous avons les donn\u00e9es suivantes: adresse IP DHCP: 192.168.111.33 . adresse IPV4 fixe: 192.168.111.171 : \u00e0 configurer. adresse IPV6 fixe: 2a01:e0a:d0:3c20::171 : \u00e0 configurer. nom du user: pi (user pr\u00e9d\u00e9fini avec droits sudo) nom de la machine: raspberrypi : \u00e0 configurer. domaine de la machine: yojik.net (c'est le domaine de mon r\u00e9seau local): \u00e0 configurer. Le non complet sera donc: piras.yojik.net Un des premiers probl\u00e8mes \u00e0 r\u00e9soudre est que l'adresse IP par d\u00e9faut est donn\u00e9e par DHCP, donc variable. Il faudra red\u00e9marrer le raspi une fois la modification de la configuration r\u00e9seau faite et re-tester la connectivit\u00e9.","title":"\u00c9tat des lieux"},{"location":"Automatisation/#tache-1","text":"Tester la connectivit\u00e9: Ajout de l'adresse du serveur toto \u00e0 /etc/hosts du poste client. Nous pouvons le faire manuellement, ou avec un script shell, ou avec un playbook ansible. \u00e0 la main Utilisez votre \u00e9diteur pr\u00e9f\u00e9r\u00e9, et ajoutez/modifiez la ligne suivante \u00e0 /etc/hosts: 192.168.111.171 toto.yojik.net toto script shell eric@aldebaran:~/ansible-toto$ cat play1.sh #!/bin/sh echo \"192.168.111.171 toto.yojik.net toto\" >> /etc/hosts cat /etc/hosts eric@aldebaran:~/ansible-toto$ eric@aldebaran:~/ansible-toto$ chmod +x play1.sh eric@aldebaran:~/ansible-toto$ sudo ./play1.sh 127.0.0.1 localhost 192.168.111.150 aldebaran.yojik.net aldebaran # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.111.171 toto.yojik.net toto eric@aldebaran:~/ansible-toto$ La ligne a bien \u00e9t\u00e9 ajout\u00e9e \u00e0 la fin du fichier. playbook ansible La playbook que nous verrons \u00e0 l'\u00e9tape suivante va mettre \u00e0 jour le fichier /etc/hosts automatiquement avec les informations saisies dans le fichier variables de notre projet ansible. test","title":"T\u00e2che 1"},{"location":"Automatisation/#tache-2","text":"Nous allons mettre \u00e0 jour notre hostname ainsi que le fichier /etc/hosts . Pour cela nous allons utiliser un role tout pr\u00eat disponible sur galaxy-ansible . Ce role s'appelle hostname et l'auteur en est: Mischa ter Smitten Pour installer ce role, tapez: eric@aldebaran:~$ ansible-galaxy install oefenweb.hostname Starting galaxy role install process - downloading role 'hostname', owned by oefenweb - downloading role from https://github.com/Oefenweb/ansible-hostname/archive/v2.0.17.tar.gz - extracting oefenweb.hostname to /home/eric/.ansible/roles/oefenweb.hostname - oefenweb.hostname (v2.0.17) was installed successfully eric@aldebaran:~$ La documentation est disponible dans le r\u00e9pertoire: ~/.ansible/roles/oefenweb.hostname Il nous faut entrer le fqdn dans le fichier inventaire, et cr\u00e9er des fichiers de variables dans le r\u00e9pertoire ad\u00e9quat, avec un nom bien pr\u00e9cis (en rapport avec le fqdn). mise \u00e0 jour du nom d'h\u00f4te (hostname) test","title":"T\u00e2che 2"},{"location":"Automatisation/#tache-3","text":"cr\u00e9ation de l'une clef ssh sur le desktop ajout d'un enregistrement \u00e0 ./.ssh/config pour int\u00e9grer le nouveau serveur modification de /etc/hosts pour int\u00e9grer le fqdn de ce nouveau serveur test","title":"T\u00e2che 3"},{"location":"Automatisation/#tache-4","text":"copie de cette clef sur le raspi test de connexion avec cette clef","title":"T\u00e2che 4"},{"location":"Automatisation/#tache-5","text":"S\u00e9curisation ssh test d'audit du serveur cr\u00e9ation de nouvelles clefs sur le serveur copie d'un fichier sshd_config sur le serveur relance du daemon sshd test de connexion test d'audit","title":"T\u00e2che 5"},{"location":"Automatisation/#tache-6","text":"Cr\u00e9ation d'adresse IPV4 et IPV6 fixes. modification de /etc/dhcpd/dhcpd.conf reboot","title":"T\u00e2che 6"},{"location":"Etat-des-lieux/","text":"\u00c9tat des lieux Maintenant que notre raspi est install\u00e9, la liaison ssh active, nous allons faire le tour des lieux, voir comment le r\u00e9seau se configure, v\u00e9rifier la qualit\u00e9 des algorithmes SSH etc. Audit SSH Nous allons proc\u00e9der \u00e0 un audit SSH. Pour cela, nous allons utiliser un service en ligne de tests de notre configuration. L'adresse du site est la suivante : AuditSSH . Notre adresse est une adresse domestique, r\u00e9serv\u00e9e au r\u00e9seau local, non routable sur Internet. Heureusement, nous avons IPV6 et nous allons pouvoir tester notre petit raspi sans encore le configurer dans le serveur DNS. Pour obtenir l'adresse IPV6 de notre raspi, entrez la commande suivante : pi@raspberrypi:~ $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:3a:0b:38 brd ff:ff:ff:ff:ff:ff inet 192.168.111.170/24 brd 192.168.111.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 2a01:e0a:d0:3c20:a23:93ca:de95:e15b/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 86388sec preferred_lft 86388sec inet6 2a01:e0a:d0:3c20::170/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::74c8:34d:25f2:3b43/64 scope link valid_lft forever preferred_lft forever pi@raspberrypi:~ $ Nous avons notre adresse IPV6 qui est la suivante : (apr\u00e8s configuration du r\u00e9seau) inet6 2a01:e0a:d0:3c20::170/64 scope global dynamic mngtmpaddr L'adresse commen\u00e7ant par fe80 est r\u00e9serv\u00e9e au trafic sur le r\u00e9seau local. Renseignons ensuite notre adresse ipv6 dans le formulaire du site SSH-Audit (les captures d'\u00e9cran utilisent une autre adresse IPV6): Nous obtenons une note de \"F\" ... il y a du travail en perspective pour obtenir une note correcte. 2 choses sont \u00e0 configurer : le daemon sshd le client ssh Le daemon se configure dans /etc/sshd Le client dans le r\u00e9pertoire ~/.ssh (dans son home sur la machine cliente) Nous ferons \u00e7a dans le chapitre suivant. Le r\u00e9seau Le r\u00e9seau est enti\u00e8rement g\u00e9r\u00e9 par dhcp. Nous voulons une adresse IPV4 et IPV6 fixe. Il va falloir configurer le r\u00e9seau \u00e0 la main. Il y a plusieurs fa\u00e7ons de le faire : soit on rajoute une adresse fixe \u00e0 la configuration de dhcp (c'est la m\u00e9thode pr\u00e9conis\u00e9e par tous les sites avec tutoriels sur la fa\u00e7on d'imposer une adresse fixe), soit en \u00e9ditant /etc/network/interfaces. J'ai l'impression qu'il y a eu des changements suivant les versions ... il va falloir tester tout \u00e7a ! Le pare-feu (firewall) Aucun pare-feu n'est d\u00e9fini par d\u00e9faut. Nous installerons nftables qui remplace iptables dans les versions buster et bullseye de Debian. Installation de programmes utilitaires J'installe toujours vim et mc sur mes machines pour l'\u00e9dition des fichiers de configuration et me d\u00e9placer dans l'arborescence, visionner les fichiers de configuration/textes. pi@raspberrypi:~ $ sudo apt install vim mc Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : mc-data vim-runtime ... Param\u00e9trage de vim (2:8.1.0875-5) ... ... Param\u00e9trage de mc (3:4.8.22-1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour mime-support (3.62) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... pi@raspberrypi:~ $","title":"\u00c9tat des lieux"},{"location":"Etat-des-lieux/#etat-des-lieux","text":"Maintenant que notre raspi est install\u00e9, la liaison ssh active, nous allons faire le tour des lieux, voir comment le r\u00e9seau se configure, v\u00e9rifier la qualit\u00e9 des algorithmes SSH etc.","title":"\u00c9tat des lieux"},{"location":"Etat-des-lieux/#audit-ssh","text":"Nous allons proc\u00e9der \u00e0 un audit SSH. Pour cela, nous allons utiliser un service en ligne de tests de notre configuration. L'adresse du site est la suivante : AuditSSH . Notre adresse est une adresse domestique, r\u00e9serv\u00e9e au r\u00e9seau local, non routable sur Internet. Heureusement, nous avons IPV6 et nous allons pouvoir tester notre petit raspi sans encore le configurer dans le serveur DNS. Pour obtenir l'adresse IPV6 de notre raspi, entrez la commande suivante : pi@raspberrypi:~ $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:3a:0b:38 brd ff:ff:ff:ff:ff:ff inet 192.168.111.170/24 brd 192.168.111.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 2a01:e0a:d0:3c20:a23:93ca:de95:e15b/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 86388sec preferred_lft 86388sec inet6 2a01:e0a:d0:3c20::170/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::74c8:34d:25f2:3b43/64 scope link valid_lft forever preferred_lft forever pi@raspberrypi:~ $ Nous avons notre adresse IPV6 qui est la suivante : (apr\u00e8s configuration du r\u00e9seau) inet6 2a01:e0a:d0:3c20::170/64 scope global dynamic mngtmpaddr L'adresse commen\u00e7ant par fe80 est r\u00e9serv\u00e9e au trafic sur le r\u00e9seau local. Renseignons ensuite notre adresse ipv6 dans le formulaire du site SSH-Audit (les captures d'\u00e9cran utilisent une autre adresse IPV6): Nous obtenons une note de \"F\" ... il y a du travail en perspective pour obtenir une note correcte. 2 choses sont \u00e0 configurer : le daemon sshd le client ssh Le daemon se configure dans /etc/sshd Le client dans le r\u00e9pertoire ~/.ssh (dans son home sur la machine cliente) Nous ferons \u00e7a dans le chapitre suivant.","title":"Audit SSH"},{"location":"Etat-des-lieux/#le-reseau","text":"Le r\u00e9seau est enti\u00e8rement g\u00e9r\u00e9 par dhcp. Nous voulons une adresse IPV4 et IPV6 fixe. Il va falloir configurer le r\u00e9seau \u00e0 la main. Il y a plusieurs fa\u00e7ons de le faire : soit on rajoute une adresse fixe \u00e0 la configuration de dhcp (c'est la m\u00e9thode pr\u00e9conis\u00e9e par tous les sites avec tutoriels sur la fa\u00e7on d'imposer une adresse fixe), soit en \u00e9ditant /etc/network/interfaces. J'ai l'impression qu'il y a eu des changements suivant les versions ... il va falloir tester tout \u00e7a !","title":"Le r\u00e9seau"},{"location":"Etat-des-lieux/#le-pare-feu-firewall","text":"Aucun pare-feu n'est d\u00e9fini par d\u00e9faut. Nous installerons nftables qui remplace iptables dans les versions buster et bullseye de Debian.","title":"Le pare-feu (firewall)"},{"location":"Etat-des-lieux/#installation-de-programmes-utilitaires","text":"J'installe toujours vim et mc sur mes machines pour l'\u00e9dition des fichiers de configuration et me d\u00e9placer dans l'arborescence, visionner les fichiers de configuration/textes. pi@raspberrypi:~ $ sudo apt install vim mc Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : mc-data vim-runtime ... Param\u00e9trage de vim (2:8.1.0875-5) ... ... Param\u00e9trage de mc (3:4.8.22-1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour mime-support (3.62) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... pi@raspberrypi:~ $","title":"Installation de programmes utilitaires"},{"location":"Exemple-d-utilisation-serveur-Web/","text":"Exemple d'utilisation de notre tout nouveau Raspi Nous allons installer un serveur Web, apache . Ce n'est qu'un exemple : choisissez le logiciel que vous voulez, mais gardez \u00e0 l'esprit la s\u00e9curisation. Installation du programme Installation pi@piras:~ $ sudo apt install apache2 Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 liblua5.2-0 Paquets sugg\u00e9r\u00e9s : apache2-doc apache2-suexec-pristine | apache2-suexec-custom Les NOUVEAUX paquets suivants seront install\u00e9s : apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 liblua5.2-0 0 mis \u00e0 jour, 10 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 2\u202f309 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 7\u202f253 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o ... Enabling site 000-default. Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service \u2192 /lib/systemd/system/apache2.service. Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service \u2192 /lib/systemd/system/apache-htcacheclean. service. Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@piras:~ $ Ouverture des ports Il nous faut ajouter les services http et https . R\u00e8gles en cours pi@piras:~ $ sudo firewall-cmd --state running pi@piras:~ $ sudo firewall-cmd --get-default-zone public pi@piras:~ $ sudo firewall-cmd --get-active-zones public interfaces: eth0 pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: Ajout des services pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service={http,https} success pi@piras:~ $ Test de nos services actifs J'ai relanc\u00e9 le raspi car j'avais des erreurs de zones . Apr\u00e8s red\u00e9marrage, tout est bon : pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nos services http et https ont bien \u00e9t\u00e9 pris en compte. Test Nous allons faire un test de connexion : Tout fonctionne comme il faut. Cr\u00e9ation de la page d'accueil La page d'accueil Nous allons cr\u00e9er un petit fichier .html pour personnaliser notre page d'acceuil. Le fichier s'appellera index.html et est situ\u00e9 dans /var/www/html/ . pi@piras:~ $ cd /var/www/html/ pi@piras:/var/www/html $ ls index.html pi@piras:/var/www/html $ Avec votre \u00e9diteur favori, supprimez le fichier : pi@piras:/var/www/html $ sudo rm index.html pi@piras:/var/www/html $ et cr\u00e9ez un nouveau fichier dont le contenu est le suivant : <!DOCTYPE html> <html> <head> <title>Page d'accueil du Piras</title> <meta charset=\"UTF-8\"> </head> <body> <h1>Page d'acceuil du Piras</h1> <p>Vous voil\u00e0 sur la page principale de notre tout nouveau serveur Web.</p> <p>Merci de votre visite!</p> </body> </html> pi@piras:/var/www/html $ sudo vim index.html pi@piras:/var/www/html $ Changez le propri\u00e9taire du fichier : pi@piras:/var/www/html $ sudo chown www-data: index.html pi@piras:/var/www/html $ Cr\u00e9ation du virtualhost correspondant pi@piras:/etc/apache2/sites-available $ cat piras.conf <VirtualHost *:80> ServerName piras.yojik.net ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> pi@piras:/etc/apache2/sites-available $ On d\u00e9sactive les anciens sites par d\u00e9faut, et on active le nouveau : pi@piras:/etc/apache2/sites-available $ sudo a2dissite default-ssl Site default-ssl disabled. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ sudo a2dissite 000-default Site 000-default disabled. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ pi@piras:/etc/apache2/sites-available $ sudo a2ensite piras Enabling site piras. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ On recharge apache2 pour qu'il prenne en compte nos modifications : pi@piras:/etc/apache2/sites-available $ sudo systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ Test de notre page d'accueil Et voil\u00e0! :D S\u00e9curisation de notre serveur \u00c9tat des lieux Rendez-vous sur la page suivante : Test Mozilla . Nos r\u00e9sultats ne sont pas terribles ... Nous allons suivre les recommandations de la fondation Mozilla en ce qui concerne les algorithmes utilis\u00e9s pour le chiffrement. Page de configuration d'un serveur Apache par la fondation Mozilla : Configurateur Nous alons donc \u00e9diter notre fichier piras.conf situ\u00e9 dans /etc/apache2/sites-available/ ainsi que le fichier g\u00e9n\u00e9ral de configuration d'apache, situ\u00e9 dans pi@piras:/etc/apache2, apache2.conf : Sauvegarde des fichiers existants pi@piras:/etc/apache2 $ sudo cp apache2.conf apache2.conf.orig pi@piras:/etc/apache2 $ Cr\u00e9ation de certificats let'encrypt Il existe plusieurs clients letsencrypt pour la gestion des certificats. Nous utiliserons certbot , le client officiel de letsencrypt . pi@piras:~ $ sudo apt install certbot python-certbot-apache ... pi@piras:~ $ Nous stoppons le service apache pi@piras:~ $ sudo systemctl stop apache2 pi@piras:~ $ Lan\u00e7ons certbot pi@piras:~ $ sudo certbot Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): eric@yojik.eu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: piras.yojik.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for piras.yojik.net Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/piras-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/piras-le-ssl.conf Enabling available site: /etc/apache2/sites-available/piras-le-ssl.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting vhost in /etc/apache2/sites-enabled/piras.conf to ssl vhost in /etc/apache2/sites-available/piras-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://piras.yojik.net You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=piras.yojik.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/piras.yojik.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/piras.yojik.net/privkey.pem Your cert will expire on 2021-06-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the \"certonly\" option. To non-interactively renew *all* of your certificates, run \"certbot renew\" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le pi@piras:~ $ Relan\u00e7ons apache pi@piras:~ $ sudo systemctl start apache2 pi@piras:~ $ Premier test C'est bon. S\u00e9curisation du serveur apache Strict-Transport-Security Ajouter la ligne suivante \u00e0 piras.conf : Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" Content-Security-Policy Ajouter la ligne suivante \u00e0 piras.conf : Header set Content-Security-Policy \"default-src 'self';\" X-Content-Type-Options Ajouter la ligne suivante \u00e0 piras.conf : <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> Il faut activer aussi le module headers (d\u00e9j\u00e0 activ\u00e9 chez moi) : pi@piras:~ $ sudo a2enmod headers Module headers already enabled pi@piras:~ $ X-Frame-Options Ajouter la ligne suivante \u00e0 piras.conf : <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> X-XSS-Protection Ajouter la ligne suivante \u00e0 piras.conf : Header set X-Frame-Options: \"SAMEORIGIN\" Voil\u00e0 le contenu du fichier apr\u00e8s modifications : pi@piras:~ $ cat /etc/apache2/sites-available/piras-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" Header set Content-Security-Policy \"default-src 'self';\" <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> Header set X-Frame-Options: \"SAMEORIGIN\" ServerName piras.yojik.net ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/piras.yojik.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/piras.yojik.net/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> pi@piras:~ $ Test de notre nouvelle configuration Cette fois-ci, nous obtenons la note maximale A+ : Nous sommes pass\u00e9s d'une note F \u00e0 A+ ! Petites am\u00e9liorations suppl\u00e9mentaires cacher les donn\u00e9es du serveur Cela se configure dans le fichier /etc/apache2/conf-available/security.conf J'ai modifi\u00e9 les lignes suivantes : ServerSignature Off ServerTokens Prod Sauvegarde du fichier et relance du serveur apache. On peut constater que notre serveur ne divulgue plus d'informations sur son type, ni sur l'OS utilis\u00e9. le parcours des r\u00e9pertoires Nous allons interdire le parcours des r\u00e9pertoires/sous-r\u00e9pertoires, de telle fa\u00e7on que le visiteur ne puisse plus voir les fichiers/r\u00e9pertoires. Proc\u00e9dure de test : Nous allons cr\u00e9er un r\u00e9pertoire test avec 2 fichiers (vides) dans l'arboresence de notre site Web. pi@piras:/etc/apache2/conf-available $ cd /var/www/html/ pi@piras:/var/www/html $ sudo mkdir test pi@piras:/var/www/html $ cd test pi@piras:/var/www/html/test $ sudo touch fichier1 fichier2 pi@piras:/var/www/html/test $ Le r\u00e9sultat est le suivant : Retournons dans notre fichier pr\u00e9c\u00e9dent et modifions-le pour avoir ceci : <Directory /var/www/html> # AllowOverride None # Require all denied Options None </Directory> Relan\u00e7ons apache et voyons le r\u00e9sultat : Le visiteur n'a plus acc\u00e8s au listage des r\u00e9pertoires. protection contre les informations donn\u00e9es par l'ent\u00eate (header) Etag Il nous faut rajouter la directive suivante au fichier de configuration : FileEtag None limitation des requ\u00eates possibles : les m\u00e9thodes support\u00e9es sont nombreuses et peuvent \u00eatre configur\u00e9es site par site. Mais en g\u00e9n\u00e9ral, pour un site statique comme celui-l\u00e0, seules les m\u00e9thodes GET , Head , et POST sont n\u00e9cessaires. Modification du fichier pr\u00e9c\u00e9dent <Directory /var/www/html> # AllowOverride None # Require all denied Options None <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> </Directory>S interdire la requ\u00eate Trace C'est d\u00e9j\u00e0 mis en place par d\u00e9faut dans la configuration Debian. Voil\u00e0 pour quelques am\u00e9liorations de la s\u00e9curit\u00e9 de notre serveur Web.","title":"Exemple d'utilisation avec un serveur Web"},{"location":"Exemple-d-utilisation-serveur-Web/#exemple-dutilisation-de-notre-tout-nouveau-raspi","text":"Nous allons installer un serveur Web, apache . Ce n'est qu'un exemple : choisissez le logiciel que vous voulez, mais gardez \u00e0 l'esprit la s\u00e9curisation.","title":"Exemple d'utilisation de notre tout nouveau Raspi"},{"location":"Exemple-d-utilisation-serveur-Web/#installation-du-programme","text":"","title":"Installation du programme"},{"location":"Exemple-d-utilisation-serveur-Web/#installation","text":"pi@piras:~ $ sudo apt install apache2 Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 liblua5.2-0 Paquets sugg\u00e9r\u00e9s : apache2-doc apache2-suexec-pristine | apache2-suexec-custom Les NOUVEAUX paquets suivants seront install\u00e9s : apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 liblua5.2-0 0 mis \u00e0 jour, 10 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 2\u202f309 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 7\u202f253 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o ... Enabling site 000-default. Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service \u2192 /lib/systemd/system/apache2.service. Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service \u2192 /lib/systemd/system/apache-htcacheclean. service. Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@piras:~ $","title":"Installation"},{"location":"Exemple-d-utilisation-serveur-Web/#ouverture-des-ports","text":"Il nous faut ajouter les services http et https . R\u00e8gles en cours pi@piras:~ $ sudo firewall-cmd --state running pi@piras:~ $ sudo firewall-cmd --get-default-zone public pi@piras:~ $ sudo firewall-cmd --get-active-zones public interfaces: eth0 pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: Ajout des services pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service={http,https} success pi@piras:~ $ Test de nos services actifs J'ai relanc\u00e9 le raspi car j'avais des erreurs de zones . Apr\u00e8s red\u00e9marrage, tout est bon : pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nos services http et https ont bien \u00e9t\u00e9 pris en compte.","title":"Ouverture des ports"},{"location":"Exemple-d-utilisation-serveur-Web/#test","text":"Nous allons faire un test de connexion : Tout fonctionne comme il faut.","title":"Test"},{"location":"Exemple-d-utilisation-serveur-Web/#creation-de-la-page-daccueil","text":"","title":"Cr\u00e9ation de la page d'accueil"},{"location":"Exemple-d-utilisation-serveur-Web/#la-page-daccueil","text":"Nous allons cr\u00e9er un petit fichier .html pour personnaliser notre page d'acceuil. Le fichier s'appellera index.html et est situ\u00e9 dans /var/www/html/ . pi@piras:~ $ cd /var/www/html/ pi@piras:/var/www/html $ ls index.html pi@piras:/var/www/html $ Avec votre \u00e9diteur favori, supprimez le fichier : pi@piras:/var/www/html $ sudo rm index.html pi@piras:/var/www/html $ et cr\u00e9ez un nouveau fichier dont le contenu est le suivant : <!DOCTYPE html> <html> <head> <title>Page d'accueil du Piras</title> <meta charset=\"UTF-8\"> </head> <body> <h1>Page d'acceuil du Piras</h1> <p>Vous voil\u00e0 sur la page principale de notre tout nouveau serveur Web.</p> <p>Merci de votre visite!</p> </body> </html> pi@piras:/var/www/html $ sudo vim index.html pi@piras:/var/www/html $ Changez le propri\u00e9taire du fichier : pi@piras:/var/www/html $ sudo chown www-data: index.html pi@piras:/var/www/html $","title":"La page d'accueil"},{"location":"Exemple-d-utilisation-serveur-Web/#creation-du-virtualhost-correspondant","text":"pi@piras:/etc/apache2/sites-available $ cat piras.conf <VirtualHost *:80> ServerName piras.yojik.net ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> pi@piras:/etc/apache2/sites-available $ On d\u00e9sactive les anciens sites par d\u00e9faut, et on active le nouveau : pi@piras:/etc/apache2/sites-available $ sudo a2dissite default-ssl Site default-ssl disabled. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ sudo a2dissite 000-default Site 000-default disabled. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ pi@piras:/etc/apache2/sites-available $ sudo a2ensite piras Enabling site piras. To activate the new configuration, you need to run: systemctl reload apache2 pi@piras:/etc/apache2/sites-available $ On recharge apache2 pour qu'il prenne en compte nos modifications : pi@piras:/etc/apache2/sites-available $ sudo systemctl reload apache2 pi@piras:/etc/apache2/sites-available $","title":"Cr\u00e9ation du virtualhost correspondant"},{"location":"Exemple-d-utilisation-serveur-Web/#test-de-notre-page-daccueil","text":"Et voil\u00e0! :D","title":"Test de notre page d'accueil"},{"location":"Exemple-d-utilisation-serveur-Web/#securisation-de-notre-serveur","text":"","title":"S\u00e9curisation de notre serveur"},{"location":"Exemple-d-utilisation-serveur-Web/#etat-des-lieux","text":"Rendez-vous sur la page suivante : Test Mozilla . Nos r\u00e9sultats ne sont pas terribles ... Nous allons suivre les recommandations de la fondation Mozilla en ce qui concerne les algorithmes utilis\u00e9s pour le chiffrement. Page de configuration d'un serveur Apache par la fondation Mozilla : Configurateur Nous alons donc \u00e9diter notre fichier piras.conf situ\u00e9 dans /etc/apache2/sites-available/ ainsi que le fichier g\u00e9n\u00e9ral de configuration d'apache, situ\u00e9 dans pi@piras:/etc/apache2, apache2.conf : Sauvegarde des fichiers existants pi@piras:/etc/apache2 $ sudo cp apache2.conf apache2.conf.orig pi@piras:/etc/apache2 $ Cr\u00e9ation de certificats let'encrypt Il existe plusieurs clients letsencrypt pour la gestion des certificats. Nous utiliserons certbot , le client officiel de letsencrypt . pi@piras:~ $ sudo apt install certbot python-certbot-apache ... pi@piras:~ $ Nous stoppons le service apache pi@piras:~ $ sudo systemctl stop apache2 pi@piras:~ $ Lan\u00e7ons certbot pi@piras:~ $ sudo certbot Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): eric@yojik.eu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: piras.yojik.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for piras.yojik.net Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/piras-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/piras-le-ssl.conf Enabling available site: /etc/apache2/sites-available/piras-le-ssl.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting vhost in /etc/apache2/sites-enabled/piras.conf to ssl vhost in /etc/apache2/sites-available/piras-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://piras.yojik.net You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=piras.yojik.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/piras.yojik.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/piras.yojik.net/privkey.pem Your cert will expire on 2021-06-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the \"certonly\" option. To non-interactively renew *all* of your certificates, run \"certbot renew\" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le pi@piras:~ $ Relan\u00e7ons apache pi@piras:~ $ sudo systemctl start apache2 pi@piras:~ $ Premier test C'est bon. S\u00e9curisation du serveur apache Strict-Transport-Security Ajouter la ligne suivante \u00e0 piras.conf : Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" Content-Security-Policy Ajouter la ligne suivante \u00e0 piras.conf : Header set Content-Security-Policy \"default-src 'self';\" X-Content-Type-Options Ajouter la ligne suivante \u00e0 piras.conf : <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> Il faut activer aussi le module headers (d\u00e9j\u00e0 activ\u00e9 chez moi) : pi@piras:~ $ sudo a2enmod headers Module headers already enabled pi@piras:~ $ X-Frame-Options Ajouter la ligne suivante \u00e0 piras.conf : <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> X-XSS-Protection Ajouter la ligne suivante \u00e0 piras.conf : Header set X-Frame-Options: \"SAMEORIGIN\" Voil\u00e0 le contenu du fichier apr\u00e8s modifications : pi@piras:~ $ cat /etc/apache2/sites-available/piras-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" Header set Content-Security-Policy \"default-src 'self';\" <IfModule mod_headers.c> Header set X-Content-Type-Options \"nosniff\" </IfModule> Header set X-Frame-Options: \"SAMEORIGIN\" ServerName piras.yojik.net ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/piras.yojik.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/piras.yojik.net/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> pi@piras:~ $","title":"\u00c9tat des lieux"},{"location":"Exemple-d-utilisation-serveur-Web/#test-de-notre-nouvelle-configuration","text":"Cette fois-ci, nous obtenons la note maximale A+ : Nous sommes pass\u00e9s d'une note F \u00e0 A+ !","title":"Test de notre nouvelle configuration"},{"location":"Exemple-d-utilisation-serveur-Web/#petites-ameliorations-supplementaires","text":"cacher les donn\u00e9es du serveur Cela se configure dans le fichier /etc/apache2/conf-available/security.conf J'ai modifi\u00e9 les lignes suivantes : ServerSignature Off ServerTokens Prod Sauvegarde du fichier et relance du serveur apache. On peut constater que notre serveur ne divulgue plus d'informations sur son type, ni sur l'OS utilis\u00e9. le parcours des r\u00e9pertoires Nous allons interdire le parcours des r\u00e9pertoires/sous-r\u00e9pertoires, de telle fa\u00e7on que le visiteur ne puisse plus voir les fichiers/r\u00e9pertoires. Proc\u00e9dure de test : Nous allons cr\u00e9er un r\u00e9pertoire test avec 2 fichiers (vides) dans l'arboresence de notre site Web. pi@piras:/etc/apache2/conf-available $ cd /var/www/html/ pi@piras:/var/www/html $ sudo mkdir test pi@piras:/var/www/html $ cd test pi@piras:/var/www/html/test $ sudo touch fichier1 fichier2 pi@piras:/var/www/html/test $ Le r\u00e9sultat est le suivant : Retournons dans notre fichier pr\u00e9c\u00e9dent et modifions-le pour avoir ceci : <Directory /var/www/html> # AllowOverride None # Require all denied Options None </Directory> Relan\u00e7ons apache et voyons le r\u00e9sultat : Le visiteur n'a plus acc\u00e8s au listage des r\u00e9pertoires. protection contre les informations donn\u00e9es par l'ent\u00eate (header) Etag Il nous faut rajouter la directive suivante au fichier de configuration : FileEtag None limitation des requ\u00eates possibles : les m\u00e9thodes support\u00e9es sont nombreuses et peuvent \u00eatre configur\u00e9es site par site. Mais en g\u00e9n\u00e9ral, pour un site statique comme celui-l\u00e0, seules les m\u00e9thodes GET , Head , et POST sont n\u00e9cessaires. Modification du fichier pr\u00e9c\u00e9dent <Directory /var/www/html> # AllowOverride None # Require all denied Options None <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> </Directory>S interdire la requ\u00eate Trace C'est d\u00e9j\u00e0 mis en place par d\u00e9faut dans la configuration Debian. Voil\u00e0 pour quelques am\u00e9liorations de la s\u00e9curit\u00e9 de notre serveur Web.","title":"Petites am\u00e9liorations suppl\u00e9mentaires"},{"location":"Fail2ban/","text":"Installation de fail2ban Fail2ban nous permet de contrer les attaques de \u00abbrute force. \u00bb Il met automatique en quarantaine les IPs attaquantes en analysant les fichiers de log. Installation pi@raspberrypi:~ $ sudo apt install fail2ban && sudo apt clean Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : python3-pyinotify python3-systemd whois Paquets sugg\u00e9r\u00e9s : mailx monit sqlite3 python-pyinotify-doc Les NOUVEAUX paquets suivants seront install\u00e9s : fail2ban python3-pyinotify python3-systemd whois 0 mis \u00e0 jour, 4 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 514 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 2\u202f410 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :2 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf fail2ban all 0.10.2-2.1 [385 kB] R\u00e9ception de :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf whois armhf 5.4.3 [68,6 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf python3-pyinotify all 0.9.6-1 [26,9 kB] R\u00e9ception de :4 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf python3-systemd armhf 234-2+b1 [34,1 kB] 514 ko r\u00e9ceptionn\u00e9s en 2s (330 ko/s) S\u00e9lection du paquet whois pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 43868 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../archives/whois_5.4.3_armhf.deb ... D\u00e9paquetage de whois (5.4.3) ... S\u00e9lection du paquet fail2ban pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../fail2ban_0.10.2-2.1_all.deb ... D\u00e9paquetage de fail2ban (0.10.2-2.1) ... S\u00e9lection du paquet python3-pyinotify pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../python3-pyinotify_0.9.6-1_all.deb ... D\u00e9paquetage de python3-pyinotify (0.9.6-1) ... S\u00e9lection du paquet python3-systemd pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../python3-systemd_234-2+b1_armhf.deb ... D\u00e9paquetage de python3-systemd (234-2+b1) ... Param\u00e9trage de whois (5.4.3) ... Param\u00e9trage de fail2ban (0.10.2-2.1) ... Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service \u2192 /lib/systemd/system/fail2ban.service. [fail2ban-tmpfiles.conf:1] Line references path below legacy directory /var/run/, updating /var/run/fail2ban \u2192 /run/fail2ban; please update the tm pfiles.d/ drop-in file accordingly. Param\u00e9trage de python3-pyinotify (0.9.6-1) ... Param\u00e9trage de python3-systemd (234-2+b1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... pi@raspberrypi:~ $ Param\u00e9trage de fail2ban Dans un premier temps, rien n'est \u00e0 configurer. L'installation de base configure la surveillance de ssh par d\u00e9faut. Le fichier qui contr\u00f4le ce fonctionnement est /etc/fail2ban/jail.d/defaults-debian.conf. Par d\u00e9faut, il contient : pi@raspberrypi:~ $ sudo cat /etc/fail2ban/jail.d/defaults-debian.conf [sshd] enabled = true pi@raspberrypi:~ $ Nous rajouterons des ports \u00e0 surveiller selon les services que nous installerons.","title":"Contrer les attaques de force brute"},{"location":"Fail2ban/#installation-de-fail2ban","text":"Fail2ban nous permet de contrer les attaques de \u00abbrute force. \u00bb Il met automatique en quarantaine les IPs attaquantes en analysant les fichiers de log.","title":"Installation de fail2ban"},{"location":"Fail2ban/#installation","text":"pi@raspberrypi:~ $ sudo apt install fail2ban && sudo apt clean Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : python3-pyinotify python3-systemd whois Paquets sugg\u00e9r\u00e9s : mailx monit sqlite3 python-pyinotify-doc Les NOUVEAUX paquets suivants seront install\u00e9s : fail2ban python3-pyinotify python3-systemd whois 0 mis \u00e0 jour, 4 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 514 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 2\u202f410 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :2 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf fail2ban all 0.10.2-2.1 [385 kB] R\u00e9ception de :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf whois armhf 5.4.3 [68,6 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf python3-pyinotify all 0.9.6-1 [26,9 kB] R\u00e9ception de :4 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf python3-systemd armhf 234-2+b1 [34,1 kB] 514 ko r\u00e9ceptionn\u00e9s en 2s (330 ko/s) S\u00e9lection du paquet whois pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 43868 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../archives/whois_5.4.3_armhf.deb ... D\u00e9paquetage de whois (5.4.3) ... S\u00e9lection du paquet fail2ban pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../fail2ban_0.10.2-2.1_all.deb ... D\u00e9paquetage de fail2ban (0.10.2-2.1) ... S\u00e9lection du paquet python3-pyinotify pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../python3-pyinotify_0.9.6-1_all.deb ... D\u00e9paquetage de python3-pyinotify (0.9.6-1) ... S\u00e9lection du paquet python3-systemd pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../python3-systemd_234-2+b1_armhf.deb ... D\u00e9paquetage de python3-systemd (234-2+b1) ... Param\u00e9trage de whois (5.4.3) ... Param\u00e9trage de fail2ban (0.10.2-2.1) ... Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service \u2192 /lib/systemd/system/fail2ban.service. [fail2ban-tmpfiles.conf:1] Line references path below legacy directory /var/run/, updating /var/run/fail2ban \u2192 /run/fail2ban; please update the tm pfiles.d/ drop-in file accordingly. Param\u00e9trage de python3-pyinotify (0.9.6-1) ... Param\u00e9trage de python3-systemd (234-2+b1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... pi@raspberrypi:~ $","title":"Installation"},{"location":"Fail2ban/#parametrage-de-fail2ban","text":"Dans un premier temps, rien n'est \u00e0 configurer. L'installation de base configure la surveillance de ssh par d\u00e9faut. Le fichier qui contr\u00f4le ce fonctionnement est /etc/fail2ban/jail.d/defaults-debian.conf. Par d\u00e9faut, il contient : pi@raspberrypi:~ $ sudo cat /etc/fail2ban/jail.d/defaults-debian.conf [sshd] enabled = true pi@raspberrypi:~ $ Nous rajouterons des ports \u00e0 surveiller selon les services que nous installerons.","title":"Param\u00e9trage de fail2ban"},{"location":"Firewall/","text":"Le pare-feu Il nous faut installer un pare-feu sur notre raspi pour \u00e9viter les intrusions. Nous allons limiter les machines susceptibles de se connecter \u00e0 celles de notre r\u00e9seau local, et \u00e9galement limiter les ports accessibles sur notre r\u00e9seau. Nous allons utiliser IPtables et Firewalld. J'aurai pr\u00e9f\u00e9r\u00e9 utiliser nftables qui est le successeur de iptables , mais j'ai eu quelques soucis \u00e0 l'utilisation. Peut-\u00eatre est-ce pour \u00e7a que la distribution RaspiOS a configur\u00e9 firewalld avec IPtables ... Installation de IPtables et de Firewalld pi@raspi:~ $ sudo apt install firewalld IPtables est install\u00e9 par d\u00e9faut : rien \u00e0 faire ici. Test Si on tape : pi@raspberrypi:~ $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination pi@raspberrypi:~ $ On voit que c'est iptables qui a \u00e9t\u00e9 chosi par RaspiOS. D'abord, il faut comprendre comment fonctionne Firewalld. Je me suis bas\u00e9 sur les sites suivant : lw.net How to get started with Firewalld tutorial points la documentation officielle introduction-to-firewalld La documentation de Fedora it connect La documentation de Fedora est la plus compr\u00e9hensible. La notion de zones Firewalld d\u00e9finit 9 zones qui sont en fait des r\u00e8gles de pare-feux par d\u00e9faut. Une zone va par exemple bloquer toute entr\u00e9e sauf SSH, une autre permettre l'acc\u00e8s en HTTP et HTTPS. Ces zones correspondent \u00e0 des utilisations types, comme un serveur dans une DMZ, ou un serveur chez soi , un serveur public, etc. On peut imaginer une zone \u00e9mail qui ne laisserait passer que les ports sp\u00e9cifiques \u00e0 l'\u00e9mail et DNS bien s\u00fbr. Il est possible de cr\u00e9er des zones personnelles. Un certain nombre de zones sont pr\u00e9d\u00e9finies. Voyons leur contenu. Les diff\u00e9rentes zones Les diff\u00e9rentes zones sont : trusted: non modifiable home: modifiable work: modifiable internal: modifiable dmz: modifiable public: modifiable external: modifiable block: non modifiable drop: non modifiable Une tr\u00e8s bonne pr\u00e9sentation des zones est ici : it connect Les fichiers de configuration Ils sont situ\u00e9s \u00e0 2 endroits : /usr/lib/firewalld/ : il ne faut pas toucher au contenu de ce r\u00e9pertoire /etc/firewalld/ : c'est l\u00e0 que nous mettrons notre configuration, en copiant les fichiers de /usr/lib/firewalld si besoin est. Dans le r\u00e9pertoire /etc/firewalld, le fichier firewalld.conf permet de configurer la zone par d\u00e9faut, ainsi que le backend (iptables, nftables et autre). La zone par d\u00e9faut est public : pas de confiance, mais possibilit\u00e9 d'ajuster au cas par cas les r\u00e8gles. Le seul acc\u00e8s autoris\u00e9 est l'acc\u00e8s ssh et dhcp . Quelques commandes D\u00e9marrer Firewalld: $ sudo systemctl start firewalld Stopper Fireawalld: $ sudo systemctl stop firewalld Tester le fonctionnement de Firewalld: $ sudo firewall-cmd --state Conna\u00eetre les zones pr\u00e9d\u00e9finies : $ sudo firewall-cmd --get-zones Conna\u00eetre la zone par d\u00e9faut : $ sudo firewall-cmd --get-default-zone Conna\u00eetre la zone active : $ sudo firewall-cmd --get-active-zones Exemples : pi@piras:~ $ sudo firewall-cmd --state running pi@piras:~ $ Le service tourne. pi@piras:~ $ sudo firewall-cmd --get-default-zone public pi@piras:~ $ La zone par d\u00e9faut est : public pi@piras:~ $ sudo firewall-cmd --get-zones block dmz drop external home internal public trusted work pi@piras:~ $ Les zones pr\u00e9d\u00e9finies sont : block dmz drop external home internal public trusted work Quelle est la zone active : aucune ! pi@piras:~ $ sudo firewall-cmd --get-active-zones pi@piras:~ $ Nous pouvons v\u00e9rifier la zone en fonctionnement et l'interface r\u00e9seau qui y est attach\u00e9e : pi@piras:~ $ sudo firewall-cmd --list-all public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Aucune interface n'est attach\u00e9e. Les seuls services autoris\u00e9 sont : dhcp et ssh. Premi\u00e8re \u00e9tape de configuration Nous allons utiliser les commandes en ligne de commande pour configurer Firewalld, mais il existe une GUI pour le faire graphiquement. R\u00e9f\u00e9rez-vous aux liens que j'ai indiqu\u00e9s au-dessus. D\u00e9finition de la zone par d\u00e9faut : (public) pi@piras:~ $ sudo firewall-cmd --set-default-zone=public Warning: ZONE_ALREADY_SET: public success pi@piras:~ $ Attribution de l'interface r\u00e9seau \u00e0 cette zone : pi@piras:~ $ sudo firewall-cmd --zone=public --change-interface=eth0 success pi@piras:~ $ Attention, ce changement n'est pas permanent ! (voir ci-dessous) Test : pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nous voyons que l'interface eth0 a bien \u00e9t\u00e9 attribu\u00e9e \u00e0 la zone public . Les services Il est possible de configurer les services accessibles (ou pas) attribu\u00e9s \u00e0 la zone active. Pour conna\u00eetre les diff\u00e9rents services disponibles, tapez la commande suivante : pi@piras:~ $ sudo firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server pi@piras:~ $ Chaque d\u00e9tail des services est d\u00e9taill\u00e9 dans un fichier xml dans /usr/lib/firewalld. Voyons quels services sont actuellement activ\u00e9s sur notre raspi : pi@piras:~ $ ss -t -u -l -a Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 0.0.0.0:55853 0.0.0.0:* udp UNCONN 0 0 127.0.0.1:domain 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:bootpc 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* udp UNCONN 0 0 [::1]:domain *:* udp UNCONN 0 0 *:59578 *:* udp UNCONN 0 0 *:mdns *:* tcp LISTEN 0 511 127.0.0.1:domain-s 0.0.0.0:* tcp LISTEN 0 511 127.0.0.1:domain 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp ESTAB 0 0 192.168.111.170:ssh 192.168.111.150:59092 tcp LISTEN 0 511 [::1]:domain-s [::]:* tcp LISTEN 0 511 [::1]:domain [::]:* tcp LISTEN 0 128 [::]:ssh [::]:* pi@piras:~ $ Nous voyons notre connexion ssh \u00e9tablie entre ma machine de travail en ip 192.168.111.150 et piras 192.168.111.170. Notre raspi \u00e9coute \u00e9galement le port 22 sur toutes les interfaces pr\u00e9sentes. Liste des ports en \u00e9coute (TCP) : pi@piras:~ $ ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 127.0.0.1:853 0.0.0.0:* LISTEN 0 511 127.0.0.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 511 [::1]:853 [::]:* LISTEN 0 511 [::1]:53 [::]:* LISTEN 0 128 [::]:22 [::]:* pi@piras:~ $ Les ports 22 (ssh), 53 (dns), 853 (dns) sont \u00e0 l'\u00e9coute en IPV4 et IPV6. Liste des ports en \u00e9coute (UDP) : pi@piras:~ $ ss -lun State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 127.0.0.1:53 0.0.0.0:* UNCONN 0 0 0.0.0.0:68 0.0.0.0:* UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* UNCONN 0 0 [::1]:53 *:* UNCONN 0 0 *:59578 *:* UNCONN 0 0 *:5353 *:* pi@piras:~ $ \u00c9tat des lieux V\u00e9rifions le fonctionnement de Firewalld. Souvenez-vous qu'il \u00e9tait configur\u00e9 pour fonctionner avec Iptables. V\u00e9rifions les r\u00e8gles \u00e9tablies : pi@piras:~ $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere INPUT_direct all -- anywhere anywhere INPUT_ZONES_SOURCE all -- anywhere anywhere INPUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere FORWARD_direct all -- anywhere anywhere FORWARD_IN_ZONES_SOURCE all -- anywhere anywhere FORWARD_IN_ZONES all -- anywhere anywhere FORWARD_OUT_ZONES_SOURCE all -- anywhere anywhere FORWARD_OUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination OUTPUT_direct all -- anywhere anywhere Chain INPUT_direct (1 references) target prot opt source destination Chain INPUT_ZONES_SOURCE (1 references) target prot opt source destination Chain INPUT_ZONES (1 references) target prot opt source destination IN_public all -- anywhere anywhere [goto] IN_public all -- anywhere anywhere [goto] Chain FORWARD_direct (1 references) target prot opt source destination Chain FORWARD_IN_ZONES_SOURCE (1 references) target prot opt source destination Chain FORWARD_IN_ZONES (1 references) target prot opt source destination FWDI_public all -- anywhere anywhere [goto] FWDI_public all -- anywhere anywhere [goto] Chain FORWARD_OUT_ZONES_SOURCE (1 references) target prot opt source destination Chain FORWARD_OUT_ZONES (1 references) target prot opt source destination FWDO_public all -- anywhere anywhere [goto] FWDO_public all -- anywhere anywhere [goto] Chain OUTPUT_direct (1 references) target prot opt source destination Chain IN_public (2 references) target prot opt source destination IN_public_log all -- anywhere anywhere IN_public_deny all -- anywhere anywhere IN_public_allow all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere Chain IN_public_log (1 references) target prot opt source destination Chain IN_public_deny (1 references) target prot opt source destination Chain IN_public_allow (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,UNTRACKED Chain FWDI_public (2 references) target prot opt source destination FWDI_public_log all -- anywhere anywhere FWDI_public_deny all -- anywhere anywhere FWDI_public_allow all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere Chain FWDI_public_log (1 references) target prot opt source destination Chain FWDI_public_deny (1 references) target prot opt source destination Chain FWDI_public_allow (1 references) target prot opt source destination Chain FWDO_public (2 references) target prot opt source destination FWDO_public_log all -- anywhere anywhere FWDO_public_deny all -- anywhere anywhere FWDO_public_allow all -- anywhere anywhere Chain FWDO_public_log (1 references) target prot opt source destination Chain FWDO_public_deny (1 references) target prot opt source destination Chain FWDO_public_allow (1 references) target prot opt source destination pi@piras:~ $ Les r\u00e8gles Iptables ont bien \u00e9t\u00e9 configur\u00e9es par Firewalld. Apr\u00e8s reboot, nous voyons que rien n'a \u00e9t\u00e9 conserv\u00e9 ! Il va falloir investiguer ... Bien : voil\u00e0 la proc\u00e9dure \u00e0 suivre : sudo firewall-cmd --permanent --zone=public --change-interface=eth0 Permet de changer de fa\u00e7on permanente l'interface associ\u00e9e \u00e0 la zone public . Test : pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --change-interface=eth0 success pi@piras:~ $ sudo cat /etc/firewalld/zones/public.xml <?xml version=\"1.0\" encoding=\"utf-8\"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name=\"eth0\"/> <service name=\"ssh\"/> <service name=\"dhcpv6-client\"/> </zone> pi@piras:~ $ Nous voyons que firewalld a cr\u00e9\u00e9 des r\u00e9pertoires et un fichier dans le r\u00e9pertoire **zones** dont le contenu correspond \u00e0 ce que nous avons demand\u00e9. pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Test apr\u00e8s red\u00e9marrage : Cette fois-ci, \u00e7a marche ! (Yes !) pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nous verrons ensuite comment ajouter des r\u00e8gles suivant les services que nous voudrons d\u00e9ployer.","title":"Installation d'un pare-feux"},{"location":"Firewall/#le-pare-feu","text":"Il nous faut installer un pare-feu sur notre raspi pour \u00e9viter les intrusions. Nous allons limiter les machines susceptibles de se connecter \u00e0 celles de notre r\u00e9seau local, et \u00e9galement limiter les ports accessibles sur notre r\u00e9seau. Nous allons utiliser IPtables et Firewalld. J'aurai pr\u00e9f\u00e9r\u00e9 utiliser nftables qui est le successeur de iptables , mais j'ai eu quelques soucis \u00e0 l'utilisation. Peut-\u00eatre est-ce pour \u00e7a que la distribution RaspiOS a configur\u00e9 firewalld avec IPtables ...","title":"Le pare-feu"},{"location":"Firewall/#installation-de-iptables-et-de-firewalld","text":"pi@raspi:~ $ sudo apt install firewalld IPtables est install\u00e9 par d\u00e9faut : rien \u00e0 faire ici.","title":"Installation de IPtables et de Firewalld"},{"location":"Firewall/#test","text":"Si on tape : pi@raspberrypi:~ $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination pi@raspberrypi:~ $ On voit que c'est iptables qui a \u00e9t\u00e9 chosi par RaspiOS. D'abord, il faut comprendre comment fonctionne Firewalld. Je me suis bas\u00e9 sur les sites suivant : lw.net How to get started with Firewalld tutorial points la documentation officielle introduction-to-firewalld La documentation de Fedora it connect La documentation de Fedora est la plus compr\u00e9hensible.","title":"Test"},{"location":"Firewall/#la-notion-de-zones","text":"Firewalld d\u00e9finit 9 zones qui sont en fait des r\u00e8gles de pare-feux par d\u00e9faut. Une zone va par exemple bloquer toute entr\u00e9e sauf SSH, une autre permettre l'acc\u00e8s en HTTP et HTTPS. Ces zones correspondent \u00e0 des utilisations types, comme un serveur dans une DMZ, ou un serveur chez soi , un serveur public, etc. On peut imaginer une zone \u00e9mail qui ne laisserait passer que les ports sp\u00e9cifiques \u00e0 l'\u00e9mail et DNS bien s\u00fbr. Il est possible de cr\u00e9er des zones personnelles. Un certain nombre de zones sont pr\u00e9d\u00e9finies. Voyons leur contenu.","title":"La notion de zones"},{"location":"Firewall/#les-differentes-zones","text":"Les diff\u00e9rentes zones sont : trusted: non modifiable home: modifiable work: modifiable internal: modifiable dmz: modifiable public: modifiable external: modifiable block: non modifiable drop: non modifiable Une tr\u00e8s bonne pr\u00e9sentation des zones est ici : it connect","title":"Les diff\u00e9rentes zones"},{"location":"Firewall/#les-fichiers-de-configuration","text":"Ils sont situ\u00e9s \u00e0 2 endroits : /usr/lib/firewalld/ : il ne faut pas toucher au contenu de ce r\u00e9pertoire /etc/firewalld/ : c'est l\u00e0 que nous mettrons notre configuration, en copiant les fichiers de /usr/lib/firewalld si besoin est. Dans le r\u00e9pertoire /etc/firewalld, le fichier firewalld.conf permet de configurer la zone par d\u00e9faut, ainsi que le backend (iptables, nftables et autre). La zone par d\u00e9faut est public : pas de confiance, mais possibilit\u00e9 d'ajuster au cas par cas les r\u00e8gles. Le seul acc\u00e8s autoris\u00e9 est l'acc\u00e8s ssh et dhcp .","title":"Les fichiers de configuration"},{"location":"Firewall/#quelques-commandes","text":"D\u00e9marrer Firewalld: $ sudo systemctl start firewalld Stopper Fireawalld: $ sudo systemctl stop firewalld Tester le fonctionnement de Firewalld: $ sudo firewall-cmd --state Conna\u00eetre les zones pr\u00e9d\u00e9finies : $ sudo firewall-cmd --get-zones Conna\u00eetre la zone par d\u00e9faut : $ sudo firewall-cmd --get-default-zone Conna\u00eetre la zone active : $ sudo firewall-cmd --get-active-zones Exemples : pi@piras:~ $ sudo firewall-cmd --state running pi@piras:~ $ Le service tourne. pi@piras:~ $ sudo firewall-cmd --get-default-zone public pi@piras:~ $ La zone par d\u00e9faut est : public pi@piras:~ $ sudo firewall-cmd --get-zones block dmz drop external home internal public trusted work pi@piras:~ $ Les zones pr\u00e9d\u00e9finies sont : block dmz drop external home internal public trusted work Quelle est la zone active : aucune ! pi@piras:~ $ sudo firewall-cmd --get-active-zones pi@piras:~ $ Nous pouvons v\u00e9rifier la zone en fonctionnement et l'interface r\u00e9seau qui y est attach\u00e9e : pi@piras:~ $ sudo firewall-cmd --list-all public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Aucune interface n'est attach\u00e9e. Les seuls services autoris\u00e9 sont : dhcp et ssh.","title":"Quelques commandes"},{"location":"Firewall/#premiere-etape-de-configuration","text":"Nous allons utiliser les commandes en ligne de commande pour configurer Firewalld, mais il existe une GUI pour le faire graphiquement. R\u00e9f\u00e9rez-vous aux liens que j'ai indiqu\u00e9s au-dessus. D\u00e9finition de la zone par d\u00e9faut : (public) pi@piras:~ $ sudo firewall-cmd --set-default-zone=public Warning: ZONE_ALREADY_SET: public success pi@piras:~ $ Attribution de l'interface r\u00e9seau \u00e0 cette zone : pi@piras:~ $ sudo firewall-cmd --zone=public --change-interface=eth0 success pi@piras:~ $ Attention, ce changement n'est pas permanent ! (voir ci-dessous) Test : pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nous voyons que l'interface eth0 a bien \u00e9t\u00e9 attribu\u00e9e \u00e0 la zone public .","title":"Premi\u00e8re \u00e9tape de configuration"},{"location":"Firewall/#les-services","text":"Il est possible de configurer les services accessibles (ou pas) attribu\u00e9s \u00e0 la zone active. Pour conna\u00eetre les diff\u00e9rents services disponibles, tapez la commande suivante : pi@piras:~ $ sudo firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server pi@piras:~ $ Chaque d\u00e9tail des services est d\u00e9taill\u00e9 dans un fichier xml dans /usr/lib/firewalld. Voyons quels services sont actuellement activ\u00e9s sur notre raspi : pi@piras:~ $ ss -t -u -l -a Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 0.0.0.0:55853 0.0.0.0:* udp UNCONN 0 0 127.0.0.1:domain 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:bootpc 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* udp UNCONN 0 0 [::1]:domain *:* udp UNCONN 0 0 *:59578 *:* udp UNCONN 0 0 *:mdns *:* tcp LISTEN 0 511 127.0.0.1:domain-s 0.0.0.0:* tcp LISTEN 0 511 127.0.0.1:domain 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp ESTAB 0 0 192.168.111.170:ssh 192.168.111.150:59092 tcp LISTEN 0 511 [::1]:domain-s [::]:* tcp LISTEN 0 511 [::1]:domain [::]:* tcp LISTEN 0 128 [::]:ssh [::]:* pi@piras:~ $ Nous voyons notre connexion ssh \u00e9tablie entre ma machine de travail en ip 192.168.111.150 et piras 192.168.111.170. Notre raspi \u00e9coute \u00e9galement le port 22 sur toutes les interfaces pr\u00e9sentes. Liste des ports en \u00e9coute (TCP) : pi@piras:~ $ ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 127.0.0.1:853 0.0.0.0:* LISTEN 0 511 127.0.0.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 511 [::1]:853 [::]:* LISTEN 0 511 [::1]:53 [::]:* LISTEN 0 128 [::]:22 [::]:* pi@piras:~ $ Les ports 22 (ssh), 53 (dns), 853 (dns) sont \u00e0 l'\u00e9coute en IPV4 et IPV6. Liste des ports en \u00e9coute (UDP) : pi@piras:~ $ ss -lun State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 127.0.0.1:53 0.0.0.0:* UNCONN 0 0 0.0.0.0:68 0.0.0.0:* UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* UNCONN 0 0 [::1]:53 *:* UNCONN 0 0 *:59578 *:* UNCONN 0 0 *:5353 *:* pi@piras:~ $","title":"Les services"},{"location":"Firewall/#etat-des-lieux","text":"V\u00e9rifions le fonctionnement de Firewalld. Souvenez-vous qu'il \u00e9tait configur\u00e9 pour fonctionner avec Iptables. V\u00e9rifions les r\u00e8gles \u00e9tablies : pi@piras:~ $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere INPUT_direct all -- anywhere anywhere INPUT_ZONES_SOURCE all -- anywhere anywhere INPUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere FORWARD_direct all -- anywhere anywhere FORWARD_IN_ZONES_SOURCE all -- anywhere anywhere FORWARD_IN_ZONES all -- anywhere anywhere FORWARD_OUT_ZONES_SOURCE all -- anywhere anywhere FORWARD_OUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination OUTPUT_direct all -- anywhere anywhere Chain INPUT_direct (1 references) target prot opt source destination Chain INPUT_ZONES_SOURCE (1 references) target prot opt source destination Chain INPUT_ZONES (1 references) target prot opt source destination IN_public all -- anywhere anywhere [goto] IN_public all -- anywhere anywhere [goto] Chain FORWARD_direct (1 references) target prot opt source destination Chain FORWARD_IN_ZONES_SOURCE (1 references) target prot opt source destination Chain FORWARD_IN_ZONES (1 references) target prot opt source destination FWDI_public all -- anywhere anywhere [goto] FWDI_public all -- anywhere anywhere [goto] Chain FORWARD_OUT_ZONES_SOURCE (1 references) target prot opt source destination Chain FORWARD_OUT_ZONES (1 references) target prot opt source destination FWDO_public all -- anywhere anywhere [goto] FWDO_public all -- anywhere anywhere [goto] Chain OUTPUT_direct (1 references) target prot opt source destination Chain IN_public (2 references) target prot opt source destination IN_public_log all -- anywhere anywhere IN_public_deny all -- anywhere anywhere IN_public_allow all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere Chain IN_public_log (1 references) target prot opt source destination Chain IN_public_deny (1 references) target prot opt source destination Chain IN_public_allow (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,UNTRACKED Chain FWDI_public (2 references) target prot opt source destination FWDI_public_log all -- anywhere anywhere FWDI_public_deny all -- anywhere anywhere FWDI_public_allow all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere Chain FWDI_public_log (1 references) target prot opt source destination Chain FWDI_public_deny (1 references) target prot opt source destination Chain FWDI_public_allow (1 references) target prot opt source destination Chain FWDO_public (2 references) target prot opt source destination FWDO_public_log all -- anywhere anywhere FWDO_public_deny all -- anywhere anywhere FWDO_public_allow all -- anywhere anywhere Chain FWDO_public_log (1 references) target prot opt source destination Chain FWDO_public_deny (1 references) target prot opt source destination Chain FWDO_public_allow (1 references) target prot opt source destination pi@piras:~ $ Les r\u00e8gles Iptables ont bien \u00e9t\u00e9 configur\u00e9es par Firewalld. Apr\u00e8s reboot, nous voyons que rien n'a \u00e9t\u00e9 conserv\u00e9 ! Il va falloir investiguer ... Bien : voil\u00e0 la proc\u00e9dure \u00e0 suivre : sudo firewall-cmd --permanent --zone=public --change-interface=eth0 Permet de changer de fa\u00e7on permanente l'interface associ\u00e9e \u00e0 la zone public . Test : pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --change-interface=eth0 success pi@piras:~ $ sudo cat /etc/firewalld/zones/public.xml <?xml version=\"1.0\" encoding=\"utf-8\"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name=\"eth0\"/> <service name=\"ssh\"/> <service name=\"dhcpv6-client\"/> </zone> pi@piras:~ $ Nous voyons que firewalld a cr\u00e9\u00e9 des r\u00e9pertoires et un fichier dans le r\u00e9pertoire **zones** dont le contenu correspond \u00e0 ce que nous avons demand\u00e9. pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Test apr\u00e8s red\u00e9marrage : Cette fois-ci, \u00e7a marche ! (Yes !) pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Nous verrons ensuite comment ajouter des r\u00e8gles suivant les services que nous voudrons d\u00e9ployer.","title":"\u00c9tat des lieux"},{"location":"Installation-courrier-basique/","text":"Installation d'un serveur de courrier basique Debian installe par d\u00e9faut exim4 . Nous allons le remplacer par postfix (que nous \u00e9tendrons par la suite pour obtenir un serveur de mail complet) Il faut penser \u00e0 ouvrir les ports 25 en IPV4 et IPV6 avec firewalld . Installation pi@raspberrypi:~ $ sudo apt install postfix Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : ssl-cert Paquets sugg\u00e9r\u00e9s : procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre postfix-lmdb postfix-sqlite sasl2-bin | dovecot-common postfix-cdb ufw postfix-doc openssl-blacklist Les paquets suivants seront ENLEV\u00c9S : exim4-base exim4-config exim4-daemon-light Les NOUVEAUX paquets suivants seront install\u00e9s : postfix ssl-cert 0 mis \u00e0 jour, 2 nouvellement install\u00e9s, 3 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 1\u202f423 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 0 o d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf postfix armhf 3.4.14-0+deb10u1 [1\u202f402 kB] R\u00e9ception de :2 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf ssl-cert all 1.0.39 [20,8 kB] 1\u202f423 ko r\u00e9ceptionn\u00e9s en 3s (524 ko/s) Pr\u00e9configuration des paquets... dpkg: exim4-daemon-light : probl\u00e8me de d\u00e9pendance, mais suppression comme demand\u00e9 : logwatch d\u00e9pend de default-mta | mail-transport-agent ; cependant : Le paquet default-mta n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit default-mta doit \u00eatre supprim\u00e9. Le paquet mail-transport-agent n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit mail-transport-agent doit \u00eatre supprim\u00e9. logwatch d\u00e9pend de default-mta | mail-transport-agent ; cependant : Le paquet default-mta n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit default-mta doit \u00eatre supprim\u00e9. Le paquet mail-transport-agent n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit mail-transport-agent doit \u00eatre supprim\u00e9. (Lecture de la base de donn\u00e9es... 46982 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Suppression de exim4-daemon-light (4.92-8+deb10u4) ... dpkg: exim4-config : probl\u00e8me de d\u00e9pendance, mais suppression comme demand\u00e9 : exim4-base d\u00e9pend de exim4-config (>= 4.82) | exim4-config-2 ; cependant : Le paquet exim4-config doit \u00eatre supprim\u00e9. Le paquet exim4-config-2 n'est pas install\u00e9. Le paquet exim4-config qui fournit exim4-config-2 doit \u00eatre supprim\u00e9. exim4-base d\u00e9pend de exim4-config (>= 4.82) | exim4-config-2 ; cependant : Le paquet exim4-config doit \u00eatre supprim\u00e9. Le paquet exim4-config-2 n'est pas install\u00e9. Le paquet exim4-config qui fournit exim4-config-2 doit \u00eatre supprim\u00e9. Suppression de exim4-config (4.92-8+deb10u4) ... S\u00e9lection du paquet postfix pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 46922 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../postfix_3.4.14-0+deb10u1_armhf.deb ... D\u00e9paquetage de postfix (3.4.14-0+deb10u1) ... (Lecture de la base de donn\u00e9es... 47112 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Suppression de exim4-base (4.92-8+deb10u4) ... S\u00e9lection du paquet ssl-cert pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 47038 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../ssl-cert_1.0.39_all.deb ... D\u00e9paquetage de ssl-cert (1.0.39) ... Param\u00e9trage de ssl-cert (1.0.39) ... Param\u00e9trage de postfix (3.4.14-0+deb10u1) ... Ajout du groupe \u00ab postfix \u00bb (GID 118)... Fait. Ajout de l'utilisateur syst\u00e8me \u00ab postfix \u00bb (UID 112) ... Ajout du nouvel utilisateur \u00ab postfix \u00bb (UID 112) avec pour groupe d'appartenance \u00ab postfix \u00bb ... Le r\u00e9pertoire personnel \u00ab /var/spool/postfix \u00bb n'a pas \u00e9t\u00e9 cr\u00e9\u00e9. Creating /etc/postfix/dynamicmaps.cf Ajout du groupe \u00ab postdrop \u00bb (GID 119)... Fait. setting myhostname: raspberrypi setting alias maps setting alias database changing /etc/mailname to yojik.net setting myorigin setting destinations: $myhostname, yojik.net, raspberrypi, localhost.localdomain, localhost setting relayhost: setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 setting mailbox_size_limit: 0 setting recipient_delimiter: + setting inet_interfaces: all setting inet_protocols: all WARNING: /etc/aliases exists, but does not have a root alias. Postfix (main.cf) is now set up with a default configuration. If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1). After modifying main.cf, be sure to run 'service postfix reload'. Running newaliases Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service \u2192 /lib/systemd/system/postfix.service. Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour rsyslog (8.1901.0-1) ... pi@raspberrypi:~ $ Suppression compl\u00e8te de exim4 On supprime compl\u00e8tement exim4 , fichiers de configuration inclus. pi@raspberrypi:~ $ sudo apt remove --purge exim4* Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Note : s\u00e9lection de exim4-base pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-config-2 pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-doc-info pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-light pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-heavy pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-custom pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-config pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-doc-html pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-localscanapi-2.0 pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-dev pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4 pour l'expression rationnelle \u00ab exim4* \u00bb Le paquet \u00ab exim4-daemon-custom \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Note : s\u00e9lection de \u00ab exim4-config \u00bb au lieu de \u00ab exim4-config-2 \u00bb Le paquet \u00ab exim4 \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-daemon-heavy \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-dev \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-doc-html \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-doc-info \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. Les paquets suivants seront ENLEV\u00c9S : exim4-base* exim4-config* exim4-daemon-light* 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 3 \u00e0 enlever et 0 non mis \u00e0 jour. Apr\u00e8s cette op\u00e9ration, 0 o d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o (Lecture de la base de donn\u00e9es... 47047 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Purge des fichiers de configuration de exim4-base (4.92-8+deb10u4) ... Purge des fichiers de configuration de exim4-config (4.92-8+deb10u4) ... dpkg-statoverride: avertissement: pas de d\u00e9rogation (\u00ab override \u00bb) pr\u00e9sente Purge des fichiers de configuration de exim4-daemon-light (4.92-8+deb10u4) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... pi@raspberrypi:~ $ Ouverture des ports 25 Ajout du protocole smtp \u00e0 notre zone. Liste des services disponibles pi@piras:~ $ sudo firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server pi@piras:~ $ Le protocole qui nous int\u00e9resse est : smtp Ajout du service smtp pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service=smtp success pi@piras:~ $ Il faut recharger firewalld pour que ce soit pris en compte. pi@piras:~ $ sudo systemctl restart firewalld pi@piras:~ $ Dans mon cas, j'ai \u00e9t\u00e9 oblig\u00e9 de red\u00e9marrer le serveur pour que ce soit pris en compte: pas d'explication ... mais comme \u00e7a, \u00e7a marche! V\u00e9rification pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $ Installation des utilitaire courriers pi@raspberrypi:~ $ sudo apt install mailutils Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait mailutils est d\u00e9j\u00e0 la version la plus r\u00e9cente (1:3.5-4). mailutils pass\u00e9 en \u00ab install\u00e9 manuellement \u00bb. Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. pi@raspberrypi:~ $ Ils \u00e9taient d\u00e9j\u00e0 install\u00e9s. Test d'envoi de courriers entre comptes internes. pi-> root Les commandes suivantes permettent de : envoyer un message \u00e0 root (Essai 1) pi@raspberrypi:~ $ mail root Cc: Subject: Essai1 Essai 1 . pi@raspberrypi:~ $ passer root pi@raspberrypi:~ $ sudo /bin/bash root@raspberrypi:/home/pi# lancer mutt root@raspberrypi:/home/pi# mutt 1 gard\u00e9(s), 0 effac\u00e9(s). root@raspberrypi:/home/pi# root -> pi root@raspberrypi:/home/pi# mail pi Cc: Subject: Essai 2 . root@raspberrypi:/home/pi# exit Vous avez du nouveau courrier dans /var/mail/pi pi@raspberrypi:~ $ mutt 3 gard\u00e9(s), 0 effac\u00e9(s). pi@raspberrypi:~ $ Nous avions 2 messages avant: le nouveau message est bien arriv\u00e9 ! Configuration de postfix Il nous faut configurer postfix pour permettre l'envoi de courriers \u00e0 l'ext\u00e9rieur et en recevoir de l'ext\u00e9rieur. Pour cela, il nous faut modifier le fichier /etc/postfix/main.cf Modifiez la ligne mydestination pour qu'elle ressemble \u00e0 ce qui suit : mydestination = $myhostname, yojik.net, atom.yojik.net, localhost.yojik.net, localhost et relancez postfix avec la commande suivante : sudo service postfix restart Courriers sortants Envoi d'un message sur mon compte de messagerie gmail (oui, un envoi sur mon compte normal ne fonctionne pas d\u00fb \u00e0 sa configuration): pi@piras:~$ echo \"Et voil\u00e0 un petit message\" | mail -s \"test du courrier sortant\" ericounet26200@gmail.com Le message est bien re\u00e7u et dans les courriers ind\u00e9sirables, bien entendu (pas de dkim, spf, dnnssec, etc.) Courriers entrants Envoi d'un message \u00e0 partir de mon adresse de courrier normale : Message bien re\u00e7u (apr\u00e8s mise \u00e0 jour de mon serveur DNS). Am\u00e9lioration de la gestion du courrier Nous allons transf\u00e9rer les mails destin\u00e9s \u00e0 root vers l'utilisateur pi . Ainsi que d'autres adresses de courrier standards. Pour cela, nous allons modifier le fichier /etc/aliases , le compiler pour \u00eatre digeste par postfix et relancer postfix . Ce fichier sert \u00e0 rediriger toutes les adresses \u00e9mail comme abuse , webmaster , root vers un utilisateur administrateur de la machine, root puis vers moi ericadmin . # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: pi Il faut lancer la commande newaliases pour g\u00e9n\u00e9rer le fichier.db utile \u00e0 Postfix et on demande \u00e0 Postfix de recharger ses fichiers. pi@piras:~ $ sudo newaliases pi@piras:~ $ On relance postfix : pi@piras:~ $ sudo systemctl restart postfix pi@piras:~ $ Et on teste (envoi d'un courrier \u00e0 root@piras.yojik.net) Et voil\u00e0, notre serveur de courrier est fonctionnel. Protection par Fail2ban Nous devons ajouter la surveillance du mail par fail2ban . Editons le fichier /etc/fail2ban/jail.d/defaults-debian.conf pour y ajouter la surveillance de postfix (port smtp : 25.) Nous prenons l'exemple fourni dans /etc/fail2ban/jail.conf et ne gardons que le port 25. Voil\u00e0 la partie modifi\u00e9e \u00e0 ajouter : [postfix] mode = more port = smtp logpath = %(postfix_log)s backend = %(postfix_backend)s Relan\u00e7ons le service pour que nos modifications soient prises en compte: pi@piras:~ $ sudo systemctl reload fail2ban pi@piras:~ $","title":"Installation d'un serveur de courriers basique"},{"location":"Installation-courrier-basique/#installation-dun-serveur-de-courrier-basique","text":"Debian installe par d\u00e9faut exim4 . Nous allons le remplacer par postfix (que nous \u00e9tendrons par la suite pour obtenir un serveur de mail complet) Il faut penser \u00e0 ouvrir les ports 25 en IPV4 et IPV6 avec firewalld .","title":"Installation d'un serveur de courrier basique"},{"location":"Installation-courrier-basique/#installation","text":"pi@raspberrypi:~ $ sudo apt install postfix Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : ssl-cert Paquets sugg\u00e9r\u00e9s : procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre postfix-lmdb postfix-sqlite sasl2-bin | dovecot-common postfix-cdb ufw postfix-doc openssl-blacklist Les paquets suivants seront ENLEV\u00c9S : exim4-base exim4-config exim4-daemon-light Les NOUVEAUX paquets suivants seront install\u00e9s : postfix ssl-cert 0 mis \u00e0 jour, 2 nouvellement install\u00e9s, 3 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 1\u202f423 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 0 o d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf postfix armhf 3.4.14-0+deb10u1 [1\u202f402 kB] R\u00e9ception de :2 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf ssl-cert all 1.0.39 [20,8 kB] 1\u202f423 ko r\u00e9ceptionn\u00e9s en 3s (524 ko/s) Pr\u00e9configuration des paquets... dpkg: exim4-daemon-light : probl\u00e8me de d\u00e9pendance, mais suppression comme demand\u00e9 : logwatch d\u00e9pend de default-mta | mail-transport-agent ; cependant : Le paquet default-mta n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit default-mta doit \u00eatre supprim\u00e9. Le paquet mail-transport-agent n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit mail-transport-agent doit \u00eatre supprim\u00e9. logwatch d\u00e9pend de default-mta | mail-transport-agent ; cependant : Le paquet default-mta n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit default-mta doit \u00eatre supprim\u00e9. Le paquet mail-transport-agent n'est pas install\u00e9. Le paquet exim4-daemon-light qui fournit mail-transport-agent doit \u00eatre supprim\u00e9. (Lecture de la base de donn\u00e9es... 46982 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Suppression de exim4-daemon-light (4.92-8+deb10u4) ... dpkg: exim4-config : probl\u00e8me de d\u00e9pendance, mais suppression comme demand\u00e9 : exim4-base d\u00e9pend de exim4-config (>= 4.82) | exim4-config-2 ; cependant : Le paquet exim4-config doit \u00eatre supprim\u00e9. Le paquet exim4-config-2 n'est pas install\u00e9. Le paquet exim4-config qui fournit exim4-config-2 doit \u00eatre supprim\u00e9. exim4-base d\u00e9pend de exim4-config (>= 4.82) | exim4-config-2 ; cependant : Le paquet exim4-config doit \u00eatre supprim\u00e9. Le paquet exim4-config-2 n'est pas install\u00e9. Le paquet exim4-config qui fournit exim4-config-2 doit \u00eatre supprim\u00e9. Suppression de exim4-config (4.92-8+deb10u4) ... S\u00e9lection du paquet postfix pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 46922 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../postfix_3.4.14-0+deb10u1_armhf.deb ... D\u00e9paquetage de postfix (3.4.14-0+deb10u1) ... (Lecture de la base de donn\u00e9es... 47112 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Suppression de exim4-base (4.92-8+deb10u4) ... S\u00e9lection du paquet ssl-cert pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 47038 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../ssl-cert_1.0.39_all.deb ... D\u00e9paquetage de ssl-cert (1.0.39) ... Param\u00e9trage de ssl-cert (1.0.39) ... Param\u00e9trage de postfix (3.4.14-0+deb10u1) ... Ajout du groupe \u00ab postfix \u00bb (GID 118)... Fait. Ajout de l'utilisateur syst\u00e8me \u00ab postfix \u00bb (UID 112) ... Ajout du nouvel utilisateur \u00ab postfix \u00bb (UID 112) avec pour groupe d'appartenance \u00ab postfix \u00bb ... Le r\u00e9pertoire personnel \u00ab /var/spool/postfix \u00bb n'a pas \u00e9t\u00e9 cr\u00e9\u00e9. Creating /etc/postfix/dynamicmaps.cf Ajout du groupe \u00ab postdrop \u00bb (GID 119)... Fait. setting myhostname: raspberrypi setting alias maps setting alias database changing /etc/mailname to yojik.net setting myorigin setting destinations: $myhostname, yojik.net, raspberrypi, localhost.localdomain, localhost setting relayhost: setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 setting mailbox_size_limit: 0 setting recipient_delimiter: + setting inet_interfaces: all setting inet_protocols: all WARNING: /etc/aliases exists, but does not have a root alias. Postfix (main.cf) is now set up with a default configuration. If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1). After modifying main.cf, be sure to run 'service postfix reload'. Running newaliases Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service \u2192 /lib/systemd/system/postfix.service. Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour rsyslog (8.1901.0-1) ... pi@raspberrypi:~ $","title":"Installation"},{"location":"Installation-courrier-basique/#suppression-complete-de-exim4","text":"On supprime compl\u00e8tement exim4 , fichiers de configuration inclus. pi@raspberrypi:~ $ sudo apt remove --purge exim4* Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Note : s\u00e9lection de exim4-base pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-config-2 pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-doc-info pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-light pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-heavy pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-daemon-custom pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-config pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-doc-html pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-localscanapi-2.0 pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4-dev pour l'expression rationnelle \u00ab exim4* \u00bb Note : s\u00e9lection de exim4 pour l'expression rationnelle \u00ab exim4* \u00bb Le paquet \u00ab exim4-daemon-custom \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Note : s\u00e9lection de \u00ab exim4-config \u00bb au lieu de \u00ab exim4-config-2 \u00bb Le paquet \u00ab exim4 \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-daemon-heavy \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-dev \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-doc-html \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Le paquet \u00ab exim4-doc-info \u00bb n'est pas install\u00e9, et ne peut donc \u00eatre supprim\u00e9 Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. Les paquets suivants seront ENLEV\u00c9S : exim4-base* exim4-config* exim4-daemon-light* 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 3 \u00e0 enlever et 0 non mis \u00e0 jour. Apr\u00e8s cette op\u00e9ration, 0 o d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o (Lecture de la base de donn\u00e9es... 47047 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Purge des fichiers de configuration de exim4-base (4.92-8+deb10u4) ... Purge des fichiers de configuration de exim4-config (4.92-8+deb10u4) ... dpkg-statoverride: avertissement: pas de d\u00e9rogation (\u00ab override \u00bb) pr\u00e9sente Purge des fichiers de configuration de exim4-daemon-light (4.92-8+deb10u4) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... pi@raspberrypi:~ $","title":"Suppression compl\u00e8te de exim4"},{"location":"Installation-courrier-basique/#ouverture-des-ports-25","text":"Ajout du protocole smtp \u00e0 notre zone.","title":"Ouverture des ports 25"},{"location":"Installation-courrier-basique/#liste-des-services-disponibles","text":"pi@piras:~ $ sudo firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server pi@piras:~ $ Le protocole qui nous int\u00e9resse est : smtp","title":"Liste des services disponibles"},{"location":"Installation-courrier-basique/#ajout-du-service-smtp","text":"pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service=smtp success pi@piras:~ $ Il faut recharger firewalld pour que ce soit pris en compte. pi@piras:~ $ sudo systemctl restart firewalld pi@piras:~ $ Dans mon cas, j'ai \u00e9t\u00e9 oblig\u00e9 de red\u00e9marrer le serveur pour que ce soit pris en compte: pas d'explication ... mais comme \u00e7a, \u00e7a marche!","title":"Ajout du service smtp"},{"location":"Installation-courrier-basique/#verification","text":"pi@piras:~ $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client smtp ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: pi@piras:~ $","title":"V\u00e9rification"},{"location":"Installation-courrier-basique/#installation-des-utilitaire-courriers","text":"pi@raspberrypi:~ $ sudo apt install mailutils Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait mailutils est d\u00e9j\u00e0 la version la plus r\u00e9cente (1:3.5-4). mailutils pass\u00e9 en \u00ab install\u00e9 manuellement \u00bb. Les paquets suivants ont \u00e9t\u00e9 install\u00e9s automatiquement et ne sont plus n\u00e9cessaires : libgnutls-dane0 libunbound8 Veuillez utiliser \u00ab sudo apt autoremove \u00bb pour les supprimer. 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. pi@raspberrypi:~ $ Ils \u00e9taient d\u00e9j\u00e0 install\u00e9s.","title":"Installation des utilitaire courriers"},{"location":"Installation-courrier-basique/#test-denvoi-de-courriers-entre-comptes-internes","text":"pi-> root Les commandes suivantes permettent de : envoyer un message \u00e0 root (Essai 1) pi@raspberrypi:~ $ mail root Cc: Subject: Essai1 Essai 1 . pi@raspberrypi:~ $ passer root pi@raspberrypi:~ $ sudo /bin/bash root@raspberrypi:/home/pi# lancer mutt root@raspberrypi:/home/pi# mutt 1 gard\u00e9(s), 0 effac\u00e9(s). root@raspberrypi:/home/pi# root -> pi root@raspberrypi:/home/pi# mail pi Cc: Subject: Essai 2 . root@raspberrypi:/home/pi# exit Vous avez du nouveau courrier dans /var/mail/pi pi@raspberrypi:~ $ mutt 3 gard\u00e9(s), 0 effac\u00e9(s). pi@raspberrypi:~ $ Nous avions 2 messages avant: le nouveau message est bien arriv\u00e9 !","title":"Test d'envoi de courriers entre comptes internes."},{"location":"Installation-courrier-basique/#configuration-de-postfix","text":"Il nous faut configurer postfix pour permettre l'envoi de courriers \u00e0 l'ext\u00e9rieur et en recevoir de l'ext\u00e9rieur. Pour cela, il nous faut modifier le fichier /etc/postfix/main.cf Modifiez la ligne mydestination pour qu'elle ressemble \u00e0 ce qui suit : mydestination = $myhostname, yojik.net, atom.yojik.net, localhost.yojik.net, localhost et relancez postfix avec la commande suivante : sudo service postfix restart","title":"Configuration de postfix"},{"location":"Installation-courrier-basique/#courriers-sortants","text":"Envoi d'un message sur mon compte de messagerie gmail (oui, un envoi sur mon compte normal ne fonctionne pas d\u00fb \u00e0 sa configuration): pi@piras:~$ echo \"Et voil\u00e0 un petit message\" | mail -s \"test du courrier sortant\" ericounet26200@gmail.com Le message est bien re\u00e7u et dans les courriers ind\u00e9sirables, bien entendu (pas de dkim, spf, dnnssec, etc.)","title":"Courriers sortants"},{"location":"Installation-courrier-basique/#courriers-entrants","text":"Envoi d'un message \u00e0 partir de mon adresse de courrier normale : Message bien re\u00e7u (apr\u00e8s mise \u00e0 jour de mon serveur DNS).","title":"Courriers entrants"},{"location":"Installation-courrier-basique/#amelioration-de-la-gestion-du-courrier","text":"Nous allons transf\u00e9rer les mails destin\u00e9s \u00e0 root vers l'utilisateur pi . Ainsi que d'autres adresses de courrier standards. Pour cela, nous allons modifier le fichier /etc/aliases , le compiler pour \u00eatre digeste par postfix et relancer postfix . Ce fichier sert \u00e0 rediriger toutes les adresses \u00e9mail comme abuse , webmaster , root vers un utilisateur administrateur de la machine, root puis vers moi ericadmin . # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: pi Il faut lancer la commande newaliases pour g\u00e9n\u00e9rer le fichier.db utile \u00e0 Postfix et on demande \u00e0 Postfix de recharger ses fichiers. pi@piras:~ $ sudo newaliases pi@piras:~ $ On relance postfix : pi@piras:~ $ sudo systemctl restart postfix pi@piras:~ $ Et on teste (envoi d'un courrier \u00e0 root@piras.yojik.net) Et voil\u00e0, notre serveur de courrier est fonctionnel.","title":"Am\u00e9lioration de la gestion du courrier"},{"location":"Installation-courrier-basique/#protection-par-fail2ban","text":"Nous devons ajouter la surveillance du mail par fail2ban . Editons le fichier /etc/fail2ban/jail.d/defaults-debian.conf pour y ajouter la surveillance de postfix (port smtp : 25.) Nous prenons l'exemple fourni dans /etc/fail2ban/jail.conf et ne gardons que le port 25. Voil\u00e0 la partie modifi\u00e9e \u00e0 ajouter : [postfix] mode = more port = smtp logpath = %(postfix_log)s backend = %(postfix_backend)s Relan\u00e7ons le service pour que nos modifications soient prises en compte: pi@piras:~ $ sudo systemctl reload fail2ban pi@piras:~ $","title":"Protection par Fail2ban"},{"location":"Installation-de-base/","text":"Installation de base Copie de l'image sur la carte SD Je vais utiliser la distribution \"Raspbian\", d\u00e9riv\u00e9e d'un syst\u00e8me Debian classique. Elle a chang\u00e9 r\u00e9cemment de nom ... j'esp\u00e8re qu'ils ne vont pas abandonner le syst\u00e8me de paquetage de Debian. Vous pouvez r\u00e9cup\u00e9rer l'image directement sur RaspberryPi.org . Rep\u00e9rez ensuite la r\u00e9f\u00e9rence \u00e0 votre carte microSD avec la commande suivante (dans un terminal) ; voil\u00e0 un exemple de sortie terminal (la carte microSD a \u00e9t\u00e9 plac\u00e9e dans un adaptateur usb) : eric@aldebaran:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1,8T 0 disk \u251c\u2500sda1 8:1 0 1,4T 0 part /mnt/Busterhome \u2514\u2500sda2 8:2 0 466G 0 part /home sdb 8:16 0 223,6G 0 disk \u251c\u2500sdb1 8:17 0 500M 0 part /boot/efi \u251c\u2500sdb2 8:18 0 1000M 0 part /boot \u251c\u2500sdb3 8:19 0 97,7G 0 part /mnt/Busterroot \u251c\u2500sdb4 8:20 0 97,7G 0 part / \u2514\u2500sdb5 8:21 0 26,8G 0 part [SWAP] sdc 8:32 0 3,6T 0 disk \u2514\u2500sdc1 8:33 0 3,6T 0 part \u2514\u2500md0 9:0 0 3,6T 0 raid1 /mnt/Raid sdd 8:48 0 3,6T 0 disk \u2514\u2500sdd1 8:49 0 3,6T 0 part \u2514\u2500md0 9:0 0 3,6T 0 raid1 /mnt/Raid sde 8:64 1 1,8G 0 disk /media/eric/9E40-CF6B eric@aldebaran:~$ La carte microSD est r\u00e9f\u00e9renc\u00e9e \u00e0 la derni\u00e8re ligne : sde Un autre exemple avec la carte microSD plac\u00e9e dans directement dans un adaptateur int\u00e9gr\u00e9 dans un portable. La commande pour copier l'image Raspbian sur la carte microSD est la suivante : eric@aldebaran:~$ dd if=2020-08-20-raspios-buster-armhf-lite.img of=/dev/sde bs=4096 C'est une commande que j'utilise syst\u00e9matiquement avec le param\u00e8tre bs mis \u00e0 4096. Je ne me souviens plus pourquoi il m'avait fallu mettre ce param\u00e8tre, mais cela fonctionne bien avec (et moins bien sans.) Une autre version de cette commande d\u00e9couverte avec (FreedomBox)[https://www.freedombox.org] est la suivante : (test avec la derni\u00e8re version de RaspiOS ... changement de nom par rapport \u00e0 Raspbian, car contient des \"trucs\" pas vraiment libres comme les d\u00e9p\u00f4ts de Microsoft (VsCode) :( ) $ sudo dd bs=1M if=2021-01-11-raspios-buster-armhf-lite.img of=/dev/sdd conv=fdatasync status=progress 1816133632 octets (1,8 GB, 1,7 GiB) copi\u00e9s, 1 s, 1,8 GB/s 1776+0 enregistrements lus 1776+0 enregistrements \u00e9crits 1862270976 octets (1,9 GB, 1,7 GiB) copi\u00e9s, 167,27 s, 11,1 MB/s eric@aldebaran:~$ Une autre commande possible est (trouv\u00e9e \u00e9galement sur le site de FreedomBox): $ cat 2021-01-11-raspios-buster-armhf-lite.img > /dev/sdd ; sync Bien s\u00fbr, changez le p\u00e9riph\u00e9rique suivant votre cas particulier : le mien, ici, est /dev/sdd . Voyez avec la commande lsblk pour d\u00e9couvrir la votre: elle change avec les p\u00e9riph\u00e9riques d\u00e9j\u00e0 branch\u00e9s sur votre ordinateur. (chez moi, la premi\u00e8re fois, c'\u00e9tait /dev/sde , puis aujourd'hui, /dev/sdd ) Autorisation de l'acc\u00e8s en ssh Pour pouvoir se connecter en ssh , il faut cr\u00e9er un fichier vide de nom ssh dans le r\u00e9pertoire /boot . voici la liste des commandes n\u00e9cessaires : cd /media/eric/9E40-CF6B/boot touch ssh /media/eric/9E40-CF6B/boot est le point de montage de la carte microsd sur le desktop. Une fois cela fait, vous pouvez d\u00e9monter votre carte microSD et la placer dans votre raspi.","title":"Installation de base"},{"location":"Installation-de-base/#installation-de-base","text":"","title":"Installation de base"},{"location":"Installation-de-base/#copie-de-limage-sur-la-carte-sd","text":"Je vais utiliser la distribution \"Raspbian\", d\u00e9riv\u00e9e d'un syst\u00e8me Debian classique. Elle a chang\u00e9 r\u00e9cemment de nom ... j'esp\u00e8re qu'ils ne vont pas abandonner le syst\u00e8me de paquetage de Debian. Vous pouvez r\u00e9cup\u00e9rer l'image directement sur RaspberryPi.org . Rep\u00e9rez ensuite la r\u00e9f\u00e9rence \u00e0 votre carte microSD avec la commande suivante (dans un terminal) ; voil\u00e0 un exemple de sortie terminal (la carte microSD a \u00e9t\u00e9 plac\u00e9e dans un adaptateur usb) : eric@aldebaran:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1,8T 0 disk \u251c\u2500sda1 8:1 0 1,4T 0 part /mnt/Busterhome \u2514\u2500sda2 8:2 0 466G 0 part /home sdb 8:16 0 223,6G 0 disk \u251c\u2500sdb1 8:17 0 500M 0 part /boot/efi \u251c\u2500sdb2 8:18 0 1000M 0 part /boot \u251c\u2500sdb3 8:19 0 97,7G 0 part /mnt/Busterroot \u251c\u2500sdb4 8:20 0 97,7G 0 part / \u2514\u2500sdb5 8:21 0 26,8G 0 part [SWAP] sdc 8:32 0 3,6T 0 disk \u2514\u2500sdc1 8:33 0 3,6T 0 part \u2514\u2500md0 9:0 0 3,6T 0 raid1 /mnt/Raid sdd 8:48 0 3,6T 0 disk \u2514\u2500sdd1 8:49 0 3,6T 0 part \u2514\u2500md0 9:0 0 3,6T 0 raid1 /mnt/Raid sde 8:64 1 1,8G 0 disk /media/eric/9E40-CF6B eric@aldebaran:~$ La carte microSD est r\u00e9f\u00e9renc\u00e9e \u00e0 la derni\u00e8re ligne : sde Un autre exemple avec la carte microSD plac\u00e9e dans directement dans un adaptateur int\u00e9gr\u00e9 dans un portable. La commande pour copier l'image Raspbian sur la carte microSD est la suivante : eric@aldebaran:~$ dd if=2020-08-20-raspios-buster-armhf-lite.img of=/dev/sde bs=4096 C'est une commande que j'utilise syst\u00e9matiquement avec le param\u00e8tre bs mis \u00e0 4096. Je ne me souviens plus pourquoi il m'avait fallu mettre ce param\u00e8tre, mais cela fonctionne bien avec (et moins bien sans.) Une autre version de cette commande d\u00e9couverte avec (FreedomBox)[https://www.freedombox.org] est la suivante : (test avec la derni\u00e8re version de RaspiOS ... changement de nom par rapport \u00e0 Raspbian, car contient des \"trucs\" pas vraiment libres comme les d\u00e9p\u00f4ts de Microsoft (VsCode) :( ) $ sudo dd bs=1M if=2021-01-11-raspios-buster-armhf-lite.img of=/dev/sdd conv=fdatasync status=progress 1816133632 octets (1,8 GB, 1,7 GiB) copi\u00e9s, 1 s, 1,8 GB/s 1776+0 enregistrements lus 1776+0 enregistrements \u00e9crits 1862270976 octets (1,9 GB, 1,7 GiB) copi\u00e9s, 167,27 s, 11,1 MB/s eric@aldebaran:~$ Une autre commande possible est (trouv\u00e9e \u00e9galement sur le site de FreedomBox): $ cat 2021-01-11-raspios-buster-armhf-lite.img > /dev/sdd ; sync Bien s\u00fbr, changez le p\u00e9riph\u00e9rique suivant votre cas particulier : le mien, ici, est /dev/sdd . Voyez avec la commande lsblk pour d\u00e9couvrir la votre: elle change avec les p\u00e9riph\u00e9riques d\u00e9j\u00e0 branch\u00e9s sur votre ordinateur. (chez moi, la premi\u00e8re fois, c'\u00e9tait /dev/sde , puis aujourd'hui, /dev/sdd )","title":"Copie de l'image sur la carte SD"},{"location":"Installation-de-base/#autorisation-de-lacces-en-ssh","text":"Pour pouvoir se connecter en ssh , il faut cr\u00e9er un fichier vide de nom ssh dans le r\u00e9pertoire /boot . voici la liste des commandes n\u00e9cessaires : cd /media/eric/9E40-CF6B/boot touch ssh /media/eric/9E40-CF6B/boot est le point de montage de la carte microsd sur le desktop. Une fois cela fait, vous pouvez d\u00e9monter votre carte microSD et la placer dans votre raspi.","title":"Autorisation de l'acc\u00e8s en ssh"},{"location":"Knot/","text":"Installation de knot-resolver Nous allons suivre la documentation officielle situ\u00e9e ici : knot-resolver Installation Installation du resolver et des programmes utilitaires pi@piras:~ $ sudo apt install knot-resolver knot-dnsutils Configuration Voil\u00e0 le contenu de mon fichier de configuration /etc/knot-resolver/kresd.conf : pi@piras:~ $ cat /etc/knot-resolver/kresd.conf -- Default empty Knot DNS Resolver configuration in -*- lua -*- -- Bind ports as privileged user (root) -- net = { '127.0.0.1', '::1' } -- Switch to unprivileged user -- user('knot-resolver','knot-resolver') -- Unprivileged -- cache.size = 100*MB pi@piras:~ $ J'ai d\u00e9-comment\u00e9 les interfaces d'\u00e9coute. Lancement et mise en service automatique On d\u00e9marre le service sudo systemctl start kresd@1.service On rend le d\u00e9marrage automatique sudo systemctl enable --now kresd@1.service On v\u00e9rifie que le service est en route sudo systemctl status kresd@1.service pi@piras:~ $ sudo systemctl status kresd@1.service \u25cf kresd@1.service - Knot Resolver daemon Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-12 12:24:29 CET; 15min ago Docs: man:kresd.systemd(7) man:kresd(8) Main PID: 1905 (kresd) CGroup: /system.slice/system-kresd.slice/kresd@1.service \u2514\u25001905 /usr/sbin/kresd --config=/etc/knot-resolver/kresd.conf d\u00e9c. 12 12:24:28 piras systemd[1]: Starting Knot Resolver daemon... d\u00e9c. 12 12:24:29 piras systemd[1]: Started Knot Resolver daemon. pi@piras:~ $ Il est actif (active (running)) On teste le fonctionnement pi@piras:~ $ kdig +short @localhost . NS a.root-servers.net. b.root-servers.net. c.root-servers.net. d.root-servers.net. e.root-servers.net. f.root-servers.net. g.root-servers.net. h.root-servers.net. i.root-servers.net. j.root-servers.net. k.root-servers.net. l.root-servers.net. m.root-servers.net. pi@piras:~ $ Tout fonctionne :D le r\u00e9solveur \u00e9coute sur les ports 127.0.0.1 et ::1. Modification de /etc/dhcpcd.conf Nous allons pouvoir maintenant modifier la ligne : #static domain_name_servers=192.168.1.1 pour obtenir ceci : static domain_name_servers=127.0.0.1 ::1 Notre raspi fera appel dor\u00e9navant \u00e0 son propre r\u00e9solveur DNS (et non \u00e0 celui de votre box !)","title":"Installation de Knot-resolver"},{"location":"Knot/#installation-de-knot-resolver","text":"Nous allons suivre la documentation officielle situ\u00e9e ici : knot-resolver","title":"Installation de knot-resolver"},{"location":"Knot/#installation","text":"Installation du resolver et des programmes utilitaires pi@piras:~ $ sudo apt install knot-resolver knot-dnsutils","title":"Installation"},{"location":"Knot/#configuration","text":"Voil\u00e0 le contenu de mon fichier de configuration /etc/knot-resolver/kresd.conf : pi@piras:~ $ cat /etc/knot-resolver/kresd.conf -- Default empty Knot DNS Resolver configuration in -*- lua -*- -- Bind ports as privileged user (root) -- net = { '127.0.0.1', '::1' } -- Switch to unprivileged user -- user('knot-resolver','knot-resolver') -- Unprivileged -- cache.size = 100*MB pi@piras:~ $ J'ai d\u00e9-comment\u00e9 les interfaces d'\u00e9coute.","title":"Configuration"},{"location":"Knot/#lancement-et-mise-en-service-automatique","text":"On d\u00e9marre le service sudo systemctl start kresd@1.service On rend le d\u00e9marrage automatique sudo systemctl enable --now kresd@1.service On v\u00e9rifie que le service est en route sudo systemctl status kresd@1.service pi@piras:~ $ sudo systemctl status kresd@1.service \u25cf kresd@1.service - Knot Resolver daemon Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-12 12:24:29 CET; 15min ago Docs: man:kresd.systemd(7) man:kresd(8) Main PID: 1905 (kresd) CGroup: /system.slice/system-kresd.slice/kresd@1.service \u2514\u25001905 /usr/sbin/kresd --config=/etc/knot-resolver/kresd.conf d\u00e9c. 12 12:24:28 piras systemd[1]: Starting Knot Resolver daemon... d\u00e9c. 12 12:24:29 piras systemd[1]: Started Knot Resolver daemon. pi@piras:~ $ Il est actif (active (running)) On teste le fonctionnement pi@piras:~ $ kdig +short @localhost . NS a.root-servers.net. b.root-servers.net. c.root-servers.net. d.root-servers.net. e.root-servers.net. f.root-servers.net. g.root-servers.net. h.root-servers.net. i.root-servers.net. j.root-servers.net. k.root-servers.net. l.root-servers.net. m.root-servers.net. pi@piras:~ $ Tout fonctionne :D le r\u00e9solveur \u00e9coute sur les ports 127.0.0.1 et ::1.","title":"Lancement et mise en service automatique"},{"location":"Knot/#modification-de-etcdhcpcdconf","text":"Nous allons pouvoir maintenant modifier la ligne : #static domain_name_servers=192.168.1.1 pour obtenir ceci : static domain_name_servers=127.0.0.1 ::1 Notre raspi fera appel dor\u00e9navant \u00e0 son propre r\u00e9solveur DNS (et non \u00e0 celui de votre box !)","title":"Modification de /etc/dhcpcd.conf"},{"location":"Logwatch/","text":"Installation de logwatch Nous allons installer logwatch qui nous enverra chaque jour un rapport de surveillance des services surveill\u00e9s. La configuration se fait dans /usr/share/logwatch/default.conf/logwatch.conf Installation pi@raspberrypi:~ $ sudo apt install logwatch Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : exim4-base exim4-config exim4-daemon-light guile-2.2-libs libdate-manip-perl libgnutls-dane0 libgsasl7 libkyotocabinet16v5 libltdl7 liblzo2-2 libmailutils5 libmariadb3 libntlm0 libpython2.7 libsys-cpu-perl libsys-meminfo-perl libunbound8 mailutils mailutils-common mariadb-common mysql-common Paquets sugg\u00e9r\u00e9s : exim4-doc-html | exim4-doc-info eximon4 spf-tools-perl swaks mailutils-mh mailutils-doc Les NOUVEAUX paquets suivants seront install\u00e9s : exim4-base exim4-config exim4-daemon-light guile-2.2-libs libdate-manip-perl libgnutls-dane0 libgsasl7 libkyotocabinet16v5 libltdl7 liblzo2-2 libmailutils5 libmariadb3 libntlm0 libpython2.7 libsys-cpu-perl libsys-meminfo-perl libunbound8 logwatch mailutils mailutils-common mariadb-common mysql-common 0 mis \u00e0 jour, 22 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 13,0 Mo dans les archives. Apr\u00e8s cette op\u00e9ration, 72,1 Mo d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf exim4-config all 4.92-8+deb10u4 [323 kB] R\u00e9ception de :4 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf libgnutls-dane0 armhf 3.6.7-4+deb10u6 [315 kB] R\u00e9ception de :2 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf exim4-base armhf 4.92-8+deb10u4 [1\u202f132 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libunbound8 armhf 1.9.0-2+deb10u2 [403 kB] R\u00e9ception de :7 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf guile-2.2-libs armhf 2.2.4+1-2+deb10u1 [4\u202f918 kB] R\u00e9ception de :5 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf exim4-daemon-light armhf 4.92-8+deb10u4 [492 kB] R\u00e9ception de :6 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libltdl7 armhf 2.4.6-9 [387 kB] R\u00e9ception de :20 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf libsys-meminfo-perl armhf 0.99-1+b2 [9\u202f564 B] R\u00e9ception de :8 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libdate-manip-perl all 6.76-1 [930 kB] R\u00e9ception de :21 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf logwatch all 7.5.0-1 [380 kB] R\u00e9ception de :22 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf mailutils armhf 1:3.5-4 [566 kB] R\u00e9ception de :9 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libntlm0 armhf 1.5-1+deb10u1 [21,6 kB] R\u00e9ception de :10 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libgsasl7 armhf 1.8.0-8+b1 [196 kB] R\u00e9ception de :11 http://ftp.crifo.org/raspbian/raspbian buster/main armhf liblzo2-2 armhf 2.10-0.1 [48,4 kB] R\u00e9ception de :14 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mysql-common all 5.8+1.0.5 [7\u202f324 B] R\u00e9ception de :15 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mariadb-common all 1:10.3.27-0+deb10u1 [32,2 kB] R\u00e9ception de :16 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libmariadb3 armhf 1:10.3.27-0+deb10u1 [158 kB] R\u00e9ception de :17 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libpython2.7 armhf 2.7.16-2+deb10u1 [873 kB] R\u00e9ception de :19 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libsys-cpu-perl armhf 0.61-2+b3 [9\u202f332 B] R\u00e9ception de :12 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libkyotocabinet16v5 armhf 1.2.76-4.2+rpi1 [280 kB] R\u00e9ception de :13 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf mailutils-common all 1:3.5-4 [689 kB] R\u00e9ception de :18 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libmailutils5 armhf 1:3.5-4 [809 kB] 13,0 Mo r\u00e9ceptionn\u00e9s en 11s (1\u202f139 ko/s) Pr\u00e9configuration des paquets... S\u00e9lection du paquet exim4-config pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 44347 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../00-exim4-config_4.92-8+deb10u4_all.deb ... D\u00e9paquetage de exim4-config (4.92-8+deb10u4) ... S\u00e9lection du paquet exim4-base pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../01-exim4-base_4.92-8+deb10u4_armhf.deb ... D\u00e9paquetage de exim4-base (4.92-8+deb10u4) ... S\u00e9lection du paquet libunbound8:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../02-libunbound8_1.9.0-2+deb10u2_armhf.deb ... D\u00e9paquetage de libunbound8:armhf (1.9.0-2+deb10u2) ... S\u00e9lection du paquet libgnutls-dane0:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../03-libgnutls-dane0_3.6.7-4+deb10u6_armhf.deb ... D\u00e9paquetage de libgnutls-dane0:armhf (3.6.7-4+deb10u6) ... S\u00e9lection du paquet exim4-daemon-light pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../04-exim4-daemon-light_4.92-8+deb10u4_armhf.deb ... D\u00e9paquetage de exim4-daemon-light (4.92-8+deb10u4) ... S\u00e9lection du paquet libltdl7:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../05-libltdl7_2.4.6-9_armhf.deb ... D\u00e9paquetage de libltdl7:armhf (2.4.6-9) ... S\u00e9lection du paquet guile-2.2-libs:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../06-guile-2.2-libs_2.2.4+1-2+deb10u1_armhf.deb ... D\u00e9paquetage de guile-2.2-libs:armhf (2.2.4+1-2+deb10u1) ... S\u00e9lection du paquet libdate-manip-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../07-libdate-manip-perl_6.76-1_all.deb ... D\u00e9paquetage de libdate-manip-perl (6.76-1) ... S\u00e9lection du paquet libntlm0:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../08-libntlm0_1.5-1+deb10u1_armhf.deb ... D\u00e9paquetage de libntlm0:armhf (1.5-1+deb10u1) ... S\u00e9lection du paquet libgsasl7 pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../09-libgsasl7_1.8.0-8+b1_armhf.deb ... D\u00e9paquetage de libgsasl7 (1.8.0-8+b1) ... S\u00e9lection du paquet liblzo2-2:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../10-liblzo2-2_2.10-0.1_armhf.deb ... D\u00e9paquetage de liblzo2-2:armhf (2.10-0.1) ... S\u00e9lection du paquet libkyotocabinet16v5:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../11-libkyotocabinet16v5_1.2.76-4.2+rpi1_armhf.deb ... D\u00e9paquetage de libkyotocabinet16v5:armhf (1.2.76-4.2+rpi1) ... S\u00e9lection du paquet mailutils-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../12-mailutils-common_1%3a3.5-4_all.deb ... D\u00e9paquetage de mailutils-common (1:3.5-4) ... S\u00e9lection du paquet mysql-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../13-mysql-common_5.8+1.0.5_all.deb ... D\u00e9paquetage de mysql-common (5.8+1.0.5) ... S\u00e9lection du paquet mariadb-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../14-mariadb-common_1%3a10.3.27-0+deb10u1_all.deb ... D\u00e9paquetage de mariadb-common (1:10.3.27-0+deb10u1) ... S\u00e9lection du paquet libmariadb3:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../15-libmariadb3_1%3a10.3.27-0+deb10u1_armhf.deb ... D\u00e9paquetage de libmariadb3:armhf (1:10.3.27-0+deb10u1) ... S\u00e9lection du paquet libpython2.7:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../16-libpython2.7_2.7.16-2+deb10u1_armhf.deb ... D\u00e9paquetage de libpython2.7:armhf (2.7.16-2+deb10u1) ... S\u00e9lection du paquet libmailutils5:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../17-libmailutils5_1%3a3.5-4_armhf.deb ... D\u00e9paquetage de libmailutils5:armhf (1:3.5-4) ... S\u00e9lection du paquet libsys-cpu-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../18-libsys-cpu-perl_0.61-2+b3_armhf.deb ... D\u00e9paquetage de libsys-cpu-perl (0.61-2+b3) ... S\u00e9lection du paquet libsys-meminfo-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../19-libsys-meminfo-perl_0.99-1+b2_armhf.deb ... D\u00e9paquetage de libsys-meminfo-perl (0.99-1+b2) ... S\u00e9lection du paquet logwatch pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../20-logwatch_7.5.0-1_all.deb ... D\u00e9paquetage de logwatch (7.5.0-1) ... S\u00e9lection du paquet mailutils pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../21-mailutils_1%3a3.5-4_armhf.deb ... D\u00e9paquetage de mailutils (1:3.5-4) ... Param\u00e9trage de mysql-common (5.8+1.0.5) ... update-alternatives: utilisation de \u00ab /etc/mysql/my.cnf.fallback \u00bb pour fournir \u00ab /etc/mysql/my.cnf \u00bb (my.cnf) en mode automatique Param\u00e9trage de libpython2.7:armhf (2.7.16-2+deb10u1) ... Param\u00e9trage de libsys-cpu-perl (0.61-2+b3) ... Param\u00e9trage de liblzo2-2:armhf (2.10-0.1) ... Param\u00e9trage de mariadb-common (1:10.3.27-0+deb10u1) ... update-alternatives: utilisation de \u00ab /etc/mysql/mariadb.cnf \u00bb pour fournir \u00ab /etc/mysql/my.cnf \u00bb (my.cnf) en mode automatique Param\u00e9trage de libunbound8:armhf (1.9.0-2+deb10u2) ... Param\u00e9trage de libntlm0:armhf (1.5-1+deb10u1) ... Param\u00e9trage de mailutils-common (1:3.5-4) ... Param\u00e9trage de libmariadb3:armhf (1:10.3.27-0+deb10u1) ... Param\u00e9trage de libltdl7:armhf (2.4.6-9) ... Param\u00e9trage de exim4-config (4.92-8+deb10u4) ... Adding system-user for exim (v4) Param\u00e9trage de libsys-meminfo-perl (0.99-1+b2) ... Param\u00e9trage de guile-2.2-libs:armhf (2.2.4+1-2+deb10u1) ... Param\u00e9trage de libdate-manip-perl (6.76-1) ... Param\u00e9trage de libgnutls-dane0:armhf (3.6.7-4+deb10u6) ... Param\u00e9trage de exim4-base (4.92-8+deb10u4) ... exim: DB upgrade, deleting hints-db Param\u00e9trage de libkyotocabinet16v5:armhf (1.2.76-4.2+rpi1) ... Param\u00e9trage de libgsasl7 (1.8.0-8+b1) ... Param\u00e9trage de exim4-daemon-light (4.92-8+deb10u4) ... Initializing GnuTLS DH parameter file Param\u00e9trage de libmailutils5:armhf (1:3.5-4) ... Param\u00e9trage de logwatch (7.5.0-1) ... Param\u00e9trage de mailutils (1:3.5-4) ... update-alternatives: utilisation de \u00ab /usr/bin/frm.mailutils \u00bb pour fournir \u00ab /usr/bin/frm \u00bb (frm) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/from.mailutils \u00bb pour fournir \u00ab /usr/bin/from \u00bb (from) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/messages.mailutils \u00bb pour fournir \u00ab /usr/bin/messages \u00bb (messages) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/movemail.mailutils \u00bb pour fournir \u00ab /usr/bin/movemail \u00bb (movemail) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/readmsg.mailutils \u00bb pour fournir \u00ab /usr/bin/readmsg \u00bb (readmsg) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/dotlock.mailutils \u00bb pour fournir \u00ab /usr/bin/dotlock \u00bb (dotlock) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/mail.mailutils \u00bb pour fournir \u00ab /usr/bin/mailx \u00bb (mailx) en mode automatique Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@raspberrypi:~ $ Premi\u00e8res configurations Il faut modifier les lignes suivantes : MailTo = root -> Mailto = pi Range = yesterday -> Range = all J'ai laiss\u00e9 la deuxi\u00e8me ligne \u00e0 yesterday pour limiter la taille du rapport. Premiers tests Nous utiliserons l'utilisateur local destinataire pi . Le logiciel de courrier install\u00e9 n'est pas configur\u00e9 pour envoyer des mails \u00e0 l'ext\u00e9rieur. logwatch --detail Low --mailto pi --service All --range today Pour lire les courriers, nous installerons mutt . Installation de mutt pi@raspberrypi:~ $ sudo apt install mutt Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : libgpgme11 libsasl2-modules libtokyocabinet9 Paquets sugg\u00e9r\u00e9s : libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp libsasl2-modules-sql urlview aspell | ispell mixmaster Les NOUVEAUX paquets suivants seront install\u00e9s : libgpgme11 libsasl2-modules libtokyocabinet9 mutt 0 mis \u00e0 jour, 4 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 2\u202f121 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 7\u202f626 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libgpgme11 armhf 1.12.0-6 [230 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libtokyocabinet9 armhf 1.4.48-12 [311 kB] R\u00e9ception de :2 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libsasl2-modules armhf 2.1.27+dfsg-1+deb10u1 [96,3 kB] R\u00e9ception de :4 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mutt armhf 1.10.1-2.1+deb10u5 [1\u202f484 kB] 2\u202f121 ko r\u00e9ceptionn\u00e9s en 3s (803 ko/s) S\u00e9lection du paquet libgpgme11:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 46838 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../libgpgme11_1.12.0-6_armhf.deb ... D\u00e9paquetage de libgpgme11:armhf (1.12.0-6) ... S\u00e9lection du paquet libsasl2-modules:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../libsasl2-modules_2.1.27+dfsg-1+deb10u1_armhf.deb ... D\u00e9paquetage de libsasl2-modules:armhf (2.1.27+dfsg-1+deb10u1) ... S\u00e9lection du paquet libtokyocabinet9:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../libtokyocabinet9_1.4.48-12_armhf.deb ... D\u00e9paquetage de libtokyocabinet9:armhf (1.4.48-12) ... S\u00e9lection du paquet mutt pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../mutt_1.10.1-2.1+deb10u5_armhf.deb ... D\u00e9paquetage de mutt (1.10.1-2.1+deb10u5) ... Param\u00e9trage de libtokyocabinet9:armhf (1.4.48-12) ... Param\u00e9trage de libsasl2-modules:armhf (2.1.27+dfsg-1+deb10u1) ... Param\u00e9trage de libgpgme11:armhf (1.12.0-6) ... Param\u00e9trage de mutt (1.10.1-2.1+deb10u5) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour mime-support (3.62) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@raspberrypi:~ $ Test de lecture du courrier Nous voyons le premier courrier qui indique que exim4 n'a pas pu envoyer un message \u00e0 l'ext\u00e9rieur (j'avais mis mon adresse courriel normale dans la ligne de commande), et le second qui est bien le rapport de logwatch .","title":"Surveillance du serveur"},{"location":"Logwatch/#installation-de-logwatch","text":"Nous allons installer logwatch qui nous enverra chaque jour un rapport de surveillance des services surveill\u00e9s. La configuration se fait dans /usr/share/logwatch/default.conf/logwatch.conf","title":"Installation de logwatch"},{"location":"Logwatch/#installation","text":"pi@raspberrypi:~ $ sudo apt install logwatch Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : exim4-base exim4-config exim4-daemon-light guile-2.2-libs libdate-manip-perl libgnutls-dane0 libgsasl7 libkyotocabinet16v5 libltdl7 liblzo2-2 libmailutils5 libmariadb3 libntlm0 libpython2.7 libsys-cpu-perl libsys-meminfo-perl libunbound8 mailutils mailutils-common mariadb-common mysql-common Paquets sugg\u00e9r\u00e9s : exim4-doc-html | exim4-doc-info eximon4 spf-tools-perl swaks mailutils-mh mailutils-doc Les NOUVEAUX paquets suivants seront install\u00e9s : exim4-base exim4-config exim4-daemon-light guile-2.2-libs libdate-manip-perl libgnutls-dane0 libgsasl7 libkyotocabinet16v5 libltdl7 liblzo2-2 libmailutils5 libmariadb3 libntlm0 libpython2.7 libsys-cpu-perl libsys-meminfo-perl libunbound8 logwatch mailutils mailutils-common mariadb-common mysql-common 0 mis \u00e0 jour, 22 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 13,0 Mo dans les archives. Apr\u00e8s cette op\u00e9ration, 72,1 Mo d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf exim4-config all 4.92-8+deb10u4 [323 kB] R\u00e9ception de :4 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf libgnutls-dane0 armhf 3.6.7-4+deb10u6 [315 kB] R\u00e9ception de :2 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf exim4-base armhf 4.92-8+deb10u4 [1\u202f132 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libunbound8 armhf 1.9.0-2+deb10u2 [403 kB] R\u00e9ception de :7 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf guile-2.2-libs armhf 2.2.4+1-2+deb10u1 [4\u202f918 kB] R\u00e9ception de :5 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf exim4-daemon-light armhf 4.92-8+deb10u4 [492 kB] R\u00e9ception de :6 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libltdl7 armhf 2.4.6-9 [387 kB] R\u00e9ception de :20 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf libsys-meminfo-perl armhf 0.99-1+b2 [9\u202f564 B] R\u00e9ception de :8 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libdate-manip-perl all 6.76-1 [930 kB] R\u00e9ception de :21 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf logwatch all 7.5.0-1 [380 kB] R\u00e9ception de :22 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian buster/main armhf mailutils armhf 1:3.5-4 [566 kB] R\u00e9ception de :9 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libntlm0 armhf 1.5-1+deb10u1 [21,6 kB] R\u00e9ception de :10 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libgsasl7 armhf 1.8.0-8+b1 [196 kB] R\u00e9ception de :11 http://ftp.crifo.org/raspbian/raspbian buster/main armhf liblzo2-2 armhf 2.10-0.1 [48,4 kB] R\u00e9ception de :14 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mysql-common all 5.8+1.0.5 [7\u202f324 B] R\u00e9ception de :15 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mariadb-common all 1:10.3.27-0+deb10u1 [32,2 kB] R\u00e9ception de :16 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libmariadb3 armhf 1:10.3.27-0+deb10u1 [158 kB] R\u00e9ception de :17 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libpython2.7 armhf 2.7.16-2+deb10u1 [873 kB] R\u00e9ception de :19 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libsys-cpu-perl armhf 0.61-2+b3 [9\u202f332 B] R\u00e9ception de :12 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libkyotocabinet16v5 armhf 1.2.76-4.2+rpi1 [280 kB] R\u00e9ception de :13 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf mailutils-common all 1:3.5-4 [689 kB] R\u00e9ception de :18 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libmailutils5 armhf 1:3.5-4 [809 kB] 13,0 Mo r\u00e9ceptionn\u00e9s en 11s (1\u202f139 ko/s) Pr\u00e9configuration des paquets... S\u00e9lection du paquet exim4-config pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 44347 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../00-exim4-config_4.92-8+deb10u4_all.deb ... D\u00e9paquetage de exim4-config (4.92-8+deb10u4) ... S\u00e9lection du paquet exim4-base pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../01-exim4-base_4.92-8+deb10u4_armhf.deb ... D\u00e9paquetage de exim4-base (4.92-8+deb10u4) ... S\u00e9lection du paquet libunbound8:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../02-libunbound8_1.9.0-2+deb10u2_armhf.deb ... D\u00e9paquetage de libunbound8:armhf (1.9.0-2+deb10u2) ... S\u00e9lection du paquet libgnutls-dane0:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../03-libgnutls-dane0_3.6.7-4+deb10u6_armhf.deb ... D\u00e9paquetage de libgnutls-dane0:armhf (3.6.7-4+deb10u6) ... S\u00e9lection du paquet exim4-daemon-light pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../04-exim4-daemon-light_4.92-8+deb10u4_armhf.deb ... D\u00e9paquetage de exim4-daemon-light (4.92-8+deb10u4) ... S\u00e9lection du paquet libltdl7:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../05-libltdl7_2.4.6-9_armhf.deb ... D\u00e9paquetage de libltdl7:armhf (2.4.6-9) ... S\u00e9lection du paquet guile-2.2-libs:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../06-guile-2.2-libs_2.2.4+1-2+deb10u1_armhf.deb ... D\u00e9paquetage de guile-2.2-libs:armhf (2.2.4+1-2+deb10u1) ... S\u00e9lection du paquet libdate-manip-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../07-libdate-manip-perl_6.76-1_all.deb ... D\u00e9paquetage de libdate-manip-perl (6.76-1) ... S\u00e9lection du paquet libntlm0:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../08-libntlm0_1.5-1+deb10u1_armhf.deb ... D\u00e9paquetage de libntlm0:armhf (1.5-1+deb10u1) ... S\u00e9lection du paquet libgsasl7 pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../09-libgsasl7_1.8.0-8+b1_armhf.deb ... D\u00e9paquetage de libgsasl7 (1.8.0-8+b1) ... S\u00e9lection du paquet liblzo2-2:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../10-liblzo2-2_2.10-0.1_armhf.deb ... D\u00e9paquetage de liblzo2-2:armhf (2.10-0.1) ... S\u00e9lection du paquet libkyotocabinet16v5:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../11-libkyotocabinet16v5_1.2.76-4.2+rpi1_armhf.deb ... D\u00e9paquetage de libkyotocabinet16v5:armhf (1.2.76-4.2+rpi1) ... S\u00e9lection du paquet mailutils-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../12-mailutils-common_1%3a3.5-4_all.deb ... D\u00e9paquetage de mailutils-common (1:3.5-4) ... S\u00e9lection du paquet mysql-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../13-mysql-common_5.8+1.0.5_all.deb ... D\u00e9paquetage de mysql-common (5.8+1.0.5) ... S\u00e9lection du paquet mariadb-common pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../14-mariadb-common_1%3a10.3.27-0+deb10u1_all.deb ... D\u00e9paquetage de mariadb-common (1:10.3.27-0+deb10u1) ... S\u00e9lection du paquet libmariadb3:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../15-libmariadb3_1%3a10.3.27-0+deb10u1_armhf.deb ... D\u00e9paquetage de libmariadb3:armhf (1:10.3.27-0+deb10u1) ... S\u00e9lection du paquet libpython2.7:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../16-libpython2.7_2.7.16-2+deb10u1_armhf.deb ... D\u00e9paquetage de libpython2.7:armhf (2.7.16-2+deb10u1) ... S\u00e9lection du paquet libmailutils5:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../17-libmailutils5_1%3a3.5-4_armhf.deb ... D\u00e9paquetage de libmailutils5:armhf (1:3.5-4) ... S\u00e9lection du paquet libsys-cpu-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../18-libsys-cpu-perl_0.61-2+b3_armhf.deb ... D\u00e9paquetage de libsys-cpu-perl (0.61-2+b3) ... S\u00e9lection du paquet libsys-meminfo-perl pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../19-libsys-meminfo-perl_0.99-1+b2_armhf.deb ... D\u00e9paquetage de libsys-meminfo-perl (0.99-1+b2) ... S\u00e9lection du paquet logwatch pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../20-logwatch_7.5.0-1_all.deb ... D\u00e9paquetage de logwatch (7.5.0-1) ... S\u00e9lection du paquet mailutils pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../21-mailutils_1%3a3.5-4_armhf.deb ... D\u00e9paquetage de mailutils (1:3.5-4) ... Param\u00e9trage de mysql-common (5.8+1.0.5) ... update-alternatives: utilisation de \u00ab /etc/mysql/my.cnf.fallback \u00bb pour fournir \u00ab /etc/mysql/my.cnf \u00bb (my.cnf) en mode automatique Param\u00e9trage de libpython2.7:armhf (2.7.16-2+deb10u1) ... Param\u00e9trage de libsys-cpu-perl (0.61-2+b3) ... Param\u00e9trage de liblzo2-2:armhf (2.10-0.1) ... Param\u00e9trage de mariadb-common (1:10.3.27-0+deb10u1) ... update-alternatives: utilisation de \u00ab /etc/mysql/mariadb.cnf \u00bb pour fournir \u00ab /etc/mysql/my.cnf \u00bb (my.cnf) en mode automatique Param\u00e9trage de libunbound8:armhf (1.9.0-2+deb10u2) ... Param\u00e9trage de libntlm0:armhf (1.5-1+deb10u1) ... Param\u00e9trage de mailutils-common (1:3.5-4) ... Param\u00e9trage de libmariadb3:armhf (1:10.3.27-0+deb10u1) ... Param\u00e9trage de libltdl7:armhf (2.4.6-9) ... Param\u00e9trage de exim4-config (4.92-8+deb10u4) ... Adding system-user for exim (v4) Param\u00e9trage de libsys-meminfo-perl (0.99-1+b2) ... Param\u00e9trage de guile-2.2-libs:armhf (2.2.4+1-2+deb10u1) ... Param\u00e9trage de libdate-manip-perl (6.76-1) ... Param\u00e9trage de libgnutls-dane0:armhf (3.6.7-4+deb10u6) ... Param\u00e9trage de exim4-base (4.92-8+deb10u4) ... exim: DB upgrade, deleting hints-db Param\u00e9trage de libkyotocabinet16v5:armhf (1.2.76-4.2+rpi1) ... Param\u00e9trage de libgsasl7 (1.8.0-8+b1) ... Param\u00e9trage de exim4-daemon-light (4.92-8+deb10u4) ... Initializing GnuTLS DH parameter file Param\u00e9trage de libmailutils5:armhf (1:3.5-4) ... Param\u00e9trage de logwatch (7.5.0-1) ... Param\u00e9trage de mailutils (1:3.5-4) ... update-alternatives: utilisation de \u00ab /usr/bin/frm.mailutils \u00bb pour fournir \u00ab /usr/bin/frm \u00bb (frm) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/from.mailutils \u00bb pour fournir \u00ab /usr/bin/from \u00bb (from) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/messages.mailutils \u00bb pour fournir \u00ab /usr/bin/messages \u00bb (messages) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/movemail.mailutils \u00bb pour fournir \u00ab /usr/bin/movemail \u00bb (movemail) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/readmsg.mailutils \u00bb pour fournir \u00ab /usr/bin/readmsg \u00bb (readmsg) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/dotlock.mailutils \u00bb pour fournir \u00ab /usr/bin/dotlock \u00bb (dotlock) en mode automatique update-alternatives: utilisation de \u00ab /usr/bin/mail.mailutils \u00bb pour fournir \u00ab /usr/bin/mailx \u00bb (mailx) en mode automatique Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour systemd (241-7~deb10u6+rpi1) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@raspberrypi:~ $","title":"Installation"},{"location":"Logwatch/#premieres-configurations","text":"Il faut modifier les lignes suivantes : MailTo = root -> Mailto = pi Range = yesterday -> Range = all J'ai laiss\u00e9 la deuxi\u00e8me ligne \u00e0 yesterday pour limiter la taille du rapport.","title":"Premi\u00e8res configurations"},{"location":"Logwatch/#premiers-tests","text":"Nous utiliserons l'utilisateur local destinataire pi . Le logiciel de courrier install\u00e9 n'est pas configur\u00e9 pour envoyer des mails \u00e0 l'ext\u00e9rieur. logwatch --detail Low --mailto pi --service All --range today Pour lire les courriers, nous installerons mutt .","title":"Premiers tests"},{"location":"Logwatch/#installation-de-mutt","text":"pi@raspberrypi:~ $ sudo apt install mutt Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Les paquets suppl\u00e9mentaires suivants seront install\u00e9s : libgpgme11 libsasl2-modules libtokyocabinet9 Paquets sugg\u00e9r\u00e9s : libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp libsasl2-modules-sql urlview aspell | ispell mixmaster Les NOUVEAUX paquets suivants seront install\u00e9s : libgpgme11 libsasl2-modules libtokyocabinet9 mutt 0 mis \u00e0 jour, 4 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. Il est n\u00e9cessaire de prendre 2\u202f121 ko dans les archives. Apr\u00e8s cette op\u00e9ration, 7\u202f626 ko d'espace disque suppl\u00e9mentaires seront utilis\u00e9s. Souhaitez-vous continuer ? [O/n] o R\u00e9ception de :1 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libgpgme11 armhf 1.12.0-6 [230 kB] R\u00e9ception de :3 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf libtokyocabinet9 armhf 1.4.48-12 [311 kB] R\u00e9ception de :2 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster/main armhf libsasl2-modules armhf 2.1.27+dfsg-1+deb10u1 [96,3 kB] R\u00e9ception de :4 http://mirrors.ircam.fr/pub/raspbian/raspbian buster/main armhf mutt armhf 1.10.1-2.1+deb10u5 [1\u202f484 kB] 2\u202f121 ko r\u00e9ceptionn\u00e9s en 3s (803 ko/s) S\u00e9lection du paquet libgpgme11:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. (Lecture de la base de donn\u00e9es... 46838 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.) Pr\u00e9paration du d\u00e9paquetage de .../libgpgme11_1.12.0-6_armhf.deb ... D\u00e9paquetage de libgpgme11:armhf (1.12.0-6) ... S\u00e9lection du paquet libsasl2-modules:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../libsasl2-modules_2.1.27+dfsg-1+deb10u1_armhf.deb ... D\u00e9paquetage de libsasl2-modules:armhf (2.1.27+dfsg-1+deb10u1) ... S\u00e9lection du paquet libtokyocabinet9:armhf pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../libtokyocabinet9_1.4.48-12_armhf.deb ... D\u00e9paquetage de libtokyocabinet9:armhf (1.4.48-12) ... S\u00e9lection du paquet mutt pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9. Pr\u00e9paration du d\u00e9paquetage de .../mutt_1.10.1-2.1+deb10u5_armhf.deb ... D\u00e9paquetage de mutt (1.10.1-2.1+deb10u5) ... Param\u00e9trage de libtokyocabinet9:armhf (1.4.48-12) ... Param\u00e9trage de libsasl2-modules:armhf (2.1.27+dfsg-1+deb10u1) ... Param\u00e9trage de libgpgme11:armhf (1.12.0-6) ... Param\u00e9trage de mutt (1.10.1-2.1+deb10u5) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour man-db (2.8.5-2) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour mime-support (3.62) ... Traitement des actions diff\u00e9r\u00e9es (\u00ab triggers \u00bb) pour libc-bin (2.28-10+rpi1) ... pi@raspberrypi:~ $","title":"Installation de mutt"},{"location":"Logwatch/#test-de-lecture-du-courrier","text":"Nous voyons le premier courrier qui indique que exim4 n'a pas pu envoyer un message \u00e0 l'ext\u00e9rieur (j'avais mis mon adresse courriel normale dans la ligne de commande), et le second qui est bien le rapport de logwatch .","title":"Test de lecture du courrier"},{"location":"Premier-d%C3%A9marrage/","text":"Premier d\u00e9marrage Ins\u00e9rerez la carte microSD dans le connecteur ad\u00e9quat, le c\u00e2ble ethernet et pour finir l'alimentation. Les petites leds situ\u00e9es sur la carte raspi doivent s'allumer et certaines d'entre elles vont passer au vert. Pour pouvoir ensuite se connecter sur votre raspi en ssh , il faut trouver son adresse IP qui est attribu\u00e9e automatiquement par votre box en dhcp. Nous verrons ensuite comment attribuer une adresse IP fixe \u00e0 votre raspi. D\u00e9couverte de l'adresse IP de votre raspi Il y a plusieurs m\u00e9thodes suivant que votre poste principal est sous Windows, MacOs ou Linux. Je ne traiterai que le cas Linux, car je n'ai ni Windows, ni MacOs. En ligne de commande dans un terminal eric@aldebaran:~$ sudo nmap -sn 192.168.111.0/24 [sudo] Mot de passe de eric : Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-11 10:43 CET Nmap scan report for 192.168.111.13 Host is up (0.13s latency). MAC Address: 20:D3:90:EA:EE:9E (Samsung Electronics) Nmap scan report for 192.168.111.20 Host is up (0.14s latency). MAC Address: 90:78:B2:A1:31:E7 (Xiaomi Communications) Nmap scan report for 192.168.111.25 Host is up (0.24s latency). MAC Address: D8:12:65:5B:DD:90 (Chongqing Fugui Electronics) Nmap scan report for 192.168.111.32 Host is up (0.00074s latency). MAC Address: B8:27:EB:3A:0B:38 (Raspberry Pi Foundation) Nmap scan report for 192.168.111.34 Host is up (0.23s latency). MAC Address: 00:73:8D:92:7E:B6 (Shenzhen Tinno Mobile Technology) Nmap scan report for 192.168.111.49 Host is up (0.25s latency). MAC Address: 70:EE:50:6B:7B:3A (Netatmo) Nmap scan report for 192.168.111.140 Host is up (0.26s latency). MAC Address: 98:DA:C4:37:BF:F9 (Tp-link Technologies) Nmap scan report for 192.168.111.151 Host is up (0.00011s latency). MAC Address: D0:50:99:A5:69:C5 (ASRock Incorporation) Nmap scan report for 192.168.111.160 Host is up (0.00029s latency). MAC Address: 00:23:54:C6:0A:07 (Asustek Computer) Nmap scan report for 192.168.111.250 Host is up (0.69s latency). MAC Address: A8:6B:AD:00:D3:E4 (Hon Hai Precision Ind.) Nmap scan report for 192.168.111.254 Host is up (0.00077s latency). MAC Address: 68:A3:78:65:7B:5C (Freebox SAS) Nmap scan report for 192.168.111.150 Host is up. Nmap done: 256 IP addresses (12 hosts up) scanned in 27.11 seconds eric@aldebaran:~$ Vous voyez toutes les machines connect\u00e9es sur le r\u00e9seau familial (oui, il y a des ampoules connect\u00e9es ;), ainsi que la station m\u00e9t\u00e9o et les capteurs additionnels.) Pour scanner votre r\u00e9seau en IPV6, la commande est la suivante : eric@aldebaran:~$ sudo nmap -6 -sn 2a01:e0a:d0:3c20::0/64 Elle prend des \"plombes\" \u00e0 s'ex\u00e9cuter vu le nombre d'adresses \u00e0 tester ... Il est aussi possible de r\u00e9cup\u00e9rer l'adresse IPV6 sur la console d'administration de votre box. (voir plus bas) La ligne qui nous int\u00e9resse est celle qui r\u00e9f\u00e9rence notre raspi : MAC Address: D8:12:65:5B:DD:90 (Chongqing Fugui Electronics) Nmap scan report for 192.168.111.32 Host is up (0.00074s latency). MAC Address: B8:27:EB:3A:0B:38 (Raspberry Pi Foundation) L'adresse IP (IPV4) est : 192.168.111.32 Cette adresse a \u00e9t\u00e9 attribu\u00e9e dynamiquement. Il nous faudra lui attribuer une adresse IP fixe, en IPV4 et IPV6. Retrouver l'adresse IP avec la Freebox Vous pouvez acc\u00e9der \u00e0 l'interface web de votre Freebox \u00e0 l'adresse : FreeboxOs Voil\u00e0 une s\u00e9rie de captures d'\u00e9cran qui vous permettront de trouver l'adresse IP de votre raspi. Le mien a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9 avec le nom piras . Premi\u00e8re connexion en SSH La commande est \u00e0 effectuer dans un terminal est la suivante : eric@aldebaran:~$ ssh pi@192.168.111.32 pi@192.168.111.32's password: Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Nov 29 16:03:52 2020 from 192.168.111.150 pi@piras:~ $ Nous sommes connect\u00e9s. L'utilisateur pr\u00e9d\u00e9fini avec les droits sudo d'administration est pi et le mot de passe par d\u00e9faut est raspberry . Changez ce mot de passe avec la commande suivante : passwd Et suivez les instructions. Pensez \u00e0 utiliser un mot de passe fort, par exemple g\u00e9n\u00e9r\u00e9 avec le programme pwgen (voir les tutos : Installation d'un serveur Debian/Stretch s\u00e9curis\u00e9 et Installation d'un serveur Debian/Buster s\u00e9curis\u00e9 .) premi\u00e8res configuration Tapez : sudo raspi-config et configurez le clavier, la langue, l'extension des partitions \u00e0 tout l'espace disponible sur la clef, le hostname, la time-zone et n'oubliez pas de faire un update/upgrade avant de re-d\u00e9marrer. Le clavier (commencez par l\u00e0) Choisissez le clavier fran\u00e7ais azerty. (ou autre selon votre configuration personnelle) Les locales Ajouter fr_FR.UTF8 et r\u00e9g\u00e9n\u00e9rez vos locales Choix du param\u00e8tre actif par d\u00e9faut : fr_FR.UTF8 sudo apt update && sudo apt upgrade Zone (fuseau horaire) Choisissez Europe/Paris si c'est bien votre zone ! Options avanc\u00e9es Agrandissez vos partitions pour qu'elles occupent tout l'espace disponible sur le carte SD (option A1) Rd\u00e9marrez votre Raspi. Au prochain red\u00e9marrage, faites une mise \u00e0 jour g\u00e9n\u00e9rale de votre syst\u00e8me avec la commande suivante qui red\u00e9marrera votre raspi \u00e0 la fin des op\u00e9rations : pi@raspberrypi:~ $ sudo apt update && sudo apt upgrade && sudo systemctl reboot R\u00e9ception de :1 http://raspbian.raspberrypi.org/raspbian buster InRelease [15,0 kB] Atteint :2 http://archive.raspberrypi.org/debian buster InRelease R\u00e9ception de :3 http://packages.microsoft.com/repos/code stable InRelease [10,4 kB] R\u00e9ception de :4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13,0 MB] R\u00e9ception de :5 http://packages.microsoft.com/repos/code stable/main armhf Packages [13,6 kB] R\u00e9ception de :6 http://packages.microsoft.com/repos/code stable/main arm64 Packages [13,6 kB] R\u00e9ception de :7 http://packages.microsoft.com/repos/code stable/main amd64 Packages [13,0 kB] 13,1 Mo r\u00e9ceptionn\u00e9s en 38s (340 ko/s) Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Tous les paquets sont \u00e0 jour. Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Calcul de la mise \u00e0 jour... Fait 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. pi@raspberrypi:~ $ Vous trouverez ces instructions sur de nombreux tutoriels et je ne vais pas les r\u00e9p\u00e9ter. Voyez les tutoriels sur la section tutoriels du site RaspberryPi.org par exemple, mais il y en a d'autres.","title":"Premier d\u00e9marrage"},{"location":"Premier-d%C3%A9marrage/#premier-demarrage","text":"Ins\u00e9rerez la carte microSD dans le connecteur ad\u00e9quat, le c\u00e2ble ethernet et pour finir l'alimentation. Les petites leds situ\u00e9es sur la carte raspi doivent s'allumer et certaines d'entre elles vont passer au vert. Pour pouvoir ensuite se connecter sur votre raspi en ssh , il faut trouver son adresse IP qui est attribu\u00e9e automatiquement par votre box en dhcp. Nous verrons ensuite comment attribuer une adresse IP fixe \u00e0 votre raspi.","title":"Premier d\u00e9marrage"},{"location":"Premier-d%C3%A9marrage/#decouverte-de-ladresse-ip-de-votre-raspi","text":"Il y a plusieurs m\u00e9thodes suivant que votre poste principal est sous Windows, MacOs ou Linux. Je ne traiterai que le cas Linux, car je n'ai ni Windows, ni MacOs.","title":"D\u00e9couverte de l'adresse IP de votre raspi"},{"location":"Premier-d%C3%A9marrage/#en-ligne-de-commande-dans-un-terminal","text":"eric@aldebaran:~$ sudo nmap -sn 192.168.111.0/24 [sudo] Mot de passe de eric : Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-11 10:43 CET Nmap scan report for 192.168.111.13 Host is up (0.13s latency). MAC Address: 20:D3:90:EA:EE:9E (Samsung Electronics) Nmap scan report for 192.168.111.20 Host is up (0.14s latency). MAC Address: 90:78:B2:A1:31:E7 (Xiaomi Communications) Nmap scan report for 192.168.111.25 Host is up (0.24s latency). MAC Address: D8:12:65:5B:DD:90 (Chongqing Fugui Electronics) Nmap scan report for 192.168.111.32 Host is up (0.00074s latency). MAC Address: B8:27:EB:3A:0B:38 (Raspberry Pi Foundation) Nmap scan report for 192.168.111.34 Host is up (0.23s latency). MAC Address: 00:73:8D:92:7E:B6 (Shenzhen Tinno Mobile Technology) Nmap scan report for 192.168.111.49 Host is up (0.25s latency). MAC Address: 70:EE:50:6B:7B:3A (Netatmo) Nmap scan report for 192.168.111.140 Host is up (0.26s latency). MAC Address: 98:DA:C4:37:BF:F9 (Tp-link Technologies) Nmap scan report for 192.168.111.151 Host is up (0.00011s latency). MAC Address: D0:50:99:A5:69:C5 (ASRock Incorporation) Nmap scan report for 192.168.111.160 Host is up (0.00029s latency). MAC Address: 00:23:54:C6:0A:07 (Asustek Computer) Nmap scan report for 192.168.111.250 Host is up (0.69s latency). MAC Address: A8:6B:AD:00:D3:E4 (Hon Hai Precision Ind.) Nmap scan report for 192.168.111.254 Host is up (0.00077s latency). MAC Address: 68:A3:78:65:7B:5C (Freebox SAS) Nmap scan report for 192.168.111.150 Host is up. Nmap done: 256 IP addresses (12 hosts up) scanned in 27.11 seconds eric@aldebaran:~$ Vous voyez toutes les machines connect\u00e9es sur le r\u00e9seau familial (oui, il y a des ampoules connect\u00e9es ;), ainsi que la station m\u00e9t\u00e9o et les capteurs additionnels.) Pour scanner votre r\u00e9seau en IPV6, la commande est la suivante : eric@aldebaran:~$ sudo nmap -6 -sn 2a01:e0a:d0:3c20::0/64 Elle prend des \"plombes\" \u00e0 s'ex\u00e9cuter vu le nombre d'adresses \u00e0 tester ... Il est aussi possible de r\u00e9cup\u00e9rer l'adresse IPV6 sur la console d'administration de votre box. (voir plus bas) La ligne qui nous int\u00e9resse est celle qui r\u00e9f\u00e9rence notre raspi : MAC Address: D8:12:65:5B:DD:90 (Chongqing Fugui Electronics) Nmap scan report for 192.168.111.32 Host is up (0.00074s latency). MAC Address: B8:27:EB:3A:0B:38 (Raspberry Pi Foundation) L'adresse IP (IPV4) est : 192.168.111.32 Cette adresse a \u00e9t\u00e9 attribu\u00e9e dynamiquement. Il nous faudra lui attribuer une adresse IP fixe, en IPV4 et IPV6.","title":"En ligne de commande dans un terminal"},{"location":"Premier-d%C3%A9marrage/#retrouver-ladresse-ip-avec-la-freebox","text":"Vous pouvez acc\u00e9der \u00e0 l'interface web de votre Freebox \u00e0 l'adresse : FreeboxOs Voil\u00e0 une s\u00e9rie de captures d'\u00e9cran qui vous permettront de trouver l'adresse IP de votre raspi. Le mien a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9 avec le nom piras .","title":"Retrouver l'adresse IP avec la Freebox"},{"location":"Premier-d%C3%A9marrage/#premiere-connexion-en-ssh","text":"La commande est \u00e0 effectuer dans un terminal est la suivante : eric@aldebaran:~$ ssh pi@192.168.111.32 pi@192.168.111.32's password: Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Nov 29 16:03:52 2020 from 192.168.111.150 pi@piras:~ $ Nous sommes connect\u00e9s. L'utilisateur pr\u00e9d\u00e9fini avec les droits sudo d'administration est pi et le mot de passe par d\u00e9faut est raspberry . Changez ce mot de passe avec la commande suivante : passwd Et suivez les instructions. Pensez \u00e0 utiliser un mot de passe fort, par exemple g\u00e9n\u00e9r\u00e9 avec le programme pwgen (voir les tutos : Installation d'un serveur Debian/Stretch s\u00e9curis\u00e9 et Installation d'un serveur Debian/Buster s\u00e9curis\u00e9 .)","title":"Premi\u00e8re connexion en SSH"},{"location":"Premier-d%C3%A9marrage/#premieres-configuration","text":"Tapez : sudo raspi-config et configurez le clavier, la langue, l'extension des partitions \u00e0 tout l'espace disponible sur la clef, le hostname, la time-zone et n'oubliez pas de faire un update/upgrade avant de re-d\u00e9marrer. Le clavier (commencez par l\u00e0) Choisissez le clavier fran\u00e7ais azerty. (ou autre selon votre configuration personnelle) Les locales Ajouter fr_FR.UTF8 et r\u00e9g\u00e9n\u00e9rez vos locales Choix du param\u00e8tre actif par d\u00e9faut : fr_FR.UTF8 sudo apt update && sudo apt upgrade Zone (fuseau horaire) Choisissez Europe/Paris si c'est bien votre zone ! Options avanc\u00e9es Agrandissez vos partitions pour qu'elles occupent tout l'espace disponible sur le carte SD (option A1) Rd\u00e9marrez votre Raspi. Au prochain red\u00e9marrage, faites une mise \u00e0 jour g\u00e9n\u00e9rale de votre syst\u00e8me avec la commande suivante qui red\u00e9marrera votre raspi \u00e0 la fin des op\u00e9rations : pi@raspberrypi:~ $ sudo apt update && sudo apt upgrade && sudo systemctl reboot R\u00e9ception de :1 http://raspbian.raspberrypi.org/raspbian buster InRelease [15,0 kB] Atteint :2 http://archive.raspberrypi.org/debian buster InRelease R\u00e9ception de :3 http://packages.microsoft.com/repos/code stable InRelease [10,4 kB] R\u00e9ception de :4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13,0 MB] R\u00e9ception de :5 http://packages.microsoft.com/repos/code stable/main armhf Packages [13,6 kB] R\u00e9ception de :6 http://packages.microsoft.com/repos/code stable/main arm64 Packages [13,6 kB] R\u00e9ception de :7 http://packages.microsoft.com/repos/code stable/main amd64 Packages [13,0 kB] 13,1 Mo r\u00e9ceptionn\u00e9s en 38s (340 ko/s) Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Tous les paquets sont \u00e0 jour. Lecture des listes de paquets... Fait Construction de l'arbre des d\u00e9pendances Lecture des informations d'\u00e9tat... Fait Calcul de la mise \u00e0 jour... Fait 0 mis \u00e0 jour, 0 nouvellement install\u00e9s, 0 \u00e0 enlever et 0 non mis \u00e0 jour. pi@raspberrypi:~ $ Vous trouverez ces instructions sur de nombreux tutoriels et je ne vais pas les r\u00e9p\u00e9ter. Voyez les tutoriels sur la section tutoriels du site RaspberryPi.org par exemple, mais il y en a d'autres.","title":"premi\u00e8res configuration"},{"location":"R%C3%A9seau/","text":"R\u00e9seau Dans cette partie, nous allons donner \u00e0 notre raspi une adresse IP fixe, en IPV4 et IPV6. Nous allons utiliser ce qui est indiqu\u00e9 dans de nombreux tutoriels : modification du fichier /etc/dhcpcd.conf # Example static IP configuration: interface eth0 static ip_address=192.168.111.170/24 static ip6_address=2a01:e0a:d0:3c20::170/64 static routers=192.168.111.254 #static domain_name_servers=192.168.1.1 Les lignes \u00e0 modifier sont celles ci-dessus : enlever le # au d\u00e9but des lignes (sauf la premi\u00e8re et la derni\u00e8re) et renseigner en fonction des adresses IP voulues : ipv4 et ipv6. Il restera les serveurs DNS \u00e0 configurer (derni\u00e8re ligne), ce que nous ferons apr\u00e8s avoir install\u00e9 knot-resolver . Une fois les modifications dans le fichier /etc/dhcpcd.conf faites, vous pouvez re-d\u00e9marrer votre raspi. Test : pi@raspberrypi:~ $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:3a:0b:38 brd ff:ff:ff:ff:ff:ff inet 192.168.111.170/24 brd 192.168.111.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 2a01:e0a:d0:3c20:a23:93ca:de95:e15b/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 86388sec preferred_lft 86388sec inet6 2a01:e0a:d0:3c20::170/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::74c8:34d:25f2:3b43/64 scope link valid_lft forever preferred_lft forever pi@raspberrypi:~ $ Les adresses IP de votre serveur doivent correspondre \u00e0 ce que vous avez entr\u00e9 dans le fichier. On a bien : inet 192.168.111.170/24 inet6 2a01:e0a:d0:3c20::170/64 C'est tout bon !","title":"R\u00e9seau (des IPs fixes)"},{"location":"R%C3%A9seau/#reseau","text":"Dans cette partie, nous allons donner \u00e0 notre raspi une adresse IP fixe, en IPV4 et IPV6. Nous allons utiliser ce qui est indiqu\u00e9 dans de nombreux tutoriels : modification du fichier /etc/dhcpcd.conf # Example static IP configuration: interface eth0 static ip_address=192.168.111.170/24 static ip6_address=2a01:e0a:d0:3c20::170/64 static routers=192.168.111.254 #static domain_name_servers=192.168.1.1 Les lignes \u00e0 modifier sont celles ci-dessus : enlever le # au d\u00e9but des lignes (sauf la premi\u00e8re et la derni\u00e8re) et renseigner en fonction des adresses IP voulues : ipv4 et ipv6. Il restera les serveurs DNS \u00e0 configurer (derni\u00e8re ligne), ce que nous ferons apr\u00e8s avoir install\u00e9 knot-resolver . Une fois les modifications dans le fichier /etc/dhcpcd.conf faites, vous pouvez re-d\u00e9marrer votre raspi. Test : pi@raspberrypi:~ $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:3a:0b:38 brd ff:ff:ff:ff:ff:ff inet 192.168.111.170/24 brd 192.168.111.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 2a01:e0a:d0:3c20:a23:93ca:de95:e15b/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 86388sec preferred_lft 86388sec inet6 2a01:e0a:d0:3c20::170/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::74c8:34d:25f2:3b43/64 scope link valid_lft forever preferred_lft forever pi@raspberrypi:~ $ Les adresses IP de votre serveur doivent correspondre \u00e0 ce que vous avez entr\u00e9 dans le fichier. On a bien : inet 192.168.111.170/24 inet6 2a01:e0a:d0:3c20::170/64 C'est tout bon !","title":"R\u00e9seau"},{"location":"S%C3%A9curisation-SSH/","text":"S\u00e9curisation SSH Je vais baser cette partie sur plusieurs tutoriels auxquels vous voudrez bien vous r\u00e9f\u00e9rer pour avoir des explications plus pouss\u00e9es que celles que je vais donner. R\u00e9f\u00e9rences S\u00e9curiser OpenSSH SSH - Comment tester et s\u00e9curiser son serveur ? OpenSSH Config File Examples Vous pouvez trouver plein d'autres r\u00e9f\u00e9rences en fran\u00e7ais ou anglais en utilisant votre moteur de recherche pr\u00e9f\u00e9r\u00e9. Cr\u00e9ation d'une clef personnalis\u00e9e Nous allons cr\u00e9er une clef sp\u00e9cifique \u00e0 notre mini serveur. Auparavant, nous allons v\u00e9rifier le hostname de notre machine. Si vous l'avez configur\u00e9 avec raspi-config , il y a de grandes chances que le r\u00e9sultat ne soit pas bon. Sous Debian, le hostname est compos\u00e9 de 2 parties situ\u00e9es dans 2 fichiers diff\u00e9rents. /etc/hosts (contient le nom complet, FQDN) /etc/hostname (ne contient que le petit nom de la machine, sans le domaine) Test du hostname (sur notre raspi) pi@piras:~ $ hostname -f piras.yojik.net pi@piras:~ $ hostname piras pi@piras:~ $ Le fichier /etc/hostname ne doit contenir que le nom de la machine, pas le domaine : ici, piras, et c'est ce que renvoie la commande hostname . pi@piras:~ $ cat /etc/hostname piras pi@piras:~ $ hostname -f renvoie le \"fqdn\", ou nom complet de la machine, ici, piras.yojik.net. La r\u00e9f\u00e9rence compl\u00e8te du nom se trouve dans le fichier /etc/hosts. pi@piras:~ $ cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 piras.yojik.net piras pi@piras:~ $ Pour l'instant, c'est l'adresse 127.0.1.1 qui est utilis\u00e9e comme r\u00e9f\u00e9rence du nom, mais nous changerons \u00e7a d\u00e8s que nous aurons configur\u00e9 une adresse IPV4 et IPV6 fixe. Cr\u00e9ation de notre clef personnalis\u00e9e (sur le desktop, pas sur le raspi!) Nous utiliserons la commande : sh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"clef SSH de l'utilisateur pi du Raspi\" -o : Sauvegarde votre cl\u00e9 dans le nouveau format openssh au lieu de l\u2019ancien format PEM -C : insertion d'un commentaire (ce que vous voulez, votre adresse \u00e9mail ...). -f : nom du fichier \u00e0 produire -a : le nombre de tours de la clef de d\u00e9rivation (plus il est \u00e9lev\u00e9, plus il est difficile de la craquer en force brute, mais aussi plus c'est lent) eric@aldebaran:~$ ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"eric@yojik.eu\" Generating public/private ed25519 key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/eric/.ssh/piras_ed25519 Your public key has been saved in /home/eric/.ssh/piras_ed25519.pub The key fingerprint is: SHA256:yyDsyczL9W1QTTn9d5o0hwZ5A0bdMnCJgK9cniCeR0c eric@yojik.eu The key's randomart image is: +--[ED25519 256]--+ | ..o=O.o | | . E.B.O .| | o o + * | | . . o = . = =| | o..=SB . o =o| | = ooo=.o o | | * ..o. | | . o . .. | | o ... | +----[SHA256]-----+ Si vous allez dans ./.ssh, vous trouverez ceci : eric@aldebaran:~/.ssh$ ls -l total 44 -rw------- 1 eric eric 751 7 avril 2011 id_dsa -rw-r--r-- 1 eric eric 604 7 avril 2011 id_dsa.pub -rw------- 1 eric eric 1766 1 avril 2013 id_rsa -rw-r--r-- 1 eric eric 396 1 avril 2013 id_rsa.pub -rw-r--r-- 1 eric eric 3728 29 nov. 12:20 known_hosts -rw------- 1 eric eric 444 11 d\u00e9c. 18:17 piras_ed25519 -rw-r--r-- 1 eric eric 95 11 d\u00e9c. 18:17 piras_ed25519.pub eric@aldebaran:~/.ssh$ Nous voyons les clefs priv\u00e9es et publiques que nous avons cr\u00e9\u00e9es. (ainsi que d'anciennes clefs ...) V\u00e9rifiez les permissions, mais normalement les commandes ci-dessus les attribuent comme attendu (voir plus bas). Copie de la clef sur le serveur Nous utiliserons la commande : ssh-copy-id eric@aldebaran:~$ ssh-copy-id -i ~/.ssh/piras_ed25519.pub pi@192.168.111.32 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: \"/home/eric/.ssh/piras_ed25519.pub\" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys pi@192.168.111.32's password: Number of key(s) added: 1 Now try logging into the machine, with: \"ssh 'pi@192.168.111.32'\" and check to make sure that only the key(s) you wanted were added. eric@aldebaran:~$ V\u00e9rifions la pr\u00e9sence de notre clef sur notre raspi, dans le fichier authorized_keys : pi@piras:~/.ssh $ cat authorized_keys ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAdDDO3ni4DHIxqfRaNZ4SBudrSlRoQjLm/fd2SSjxtM eric@yojik.eu pi@piras:~/.ssh $ C'est bon, elle est l\u00e0 ! Essai de connexion avec notre nouvelle clef eric@aldebaran:~$ ssh -i ~/.ssh/piras_ed25519 'pi@192.168.111.32' Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 18:46:55 2020 from 192.168.111.150 pi@piras:~ $ \u00e7a marche ... j'ai pr\u00e9cis\u00e9 la clef SSH \u00e0 utiliser avec l'option -i nom_de_la_clef . Configuration de ssh sur la machine de travail Je poss\u00e8de plusieurs clefs qui sont sp\u00e9cifiques \u00e0 certains serveurs (ceux dans ma cave, et ceux sur internet). Nous allons rajouter une configuration pour permettre la s\u00e9lection automatique de la bonne clef pour chaque serveur. Cela se fait dans le fichier ~/.ssh/config Le sch\u00e9ma \u00e0 utiliser est le suivant : eric@aldebaran:~$ cat ./.ssh/config Host piras piras.yojik.net HostName 192.168.111.32 IdentityFile ~/.ssh/piras_ed25519 User pi Host adara adara.yojik.eu HostName adara.yojik.eu IdentityFile ~/.ssh/id_rsa User ericadmin eric@aldebaran:~$ Cela me permet de me connecter avec la commande : ssh piras Voil\u00e0 \u00e0 quoi ressemble mon r\u00e9pertoire ~/.ssh : eric@aldebaran:~$ tree .ssh .ssh \u251c\u2500\u2500 adara \u2502 \u251c\u2500\u2500 adara_ed25519 \u2502 \u2514\u2500\u2500 adara_ed25519.pub \u251c\u2500\u2500 aijan \u2502 \u251c\u2500\u2500 aijan_ed25519 \u2502 \u2514\u2500\u2500 aijan_ed25519.pub \u251c\u2500\u2500 alya \u2502 \u251c\u2500\u2500 alya_ed25519 \u2502 \u2514\u2500\u2500 alya_ed25519.pub \u251c\u2500\u2500 atom \u2502 \u251c\u2500\u2500 atom_ed25519 \u2502 \u2514\u2500\u2500 atom_ed25519.pub \u251c\u2500\u2500 config \u251c\u2500\u2500 id_dsa \u251c\u2500\u2500 id_dsa.pub \u251c\u2500\u2500 id_ed25519 \u251c\u2500\u2500 id_ed25519.pub \u251c\u2500\u2500 id_rsa \u251c\u2500\u2500 id_rsa.pub \u251c\u2500\u2500 known_hosts \u251c\u2500\u2500 mynas2 \u2502 \u251c\u2500\u2500 mynas2_ed25519 \u2502 \u2514\u2500\u2500 mynas2_ed25519.pub \u251c\u2500\u2500 mynas3 \u2502 \u251c\u2500\u2500 mynas3_ed25519 \u2502 \u2514\u2500\u2500 mynas3_ed25519.pub \u251c\u2500\u2500 ns1 \u2502 \u251c\u2500\u2500 ns1_ed25519 \u2502 \u2514\u2500\u2500 ns1_ed25519.pub \u251c\u2500\u2500 ns2 \u2502 \u251c\u2500\u2500 ns2_ed25519 \u2502 \u2514\u2500\u2500 ns2_ed25519.pub \u251c\u2500\u2500 piras \u2502 \u251c\u2500\u2500 piras_ed25519 \u2502 \u2514\u2500\u2500 piras_ed25519.pub \u2514\u2500\u2500 polis \u251c\u2500\u2500 polis_ed25519 \u2514\u2500\u2500 polis_ed25519.pub J'ai mis l'adresse IP ; j'aurai pu mettre le nom FQDN du serveur, mais je le ferai une fois les adresses IP fix\u00e9es. Modifions les permissions pour qu'elles soient conformes \u00e0 ce que demande SSH. (en fait, les bonnes permissions \u00e9taient d\u00e9j\u00e0 appliqu\u00e9es par la commande ssh-keygen). Si vous organisez votre structure de r\u00e9pertoires comme ci-dessus, ajustez les permissions comme ceci : Si vous cr\u00e9ez un r\u00e9pertoire nomm\u00e9 ~/.ssh/piras ajustez les droits du r\u00e9pertoire comme suit : chmod 700 ~/.ssh/piras Et pour les clefs priv\u00e9es/publiques : chmod 600 ~/.ssh/config chmod 600 ~/.ssh/piras/piras_ed25519 chmod 600 ~/.ssh/piras/piras_ed25519.pub Test de connexion eric@aldebaran:~$ ssh piras Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 18:49:37 2020 from 192.168.111.150 pi@piras:~ $ \u00c7a marche ;) Am\u00e9lioration Nous allons modifier temporairement (et le re-modifierons une fois les adresses fix\u00e9es) notre fichier /etc/hosts sur notre machine de travail pour pouvoir utiliser la m\u00e9thode par nom plut\u00f4t que par adresse IP. Ajoutons la r\u00e9f\u00e9rence \u00e0 notre raspi : eric@aldebaran:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 aldebaran.yojik.net aldebaran 192.168.111.32 piras.yojik.net piras # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters eric@aldebaran:~$ Modification de ./.ssh/config : eric@aldebaran:~$ cat ./.ssh/config Host piras piras.yojik.net HostName piras.yojik.net IdentityFile ~/.ssh/piras_ed25519 User pi Host adara adara.yojik.eu HostName adara.yojik.eu IdentityFile ~/.ssh/id_rsa User ericadmin eric@aldebaran:~$ Test : eric@aldebaran:~$ ssh piras The authenticity of host 'piras.yojik.net (192.168.111.32)' can't be established. ECDSA key fingerprint is SHA256:DjB1teyxsYAZzGBV8BIXiG5+UAb3JU5SHp7vu/xArG8. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'piras.yojik.net' (ECDSA) to the list of known hosts. Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 19:17:50 2020 from 192.168.111.150 pi@piras:~ $ L'adresse de notre raspi a \u00e9t\u00e9 ajout\u00e9e au fichier ./.ssh/known_hosts Modification du fichier /etc/ssh/sshd_config Nous allons modifier ce fichier pour plus de s\u00e9curit\u00e9 : pas de connexion de l'utilisateur root connexion uniquement par clef (pas par login/mot de passe) suppression du support des protocoles non s\u00fbrs autorisation de connexion sur liste blanche connexion en IPV4 et IPV6 Tout d'abord, sauvegarde du r\u00e9pertoire /etc/ssh : pi@raspberrypi:/etc $ sudo cp -R ssh ssh.orig pi@raspberrypi:/etc $ Ensuite, cr\u00e9ation du nouveau fichier (apr\u00e8s installation de vim, mais vous pouvez prendre l'\u00e9diteur de votre choix, nano par exemple qui est install\u00e9 par d\u00e9faut): Pour installer vim, tapez : sudo apt install vim Voil\u00e0 une copie du fichier de conf du site troxyworld dont j'ai d\u00e9j\u00e0 donn\u00e9 les r\u00e9f\u00e9rences : # Interface & Port Port 61022 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: HostKey /etc/ssh/ssh_host_ed25519_key Protocol 2 SyslogFacility AUTHPRIV LogLevel VERBOSE # Authentication restriction LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 PubkeyAuthentication yes AllowUsers hmichael AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 HostbasedAuthentication no IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! PermitEmptyPasswords no PasswordAuthentication no # Change to no to disable s/key passwords ChallengeResponseAuthentication no UsePAM yes AllowAgentForwarding no AllowTcpForwarding no GatewayPorts no X11Forwarding no PermitTTY yes PermitUserEnvironment no PrintMotd no PrintLastLog no #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no UseDNS yes PidFile /var/run/sshd.pid MaxStartups 10:30:100 PermitTunnel no #ChrootDirectory none VersionAddendum none # no default banner path Banner none # Accept locale-related environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server Et voici une version par Synthic : # Utilisation de la version 2 du protocole SSH Protocol 2 # Utilisation du port 22. Il est possible de le modifier Port 22 # Interdit \u00e0 root de s'identifier PermitRootLogin no PermitEmptyPasswords no # On indique ici la liste des utilisateurs ayant la permission d'utiliser SSH AllowUsers utilisateur # Nombre d'essais avant fermeture de la connexion MaxAuthTries 3 UsePAM no # Authentification par cl\u00e9s PubkeyAuthentication yes # Lieux o\u00f9 sont stock\u00e9es les cl\u00e9s publiques --> /home/user/.ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication yes # D\u00e9sactivation de l'authentification par mot de passe PasswordAuthentication no IgnoreRhosts yes HostbasedAuthentication no AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server PrintMotd no Ciphers aes256-ctr,aes192-ctr,aes128-ctr X11Forwarding no Voil\u00e0 mon fichier de configuration, \u00e0 adapter suivant vos pr\u00e9f\u00e9rences (surtout n'oubliez pas d'ajuster le user dans l'option AllowUsers \u00e0 votre cas particulier) Pour ma part, je vais garder le port 22 ; je le changerai peut-\u00eatre plus tard. Protocol 2 Port 22 Blocage de root PermitRootLogin no Pas de mot de passe vide PermitEmptyPasswords no Seul l'utilisateur pi est autoris\u00e9 AllowUsers pi Connexion uniquement pas clef PubkeyAuthentication yes Modification et limite des tentatives de connexion LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 Les fichiers de clef autoris\u00e9s AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 Voici la copie du fichier complet : pi@raspberrypi:~ $ cat /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. Port 22 #AddressFamily any # A d\u00e9commenter apr\u00e8s test sur sur site d'audit, car nos r\u00e9glages ne permettent # que de se connecter \u00e0 partir de notre r\u00e9seau local # Si vous voulez que votre serveur soit accessible \u00e0 partir de l'ext\u00e9rieur # gardez les valeurs par d\u00e9faut (ou les options comment\u00e9es) #ListenAddress 0.0.0.0 #ListenAddress :: # Nouveaux r\u00e9glages # ListenAddress 192.168.111.0 # ListenAddress 2a01:e0a:d0:3c20::0 # On ne permet que la connexion avec une clef forte #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging # Modification du niveau de logging pour plus de d\u00e9tails #SyslogFacility AUTH SysLogFacility AUTHPRIV #LogLevel INFO LogLevel VERBOSE # Authentication: # C'est ici que l'on va ne permettre que l'acc\u00e8s par clef partag\u00e9e # et interdire l'acc\u00e8s par mot de passe # De plus on configure le nombre d'essais et le d\u00e9lai de connexion # \u00e0 des valeurs plus courtes LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 PubkeyAuthentication yes # Ajout d'une liste blanche d'utilisateurs autoris\u00e9s \u00e0 se connecter # ici, seulement l'utilisateur pi AllowUsers pi # Expect .ssh/authorized_keys2 to be disregarded by default in future. AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! # Interdiction de connexion pas login/mot de passe PasswordAuthentication no # Interdiction de mot de passe vides PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of \"PermitRootLogin without-password\". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. UsePAM yes # On va interdire le forwarding AllowAgentForwarding no AllowTcpForwarding no GatewayPorts no X11Forwarding no #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes # Pas de message d'acceuil de SSHD PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 # Utilisation du DNS UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path Banner none # Allow client to pass locale environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/lib/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server pi@raspberrypi:~ $ On red\u00e9marre sshd sudo systemctl restart sshd.service On teste si le service a bien red\u00e9marr\u00e9 sans erreurs : pi@raspberrypi:~ $ sudo systemctl status sshd.service \u25cf ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-02-14 14:59:47 CET; 7s ago Docs: man:sshd(8) man:sshd_config(5) Process: 523 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 524 (sshd) Tasks: 1 (limit: 269) CGroup: /system.slice/ssh.service \u2514\u2500524 /usr/sbin/sshd -D f\u00e9vr. 14 14:59:46 raspberrypi systemd[1]: Starting OpenBSD Secure Shell server... f\u00e9vr. 14 14:59:46 raspberrypi sshd[524]: Server listening on 0.0.0.0 port 22. f\u00e9vr. 14 14:59:47 raspberrypi sshd[524]: Server listening on :: port 22. f\u00e9vr. 14 14:59:47 raspberrypi systemd[1]: Started OpenBSD Secure Shell server. pi@raspberrypi:~ $ C'est bon. Essai de connexion : eric@aldebaran:~$ ssh piras The authenticity of host 'piras.yojik.net (192.168.111.170)' can't be established. ED25519 key fingerprint is SHA256:NW70QB3uNQ1cnrTQyfXG1Lu1iTDubEv6Oak4PK+DR1k. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'piras.yojik.net,192.168.111.170' (ED25519) to the list of known hosts. Enter passphrase for key '/home/eric/.ssh/piras/piras_ed25519': Linux raspberrypi 5.10.11+ #1399 Thu Jan 28 12:02:28 GMT 2021 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Feb 14 15:02:55 2021 from 192.168.111.150 pi@raspberrypi:~ $ C'est bon. Test sur le site d'audit : Bien, apr\u00e8s avoir effac\u00e9 toutes les donn\u00e9es personnelles de mon navigateur (donn\u00e9es qui entra\u00eenent une erreur \u00abThe csrf token is invalid \u00bb), le test revient toujours avec une mauvaise note. D'o\u00f9 la suite. Les instructions pour am\u00e9liorer sont \u00e9galement sur le site SSH-Audit.com recommendations On va s\u00e9curiser les \u00e9changes en jouant sur 3 options suppl\u00e9mentaires : Ciphers : Le chiffrement utilis\u00e9. KexAlgorithms : Les algorithmes utilis\u00e9s pour l\u2019\u00e9change de cl\u00e9s. MACs : Message Authentication code, c\u2019est le code qui accompagnent les donn\u00e9es \u00e9chang\u00e9es dans le but d\u2019assurer leur int\u00e9grit\u00e9 pour \u00eatre certain qu\u2019elles n\u2019ont subies aucune alt\u00e9ration pendant/apr\u00e8s la transmission. Voil\u00e0 les \u00e9tapes \u00e0 suivre (reprises quasi texto des sites d\u00e9j\u00e0 cit\u00e9s) : R\u00e9g\u00e9n\u00e9ration de la cl\u00e9 ED25519 du serveur : sudo rm -f /etc/ssh/ssh_host_* sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N \"\" Retrait des moduli Diffie-Hellman faible : sudo awk '$5 >= 3071' /etc/ssh/moduli > /home/pi/moduli.safe sudo mv -f /home/pi/moduli.safe /etc/ssh/moduli D\u00e9sactivation des cl\u00e9s DSA/ECDSA & RSA si ce n\u2019est pas d\u00e9j\u00e0 fait : sudo sed -i 's/^HostKey \\/etc\\/ssh\\/ssh_host_\\(dsa\\|ecdsa\\|rsa\\)_key$/\\#HostKey \\/etc\\/ssh\\/ssh_host_\\1_key/g' /etc/ssh/sshd_config Restriction des ciphers, cl\u00e9s d\u2019\u00e9change et des codes d\u2019authentification : Ajoutez ceci \u00e0 la fin du fichier /etc/sshd_config: KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com Red\u00e9marrage de sshd sudo systemctl restart sshd.service Test sur le site ssh audit Tout est OK ... nous sommes pass\u00e9s d'une note F \u00e0 A+ .","title":"S\u00e9curisation SSH"},{"location":"S%C3%A9curisation-SSH/#securisation-ssh","text":"Je vais baser cette partie sur plusieurs tutoriels auxquels vous voudrez bien vous r\u00e9f\u00e9rer pour avoir des explications plus pouss\u00e9es que celles que je vais donner.","title":"S\u00e9curisation SSH"},{"location":"S%C3%A9curisation-SSH/#references","text":"S\u00e9curiser OpenSSH SSH - Comment tester et s\u00e9curiser son serveur ? OpenSSH Config File Examples Vous pouvez trouver plein d'autres r\u00e9f\u00e9rences en fran\u00e7ais ou anglais en utilisant votre moteur de recherche pr\u00e9f\u00e9r\u00e9.","title":"R\u00e9f\u00e9rences"},{"location":"S%C3%A9curisation-SSH/#creation-dune-clef-personnalisee","text":"Nous allons cr\u00e9er une clef sp\u00e9cifique \u00e0 notre mini serveur. Auparavant, nous allons v\u00e9rifier le hostname de notre machine. Si vous l'avez configur\u00e9 avec raspi-config , il y a de grandes chances que le r\u00e9sultat ne soit pas bon. Sous Debian, le hostname est compos\u00e9 de 2 parties situ\u00e9es dans 2 fichiers diff\u00e9rents. /etc/hosts (contient le nom complet, FQDN) /etc/hostname (ne contient que le petit nom de la machine, sans le domaine)","title":"Cr\u00e9ation d'une clef personnalis\u00e9e"},{"location":"S%C3%A9curisation-SSH/#test-du-hostname-sur-notre-raspi","text":"pi@piras:~ $ hostname -f piras.yojik.net pi@piras:~ $ hostname piras pi@piras:~ $ Le fichier /etc/hostname ne doit contenir que le nom de la machine, pas le domaine : ici, piras, et c'est ce que renvoie la commande hostname . pi@piras:~ $ cat /etc/hostname piras pi@piras:~ $ hostname -f renvoie le \"fqdn\", ou nom complet de la machine, ici, piras.yojik.net. La r\u00e9f\u00e9rence compl\u00e8te du nom se trouve dans le fichier /etc/hosts. pi@piras:~ $ cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 piras.yojik.net piras pi@piras:~ $ Pour l'instant, c'est l'adresse 127.0.1.1 qui est utilis\u00e9e comme r\u00e9f\u00e9rence du nom, mais nous changerons \u00e7a d\u00e8s que nous aurons configur\u00e9 une adresse IPV4 et IPV6 fixe.","title":"Test du hostname (sur notre raspi)"},{"location":"S%C3%A9curisation-SSH/#creation-de-notre-clef-personnalisee-sur-le-desktop-pas-sur-le-raspi","text":"Nous utiliserons la commande : sh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"clef SSH de l'utilisateur pi du Raspi\" -o : Sauvegarde votre cl\u00e9 dans le nouveau format openssh au lieu de l\u2019ancien format PEM -C : insertion d'un commentaire (ce que vous voulez, votre adresse \u00e9mail ...). -f : nom du fichier \u00e0 produire -a : le nombre de tours de la clef de d\u00e9rivation (plus il est \u00e9lev\u00e9, plus il est difficile de la craquer en force brute, mais aussi plus c'est lent) eric@aldebaran:~$ ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C \"eric@yojik.eu\" Generating public/private ed25519 key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/eric/.ssh/piras_ed25519 Your public key has been saved in /home/eric/.ssh/piras_ed25519.pub The key fingerprint is: SHA256:yyDsyczL9W1QTTn9d5o0hwZ5A0bdMnCJgK9cniCeR0c eric@yojik.eu The key's randomart image is: +--[ED25519 256]--+ | ..o=O.o | | . E.B.O .| | o o + * | | . . o = . = =| | o..=SB . o =o| | = ooo=.o o | | * ..o. | | . o . .. | | o ... | +----[SHA256]-----+ Si vous allez dans ./.ssh, vous trouverez ceci : eric@aldebaran:~/.ssh$ ls -l total 44 -rw------- 1 eric eric 751 7 avril 2011 id_dsa -rw-r--r-- 1 eric eric 604 7 avril 2011 id_dsa.pub -rw------- 1 eric eric 1766 1 avril 2013 id_rsa -rw-r--r-- 1 eric eric 396 1 avril 2013 id_rsa.pub -rw-r--r-- 1 eric eric 3728 29 nov. 12:20 known_hosts -rw------- 1 eric eric 444 11 d\u00e9c. 18:17 piras_ed25519 -rw-r--r-- 1 eric eric 95 11 d\u00e9c. 18:17 piras_ed25519.pub eric@aldebaran:~/.ssh$ Nous voyons les clefs priv\u00e9es et publiques que nous avons cr\u00e9\u00e9es. (ainsi que d'anciennes clefs ...) V\u00e9rifiez les permissions, mais normalement les commandes ci-dessus les attribuent comme attendu (voir plus bas).","title":"Cr\u00e9ation de notre clef personnalis\u00e9e (sur le desktop, pas sur le raspi!)"},{"location":"S%C3%A9curisation-SSH/#copie-de-la-clef-sur-le-serveur","text":"Nous utiliserons la commande : ssh-copy-id eric@aldebaran:~$ ssh-copy-id -i ~/.ssh/piras_ed25519.pub pi@192.168.111.32 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: \"/home/eric/.ssh/piras_ed25519.pub\" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys pi@192.168.111.32's password: Number of key(s) added: 1 Now try logging into the machine, with: \"ssh 'pi@192.168.111.32'\" and check to make sure that only the key(s) you wanted were added. eric@aldebaran:~$ V\u00e9rifions la pr\u00e9sence de notre clef sur notre raspi, dans le fichier authorized_keys : pi@piras:~/.ssh $ cat authorized_keys ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAdDDO3ni4DHIxqfRaNZ4SBudrSlRoQjLm/fd2SSjxtM eric@yojik.eu pi@piras:~/.ssh $ C'est bon, elle est l\u00e0 !","title":"Copie de la clef sur le serveur"},{"location":"S%C3%A9curisation-SSH/#essai-de-connexion-avec-notre-nouvelle-clef","text":"eric@aldebaran:~$ ssh -i ~/.ssh/piras_ed25519 'pi@192.168.111.32' Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 18:46:55 2020 from 192.168.111.150 pi@piras:~ $ \u00e7a marche ... j'ai pr\u00e9cis\u00e9 la clef SSH \u00e0 utiliser avec l'option -i nom_de_la_clef .","title":"Essai de connexion avec notre nouvelle clef"},{"location":"S%C3%A9curisation-SSH/#configuration-de-ssh-sur-la-machine-de-travail","text":"Je poss\u00e8de plusieurs clefs qui sont sp\u00e9cifiques \u00e0 certains serveurs (ceux dans ma cave, et ceux sur internet). Nous allons rajouter une configuration pour permettre la s\u00e9lection automatique de la bonne clef pour chaque serveur. Cela se fait dans le fichier ~/.ssh/config Le sch\u00e9ma \u00e0 utiliser est le suivant : eric@aldebaran:~$ cat ./.ssh/config Host piras piras.yojik.net HostName 192.168.111.32 IdentityFile ~/.ssh/piras_ed25519 User pi Host adara adara.yojik.eu HostName adara.yojik.eu IdentityFile ~/.ssh/id_rsa User ericadmin eric@aldebaran:~$ Cela me permet de me connecter avec la commande : ssh piras Voil\u00e0 \u00e0 quoi ressemble mon r\u00e9pertoire ~/.ssh : eric@aldebaran:~$ tree .ssh .ssh \u251c\u2500\u2500 adara \u2502 \u251c\u2500\u2500 adara_ed25519 \u2502 \u2514\u2500\u2500 adara_ed25519.pub \u251c\u2500\u2500 aijan \u2502 \u251c\u2500\u2500 aijan_ed25519 \u2502 \u2514\u2500\u2500 aijan_ed25519.pub \u251c\u2500\u2500 alya \u2502 \u251c\u2500\u2500 alya_ed25519 \u2502 \u2514\u2500\u2500 alya_ed25519.pub \u251c\u2500\u2500 atom \u2502 \u251c\u2500\u2500 atom_ed25519 \u2502 \u2514\u2500\u2500 atom_ed25519.pub \u251c\u2500\u2500 config \u251c\u2500\u2500 id_dsa \u251c\u2500\u2500 id_dsa.pub \u251c\u2500\u2500 id_ed25519 \u251c\u2500\u2500 id_ed25519.pub \u251c\u2500\u2500 id_rsa \u251c\u2500\u2500 id_rsa.pub \u251c\u2500\u2500 known_hosts \u251c\u2500\u2500 mynas2 \u2502 \u251c\u2500\u2500 mynas2_ed25519 \u2502 \u2514\u2500\u2500 mynas2_ed25519.pub \u251c\u2500\u2500 mynas3 \u2502 \u251c\u2500\u2500 mynas3_ed25519 \u2502 \u2514\u2500\u2500 mynas3_ed25519.pub \u251c\u2500\u2500 ns1 \u2502 \u251c\u2500\u2500 ns1_ed25519 \u2502 \u2514\u2500\u2500 ns1_ed25519.pub \u251c\u2500\u2500 ns2 \u2502 \u251c\u2500\u2500 ns2_ed25519 \u2502 \u2514\u2500\u2500 ns2_ed25519.pub \u251c\u2500\u2500 piras \u2502 \u251c\u2500\u2500 piras_ed25519 \u2502 \u2514\u2500\u2500 piras_ed25519.pub \u2514\u2500\u2500 polis \u251c\u2500\u2500 polis_ed25519 \u2514\u2500\u2500 polis_ed25519.pub J'ai mis l'adresse IP ; j'aurai pu mettre le nom FQDN du serveur, mais je le ferai une fois les adresses IP fix\u00e9es. Modifions les permissions pour qu'elles soient conformes \u00e0 ce que demande SSH. (en fait, les bonnes permissions \u00e9taient d\u00e9j\u00e0 appliqu\u00e9es par la commande ssh-keygen). Si vous organisez votre structure de r\u00e9pertoires comme ci-dessus, ajustez les permissions comme ceci : Si vous cr\u00e9ez un r\u00e9pertoire nomm\u00e9 ~/.ssh/piras ajustez les droits du r\u00e9pertoire comme suit : chmod 700 ~/.ssh/piras Et pour les clefs priv\u00e9es/publiques : chmod 600 ~/.ssh/config chmod 600 ~/.ssh/piras/piras_ed25519 chmod 600 ~/.ssh/piras/piras_ed25519.pub","title":"Configuration de ssh sur la machine de travail"},{"location":"S%C3%A9curisation-SSH/#test-de-connexion","text":"eric@aldebaran:~$ ssh piras Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 18:49:37 2020 from 192.168.111.150 pi@piras:~ $ \u00c7a marche ;)","title":"Test de connexion"},{"location":"S%C3%A9curisation-SSH/#amelioration","text":"Nous allons modifier temporairement (et le re-modifierons une fois les adresses fix\u00e9es) notre fichier /etc/hosts sur notre machine de travail pour pouvoir utiliser la m\u00e9thode par nom plut\u00f4t que par adresse IP. Ajoutons la r\u00e9f\u00e9rence \u00e0 notre raspi : eric@aldebaran:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 aldebaran.yojik.net aldebaran 192.168.111.32 piras.yojik.net piras # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters eric@aldebaran:~$ Modification de ./.ssh/config : eric@aldebaran:~$ cat ./.ssh/config Host piras piras.yojik.net HostName piras.yojik.net IdentityFile ~/.ssh/piras_ed25519 User pi Host adara adara.yojik.eu HostName adara.yojik.eu IdentityFile ~/.ssh/id_rsa User ericadmin eric@aldebaran:~$ Test : eric@aldebaran:~$ ssh piras The authenticity of host 'piras.yojik.net (192.168.111.32)' can't be established. ECDSA key fingerprint is SHA256:DjB1teyxsYAZzGBV8BIXiG5+UAb3JU5SHp7vu/xArG8. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'piras.yojik.net' (ECDSA) to the list of known hosts. Linux piras 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Dec 11 19:17:50 2020 from 192.168.111.150 pi@piras:~ $ L'adresse de notre raspi a \u00e9t\u00e9 ajout\u00e9e au fichier ./.ssh/known_hosts","title":"Am\u00e9lioration"},{"location":"S%C3%A9curisation-SSH/#modification-du-fichier-etcsshsshd_config","text":"Nous allons modifier ce fichier pour plus de s\u00e9curit\u00e9 : pas de connexion de l'utilisateur root connexion uniquement par clef (pas par login/mot de passe) suppression du support des protocoles non s\u00fbrs autorisation de connexion sur liste blanche connexion en IPV4 et IPV6 Tout d'abord, sauvegarde du r\u00e9pertoire /etc/ssh : pi@raspberrypi:/etc $ sudo cp -R ssh ssh.orig pi@raspberrypi:/etc $ Ensuite, cr\u00e9ation du nouveau fichier (apr\u00e8s installation de vim, mais vous pouvez prendre l'\u00e9diteur de votre choix, nano par exemple qui est install\u00e9 par d\u00e9faut): Pour installer vim, tapez : sudo apt install vim Voil\u00e0 une copie du fichier de conf du site troxyworld dont j'ai d\u00e9j\u00e0 donn\u00e9 les r\u00e9f\u00e9rences : # Interface & Port Port 61022 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: HostKey /etc/ssh/ssh_host_ed25519_key Protocol 2 SyslogFacility AUTHPRIV LogLevel VERBOSE # Authentication restriction LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 PubkeyAuthentication yes AllowUsers hmichael AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 HostbasedAuthentication no IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! PermitEmptyPasswords no PasswordAuthentication no # Change to no to disable s/key passwords ChallengeResponseAuthentication no UsePAM yes AllowAgentForwarding no AllowTcpForwarding no GatewayPorts no X11Forwarding no PermitTTY yes PermitUserEnvironment no PrintMotd no PrintLastLog no #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no UseDNS yes PidFile /var/run/sshd.pid MaxStartups 10:30:100 PermitTunnel no #ChrootDirectory none VersionAddendum none # no default banner path Banner none # Accept locale-related environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server Et voici une version par Synthic : # Utilisation de la version 2 du protocole SSH Protocol 2 # Utilisation du port 22. Il est possible de le modifier Port 22 # Interdit \u00e0 root de s'identifier PermitRootLogin no PermitEmptyPasswords no # On indique ici la liste des utilisateurs ayant la permission d'utiliser SSH AllowUsers utilisateur # Nombre d'essais avant fermeture de la connexion MaxAuthTries 3 UsePAM no # Authentification par cl\u00e9s PubkeyAuthentication yes # Lieux o\u00f9 sont stock\u00e9es les cl\u00e9s publiques --> /home/user/.ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication yes # D\u00e9sactivation de l'authentification par mot de passe PasswordAuthentication no IgnoreRhosts yes HostbasedAuthentication no AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server PrintMotd no Ciphers aes256-ctr,aes192-ctr,aes128-ctr X11Forwarding no Voil\u00e0 mon fichier de configuration, \u00e0 adapter suivant vos pr\u00e9f\u00e9rences (surtout n'oubliez pas d'ajuster le user dans l'option AllowUsers \u00e0 votre cas particulier) Pour ma part, je vais garder le port 22 ; je le changerai peut-\u00eatre plus tard. Protocol 2 Port 22 Blocage de root PermitRootLogin no Pas de mot de passe vide PermitEmptyPasswords no Seul l'utilisateur pi est autoris\u00e9 AllowUsers pi Connexion uniquement pas clef PubkeyAuthentication yes Modification et limite des tentatives de connexion LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 Les fichiers de clef autoris\u00e9s AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 Voici la copie du fichier complet : pi@raspberrypi:~ $ cat /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. Port 22 #AddressFamily any # A d\u00e9commenter apr\u00e8s test sur sur site d'audit, car nos r\u00e9glages ne permettent # que de se connecter \u00e0 partir de notre r\u00e9seau local # Si vous voulez que votre serveur soit accessible \u00e0 partir de l'ext\u00e9rieur # gardez les valeurs par d\u00e9faut (ou les options comment\u00e9es) #ListenAddress 0.0.0.0 #ListenAddress :: # Nouveaux r\u00e9glages # ListenAddress 192.168.111.0 # ListenAddress 2a01:e0a:d0:3c20::0 # On ne permet que la connexion avec une clef forte #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging # Modification du niveau de logging pour plus de d\u00e9tails #SyslogFacility AUTH SysLogFacility AUTHPRIV #LogLevel INFO LogLevel VERBOSE # Authentication: # C'est ici que l'on va ne permettre que l'acc\u00e8s par clef partag\u00e9e # et interdire l'acc\u00e8s par mot de passe # De plus on configure le nombre d'essais et le d\u00e9lai de connexion # \u00e0 des valeurs plus courtes LoginGraceTime 30s PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 5 PubkeyAuthentication yes # Ajout d'une liste blanche d'utilisateurs autoris\u00e9s \u00e0 se connecter # ici, seulement l'utilisateur pi AllowUsers pi # Expect .ssh/authorized_keys2 to be disregarded by default in future. AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! # Interdiction de connexion pas login/mot de passe PasswordAuthentication no # Interdiction de mot de passe vides PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of \"PermitRootLogin without-password\". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. UsePAM yes # On va interdire le forwarding AllowAgentForwarding no AllowTcpForwarding no GatewayPorts no X11Forwarding no #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes # Pas de message d'acceuil de SSHD PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 # Utilisation du DNS UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path Banner none # Allow client to pass locale environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/lib/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server pi@raspberrypi:~ $ On red\u00e9marre sshd sudo systemctl restart sshd.service On teste si le service a bien red\u00e9marr\u00e9 sans erreurs : pi@raspberrypi:~ $ sudo systemctl status sshd.service \u25cf ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-02-14 14:59:47 CET; 7s ago Docs: man:sshd(8) man:sshd_config(5) Process: 523 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 524 (sshd) Tasks: 1 (limit: 269) CGroup: /system.slice/ssh.service \u2514\u2500524 /usr/sbin/sshd -D f\u00e9vr. 14 14:59:46 raspberrypi systemd[1]: Starting OpenBSD Secure Shell server... f\u00e9vr. 14 14:59:46 raspberrypi sshd[524]: Server listening on 0.0.0.0 port 22. f\u00e9vr. 14 14:59:47 raspberrypi sshd[524]: Server listening on :: port 22. f\u00e9vr. 14 14:59:47 raspberrypi systemd[1]: Started OpenBSD Secure Shell server. pi@raspberrypi:~ $ C'est bon. Essai de connexion : eric@aldebaran:~$ ssh piras The authenticity of host 'piras.yojik.net (192.168.111.170)' can't be established. ED25519 key fingerprint is SHA256:NW70QB3uNQ1cnrTQyfXG1Lu1iTDubEv6Oak4PK+DR1k. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'piras.yojik.net,192.168.111.170' (ED25519) to the list of known hosts. Enter passphrase for key '/home/eric/.ssh/piras/piras_ed25519': Linux raspberrypi 5.10.11+ #1399 Thu Jan 28 12:02:28 GMT 2021 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Feb 14 15:02:55 2021 from 192.168.111.150 pi@raspberrypi:~ $ C'est bon. Test sur le site d'audit : Bien, apr\u00e8s avoir effac\u00e9 toutes les donn\u00e9es personnelles de mon navigateur (donn\u00e9es qui entra\u00eenent une erreur \u00abThe csrf token is invalid \u00bb), le test revient toujours avec une mauvaise note. D'o\u00f9 la suite. Les instructions pour am\u00e9liorer sont \u00e9galement sur le site SSH-Audit.com recommendations On va s\u00e9curiser les \u00e9changes en jouant sur 3 options suppl\u00e9mentaires : Ciphers : Le chiffrement utilis\u00e9. KexAlgorithms : Les algorithmes utilis\u00e9s pour l\u2019\u00e9change de cl\u00e9s. MACs : Message Authentication code, c\u2019est le code qui accompagnent les donn\u00e9es \u00e9chang\u00e9es dans le but d\u2019assurer leur int\u00e9grit\u00e9 pour \u00eatre certain qu\u2019elles n\u2019ont subies aucune alt\u00e9ration pendant/apr\u00e8s la transmission. Voil\u00e0 les \u00e9tapes \u00e0 suivre (reprises quasi texto des sites d\u00e9j\u00e0 cit\u00e9s) : R\u00e9g\u00e9n\u00e9ration de la cl\u00e9 ED25519 du serveur : sudo rm -f /etc/ssh/ssh_host_* sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N \"\" Retrait des moduli Diffie-Hellman faible : sudo awk '$5 >= 3071' /etc/ssh/moduli > /home/pi/moduli.safe sudo mv -f /home/pi/moduli.safe /etc/ssh/moduli D\u00e9sactivation des cl\u00e9s DSA/ECDSA & RSA si ce n\u2019est pas d\u00e9j\u00e0 fait : sudo sed -i 's/^HostKey \\/etc\\/ssh\\/ssh_host_\\(dsa\\|ecdsa\\|rsa\\)_key$/\\#HostKey \\/etc\\/ssh\\/ssh_host_\\1_key/g' /etc/ssh/sshd_config Restriction des ciphers, cl\u00e9s d\u2019\u00e9change et des codes d\u2019authentification : Ajoutez ceci \u00e0 la fin du fichier /etc/sshd_config: KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com Red\u00e9marrage de sshd sudo systemctl restart sshd.service","title":"Modification du fichier /etc/ssh/sshd_config"},{"location":"S%C3%A9curisation-SSH/#test-sur-le-site-ssh-audit","text":"Tout est OK ... nous sommes pass\u00e9s d'une note F \u00e0 A+ .","title":"Test sur le site ssh audit"},{"location":"tutoraspi/","text":"Installation d'un RaspberryPi Introduction Je vais vous montrer comment j'installe mon/mes RaspberryPi. Rien de bien original, cela a \u00e9t\u00e9 trait\u00e9 dans de nombreux tutoriels. C'est une mani\u00e8re pour moi d'\u00e9tablir un protocole d'installation, en assurant une s\u00e9curit\u00e9 correcte de mon mini-serveur. Je suis en possession de 2 raspis, un mod\u00e8le 2B (que j'avais attendu 6 mois il y a des ann\u00e9es lors du lancement) et un r\u00e9cent Raspi 3B avec wifi et bluetooth. Je vais installer sur le premier \"Home-assistant\", sans clavier ni \u00e9cran ni souris et avec une IP fixe: il sera dans la baie informatique. Le second \u00e9quip\u00e9 de l'\u00e9cran 7\" officiel, dans un boitier ad\u00e9quat et esth\u00e9tique servira comme console de commande de l'\u00e9clairage, et d'affichage m\u00e9t\u00e9o (j'ai install\u00e9 une station m\u00e9t\u00e9o \"Netamo\" que j'ajouterai \u00e0 Home-assistant.) Oui, ils sont un peu \u00abpoussi\u00e9reux \u00bb ... En annexe, je pr\u00e9senterai une autre fa\u00e7on de pr\u00e9parer l'installation de notre Raspi qui permettra d\u00e8s le d\u00e9part d'avoir notre r\u00e9seau configur\u00e9, ainsi que le hostname et l'autorisation de connexion SSH.","title":"Pr\u00e9sentation"},{"location":"tutoraspi/#installation-dun-raspberrypi","text":"","title":"Installation d'un RaspberryPi"},{"location":"tutoraspi/#introduction","text":"Je vais vous montrer comment j'installe mon/mes RaspberryPi. Rien de bien original, cela a \u00e9t\u00e9 trait\u00e9 dans de nombreux tutoriels. C'est une mani\u00e8re pour moi d'\u00e9tablir un protocole d'installation, en assurant une s\u00e9curit\u00e9 correcte de mon mini-serveur. Je suis en possession de 2 raspis, un mod\u00e8le 2B (que j'avais attendu 6 mois il y a des ann\u00e9es lors du lancement) et un r\u00e9cent Raspi 3B avec wifi et bluetooth. Je vais installer sur le premier \"Home-assistant\", sans clavier ni \u00e9cran ni souris et avec une IP fixe: il sera dans la baie informatique. Le second \u00e9quip\u00e9 de l'\u00e9cran 7\" officiel, dans un boitier ad\u00e9quat et esth\u00e9tique servira comme console de commande de l'\u00e9clairage, et d'affichage m\u00e9t\u00e9o (j'ai install\u00e9 une station m\u00e9t\u00e9o \"Netamo\" que j'ajouterai \u00e0 Home-assistant.) Oui, ils sont un peu \u00abpoussi\u00e9reux \u00bb ... En annexe, je pr\u00e9senterai une autre fa\u00e7on de pr\u00e9parer l'installation de notre Raspi qui permettra d\u00e8s le d\u00e9part d'avoir notre r\u00e9seau configur\u00e9, ainsi que le hostname et l'autorisation de connexion SSH.","title":"Introduction"}]}