123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- <!DOCTYPE html>
- <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
- <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-
-
- <link rel="shortcut icon" href="../../../img/favicon.ico">
- <title>Sécurisation SSH - Les Tutoriels du Yojik</title>
- <link rel="stylesheet" href="../../../css/theme.css" />
- <link rel="stylesheet" href="../../../css/theme_extra.css" />
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" />
-
- <script>
- // Current page data
- var mkdocs_page_name = "S\u00e9curisation SSH";
- var mkdocs_page_input_path = "Tutoriels/tutoraspi/S\u00e9curisation-SSH.md";
- var mkdocs_page_url = null;
- </script>
-
- <script src="../../../js/jquery-2.1.1.min.js" defer></script>
- <script src="../../../js/modernizr-2.8.3.min.js" defer></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
- <script>hljs.initHighlightingOnLoad();</script>
-
- </head>
- <body class="wy-body-for-nav" role="document">
- <div class="wy-grid-for-nav">
-
- <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
- <div class="wy-side-scroll">
- <div class="wy-side-nav-search">
- <a href="../../.." class="icon icon-home"> Les Tutoriels du Yojik</a>
- <div role="search">
- <form id ="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
- <input type="text" name="q" placeholder="Search docs" title="Type search term here" />
- </form>
- </div>
- </div>
- <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
- <p class="caption"><span class="caption-text">Home</span></p>
- <ul>
- <li class="toctree-l1"><a class="reference internal" href="../../..">Page d'accueil</a>
- </li>
- </ul>
- <p class="caption"><span class="caption-text">Tutoriels</span></p>
- <ul class="current">
- <li class="toctree-l1"><a class="reference internal" href="../../tutos/">Introduction</a>
- </li>
- <li class="toctree-l1"><a class="reference internal" href="#">Installation d'un serveur sécurisé, version Debian/Stretch (obsolète)</a>
- <ul>
- <li class="toctree-l2"><a class="reference internal" href="../../tutostretch/tutostretch/">Présentation</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="#">Installation</a>
- <ul>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-de-base/">Installation du système de base</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/ovh/">Démarrage sur serveur OVH</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Premi%C3%A8re-Etape-S%C3%A9curisation/">Première étapes de sécurisation du serveur</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Configuration-R%C3%A9seau/">Configuration du réseau</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Serveur-Temps/">Installation d'un serveur de temps</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Parre-Feu/">Installation d'un pare-feu</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Fail2ban/">Contrer les attaques de brute-force avec fail2ban</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Serveur-Courrier-Basique/">Installation d'un serveur de courrier basique</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Serveur-DNS/">Installation du serveur DNS</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Serveur-Web/">Installation d'un serveur web</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Dovecot-Authentification/">Installation de dovecot et de l'authentification</a>
- </li>
- <li class="toctree-l3"><a class="" href="../../tutostretch/Installation-Certificats-Letsencrypt.md)">Installation des certificats letsencrypt</a>
- </li>
- <li class="toctree-l3"><a class="" href="../../tutostretch/courrier-SPF-DKIM-OPENDMARC.md">Ajout des enregistrements **spf**, **DKIM**, **DMARC** au fichier de zone DNS</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Courrier-Comptes-Virtuels/">Ajout des comptes émail virtuels</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Surveillance-Serveur/">Installation de programmes de surveillance du serveur</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="../../tutostretch/Installation-Webmail/">Installation d'un webmail (rainloop)</a>
- </li>
- <li class="toctree-l3"><a class="" href="../../tutostretch/Sécurisation-Serveur-Web">Sécurisation d'un serveur WEB</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li class="toctree-l1"><a class="reference internal" href="#">Installation d'un serveur sécurisé, version Debian/Buster (en cours d'écriture)</a>
- <ul>
- <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/1-tutobuster/">Présentation</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/2-Installation-de-base/">Installation de base</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/3-ovh/">Démarrage sur serveur OVH</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/4-Plan/">Plan d'ensemble</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/5-Premi%C3%A8re-Etape-S%C3%A9curisation/">Premières étapes de sécurisation du serveur</a>
- </li>
- </ul>
- </li>
- <li class="toctree-l1 current"><a class="reference internal current" href="#">Installation d'un serveur sécurisé, version Debian/Buster sur RaspberryPI</a>
- <ul class="current">
- <li class="toctree-l2"><a class="reference internal" href="../tutoraspi/">Présentation</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Installation-de-base/">Installation de base</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Premier-d%C3%A9marrage/">Premier démarrage</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Etat-des-lieux/">État des lieux</a>
- </li>
- <li class="toctree-l2 current"><a class="reference internal current" href="./">Sécurisation SSH</a>
- <ul class="current">
- <li class="toctree-l3"><a class="reference internal" href="#references">Références</a>
- </li>
- <li class="toctree-l3"><a class="reference internal" href="#creation-dune-clef-personnalisee">Création d'une clef personnalisée</a>
- <ul>
- <li class="toctree-l4"><a class="reference internal" href="#test-du-hostname-sur-notre-raspi">Test du hostname (sur notre raspi)</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#creation-de-notre-clef-personnalisee-sur-le-desktop-pas-sur-le-raspi">Création de notre clef personnalisée (sur le desktop, pas sur le raspi!)</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#copie-de-la-clef-sur-le-serveur">Copie de la clef sur le serveur</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#essai-de-connexion-avec-notre-nouvelle-clef">Essai de connexion avec notre nouvelle clef</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#configuration-de-ssh-sur-la-machine-de-travail">Configuration de ssh sur la machine de travail</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#test-de-connexion">Test de connexion</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#amelioration">Amélioration</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#modification-du-fichier-etcsshsshd_config">Modification du fichier /etc/ssh/sshd_config</a>
- </li>
- <li class="toctree-l4"><a class="reference internal" href="#test-sur-le-site-ssh-audit">Test sur le site ssh audit</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../R%C3%A9seau/">Réseau (des IPs fixes)</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Knot/">Installation de Knot-resolver</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Firewall/">Installation d'un pare-feux</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Fail2ban/">Contrer les attaques de force brute</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Logwatch/">Surveillance du serveur</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Installation-courrier-basique/">Installation d'un serveur de courriers basique</a>
- </li>
- <li class="toctree-l2"><a class="reference internal" href="../Annexe/">Annexe</a>
- </li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </nav>
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
- <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
- <a href="../../..">Les Tutoriels du Yojik</a>
- </nav>
-
- <div class="wy-nav-content">
- <div class="rst-content">
- <div role="navigation" aria-label="breadcrumbs navigation">
- <ul class="wy-breadcrumbs">
- <li><a href="../../..">Docs</a> »</li>
-
-
-
- <li>Installation d'un serveur sécurisé, version Debian/Buster sur RaspberryPI »</li>
-
-
-
- <li>Tutoriels »</li>
-
-
-
- <li>Sécurisation SSH</li>
- <li class="wy-breadcrumbs-aside">
-
- </li>
- </ul>
-
- <hr/>
- </div>
- <div role="main">
- <div class="section">
-
- <h1 id="securisation-ssh">Sécurisation SSH</h1>
- <p>Je vais baser cette partie sur plusieurs tutoriels auxquels vous voudrez bien vous référer pour avoir des explications plus poussées que celles que je vais donner.</p>
- <h2 id="references">Références</h2>
- <ul>
- <li><a href="https://www.tronyxworld.be/2020/hardening_ssh/">Sécuriser OpenSSH</a></li>
- <li><a href="https://blog.syntik.fr/comment-tester-securiser-serveur-ssh/">SSH - Comment tester et sécuriser son serveur ?</a></li>
- <li><a href="https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/">OpenSSH Config File Examples</a></li>
- </ul>
- <p>Vous pouvez trouver plein d'autres références en français ou anglais en utilisant votre moteur de recherche préféré.</p>
- <h2 id="creation-dune-clef-personnalisee">Création d'une clef personnalisée</h2>
- <p>Nous allons créer une clef spécifique à notre mini serveur.</p>
- <p>Auparavant, nous allons vérifier le <strong>hostname</strong> de notre machine. Si vous l'avez configuré avec <strong>raspi-config</strong>, il y a de grandes chances que le résultat ne soit pas bon.</p>
- <p>Sous Debian, le <strong>hostname</strong> est composé de 2 parties situées dans 2 fichiers différents.</p>
- <ul>
- <li>/etc/hosts (contient le nom complet, FQDN)</li>
- <li>/etc/hostname (ne contient que le petit nom de la machine, sans le domaine)</li>
- </ul>
- <h3 id="test-du-hostname-sur-notre-raspi">Test du hostname (sur notre raspi)</h3>
- <pre><code>pi@piras:~ $ hostname -f
- piras.yojik.net
- pi@piras:~ $ hostname
- piras
- pi@piras:~ $
- </code></pre>
- <p>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 <strong>hostname</strong>.</p>
- <pre><code>pi@piras:~ $ cat /etc/hostname
- piras
- pi@piras:~ $
- </code></pre>
- <p><strong>hostname -f</strong> renvoie le "fqdn", ou nom complet de la machine, ici, piras.yojik.net.</p>
- <p>La référence complète du nom se trouve dans le fichier /etc/hosts.</p>
- <pre><code>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:~ $
- </code></pre>
- <p>Pour l'instant, c'est l'adresse 127.0.1.1 qui est utilisée comme référence du nom, mais nous changerons ça dès que nous aurons configuré une adresse IPV4 et IPV6 fixe.</p>
- <h3 id="creation-de-notre-clef-personnalisee-sur-le-desktop-pas-sur-le-raspi">Création de notre clef personnalisée (sur le desktop, pas sur le raspi!)</h3>
- <p>Nous utiliserons la commande :</p>
- <pre><code>sh-keygen -o -a 100 -t ed25519 -f ~/.ssh/piras_ed25519 -C "clef SSH de l'utilisateur pi du Raspi"
- </code></pre>
- <ul>
- <li>-o : Sauvegarde votre clé dans le nouveau format openssh au lieu de l’ancien format PEM</li>
- <li>-C : insertion d'un commentaire (ce que vous voulez, votre adresse émail ...).</li>
- <li>-f : nom du fichier à produire</li>
- <li>-a : le nombre de tours de la clef de dérivation (plus il est élevé, plus il est difficile de la craquer en force brute, mais aussi plus c'est lent) <pre><code>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]-----+
- </code></pre>
- </li>
- </ul>
- <p>Si vous allez dans ./.ssh, vous trouverez ceci :</p>
- <pre><code>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éc. 18:17 piras_ed25519
- -rw-r--r-- 1 eric eric 95 11 déc. 18:17 piras_ed25519.pub
- eric@aldebaran:~/.ssh$
- </code></pre>
- <p>Nous voyons les clefs privées et publiques que nous avons créées. (ainsi que d'anciennes clefs ...) Vérifiez les permissions, mais normalement les commandes ci-dessus les attribuent comme attendu (voir plus bas).</p>
- <h3 id="copie-de-la-clef-sur-le-serveur">Copie de la clef sur le serveur</h3>
- <p>Nous utiliserons la commande : <strong>ssh-copy-id</strong></p>
- <pre><code>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:~$
- </code></pre>
- <p>Vérifions la présence de notre clef sur notre raspi, dans le fichier authorized_keys :</p>
- <pre><code>pi@piras:~/.ssh $ cat authorized_keys
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAdDDO3ni4DHIxqfRaNZ4SBudrSlRoQjLm/fd2SSjxtM eric@yojik.eu
- pi@piras:~/.ssh $
- </code></pre>
- <p>C'est bon, elle est là !</p>
- <h3 id="essai-de-connexion-avec-notre-nouvelle-clef">Essai de connexion avec notre nouvelle clef</h3>
- <pre><code>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:~ $
- </code></pre>
- <p>ça marche ... j'ai précisé la clef <strong>SSH</strong> à utiliser avec l'option <strong>-i nom_de_la_clef</strong>.</p>
- <h3 id="configuration-de-ssh-sur-la-machine-de-travail">Configuration de ssh sur la machine de travail</h3>
- <p>Je possède plusieurs clefs qui sont spécifiques à certains serveurs (ceux dans ma cave, et ceux sur internet). Nous allons rajouter une configuration pour permettre la sélection automatique de la bonne clef pour chaque serveur.</p>
- <p>Cela se fait dans le fichier ~/.ssh/config</p>
- <p>Le schéma à utiliser est le suivant :</p>
- <pre><code>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:~$
- </code></pre>
- <p>Cela me permet de me connecter avec la commande :</p>
- <pre><code>ssh piras
- </code></pre>
- <p>Voilà à quoi ressemble mon répertoire <strong>~/.ssh</strong> :</p>
- <pre><code>eric@aldebaran:~$ tree .ssh
- .ssh
- ├── adara
- │ ├── adara_ed25519
- │ └── adara_ed25519.pub
- ├── aijan
- │ ├── aijan_ed25519
- │ └── aijan_ed25519.pub
- ├── alya
- │ ├── alya_ed25519
- │ └── alya_ed25519.pub
- ├── atom
- │ ├── atom_ed25519
- │ └── atom_ed25519.pub
- ├── config
- ├── id_dsa
- ├── id_dsa.pub
- ├── id_ed25519
- ├── id_ed25519.pub
- ├── id_rsa
- ├── id_rsa.pub
- ├── known_hosts
- ├── mynas2
- │ ├── mynas2_ed25519
- │ └── mynas2_ed25519.pub
- ├── mynas3
- │ ├── mynas3_ed25519
- │ └── mynas3_ed25519.pub
- ├── ns1
- │ ├── ns1_ed25519
- │ └── ns1_ed25519.pub
- ├── ns2
- │ ├── ns2_ed25519
- │ └── ns2_ed25519.pub
- ├── piras
- │ ├── piras_ed25519
- │ └── piras_ed25519.pub
- └── polis
- ├── polis_ed25519
- └── polis_ed25519.pub
- </code></pre>
- <p>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ées.</p>
- <p>Modifions les permissions pour qu'elles soient conformes à ce que demande SSH. (en fait, les bonnes permissions étaient déjà appliquées par la commande ssh-keygen). Si vous organisez votre structure de répertoires comme ci-dessus, ajustez les permissions comme ceci :</p>
- <p>Si vous créez un répertoire nommé ~/.ssh/piras ajustez les droits du répertoire comme suit :</p>
- <pre><code>chmod 700 ~/.ssh/piras
- </code></pre>
- <p>Et pour les clefs privées/publiques :</p>
- <pre><code>chmod 600 ~/.ssh/config
- chmod 600 ~/.ssh/piras/piras_ed25519
- chmod 600 ~/.ssh/piras/piras_ed25519.pub
- </code></pre>
- <h3 id="test-de-connexion">Test de connexion</h3>
- <pre><code>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:~ $
- </code></pre>
- <p>Ça marche ;)</p>
- <h3 id="amelioration">Amélioration</h3>
- <p>Nous allons modifier temporairement (et le re-modifierons une fois les adresses fixées) notre fichier /etc/hosts sur notre machine de travail pour pouvoir utiliser la méthode par nom plutôt que par adresse IP. Ajoutons la référence à notre raspi :</p>
- <pre><code>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:~$
- </code></pre>
- <p>Modification de ./.ssh/config :</p>
- <pre><code>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:~$
- </code></pre>
- <p>Test :</p>
- <pre><code>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:~ $
- </code></pre>
- <p>L'adresse de notre raspi a été ajoutée au fichier ./.ssh/known_hosts</p>
- <h3 id="modification-du-fichier-etcsshsshd_config">Modification du fichier /etc/ssh/sshd_config</h3>
- <p>Nous allons modifier ce fichier pour plus de sécurité :</p>
- <ul>
- <li>pas de connexion de l'utilisateur root</li>
- <li>connexion uniquement par clef (pas par login/mot de passe)</li>
- <li>suppression du support des protocoles non sûrs</li>
- <li>autorisation de connexion sur liste blanche</li>
- <li>connexion en IPV4 et IPV6</li>
- </ul>
- <p>Tout d'abord, sauvegarde du répertoire <strong>/etc/ssh</strong> :</p>
- <pre><code>pi@raspberrypi:/etc $ sudo cp -R ssh ssh.orig
- pi@raspberrypi:/etc $
- </code></pre>
- <p>Ensuite, création du nouveau fichier (après installation de vim, mais vous pouvez prendre l'éditeur de votre choix, nano par exemple qui est installé par défaut):</p>
- <blockquote>
- <p>Pour installer vim, tapez : <strong>sudo apt install vim</strong></p>
- </blockquote>
- <p>Voilà une copie du fichier de conf du site <strong>troxyworld</strong> dont j'ai déjà donné les références :</p>
- <pre><code># 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
- </code></pre>
- <p>Et voici une version par <strong>Synthic</strong>:</p>
- <pre><code># Utilisation de la version 2 du protocole SSH
- Protocol 2
- # Utilisation du port 22. Il est possible de le modifier
- Port 22
- # Interdit à 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és
- PubkeyAuthentication yes
- # Lieux où sont stockées les clés publiques --> /home/user/.ssh/authorized_keys
- AuthorizedKeysFile .ssh/authorized_keys
- ChallengeResponseAuthentication yes
- # Désactivation 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
- </code></pre>
- <p>Voilà mon fichier de configuration, à adapter suivant vos préférences (surtout n'oubliez pas d'ajuster le <strong>user</strong> dans l'option <strong>AllowUsers</strong> à votre cas particulier)</p>
- <p>Pour ma part, je vais garder le port 22 ; je le changerai peut-être plus tard.</p>
- <pre><code>Protocol 2
- Port 22
- </code></pre>
- <p>Blocage de root</p>
- <pre><code>PermitRootLogin no
- </code></pre>
- <p>Pas de mot de passe vide</p>
- <pre><code>PermitEmptyPasswords no
- </code></pre>
- <p>Seul l'utilisateur pi est autorisé</p>
- <pre><code>AllowUsers pi
- </code></pre>
- <p>Connexion uniquement pas clef</p>
- <pre><code>PubkeyAuthentication yes
- </code></pre>
- <p>Modification et limite des tentatives de connexion</p>
- <pre><code>LoginGraceTime 30s
- PermitRootLogin no
- StrictModes yes
- MaxAuthTries 3
- MaxSessions 5
- </code></pre>
- <p>Les fichiers de clef autorisés</p>
- <pre><code>AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
- </code></pre>
- <p>Voici la copie du fichier complet :</p>
- <pre><code>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écommenter après test sur sur site d'audit, car nos réglages ne permettent
- # que de se connecter à partir de notre réseau local
- # Si vous voulez que votre serveur soit accessible à partir de l'extérieur
- # gardez les valeurs par défaut (ou les options commentées)
- #ListenAddress 0.0.0.0
- #ListenAddress ::
- # Nouveaux réglages
- # 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étails
- #SyslogFacility AUTH
- SysLogFacility AUTHPRIV
- #LogLevel INFO
- LogLevel VERBOSE
- # Authentication:
- # C'est ici que l'on va ne permettre que l'accès par clef partagée
- # et interdire l'accès par mot de passe
- # De plus on configure le nombre d'essais et le délai de connexion
- # à des valeurs plus courtes
- LoginGraceTime 30s
- PermitRootLogin no
- StrictModes yes
- MaxAuthTries 3
- MaxSessions 5
- PubkeyAuthentication yes
- # Ajout d'une liste blanche d'utilisateurs autorisés à 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 yes
- # 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:~ $
- </code></pre>
- <p>On redémarre <strong>sshd</strong></p>
- <pre><code>sudo systemctl restart sshd.service
- </code></pre>
- <p>On teste si le service a bien redémarré sans erreurs :</p>
- <pre><code>pi@raspberrypi:~ $ sudo systemctl status sshd.service
- ● 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
- └─524 /usr/sbin/sshd -D
- févr. 14 14:59:46 raspberrypi systemd[1]: Starting OpenBSD Secure Shell server...
- févr. 14 14:59:46 raspberrypi sshd[524]: Server listening on 0.0.0.0 port 22.
- févr. 14 14:59:47 raspberrypi sshd[524]: Server listening on :: port 22.
- févr. 14 14:59:47 raspberrypi systemd[1]: Started OpenBSD Secure Shell server.
- pi@raspberrypi:~ $
- </code></pre>
- <p>C'est bon.</p>
- <p>Essai de connexion :</p>
- <pre><code>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:~ $
- </code></pre>
- <p>C'est bon.</p>
- <p>Test sur le site d'audit :</p>
- <p>Bien, après avoir effacé toutes les données personnelles de mon navigateur (données qui entraînent une erreur «The csrf token is invalid »), le test revient toujours avec une mauvaise note. D'où la suite. Les instructions pour améliorer sont également sur le site <a href="https://www.ssh-audit.com/hardening_guides.html#ubuntu_20_04_lts">SSH-Audit.com recommendations</a></p>
- <p>On va sécuriser les échanges en jouant sur 3 options supplémentaires :</p>
- <ul>
- <li>Ciphers : Le chiffrement utilisé.</li>
- <li>KexAlgorithms : Les algorithmes utilisés pour l’échange de clés.</li>
- <li>MACs : Message Authentication code, c’est le code qui accompagnent les données échangées dans le but d’assurer leur intégrité pour être certain qu’elles n’ont subies aucune altération pendant/après la transmission.</li>
- </ul>
- <p>Voilà les étapes à suivre (reprises quasi texto des sites déjà cités) :</p>
- <ul>
- <li>
- <p>Régénération de la clé ED25519 du serveur :</p>
- <pre><code>sudo rm -f /etc/ssh/ssh_host_*
- sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
- </code></pre>
- </li>
- <li>
- <p>Retrait des moduli Diffie-Hellman faible :</p>
- <pre><code>sudo awk '$5 >= 3071' /etc/ssh/moduli > /home/pi/moduli.safe
- sudo mv -f /home/pi/moduli.safe /etc/ssh/moduli
- </code></pre>
- </li>
- <li>
- <p>Désactivation des clés DSA/ECDSA & RSA si ce n’est pas déjà fait :</p>
- <pre><code>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
- </code></pre>
- </li>
- <li>
- <p>Restriction des ciphers, clés d’échange et des codes d’authentification :</p>
- <p>Ajoutez ceci à la fin du fichier /etc/sshd_config:</p>
- <pre><code>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
- </code></pre>
- </li>
- <li>
- <p>Redémarrage de <strong>sshd</strong></p>
- <p>sudo systemctl restart sshd.service</p>
- </li>
- </ul>
- <h3 id="test-sur-le-site-ssh-audit">Test sur le site <a href="https://www.ssh-audit.com/">ssh audit</a></h3>
- <p>Tout est OK ... nous sommes passés d'une note <strong>F</strong> à <strong>A+</strong>.</p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-03.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-17.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-11%2014-37-34.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-24.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-33.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-42.png" /></p>
- <p><img alt="résultat" src="../../../Images/tutoraspi/Capture%20d%E2%80%99%C3%A9cran%20de%202020-12-12%2009-00-49.png" /></p>
-
- </div>
- </div>
- <footer>
-
- <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-
- <a href="../R%C3%A9seau/" class="btn btn-neutral float-right" title="Réseau (des IPs fixes)">Next <span class="icon icon-circle-arrow-right"></span></a>
-
-
- <a href="../Etat-des-lieux/" class="btn btn-neutral" title="État des lieux"><span class="icon icon-circle-arrow-left"></span> Previous</a>
-
- </div>
-
- <hr/>
- <div role="contentinfo">
- <!-- Copyright etc -->
-
- </div>
- Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
- </footer>
-
- </div>
- </div>
- </section>
- </div>
- <div class="rst-versions" role="note" aria-label="versions">
- <span class="rst-current-version" data-toggle="rst-current-version">
-
-
- <span><a href="../Etat-des-lieux/" style="color: #fcfcfc;">« Previous</a></span>
-
-
- <span style="margin-left: 15px"><a href="../R%C3%A9seau/" style="color: #fcfcfc">Next »</a></span>
-
- </span>
- </div>
- <script>var base_url = '../../..';</script>
- <script src="../../../js/theme.js" defer></script>
- <script src="../../../search/main.js" defer></script>
- <script defer>
- window.onload = function () {
- SphinxRtdTheme.Navigation.enable(true);
- };
- </script>
- </body>
- </html>
|