[TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Vous venez de déballer votre Raspberry Pi et vous vous posez des questions ? C'est ici que ça se passe !

Modérateurs : Francois, EVOTk

maccoa
Messages : 39
Enregistré le : lun. 11 sept. 2017 17:19

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par maccoa » ven. 27 oct. 2017 17:33

Bonjour.
j'ai une p'tite question.
si sur la box (livebox) on ne redirige pas les ports , pour un accès depuis l'extérieur , y'a t'il quand même un risque ?

pour ma part , quand je fais une install.
je supprime l'user pi , je crée un autre user , je redonne uid 1000 à cette user et je donne un password à root et partage nfs .

est il possible sans trop de risque de minimiser la sécurité , si on ne prévoit pas du tout d'accès depuis l'extérieur?

domi
Administrateur
Messages : 2621
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par domi » ven. 27 oct. 2017 17:55

Bonjour,

Si tu ne redirige pas les ports, le Rpi ne sera pas accessible depuis Internet, ce qui te donne une grande sécurité.
Attention néanmoins, si une autre machine est accessible depuis l'extérieur, en théorie, en se connectant à cette machine depuis Internet, tu peux ensuite via cette machine accède au Rpi. Pour ma part c'est ce que je fais, une seule machine est accessible depuis l'extérieur, et depuis cet connexion, j'accède ensuite aux autres machines.

Exemple :
Avec x Rpi sur mon réseau local.
un seul est accessible depuis internet (routage de port sur le routeur vers ce Rpi).
je me connecte donc sur ce Rpi qui ne possède aucune info ou fichier particulier, ensuite une fois connecté à ce Rpi, je fais un SSH vers les IP privées des autres Rpi pour y accéder depuis Internet. Mais aucun des autres Rpi n'est directement accessible en direct depuis Internet.

maccoa
Messages : 39
Enregistré le : lun. 11 sept. 2017 17:19

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par maccoa » sam. 28 oct. 2017 17:47

merci bien pour ces précisions !

Le Ptit Nicolas
Messages : 44
Enregistré le : lun. 22 janv. 2018 11:04

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par Le Ptit Nicolas » mer. 24 janv. 2018 10:42

A propos de sécurité, vous ne parlez pas de serveur VPN qui est pourtant simple à mettre en place sur un Pi, par exemple, avec ce tuto de Korben :
https://korben.info/pivpn-transformer-r ... envpn.html

maxty01
Modérateur
Messages : 730
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par maxty01 » mer. 24 janv. 2018 20:39

Bonsoir,
Le Ptit Nicolas a écrit :A propos de sécurité, vous ne parlez pas de serveur VPN qui est pourtant simple à mettre en place sur un Pi, par exemple, avec ce tuto de Korben :
https://korben.info/pivpn-transformer-r ... envpn.html
Attention, un accès SSH et un VPN sont deux choses différentes.

L'accès SSH vous permets de garder la main sur différents équipements, tandis que le VPN vous permets de travailler à distance dans votre réseau.

Imaginons le cas suivant :
Votre RPI fait office de serveur VPN, malheureusement, celui-ci ne fonctionne plus (peu importe la raison).
Il vous est, dans ce cas, impossible de travailler dans votre réseau.
Le SSH activé, sécurisé et accessible depuis l'extérieur, vous permets de reprendre la main rapidement afin de corriger le problème.

Bonne soirée,
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

amyhimesama
Messages : 2
Enregistré le : jeu. 14 nov. 2019 21:02

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par amyhimesama » jeu. 14 nov. 2019 21:05

[quote=maxty01 post_id=1553 time=1416756471 user_id=531]
Bonjour à tous,

[i]Admin/Modo : J'ai placé cet article ici car c'est sans doute la section la plus visitée par les débutants, mais également car je n'ai pas vu de section concernant la sécurité de nos RPI.[/i]

Je me permets de faire une piqûre de rappel à tous ceux qui souhaitent accéder à leur RPI depuis l’extérieur de leur réseau.
Je ne parlerai pas ici des différentes possibilités pour y accéder depuis le web.
Je me concentrerai principalement sur la sécurité du SSH et les bonnes pratiques s'y référant.

[b]Avec cet article, mon but :
n'est pas de vous effrayer avec mes propos
n'est pas de partir à la chasse aux sorcières
n'est pas de chercher à stigmatiser les systèmes trop peu voir non sécurisé
n'est pas de polémiquer sur la sécurité informatique.
est de vous conscientiser sur l'importance de la sécurité informatique
est de vous apporter des "best pratice" pour diminuer le risque d'intrusion sur votre RPI via SSH[/b]

Un utilisateur avancé aura sans doute déjà remarqué que, si vous ouvrez votre port 22 (SSH) vers l'extérieur, il ne faut pas très longtemps pour que ce dernier soit attaqué ([url=http://fr.wikipedia.org/wiki/Attaque_par_force_brute]brute force[/url], [url=http://fr.wikipedia.org/wiki/Attaque_par_dictionnaire]dictionnaire[/url] et autres [url=http://fr.wikipedia.org/wiki/Script_kiddie]Script-kiddies[/url]).

Vous pouvez facilement l'observer dans le fichier de log /var/log/auth.log de votre Debian ou Raspbian.


Voici certaines des bonnes pratiques actuelles (mais pas obligatoire) pour sécuriser votre SSH :

[list=1][*]Interdire à root de se connecter en SSH. Dans le fichier /etc/ssh/sshd_config, mettre l'option "PermitRootLogin yes" à "no".

[code]# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes[/code]
Le premier utilisateur testé durant une attaque en SSH, c'est root, viens ensuite les utilisateurs admin, a, test, ... (sur base de mes propres statistiques).
Lui interdire l'accès en SSH réduit considérablement le risque d'intrusion.
Cette option n'interdit pas de se connecter en root avec son password en local.

Si vous, ou vos applications, avez besoin d’accéder à votre RPI en root en SSH, utilisez des clés SSH public/privé pour root en mettant dans le fichier /etc/ssh/sshd_config, l'option "PermitRootLogin yes" à "without-password".

[code]# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes[/code]
Cette option interdit à root de se connecter en SSH avec un mot de passe, mais autorise l'accès grâce aux "clés SSH" (voir le point 2).


[*]Essayer, dans la mesure du possible, d'utiliser des clés public/privée pour vous connecter en SSH avec tous vos utilisateurs.

L'utilisation de clés à plusieurs effets positifs :
[list=a][*]plus besoin de taper son password
[*]possibilité d'automatiser des actions tel que des backup
par exemple : rsync
[*]exécution de commande à distance:
par exemple la mise à jour : "aptitude update && aptitude upgrade"[/list]
L'utilisation de clés à également plusieurs défauts:
[list=A][*]oubli du son password
Nous voilà obligé de forcer notre propre système.
[*]possibilité de se tromper de serveur/RPI
Très ennuyeux si on arrête un serveur en production en pleine journée.
[*]perte des clés SSH
Suite à un crash disque par exemple.
Nous voilà obligez de nous remémorer notre password, sinon retour au point A.
[*]vol des clés SSH
Le plus ennuyeux, car presque invisible :
nous somme toujours capable de nous connecter sur notre serveur SSH, mais quelqu'un d'autre aussi.
Heureusement, il y a des solutions pour palier à ce risque.[/list]
En effet, il est possible de verrouiller votre clé SSH avec un password, en cas de vol de vos clés, ces dernières ne peuvent être utilisées sans votre password (voir le point 5).
Voici un [url=https://www.debian.org/devel/passwordlessssh.fr.html]tuto[/url] très succinct pour créer vos clé SSH.
Voici un [url=https://wiki.debian.org/fr/SSH]tuto[/url] plus complet pour les utilisateurs confirmés.
Pour transférer facilement vos clé sur votre serveur/RPI, il existe la commande [url=https://wiki.debian.org/fr/SSH#Utilisat ... g.2BAOk-es]ssh-copy-id[/url]


[*]Installer fail2ban.

Ce soft banni une adresse IP pendant 10 minutes après 3 tentatives erronées.
Ce soft est utilisable sur le SSH par défaut mais aussi sur l'HTTP (et un htpwd) en configurant le fail2ban.
Ce soft réduit considérablement le risque d'intrusion en SSH, mais le ramène pas à ZÉRO.

Pour vous donner un exemple, avec fail2ban installé sur un de mes serveurs, j'ai eu un total de 12'442 tentatives (+/- 34 tentatives par jour) en SSH en 2013.
Mais sans se soft, vous pouvez avoir jusqu'à 600 tentatives par jour (sur base de mes propres statistiques), voir plus, ce qui ferai un total de 219'000 tentatives en 1 an.

Il est peu gourmand et très efficace, il est pré-configuré pour SSH et fonctionne avec [url=https://wiki.debian.org/iptables]iptables[/url] (site en anglais).


[*]Changer le password de l'utilisateur pi de votre RPI.

Ce dernier étant déjà inclus dans les différents dictionnaires et script-kiddies disponibles sur le web, le risque que votre RPI/réseau soit "compromis" est de proche 100%.


[*]Utiliser un password complexe, avec des lettres minuscules, majuscules, des chiffres, des caractères spéciaux et de longueur suffisante.

Inventons et analysons un nouveau password pour l'occasion avec uniquement des minuscules (26 possibilités), majuscules (26 possibilités), des chiffres (10 possibilités) et un longueur de 10 caractères : r45Pb3Ryp1.
Ce dernier aura une probabilité d'être découvert en brute force de 1 sur ((26*26*10)^10) = 1,99281489×10³⁸ (pour les matheux). Autrement dis : Bonne chance les coco.
Ce nouveau password n'étant probablement pas dans un dictionnaire disponible sur le web, le risque d'une intrusion sur votre RPI/réseaux est faible.

Analysons maintenant le password par défaut de l'utilisateur Pi : raspberry
Ce password par défaut aura une probabilité d'être découvert en brute force de 1 sur ((26)^9) = 5,429503679×10¹² (pour les matheux). Autrement dis : Bonne chance les coco.
[b]Cependant, n'oublions pas que ce password est déjà inclus dans les différents dictionnaires et script-kiddies disponibles sur le web, ce qui augmente le risque que votre RPI/réseau soit "compromis".[/b]


[*]Changer le port du SSH.

Il est possible de changer le port du serveur SSH du RPI en modifiant dans le fichier /etc/ssh/sshd_config, l’option "Port 22" avec un port compris entre 1024 et 65535.
Ou en configurant son modem/routeur/firewall à rediriger un port externe compris entre 1024 et 65535 sur le port 22 du serveur/RPI.
Cependant, il faut savoir que d'autres ports se rapprochant du port 22, tel que le 2022 ou encore le 2222, sont aussi attaqués en SSH, car ils sont fortement utilisé sur le net.[/list]

Il n'est pas utile d'appliquer l'entièreté des best practice présentées ci-dessus dans le cadre d'un projet personnel, il suffit de choisir celle qui est la plus appropriée à notre projet.
Pour vous donner un exemple, dans ma configuration : j'ai interdis l'accès à root sauf avec une clé SSH, j'utilise un password complexe (c'est le minimum), mais mes clés SSH personnelles n'ont pas de password (sauf au travail) et je n'ai pas changé le port par défaut de SSH, celui-ci est accessible depuis l'extérieur de mon réseau sur le port 22.

Il est, par contre, recommandé d'en appliquer un maximum sur un serveur/RPI hébergeant des données confidentielles/personnelles ou sur un serveur/RPI considéré comme critique/vitale.

Voilà, j'espère que cet article vous aura aidé à sécuriser votre serveur SSH.

Si vous avez des questions, n'hésitez pas.

Je vous souhaites à toutes et à tous une bonne journée.
[/quote]

Prenons un cas concret : votre ordinateur chez vous est sous Linux, vous le laissez allumé. Pendant la journée au boulot, vous avez besoin de lancer un téléchargement ou de récupérer un document. Vous vous connectez à distance sur votre machine et vous ouvrez une console comme si vous étiez en face de votre PC ! Tout ce que vous avez appris à faire dans une console, vous pouvez le faire à distance depuis n'importe quelle machine dans le monde.

maxty01
Modérateur
Messages : 730
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: [TUTO] Sécuriser son SSH pour un accès depuis l'extérieur

Message par maxty01 » ven. 15 nov. 2019 00:46

Bonsoir,
amyhimesama a écrit :
jeu. 14 nov. 2019 21:05
Prenons un cas concret : votre ordinateur chez vous est sous Linux, vous le laissez allumé. Pendant la journée au boulot, vous avez besoin de lancer un téléchargement ou de récupérer un document. Vous vous connectez à distance sur votre machine et vous ouvrez une console comme si vous étiez en face de votre PC ! Tout ce que vous avez appris à faire dans une console, vous pouvez le faire à distance depuis n'importe quelle machine dans le monde.
Je me permets de faire un rajoute à ce qui est dit ci-dessus :

N'oubliez pas que la commande que vous exécutez est liée à votre session SSH, si vous la quitter ou si la liaison s'interrompt, en fermant la fenêtre par exemple, la commande s'arrête !
Je vous invite a utiliser la commande « screen » qui vous permet de lancer un terminal persistant sur votre machine distante.

Ceci n'est pas valable pour les deamon qui tourne en background en tant que service.
Ces derniers sont généralement lancés via la commande « service X start », la commande « /etc/init.d/X start» ou la commande « systemctl start X ».

Bonne soirée,
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

Répondre

Retourner vers « Débutants »