Soutenir Vision du Web dans son partage de logiciels et de ressources libres

Ce mineur crée de la monnaie numérique Monero pour soutenir Vision du web.
Merci de désactiver votre bloqueur de publicité.
Aucune publicité ne sera affichée.
Le mineur utilise les ressources de votre machine pour créer gratuitement de la monnaie numérique.
Le montant des donations pour Vision du web est de 0.068570806166929 Monero.

SSH : Différence entre versions

De Wiki. Analyse, Communication, Développement, Hacking.
Aller à : navigation, rechercher
m (Ressources complémentaires pour Tunnel SSH inverse)
 
m (Bibliographie)
 
Ligne 890 : Ligne 890 :
  
 
  [[Fichier:ok-ko.png]] How to configure SSH Key based authentification on a linux server : https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server
 
  [[Fichier:ok-ko.png]] How to configure SSH Key based authentification on a linux server : https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server
 +
[[Fichier:ok-ko.png]] https://www.maketecheasier.com/customize-ssh-configuration-file/
  
 
  [[Fichier:ok-ko.png]] Documentation Ubuntu : https://doc.ubuntu-fr.org/ssh
 
  [[Fichier:ok-ko.png]] Documentation Ubuntu : https://doc.ubuntu-fr.org/ssh

Version actuelle datée du 12 octobre 2018 à 15:47

Naviguer sur le site : Accueil du site - Les annuaires - Les éditoriaux - Le forum - Les outils - Les projets
 
Consulter le contenu en étant déconnecté du réseau : Exporter le sommaire de cette page vers un document PDF

Sommaire

Abandon de Telnet pour SSH

Telnet a été créé dans les années 80.
Le protocole Telnet est simple, basique, mais dangereux.
Il sert juste à échanger des messages standards d'une machine à une autre.
Les données sont transférées en clair sur le réseau. Il n'y a aucun chiffrement.
Le client Telnet se trouve dans le paquet telnet.
Ce paquet est installé par défaut.
Le serveur Telnet se trouve dans le paquet telnetd.
Il n'y a aucune configuration à faire.
Se connecter à un serveur Telnet :
% telnet nom_DNS_du_serveur_telnet
Indiquer votre login et votre mot de passe.

Usage des clés SSH

SSH (Secured SHell) est un protocole sécurisé avec des clés privées et des clés publiques pour communiquer entre deux ordinateurs.
Il est utilisé en général pour la gestion des serveurs sous GNU/Linux.
Quand un administrateur système se fait pirater son serveur, c'est souvent qu'il a laissé le port 22 SSH par défaut et accessible sans désactiver root et l'identification par mot de passe.
Quand le mot de passe est un mot du dictionnaire, les attaques Brute Force ont de grandes chances d'aboutir. Le serveur est alors compromis.
Utiliser un mot de passe fort de plus de 8 caractères, un mélange de lettres minuscules, majuscules, chiffres et caractères de ponctuation.
De préférence, utiliser uniquement une paire de clés privée et publique avec passphrase.
Une clé publique => A exportée sur chaque machine ou l'on veut se connecter.
Une clé privée => Permet de prouver son identité aux serveurs SSH.
Une passphrase => Permet de sécuriser la clé privée.

Installer le client SSH OpenSSH

Installer le client OpenSSH permet aux utilisateurs d'accéder aux systèmes à distance, en rentrant leur login et leur mot de passe, ou, avec un mécanisme de clefs.
OpenSSH est la version libre du client et du serveur SSH.
Installer le paquet openssh-client.
sudo apt install openssh-client
Faire les mises à jour des paquets pour conserver un système sécurisé :
apt update
apt upgrade
Consulter le manuel :
man ssh
man ssh_config

Créer une clé SSH

# Lancer la commande suivante pour générer une clé SSH.
# La commande est lancée avec le simple utilisateur sans droits supplémentaires.
ssh-keygen -b 4096
# Autre méthode.
# ssh-keygen -t rsa
Option "-t" pour définir le type de clé, RSA ou DSA.
Option "-b" pour définir la longueur de la clé en bits.
Option "-C" pour ajouter un commentaire, très utile pour retrouver une clé parmi d'autre.
Par défaut si aucun commentaire n'est ajouté, le nom du compte et le nom de la machine sont ajoutés sous la forme de "[email protected]".
# Remplacer rsa par dsa pour utiliser un algorithme de chiffrement plus performant.
# La longueur des clés peut faire 1024, 2048 ou 4096 bits.
# Il est déconseillé d'utiliser des clés inférieur à 1024.
# Répondre aux questions suivantes.
Generating public/private rsa key pair.
# Changer éventuellement la localisation de la clé SSH, les dossiers doivent exister.
Enter file in which to save the key (/home/zencool/.ssh/id_rsa): /home/zencool/.ssh/id_rsa/DropletDigitalOcean
# Ajouter une passe phrase facultative.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/zencool/.ssh/id_rsa/DropletDigitalOcean.
Your public key has been saved in /home/zencool/.ssh/id_rsa/DropletDigitalOcean.pub.
The key fingerprint is:
SHA256:TzTV6l6VVcGw59IpwB7WouNHqInGO4EO6XlkolNzcQA [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|  E.        .oo.+|
|    .     ... o..|
|     .    o* + .o|
|    . .  .=.= +.o|
|  . .o  S+.+ o = |
| +o+o.. +oo . +  |
|o.Bo +.o ..o .   |
|oo o...   . .    |
| ..  ..          |
+----[SHA256]-----+
Source : Consulter le manuel : man ssh-keygen

Changer la passphrase qui protège votre clef privée

ssh-keygen -p

Droits chmod a appliquer sur les clés

# En local
Le fichier id_rsa contient la clef privée et a les permissions 600.
Le fichier id_rsa.pub contient la clef publique et a les permissions 644.
# A distance
chown dossier .ssh avec la commande suivante : sudo chown -R user:user .ssh

Lire le contenu de vos clés

Avec un logiciel de traitement de texte

# Lire et afficher la clé publique ou privée avec un bloc notes.
cat /home/user/.ssh/id_rsa.pub
cat /home/user/.ssh/id_rsa

Avec cat

# Lire et afficher la clé publique avec cat.
cat /home/zencool/.ssh/id_rsa/DropletDigitalOcean.pub
https://pastebin.com/xVANZLbZ
# Lire et afficher la clé privée avec cat.
cat /home/zencool/.ssh/id_rsa/DropletDigitalOcean
https://pastebin.com/G9MZCEfs

Avec ssh-keygen -e

# Lire et afficher la clé publique et son commentaire.
# Se positionner dans le dossier qui contient la clé publique ou privée.
# Lancer la commande ssh-keygen avec le paramètre -e.
# Le nom de la clé publique ou privée a lire est demandé à la saisie.
# La clé publique uniquement sera affichée avec son commentaire.
ssh-keygen -e

Exporter la clé SSH publique du client vers un utilisateur du serveur distant

Cas générale pour un serveur Debian

Avec ssh-copy-id

# Ajouter la clé SSH publique d'un utilisateur client vers l'utilisateur créé à distance sur le serveur.
Utiliser la commande ssh-copy-id sur le modèle : ssh-copy-id -i ~/.ssh/dossier/id_dsa.pub [email protected]_du_serveur -p 11033
Si ssh-copy-id n'est pas installé la commande avorte.
Sinon, votre mot de passe est demandé, celui de votre compte distant, pas la passphrase.
La clé est ensuite automatiquement ajoutée à ~/.ssh/authorized_keys sur le serveur.
Se connecter à nouveau pour vérifier si l'accès fonctionne toujours normalement.
Le paquet ssh-copy-id ne semble pas être trouvé sur Debian Stretch.

Si la méthode ssh-copy-id ne fonctionne pas

# Ajouter la clé SSH publique d'un utilisateur client vers l'utilisateur créé à distance sur le serveur.
# Lire la clé locale et la copier.
cat .ssh/emplacement/id_rsa.pub
# Dans le cas de l'utilisateur root locale connecté à l'utilisateur root distant.
# Ajouter la clé publique du client root au compte de l'utilisateur sudoers distant.
# Sur la console distante, passer de root à toto. La connexion SSH de root à root reste établie, de root à toto.
## La connexion SSH reste vraiment établie ?.
su - toto
mkdir .ssh
chmod 700 .ssh
cd .ssh
nano authorized_keys
# Ajouter la clé au fichier .ssh/authorized_keys qui conserve la liste des clés autorisées à se connecter.
# Coller la clé publique qui provient de la machine cliente locale.
# Ici, nous sommes sur la machine serveur distante.
chmod 600 authorized_keys
exit
Vous pouvez maintenant vous connecter SSH en tant que nouvel utilisateur toto en utilisant la clé privée comme authentification.
L'utilisateur toto pourra travailler avec les privilèges de root grâce à sudo.
Pour l'utilisateur root par défaut, aller dans le dossier :
cd /root/.ssh

Méthode rapide sans les chmod

# Ajouter la clé SSH publique d'un utilisateur client vers l'utilisateur créé à distance sur le serveur.
# Autre méthode rapide en ligne de commande pour envoyer votre clé sur un serveur ssh
# cat ~/.ssh/id_dsa.pub | ssh [email protected]_du_serveur "cat - >> ~/.ssh/authorized_keys"
# Rajouter les chmod pour améliorer ce script.

AWS

Importer la clé SSH publique depuis l'espace client ou depuis l'interface du serveur ?

DigitalOcéan

Importer la clé SSH publique lors de la création du Droplet.
# Se connecter.
ssh [email protected]_serveur -i /home/user/.ssh/dossier/cle_privee
# Saisir la passe phrase si créée pour le Droplet. 
Enter passphrase for key '/home/zencool/.ssh/digitalocean/id_rsa': 
# A la première connexion, le mot de passe root est à changer.
# Demander le rappel du mot de passe root initial par mail.
You are required to change your password immediately (root enforced)

Github

Importer la clé SSH publique depuis l'espace client.

OVH

Importer la clé SSH publique dans l'espace client

Aller dans l'espace client (Votre nom, mon compte.)
Cliquer sur "Mes clés SSH"
Cliquer sur Ajouter une clé
Cliquer sur Une clé SSH
Nommer la clé
Copier la clé récupérée précédemment dans le cadre "Saisissez votre clé"
Cliquer sur Ajouter
Si vous vous connectez pour la première fois à un VPS, OVH recommande de consulter les guides suivants :
Ok.png Source : Tutoriel OVH : https://www.ovh.com/fr/g1769.creation_des_cles_ssh
https://www.ovh.com/fr/g1260.comment_se_connecter_a_son_vps
Installer un VPS
Choisir par exemple Debian Jessie.
Importer automatiquement la clé qui a été ajoutée dans l'espace client.
Se connecter au serveur avec SSH.
ssh [email protected] -i /home/USER_LOCAL/.ssh/id_rsa.pub
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
Supprimer l'identification par défaut lors de la première connexion.
ssh-keygen -f "/home/root/.ssh/known_hosts" -R 37.59.111.111
# Host 37.59.111.111 found: line 4
/home/root/.ssh/known_hosts updated.
Original contents retained as /home/root/.ssh/known_hosts.old
Relancer la connexion.
The authenticity of host '37.59.111.111 (37.59.111.111)' can't be established.
ECDSA key fingerprint is SHA256:5es4CpWVzo...Smcg7zuqlYUvk.
Are you sure you want to continue connecting (yes/no)? yes
: Permanently added '37.59.111.111' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/USER_LOCAL/.ssh/id_rsa': .......
apt update
apt upgrade
Installer sudo nano
# Ajouter un utilisateur sur le serveur distant
adduser demo
Ajouter au groupe sudo : usermod -a -G sudo demo
# On vérifie que tout va bien jusque la, que l'on puisse se reconnecter.
exit
ssh [email protected] -i /home/USER_LOCAL/.ssh/id_rsa
Enter passphrase for key '/home/USER_LOCAL/.ssh/id_rsa':
OK, le root est accessible avec la passephrase, sans erreur.
# On test le nouvel utilisateur demo.
ssh [email protected] -i /home/USER_LOCAL/.ssh/id_rsa
[email protected]'s password:
La passephrase n'est pas encore demandée, accès par mot de passe.
# On copie les fichiers de root vers demo.
mkdir /home/demo/.ssh
sudo bash
cd /root/.ssh
cp * /home/demo/.ssh/
exit
cd /home/demo/.ssh/
ls
# La copie de authorized_keys a été effectuée.
exit
# On test la connexion avec l'utilisateur secondaire sudoers.
ssh [email protected] -i /home/zencool/.ssh/id_rsa
Enter passphrase for key '/home/zencool/.ssh/id_rsa':
# La passephrase est bien demandée.
L'utilisateur root est toujours autorisé.
La connexion pâr mot de passe est toujours autorisée.
Désactiver maintenant l'utilisateur root et la connexion par mot de passe.

Importer la clé SSH publique pour le support

Importer la clé SSH publique pour le support OVH.
Source : https://docs.ovh.com/fr/fr/cloud/dedicated/ovh-ssh-key/

Importer la clé SSH publique en mode rescue pour un serveur distant

VPS
Activer le mode Rescue sur un VPS : https://docs.ovh.com/fr/vps/mode-rescue-vps/
Dédié
Mode Rescue : https://docs.ovh.com/fr/dedicated/ovh-rescue/

Release 3

Ok-ko.png Tutoriel installation clé privé publique sur release3 OVH : http://www.pingouinrouge.com/index.php/9-blog/7-tutoriel-installation-cle-prive-publique-sur-release3-ovh

Vérifier si le port 22 SSH est ouvert sur sa machine

# Tester la connexion locale avec SSH.
ssh localhost
# Exemple avec l'utilisateur Git zer00cool créé pour utiliser Git en local et autorisé dans le fichier de configuration de SSH.
# Le mot de passe à utiliser, deux fois, est le mot de passe de l'utilisateur zer00cool.
su zer00cool
Mot de passe : 
[email protected] /home/zencool $ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:QAfc3awmrnSUyMWsJ6PIL48dJmXUVsX26D4BSaZumSs.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Welcome to Linux Mint 18 Sarah (GNU/Linux 4.8.0-59-generic x86_64)
* Documentation:  https://www.linuxmint.com
0 paquet peut être mis à jour.
0 mise à jour de sécurité.
Last login: Sat Dec 23 19:22:54 2017 from 127.0.0.1
# La connexion SSH sera refusée si l'utilisateur n'est pas autorisé dans le fichier de configuration de SSH.
ssh localhost
ssh: connect to host localhost port 22: Connection refused

Ouvrir le port 22 SSH sur sa box

De préférence, ne pas ouvrir le port 22 SSH par défaut mais choisir un autre port comme le port 11033.
Ok.png Source : craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html

Ouvrir iptables avec une règle pour le port 22

iptables -A INPUT -p tcp -d 0/0 -s 0/0 --dport 22 -j ACCEPT

Se connecter à une adresse avec SSH

Avec une clé SSH publique

La paire de clés SSH a été générée localement et la clé SSH publique a été partagée sur la machine distante.
# Avec le même identifiant utilisé sur le client et le serveur.
ssh ip_du_serveur
# Connexion standard.
ssh [email protected]_du_serveur
# Connexion avec passphrase.
ssh [email protected]_du_serveur
# Entrer la passphrase.
# Utiliser le mode verbose pour connaître la configuration chargée.
ssh -v [email protected]_du_serveur
# Connexion avec la clé privée en paramètre.
ssh [email protected]_du_serveur -i /home/utilisateur/.ssh/dossier/cle_privee
# Connexion avec un numéro de port spécifique.
ssh -l utilisateur -p NumeroDePort ip_du_serveur

Avec une clé pem

Ici, la clé pem est créée depuis AWS pour utiliser Amazon Lightsail.
Une fois la clé .pem chargée sur la machine locale, la connexion peut se faire de la façon suivante :
# Changer les droits sur la clé.
chmod 400 /path/my-key-pair.pem
# Lancer la connexion.
ssh -i AWS750heures.pem [email protected]
# Accepter la connexion.
The authenticity of host '35.176.60.197 (35.176.60.197)' can't be established.
ECDSA key fingerprint is SHA256:KIQFYJt2fzdoM+jibnlR5S2THIVxFBOyO4lrg7Uzi4g.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '35.176.60.197' (ECDSA) to the list of known hosts.

Que faire si le serveur distant ne répond pas

Vérifier l'adresse IP du serveur distant.
Vérifiez que le port 22 n'est pas bloqué par iptables.
En cas de doutes, supprimer toutes les règles iptables.
Donner le chemin de la clé publique ou privée lors de la connexion.
Si le serveur tourne sur un autre port, préciser le numéro du port : ssh [email protected]_du_serveur -p 11033
Si SSH ne fonctionne vraiment plus, redémarrer Telnet ou Webmin.

Votre manager de votre VPS ou serveur dédié n'affiche plus le voyant du SSH

Suite au changement du port 22 SSH par défaut sur mon VPS OVH, le manager n'arrive plus à savoir si SSH est activé.
Normal, il recherche un service sur le port 22.
Le voyant est donc au rouge.

Manager-ovh-ssh-off-defaut-22.jpg

Arrêter Démarrer Redémarrer le service SSH

# Arrêter le service SSH.
/etc/init.d/ssh stop

# Démarrer le service SSH.
/etc/init.d/ssh start

# Redémarrer le service SSH pour prendre en compte les modifications du fichier de configuration.
/etc/init.d/ssh restart

# Recharger le fichier de configuration.
/etc/init.d/ssh reload

Sécuriser SSH

Surveiller les logs de connexions

Surveiller les connexions en lisant régulièrement le fichier de log /var/log/auth.log

Modifier le fichier de configuration de SSH

Le fichier "/etc/ssh/ssh_config" permet de configurer les paramètres global de la machine pour toutes les connexions vers des serveurs "ssh".
sudo nano /etc/ssh/ssh_config
Il est possible de configurer des paramètres de configuration dans chaque compte. Éditer pour cela le fichier /home/user/.ssh/config dans le répertoire utilisateur.
Si le fichier "config" n'existe pas, le créer puis l'éditer avec les mêmes options que pour le fichier de /etc/ssh/ssh_config.
sudo nano /home/user/.ssh/config

Indiquer le chemin de la clé privée à utiliser pour chacun des serveurs

sudo nano ~/.ssh/config

Host localhost
User UtilisateurDistant1
IdentityFile /home/user/.ssh/id_dsa_11

Host ip_serveur
User UtilisateurDistant2
IdentityFile /home/user/.ssh/id_dsa_22
Todo.png

Limiter les tentatives de connexion

# Permet de limiter a un nombre maximum les tentatives de connexions SSH par adresse IP, sans être authentifié, avant de bloquer l'adresse IP.
# Le 5 correspond au nombre de tentatives maximum autorisées avant d'avoir droit à une nouvelle chance.
# Le 50 correspond au pourcentage de chance que la nouvelle tentative soit rejetée.
# La probabilité que les connexions soient bloquées augmente alors linéairement jusqu’à 100% pour 20 connexions.
MaxStartups 5:15:20
Limiter le nombre de tentatives de connexion :
MaxAuthTries 3
Limiter le nombre de sessions simultanées :
MaxSessions 2

Changer le port de connexion 22 par défaut pour SSH

# Numéro de port sur lequel SSH se connecte à l'hôte distant.
Port 22
Changer le port par défaut du serveur SSH permet de réduire les attaques provenant de robots qui scannent en permanence les ports pour y trouver des failles.
Il existe au maximum 65535 ports au sein du protocole TCP/IP, certains sont normalisés du port numéro 0 à 1023 pour êtres utilisés par un service Internet.
La plupart sont libres de 1024 à 65535. Choisir un nombre élevé comme nouveau numéro de port.
Choisir par exemple le numéro de port 11033, mais, vérifier sa disponibilité.
# Vérifier si le port 11033 est ouvert.
nmap -sT -p 11033 127.0.0.1
# Affiche
Starting Nmap 7.12 ( https://nmap.org ) at 2017-12-24 17:55 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000094s latency).
PORT      STATE  SERVICE
11033/tcp closed unknown
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
Ici le port 11033 est fermé car il n'est pas utilisé.
Si je comprend bien, quand il sera utilisé par un service de la machine GNU/Linux, il sera ouvert automatiquement.
Ouvrir le même port 11033 sur la box qui devrait normalement empêcher par défaut l'utilisation d'un port non standard.

Authentification avec une clé publique

# Permet de s'authentifier avec une clé publique.
PubKeyAuthentication yes
/etc/init.d/ssh restart

Autoriser la connexion par clés RSA

# Permet l'authentification RSA, clé publique/privé généré avec "ssh-keygen".
RSAAuthentication yes
/etc/init.d/ssh restart

Spécifier le fichier des clés autorisées

# Ajouter la clé publique du client autorisé à se connecter au serveur dans le fichier des clés publiques autorisées sur le serveur distant.
# Rappel pour créer la clé SSH : Créer une paire de clés SSH.
# Rappel pour transférer la clé SSH : Exporter la clé SSH publique du client vers un utilisateur du serveur distant.
AuthorizedKeysFile .ssh/authorized_keys

Désactiver la connexion SSH par mot de passe

# Cette option autorise ou interdit l'authentification de base avec mot de passe.
# Il ne sera plus possible de se connecter avec un identifiant / mot de passe, il faudra une paire de clés publique/privé valides, avec éventuellement une passe phrase.
PasswordAuthentication no
PermitEmptyPasswords no
/etc/init.d/ssh restart

Limiter le temps pour se connecter

LoginGraceTime 20s

Quelques paramètres de configuration complémentaires

# Permet de définir vers quel machine les paramètres vont s'appliquer, l'étoile veut dire toutes.
Hote *
# Spécifie si le ssh doit vérifier l'adresse IP de l'hôte qui se connectent au serveur pour détecter une usurpation DNS.
CheckHostIP yes
# Permet de définir la clé privée a utiliser pour s'authentifier lors de la connexion sur la machine distante.
IdentityFile ~/.ssh/id_dsa
# Permet de définir le nom du compte utilisateur à distance qu'il faut utiliser pour ce connecter.
User nom_du_compte
# Permet d'avoir un fichier known_hosts plus lisible.
HashKnownHosts yes

Empreinte de clé fingerprint

Les fingerprint sont stockés dans le fichier ~/.ssh/known_hosts
C'est la liste des fingerprint que votre PC client tient à jour.
Les fingerprint permettent de se souvenir de l'identité des serveurs.
Elles servent a avertir si un serveur est remplacé par un autre serveur qui pourrait être celui d'un pirate.
Ce fichier devrait pouvoir être vidé sans risque.
Faire une copie par précaution.
Pour l'utilisateur zer00cool et son dossier Git de référence, le fingerprint est stockée dans le fichier /var/git/.ssh/known_hosts
L'option ssh-keygen -l permet de retrouver l'empreinte d'une clé SSH.
Lancer la commande ssh-keygen -l
Indiquer le chemin de la clé /etc/ssh/ssh_host_dsa_key.pub pour connaitre l'empreinte dsa d'un serveur.
Ne pas confondre avec une clé publique SSH.
Lors d'une connexion SSH avec le mot de passe du compte distante, aucune clé publique n'est inscrite dans ce fichier.
Ici, l'authentification par mot de passe "PasswordAuthentication yes" est autorisée dans le fichier de configuration du serveur SSH.
# Quand l'utilisateur root de la machine cliente aura partagé sa clé SSH publique dans authorized_keys grâce aux droits de l'utilisateur sudoers sur la machine distante...
# Passer PasswordAuthentication à no depuis sudo nano /etc/ssh/sshd_config

Exemple pratique pour comparer deux empreintes

# Poste client
ssh -v serveur
OpenSSH_7.5p1 Debian-5, OpenSSL 1.0.2l  25 May 2017
(...)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# Va correspondre à la clé visible côté serveur
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key
256 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Suivant l'algorythme utilisé, ça va être ssh_host_dsa_key ou _ecdsa_key ou _ed25519_key ou _rsa_key

Fail2ban protège le port 22 SSH par défaut

# Quand le port 22 SSH par défaut est modifié, indiquer dans jail.local, dans la partie SSH, le nouveau port 11033 SSH.
[ssh]
enabled = true
port = ssh,sftp,NumeroDePort
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

Google Authenticator pour SSH

Utiliser Google Authenticator pour protéger votre connexion SSH avec un code de validation à 2 facteurs.

Créer un tunnel SSH inverse

Configuration du client SSH local

Le client local doit autoriser les tunnels.
Dans /etc/ssh/ssh_config
AllowTcpForwarding yes
Pour permettre l’accès à ce tunnel aux autres machines du réseau local, il faut autoriser un paramètre supplémentaire.
GatewayPorts yes

Configuration du serveur SSH distant

Sur l'ordinateur distant, la machine inaccessible, créez le tunnel.
ssh -NR 11033:localhost:22 [email protected]_du_client_local
Une fois le tunnel établi, il reste a remonter le tunnel pour établir la connexion SSH depuis local.
ssh -p 11033 [email protected]
Avec autossh et une connexion SSH sans mot de passe, vous pouvez très facilement créer un script de démarrage sur le serveur distant pour que le tunnel soit toujours récréé sans intervention humaine.
autossh -i /path/to/privateKey.rsa -NR 11033:localhost:22 [email protected]_du_client_local
Il suffit d’ajouter cette commande dans vos scripts de boot, par exemple, /etc/rc.local
Ici on utilise SSH pour ouvrir l’accès à un serveur SSH, mais on pourrait envisager d’ouvrir l’accès à n’importe quel serveur qui tournerait sur distant, par exemple un serveur web pour du monitoring Munin.
Sur le serveur distant :
ssh -NR 22280:localhost:80 [email protected]_du_client_local
Sur la machine locale :
firefox "http://127.0.0.1:22280"
Vous pouvez centraliser sur votre serveur local des tunnels venant de tous les noobs que vous aidez régulièrement.
L’astuce est de remplacer le port compris entre 1024 et 65535. et de maintenir une liste exhaustive de ceux-ci !

Ressources complémentaires pour Tunnel SSH inverse

Ok.png Reverse SSH accéder a un serveur derrière un nat firewall : https://geekfault.org/2011/02/19/reverse-ssh-acceder-a-un-serveur-derriere-un-natfirewall/
Reverse SSH Tunneling : https://www.howtoforge.com/reverse-ssh-tunneling
CCM : http://www.commentcamarche.net/forum/affich-18070378-reverse-ssh
Doc Ubuntu : https://doc.ubuntu-fr.org/tutoriel/reverse_ssh
Autre solution de contournement de Nat avec Pwnat : http://samy.pl/pwnat/

Redémarrer automatiquement les sessions et tunnels SSH avec autossh

Ko.png Redémarrer automatiquement les sessions et tunnels SSH : https://packages.debian.org/stable/net/autossh
Ko.png How to install autossh on Linux : http://ask.xmodulo.com/install-autossh-linux.html

Agent SSH

L'agent SSH est un programme qui tourne en arrière-plan en mémoire et qui retient les clés privées pendant toute la durée de votre session.
# Lancer le programme ssh-add sur l'ordinateur client.
$ ssh-add
Enter passphrase for /home/utilisateur/.ssh/id_rsa:
Identity added: /home/utilisateur/.ssh/id_rsa
L'agent SSH ne demande la passphrase qu'une seule fois au début.
Vous pouvez maintenant vous connecter plusieurs fois sur un ou plusieurs serveurs sans avoir besoin de ressaisir la passphrase.
# Afficher toutes les clés actuellement en mémoire.
ssh-add -l
# Afficher l'empreinte des clés en mémoires.
ssh-add -L
# Supprimer la passphrase d'une clé qui est en mémoire.
ssh-add -d
# Retirer toutes les passphrases de la mémoire.
ssh-add -D

Transformer sa machine en serveur SSH pour accepter les connexions entrantes

Si vous voulez accéder à votre PC depuis un autre lieu vous devez le transformer en serveur.
Installer le paquet openssh-server : sudo apt-get install openssh-server
Lors de l'installation, certaines étapes intéressantes s'effectuent automatiquement :
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
* Restarting OpenBSD Secure Shell server sshd                        [ OK ]
RSA et DSA sont deux algorithmes de chiffrement asymétrique. SSH peut travailler avec plusieurs algorithmes de chiffrement différents.
Lors de l'installation une clé publique et d'une clé privée pour chacun des deux algorithmes (RSA et DSA) sont créés.

Démarrer ou arrêter le serveur SSH

sudo /etc/init.d/ssh start
sudo /etc/init.d/ssh stop
# Recharger la configuration.
sudo /etc/init.d/ssh reload

Se connecter au serveur SSH avec un login et un mot de passe

Depuis la machine cliente : ssh [email protected]_du_serveur
Le login est votre nom d'utilisateur sur le serveur distant et l'adresse IP celle du serveur distant.
# Si vous vous connectez depuis un autre endroit, utiliser l'adresse IP de votre box internet facile à trouver en allant sur www.whatismyip.com.
# Si vous vous connectez depuis un autre PC de votre domicile, sur le même réseau local, entrer l'adresse IP locale. La commande ifconfig permet de trouver l'adresse IP locale, par exemple 192.168.0.11.
# Si vous simulez une connexion réseau en vous connectant depuis votre PC vers votre PC, utiliser l'adresse IP 127.0.0.1 ou localhost.
# Nécessaire pour se connecter
L'adresse IP du serveur.
Le nom d'utilisateur par défaut sur le serveur.
Le mot de passe par défaut pour ce nom d'utilisateur.
# Le serveur devrait répondre et demander une confirmation d'authenticité du serveur :
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 49:d9:2d:2a:df:fd:80:ab:e9:eb:59:37:58:34:de:f7.
Are you sure you want to continue connecting (yes/no)?

# Le fingerprint (empreinte) du serveur est 49:d9:2d:2a:df:fd:80:ab:e9:eb:59:37:58:34:de:f7. C'est un numéro unique qui permet d'identifier le serveur.
# Si quelqu'un tente de se faire passer pour le serveur, le fingerprint changera. Vous saurez qu'il se passe quelque chose d'anormal.

# Valider le fingerprint avec yes.
# Le serveur et le client vont échanger une clé de chiffrement.

# Le serveur devrait demander au bout de quelques secondes votre mot de passe sauf si une clé SHH a déjà été configurée :
# [email protected]'s password:
# Si aucune erreur ne s'affiche, c'est que vous êtes bien connecté.
# Un message de bienvenue apparaît avec un prompt qui correspond à la console du PC distant.
# Vous êtes connectés. Vous pouvez effectuer toutes les opérations que vous voulez comme si vous étiez chez vous.
[email protected]:~$

Se connecter en SSH avec un utilisateur sudoers pour configurer le serveur distant

Se connecter par SSH en tant que root pour créer un utilisateur du système et l'ajouter dans le groupe sudoers.
Un utilisateur sudoers peut utiliser la commande sudo pour devenir root.

Éditer le fichier de configuration du serveur SSH /etc/ssh/sshd_config

# Ne pas confondre avec le fichier /etc/ssh/ssh_config qui est le fichier de configuration du client SSH.
sudo nano /etc/ssh/sshd_config

Changer le port du serveur SSH

# Le serveur SSH écoute sur le port 22 qui est le port par défaut de SSH.
# Le faire écouter sur plusieurs ports à la fois en rajoutant des lignes similaires pour ne pas couper le réseau au serveur distant SSH.
Port 22
Port 11033
Préciser le nouveau port 11033 à la prochaine connexion en ligne de commande.
ssh -l NomUtilisateur -p NumeroDePort IP

Authentification avec une clé publique

# Permet de s'authentifier avec une clé publique.
PubKeyAuthentication yes

Autoriser la connexion par clés RSA

# Permet l'authentification RSA, clé publique/privé généré avec "ssh-keygen".
RSAAuthentication yes

Spécifier le fichier des clés autorisées

# Ajouter la clé publique du client autorisé à se connecter au serveur dans le fichier des clés publiques autorisées sur le serveur distant.
# Rappel pour créer la clé SSH : Créer une paire de clés SSH.
# Rappel pour transférer la clé SSH : Exporter la clé SSH publique du client vers un utilisateur du serveur distant.
AuthorizedKeysFile .ssh/authorized_keys

Désactiver la connexion SSH par mot de passe

# Cette option autorise ou interdit l'authentification de base avec mot de passe.
# Il ne sera plus possible de se connecter avec un identifiant / mot de passe, il faudra une paire de clés publique/privé valides, avec éventuellement une passe phrase.
PasswordAuthentication no
PermitEmptyPasswords no

Refuser la connexion de l'utilisateur root au serveur

# PermitRootLogin yes
## No désactive les connexions root distantes.
## Avant de mettre la valeur no il faut se connecter par SSH en tant que root pour créer un utilisateur du système et l'ajouter dans le groupe sudoers.
PermitRootLogin no

Limiter les tentatives de connexion

# Permet de limiter a un nombre maximum les tentatives de connexions SSH par adresse IP, sans être authentifié, avant de bloquer l'adresse IP.
# Le 5 correspond au nombre de tentatives maximum autorisées avant d'avoir droit à une nouvelle chance.
# Le 50 correspond au pourcentage de chance que la nouvelle tentative soit rejetée.
# La probabilité que les connexions soient bloquées augmente alors linéairement jusqu’à 100% pour 20 connexions.
MaxStartups 5:15:20
Limiter le nombre de tentatives de connexion :
MaxAuthTries 3
Limiter le nombre de sessions simultanées :
MaxSessions 2

Autoriser la connexion pour un utilisateur

# Autoriser l'utilisateur root le temps de mettre en place l'utilisateur sudoers.
AllowUsers toto root
AllowGroups toto root

Interdire la connexion pour un utilisateur

DenyUsers root

Limiter le temps pour se connecter

LoginGraceTime 20s

Déport d'affichage - Export Display

# Autoriser le déport d'affichage par SSH avec yes
# Voir Export Display : https://formation-debian.viarezo.fr/export-display.html
X11Forwarding no

Quitter, valider avec le Y pour yes et ENTRER pour enregistrer la modification

CTRL-X, puis Y, puis ENTER

Appliquer les changements

Attention, avant de vous déconnecter, penser à vérifier que l'accès SSH fonctionne correctement en ouvrant une nouvelle connexion !
Rester connecté à un premier terminal. Depuis un second terminal, recharger la configuration SSH : /etc/init.d/ssh reload ou service ssh reload.
Ne pas redémarrer le serveur distant au risque de perdre définitivement l'accès SSH : /etc/init.d/ssh restart
Pour un serveur local, il peut être redémarré, la machine étant physiquement accessible, la configuration peut être modifée par root ou un utilisateur sudoers.
Si la nouvelle configuration a bien été prise en compte :
La connexion par mot de passe est désactivée. (Le mot de passe de l'utilisateur sudoers ne sert plus à rien pour le pirate.)
Seul l'utilisateur "toto", par exemple, avec les droits sudoers, peut être utilisé maintenant pour se connecter au serveur avec sa paire de clés privée/publique.
L'utilisateur root du serveur distant ne peut plus être utilisé pour se connecter. (Un pirate devra trouver le nouvel utilisateur utilisé, son mot de passe sudoers, sa paire de clé privée/publique.)

Configurer le serveur SSH pour un usage local avec l'utilisateur Git zer00cool

Utiliser Git avec SSH et un utilisateur Git local zer00cool

L'utilisateur zer00cool est créé pour utiliser Git en local.
Voir la procédure pour créer l'utilisateur : Installer et utiliser Git sur Debian.
Les paramètres du serveur SSH sont configurés dans le fichier /etc/ssh/sshd_config pour permettre à l'utilisateur local de pouvoir travailler avec Git.
# L'utilisateur zer00cool utilise le dossier /var/git/ comme dépôt de référence Git.
# L'empreinte de la clé SSH est stockée dans le fichier /var/git/.ssh/known_hosts
# Pour le moment l'utilisateur Git zer00cool n'a pas de clé privée ni publique.
# La connexion à SSH se fera avec le mot de passe utilisateur zer00cool.
# Lancer la connexion SSH avec zer00cool pour utiliser Git.
ssh [email protected]

Autoriser l'utilisateur zer00cool

Liste des comptes utilisateurs qui seront accessibles à distance par le protocole SSH.
Ajouter les utilisateurs autorisé les un après les autres séparés par un espace.
# Ajouter les deux lignes suivantes pour n'autoriser que le ou les utilisateurs et groupes renseignés.
AllowUsers zer00cool
AllowGroups zer00cool
# A ajouter pour n'autoriser que localhost.
# La deuxième syntaxe autorise une connexion au serveur SSH avec le compte zer00cool mais uniquement depuis la machine distante qui a l'adresse IP 127.0.0.1.
AllowUsers [email protected]
AllowUsers [email protected]
/etc/init.d/ssh restart

Autoriser une adresse IP

# Décommenter la ligne ListenAddress et ajouter l'adresse IP de la seule interface que le serveur ssh doit écouter.
# Dans mon cas je laisse deux IP en écoute.
ListenAddress 127.0.0.1
ListenAddress 127.0.1.1
/etc/init.d/ssh restart

Sécuriser la connexion SSH pour root

Interdire la connexion par mot de passe pour root

# Cette option autorise ou interdit l'authentification de root avec mot de passe.
# Il ne sera plus possible de se connecter avec l'utilisateur root et son mot de passe.
# Il faudra une paire de clés SSH valides et une passphrase pour accéder de façon sécurisée.
# PermitRootLogin Yes
PermitRootLogin without-password
/etc/init.d/ssh restart

Interdire la connexion SSH pour root

# Plus restrictif, root ne pourra plus se connecter localement avec SSH.
# Penser a bien créer un utilisateur secondaire pouvant se connecter par clés et passphrase.
# PermitRootLogin prohibit-password
PermitRootLogin no
/etc/init.d/ssh restart
# En cas de tentative, il semble que l'adresse IP du serveur local soit ajoutée au fichier /etc/host.deny
# Vérifier si cela ne provient pas d'un autre service de protection que denyhosts.
VERIFIER CE MESSAGE D'ERREUR
debug1: Next authentication method: password
[email protected]'s password: 
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
[email protected]'s password: 
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
Avec mot de passe autorisé à yes :
[email protected]'s password: 
debug1: Authentication succeeded (password).
Authenticated to localhost ([127.0.0.1]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = fr_FR.UTF-8
Welcome to Linux Mint 18 Sarah (GNU/Linux 4.8.0-59-generic x86_64)
* Documentation:  https://www.linuxmint.com
0 paquet peut être mis à jour.
0 mise à jour de sécurité.
You have new mail.
Linux Alienware-17-R3 4.8.0-59-generic #64-Ubuntu SMP Thu Jun 29 19:38:34 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
03:29:31 up  9:11,  3 users,  load average: 0,02, 0,10, 0,09

Sécuriser SSH

Installer denyhosts

Installer le paquet denyhosts pour protéger SSH.
Refuser toutes les connexions SSH avec hosts.deny.
Autoriser des connexions SSH avec hosts.allow.

SSH Guard

Source : https://www.sshguard.net

Limite TCP

Voir :
Mettre en place une limite TCP pour SSH.

Fail2ban

A configurer.

Utiliser un VPN par certificat

Avec un VPN, on peut fermer SSH, ou FTP, au d'autres services au public.
La connexion ce fait avec des certificats clients.
Permet d'authentifier chaque machine qui se connecte.

Penser a sécuriser FTP, dovecot, webmin

Fail2ban protège SSH, FTP et dovecot...
Webmin n'est pas protégé par fail2ban. Pour protéger Webmin : Fermer Webmin ... ou utiliser un proxy SSH.
Avec un proxy SSH, on utilise une connexion SSH pour encapsuler le flux.

Transfert de fichiers par SSH

Trois méthodes pour le transfert de fichiers.

scp

Pour transférer le fichier test1.txt situé dans le répertoire courant vers le home du compte toto de la machine ordi1.exemple.org sur laquelle tourne un serveur SSH :
% scp test1.txt [email protected]:
Pour récupérer le fichier test2.txt situé dans le répertoire personnel de l'utilisateur toto de la machine ordi2.exemple.org et l'écrire dans le répertoire courant :
% scp [email protected]:test2.txt .
Pour récupérer tous les fichiers ayant l'extension .txt situés dans le répertoire /usr/local de la machine ordi2.exemple.org et l'écrire dans le sous-répertoire test-scp du répertoire courant :
% scp [email protected]:'/usr/local/*.txt' test-scp
Pour transférer l'intégralité du sous-répertoire test-scp du répertoire courant vers le sous répertoire incoming du home de l'utilisateur toto de la machine ordi1.exemple.org :
% scp -r test-scp [email protected]:incoming

sftp

Source : https://kgrall.wordpress.com/2017/12/06/serveur-ssh-ftp-securise-sftp/
Comment se connecter à un serveur SFTP avec FileZilla : https://help.one.com/hc/fr/articles/115005585709-Comment-se-connecter-%E0-un-serveur-SFTP-avec-FileZilla-

lftp

Lftp peut être utilisé comme client FTP mais lftp sait aussi transférer des fichiers par SSH.
Pour se connecter par SSH en utilisateur toto sur le serveur ordi1.exemple.org :
% lftp sftp://[email protected]

SSH avec Windows

Se connecter via SSH à partir d'une machine Windows

Télécharger PuTTY depuis son site officiel : https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Utiliser la version live de PuTTY ou installer PuTTY.
Ouvrir PuTTY.
Ajouter l'adresse IP du serveur cible.
Préciser le port 22 ou 11033.
Changer l'encodage pour UTF-8.
Enregistrer un profil pour ne pas avoir à ressaisir les informations.

Générer une paire de clés

Générer une paire de clés publique et privée avec Puttygen.
Enregistrer la clé publique dans un fichier en cliquant sur « Save public key ».
Vous pouvez nommer ce fichier comme vous voulez, par exemple cle.pub.
Enregistrer la clé privée en cliquant sur « Save private key ».
Vous pouvez nommer ce fichier comme vous voulez, par exemple cle.ppk.

Placer la clé publique sur le serveur

cd /.ssh
echo "votre_cle_publique_a_copier" >> authorized_keys

Renseigner la clé privée dans PuTTY

Connection / SSH / Auth.
Cliquer sur le bouton « Browse » pour sélectionner votre clé privée.

Renseigner avec quel utilisateur se connecter

Connection / Data

Agent SSH Pageant

L'agent SSH de PuTTY s'appelle Pageant.

Bibliographie

Ok.png Configurer SSH avec GNU/Linux et avec Windows : https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/la-connexion-securisee-a-distance-avec-ssh
Ok.png Formation Debian SSH : https://formation-debian.viarezo.fr/ssh.html#
Ok.png Manuel officiel : http://www.openssh.com/manual.html
Ok.png SSH est géré par OpenSSH : http://www.openssh.com
Ok.png Configuration initiale du serveur avec Debian 8 - https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8
Ok-ko.png Configuration initiale du serveur avec Ubuntu 16.04 - https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04
Ok-ko.png Installation initiale du serveur avec CentOS 7 - https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7
Ko.png Se connecter avec une clé SSH à un serveur distant : https://cplusn.com/2013/05/se-connecter-avec-une-cle-ssh-a-un-serveur-distant/
Ko.png Sécuriser son serveur et son client openssh : https://www.abyssproject.net/2016/08/securiser-son-serveur-et-son-client-openssh/
Ok-ko.png How to configure SSH Key based authentification on a linux server : https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server
Ok-ko.png https://www.maketecheasier.com/customize-ssh-configuration-file/
Ok-ko.png Documentation Ubuntu : https://doc.ubuntu-fr.org/ssh
Ok-ko.png Keeping SSH access secure : https://debian-administration.org/article/87/keeping_ssh_access_secure
Ok-ko.png Configurer et sécuriser un serveur Linux Debian Jessie : https://mespotesgeek.fr/fr/configuration-et-securisation-dun-serveur-linux-debian-jessie-partie-2/
Ok-ko.png Définitions : http://www.faqs.org/docs/securing/chap15sec122.html
Ok-ko.png https://help.ubuntu.com/community/SSH/OpenSSH/Configuring

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Pour écrire en Markdown : Éditeur - Générateur de tableau 1 - Générateur de tableau 2.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins (BTC) - Bitcoins Cash - Bitcoins Gold - Bitcore (BTX) - Blackcoins - Bytecoins - Clams - Dash - Monero - Dogecoins - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.