Authentification par clé SSH sur son serveur DEBIAN

Pour rappel SSH est un protocole de communication sécurisé. Il permet notamment de se connecter sur un serveur distant de manière sécurisé (contrairement à telnet par exemple).

Nous allons voir dans ce petit tuto comment se connecter à sa machine Debian via une authentification par clé. Nous aurons un serveur Debian qui sera POSTFIX et un client (ssh) Debian qui sera DEBIAN_ROUTEUR.

Lorsque vous installer un serveur Debian vous avez la possibilités lors de l’installation d’installer SSH serveur. Si ce n’est pas fait vous pouvez l’installer :

apt install openssh-server

Côté client il est normalement déjà installé sur chaque distribution Debian mais si ce n’est pas le cas :

apt install openssh-client

Une fois que cela est fait nous allons configuré le démon ssh sur POSTFIX :

vim /etc/ssh/sshd_config

Dans le fichier nous allons nous intéresser à l’instruction :

#PermitRootLogin yes

On décommente, on enregistre et on quitte. Je fait cela pour pouvoir me connecter avec un mots de passe en root. Je changerais cela après.

Puis on reload le service :

systemctl reload sshd.service

Dirigeons nous désormais vers le client « DEBIAN-ROUTEUR ».

Nous allons générer une clé publique et privé. La clé privé qui sera gardé précieusement sur notre client. Et la clé publique que l’on enverra sur notre serveur « POSTFIX » ou tous les serveurs où l’on souhaite s’authentifier par clés.

On génère la clé :

root@DEBIAN-ROUTEUR:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fp2PVClDyfc6J631cqHrzvdtT9CNogYaAmXcTYjtFz4 root@DEBIAN-ROUTEUR
The key's randomart image is:
+---[RSA 2048]----+
|   .o+ +.        |
|   oo + o  . .   |
|  .  . . .  + .  |
|   .  . E  . . =.|
|    . ..S.  + = +|
|     . + . o * = |
|      . . + + = *|
|         o ..+.O=|
|            +==+B|
+----[SHA256]-----+

Explications :

Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.

Il demande où nous souhaiton enregistrés les clés nous allons laissés par défaut et il enregistrera dans « /root/.ssh/id_rsa ». Il créer ensuite le répertoire caché « Created directory ‘/root/.ssh’. »

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

Il demande ensuite une passphrase c’est très bien si vous la mettez ça permet de rajouter une sécurité en plus comme cela il vous faut à la fois la clé privé et la passphrase (qui n’est pas un mot de passe mais qui y ressemble 🙂 ). Pour le lab je n’ai rien mis.

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

id_rsa : ma clé privé

id_rsa.pub : ma clé public

Je vais maintenant envoyé ma clé publique au serveur distant (POSTFIX) avec la commande « ssh-copy-id »

root@DEBIAN-ROUTEUR:~# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.217
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.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
root@192.168.1.217's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.217'"
and check to make sure that only the key(s) you wanted were added.

Je renseigne le mdp root de mon POSTFIX. La clé a bien été ajouté.

Je tente de me connecter à POSTFIX et je m’y connecte sans mots de passe !!! 😀

Restons sur POSTFIX tout à l’heure dans la configuration du démon sshd j’ai mis l’instruction « PermitRootLogin » à yes je vais à la place « without-password » cela veut dire que je pourrais me loguer avec l’user root sans mots de passe et uniquement par clés.

J’édite mon fichier :

vim /etc/ssh/sshd_config

Je change l’instruction

PermitRootLogin without-password

Et j’enregistre mon fichier et je reload ssh :

systemctl reload sshd.service

Si maintenant je tente de me connecté depuis une autre machine :

Impossible de s’y connecter.

Voilà j’ai pu sécuriser mon accès SSH via un système de clés privés/publique.

Pour information les clés publiques de mes clients ssh sont stockés dans le fichier « .ssh/authorized_keys »

C’est la fin de ce tuto ! A Bientôt 😉 .

Utiliser Debian en tant que routeur (2 ème partie).

3. Activer le routage

Nous allons activer le routage sur Debian. J’édite donc le fichier « vim /etc/sysctl.conf »

vim /etc/sysctl.conf

Sur la première partie de mon fichier j’ai ceci (en bas du screenshot):

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

Comme expliquer clairement dans la le commentaire du fichier de conf je vais décommenter « net.ipv4.ip_forward=1 » comme ceci :

J’enregistre mon fichier. Puis pour que ma modification soit prise en compte je lance la commande :

root@DEBIAN-ROUTEUR:~# sysctl -p
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1

J’essaye de pinger depuis ma Lubuntu (10.10.20.10) ma Lubuntu 2(10.10.30.10)

Donc le routage fonctionne bien entre mes 2 sous réseaux 😀 !

Une fois que la partie routage est validé il va faloir que je puisse sortir sur internet ….

4. Activer le NAT

Nous allons configurer dans un premier temps la règle qui va permettre à mes machines Lubuntu d’aller sur internet. Une fois la règle créer en ligne de commande nous allons faire en sorte que cette règle soit persistante

Remarque: Je suis derrière mon routeur Debian qui est lui même derrière ma box internet donc pour sortir sur internet(depuis mes lubuntu) je vais une fois être nater sur l’IP 192.168.1.195 (IP « WAN »de mon routeur DEBIAN) puis nater par ma boxe internet avec une ip publique.

Pour activer le NAT je tape donc la commande suivante :

iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

Explications de la règles :

-t : table . En l’occurence nous avons sélectionnés la table NAT (par défaut c’est la table filter)

POSTROUTING : C’est une chain qui va manipuler les adresses réseaux juste avant d’émettre le paquet physiquement.

-o : out. L’interface publique pour aller sur internet(enp0s3).

MASQUERADE : Remplace l’ip privé par l’ip publique du routeur. Va remplacer (masquer) mon ip privé par mon ip publique.

Pour lister mes règles de NAT :

root@DEBIAN-ROUTEUR:~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Je vérifie que sur ma Lubuntu j’ai bien accès à internet :

Génial on accès à internet 😆

En revanche si je redémarre ma machine je perd ma règle de NAT … 🙁

💡 C’est pour cela que l’on va faire en sortes que cette règles soit persistantes et la mettre en dur dans un fichier.

Pour cela on va installer le paquet suivant :

apt install iptables-persistent

Il me demande si je souhaite sauvegarder mes règles IPv4 je mets oui

N’ayant pas de règles ipV6 non

J’édite ensuite le fichier ou vons être stockés toutes mes règles (persistantes)iptables

vim /etc/iptables/rules.v4 
# Generated by xtables-save v1.8.2 on Sat Jan 23 00:05:44 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o enp0s3 -j MASQUERADE
COMMIT
# Completed on Sat Jan 23 00:05:44 2021
# Generated by xtables-save v1.8.2 on Sat Jan 23 00:05:44 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Jan 23 00:05:44 2021

On observe bien ma règle créer précédemment qui a été sauvegardés dans le fichier.

Si je fait une nouvelle règle pour quels soit persistantes il faudra la taper en CLI (ou la mettre directement dans le fichier)puis utiliser la commandes suivantes :

iptables-save > /etc/iptables/rules.v4

5. Sécuriser son routeur

Nous allons présenter quelques règles simples iptables pour sécuriser l’accès à son routeur. (On détaillera iptables, les policy ect … dans un autre tuto)

ATTENTION : en règle général il faut bien réfléchir et bien configurer ses règles iptables pour ne pas se bloquer soit même ça m’est déjà arriver … 😐

Pour l’exemple on va juste sécuriser l’accès au routeur en SSH. Donc je vais autoriser l’accès à mon routeur depuis l’ip de mon PC(physique) sur la pate WAN de mon routeur.

iptables -A INPUT -s 192.168.1.253 -p tcp --dport ssh -j ACCEPT

Explications :

-A : pour ajouter la règle

Chain INPUT : c’est l’endroit où les paquets qui arrivent rentrent dans la carte réseau et sont à destination d’un des programmes qui tournent sur la machine.
Exemple une connexion ssh qui arrive sur la machine. La demande de connexion va passer par cette chaîne INPUT. En gros les paquets destinés à mon routeur.

-p : le protocole ici tcp

–dport : destination port(ici le port 22 pour ssh)

-j : jump, l’action à faire(ici nous allons l’accepter).

Je vais maintenant bloquer tout les IPs qui souhaiteraient se connecter à mon routeur Debian.

iptables -I INPUT 2 -p tcp --dport ssh -j DROP

-I : pour que j’insère cette règle à une certaines position car mes règles sont lues de la première à dernière et si je la mets en premier alors je bloquerais mon accès.

INPUT 2 : en deuxième position sur la châine INPUT.

Si j’essaie de me connecter avec ma lubuntu à mon routeur Debian je n’y parviens pas.

Je rend ensuite mes règles persistentes :

iptables-save > /etc/iptables/rules.v4
root@DEBIAN-ROUTEUR:~# cat /etc/iptables/rules.v4 
# Generated by xtables-save v1.8.2 on Sat Jan 23 00:49:11 2021
*nat
:PREROUTING ACCEPT [42:8199]
:INPUT ACCEPT [31:6833]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [11:811]
-A POSTROUTING -o enp0s3 -j MASQUERADE
COMMIT
# Completed on Sat Jan 23 00:49:11 2021
# Generated by xtables-save v1.8.2 on Sat Jan 23 00:49:11 2021
*filter
:INPUT ACCEPT [688:56838]
:FORWARD ACCEPT [2364:198544]
:OUTPUT ACCEPT [1023:117084]
-A INPUT -s 192.168.1.253/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Completed on Sat Jan 23 00:49:11 2021

Mes règles sont bien enregistrés dans mon fichier et seront toujours présentes lors du redémarrage de la machine.

C’est la fin de ce tuto j’espère qu’ils vous a plu et qu’il vous a permis de voir par mal de notions réseaux sur Debian et qu’ils vous sera utile pour la suite.

A bientôt 😀 !

Utiliser Debian en tant que routeur (1 ère partie).

Nous allons configurer notre routeur Debian pour qu’il puisse avoir les mêmes fonctionnalités qu’un mini routeur/firewall. Nous activerons le DHCP,le routage, et le NAT. On finira avec quelques règles de firewall iptables 😉 .

Prérequis : savoir installer Debian et Lubuntu. Savoir utiliser et avoir installé Virtualbox.

Contexte : Dans ce tuto mon routeur(Debian 10) et mes 2 PCs (Lubuntu 20) sont des VMs sur Virtualbox. Mon routeur Debian à une carte sur mon réseau LAN(de ma box internet)qui représentent ici le WAN du routeur et 2 autres cartes sur 2 réseau interne virtualbox différents. Je montrerai comment j’ai configuré mes cartes réseaux sur Virutalbox.

Voici le schémas du LAB :

Configuration Réseau du ROUTEUR-DEBIAN

Adresse IP WAN : 192.168.1.195

Adresse IP LAN1 : 10.10.20.1

Adresse IP LAN2 : 10.10.30.1

Pour la configuration réseau des Lubuntu nous allons utiliser le DHCP.

1. Configuration des interfaces

Afficher la configuration réseau :

ip a

On observe que mon interface « WAN » reçoit une IP de ma box et mes 2 interfaces LAN n’ont pas d’IP ce qui est normal car je ne les ai pas configurés. On va l’aisser l’interface « WAN » enp0s3 en DHCP les 2 autres enp0s8 et enp0s9 vont elles êtres en IP statics.

J’édite donc le fichier /etc/network/interfaces

vim /etc/network/interfaces

Je rajoute ceci à la fin du fichier :


#LANLINUX1
auto enp0s8
iface enp0s8 inet static
	address 10.10.20.1
	netmask 255.255.255.0
#LANLINUX2
auto enp0s9
iface enp0s9 inet static
	address 10.10.30.1
	netmask 255.255.255.0

J’enregistre et je restart le service networking.service

systemctl restart networking.service

J’affiche de nouveau ma configuration réseau :

ip a

J’ai bien toutes mes interfaces configurés.

Passons au DHCP !

2. Installation et configuration du DHCP.

  1. Installer le serveur dhcp
apt install isc-dhcp-server

D’ailleurs une fois installés le service n’est pas activé on l’activera plus tard

Nous allons maintenant spécifier sur quel interface le serveur DHCP doit écouter pour ensuite distribuer les IPs. Nous allons donc éditer le fichier /etc/default/isc-dhcp-server

vim /etc/default/isc-dhcp-server

Dans « INTERFACESv4= » je vais ajouter l’interface enp0s8 et enp0s9 comme mentionnés dans le fichier de conf « Separate multiple interfaces with spaces » je vais séparer mes interfaces par un espace comme ceci

INTERFACESv4="enp0s8 enp0s9"

On pourra commenter INTERFACESv6 car on ne va pas l’utiliser. Enregistrer et quitter.

Nous allons maintenant configurer le fichier /etc/dhcp/dhcpd.conf.

Avant tout configuration je vais une sauvegarde de mon fichier :

cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.old

On édite de fichier :

 vim /etc/dhcp/dhcpd.conf

On voit qu’on a pas mal d’exemples pour configurer son serveur DHCP. La documentation sur le fichier de conf est bien faites.

Configuration du domain name et des DNS

option domain-name "savoirit.lab";
option domain-name-servers 8.8.8.8, 8.8.4.4;

On configure le range et les informations réseaux pour les 2 sous réseaux

#LANLINUX 10.10.20.0/24

subnet 10.10.20.0 netmask 255.255.255.0 {
  range 10.10.20.10 10.10.20.50;
  option domain-name-servers 8.8.8.8;
  option routers 10.10.20.1;
  option broadcast-address 10.10.20.255;
  default-lease-time 600;
  max-lease-time 7200;
}

#LANLINUX2 10.10.30.0/24

subnet 10.10.30.0 netmask 255.255.255.0 {
  range 10.10.30.10 10.10.30.50;
  option domain-name-servers 8.8.8.8;
  option routers 10.10.30.1;
  option broadcast-address 10.10.30.255;
  default-lease-time 600;
  max-lease-time 7200;
}

On enregistre le fichier « :wq »(sur VIM)

On va démarrer le service et surtout l’activer pour qu’il démarre automatiquement au démarrage de la machine

root@DEBIAN-ROUTEUR:~# systemctl enable isc-dhcp-server.service
isc-dhcp-server.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable isc-dhcp-server

root@DEBIAN-ROUTEUR:~#systemctl start isc-dhcp-server.service

root@DEBIAN-ROUTEUR:~# systemctl status isc-dhcp-server.service 
● isc-dhcp-server.service - LSB: DHCP server
   Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
   Active: active (running) since Thu 2021-01-21 19:38:55 CET; 19min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 1 (limit: 1147)
   Memory: 4.8M
   CGroup: /system.slice/isc-dhcp-server.service
           └─701 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf enp0s8 enp0s9

janv. 21 19:38:53 DEBIAN-ROUTEUR systemd[1]: Starting LSB: DHCP server...
janv. 21 19:38:53 DEBIAN-ROUTEUR isc-dhcp-server[689]: Launching IPv4 server only.
janv. 21 19:38:53 DEBIAN-ROUTEUR dhcpd[701]: Wrote 0 leases to leases file.
janv. 21 19:38:53 DEBIAN-ROUTEUR dhcpd[701]: Server starting service.
janv. 21 19:38:55 DEBIAN-ROUTEUR isc-dhcp-server[689]: Starting ISC DHCPv4 server: dhcpd.
janv. 21 19:38:55 DEBIAN-ROUTEUR systemd[1]: Started LSB: DHCP server.

Je configure sur Virtualbox les cartes réseaux de mes 2 VMs Lubuntu comme ci-dessous puis je les démarre.

Pour la LUBUNTU :

Pour la Lubuntu 2 :

Je démarre mes 2 Lubuntu et j’affiche leur configuration réseau.

Lubuntu :

Lubuntu 2 :

J’observe que pour mes 2 Lubuntu je reçois bien les informations réseaux que j’ai configuré.

Pour informations je peux voir mes leases dhcp avec la commande suivante :

root@DEBIAN-ROUTEUR:~# dhcp-lease-list 
To get manufacturer names please download http://standards.ieee.org/regauth/oui/oui.txt to /usr/local/etc/oui.txt
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer        
===============================================================================================
08:00:27:b9:66:0c  10.10.20.10     lubuntu        2021-01-22 17:26:56 -NA-                
08:00:27:c1:56:b8  10.10.30.10     lubuntu        2021-01-22 17:27:18 -NA-  

La suite du LAB dans la partie 2 🙂

Installer Bitwarden sur Debian 10

Si vous en avez marre des gestionnaire de mots de passe propriétaires et hébergé on se sait où . Si vous utilisez keepass mais bon pour le web c’est pas le plus pratique. Alors bitwarden est parfait pour vous.

Dans ce tuto nous allons voir comment installer Bitwarden sur Debian 10. L’installation se fait simplement et assez rapidement. Dans ce tuto je l’installe sur une machine local (VM Vmware Workstation) donc je ne vais pas utiliser une autorité de certification pour mon https je le ferai en self signed.

Avant de débuter l’installation je vais aller sur le lien suivant pour générer un ID et une KEY indispensable lors de installation de Bitwarden : https://bitwarden.com/host/

Je renseigne mon mail et je récupère l’ID et la KEY.

On commence l’installation !

1 ère étape : Installer docker et docker-compose.

apt install docker docker-compose

2 ème étape : On vérifie le bon fonctionnement de docker

docker run hello-world

Si tout fonctionne bien vous aurez ce message.

3 ème étape : Installation de curl et téléchargement du script bitwarden.sh

apt install curl

Puis on télécharge le script bash pour l’installation de bitwarden :

curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh

Puis donner les droits d’exécution

chmod +x bitwarden.sh

4 ème étape : Lancer l’installation et start les containers bitwarden à l’aide du script.

./bitwarden.sh install

Répondez aux questions comme ci-dessus en mettant votre domaine si votre bitwarden est sur internet sinon renseigner un domaine de Lab comme j’ai fait (il faudra renseigner le fichier hosts de votre PC) ou sinon mettre l’IP local de votre VM.

Il faudra ensuite renseignez l’ID et la Key générer au début.

N’ayant pas de cetificat SSL je mets non si vous en avez un mettre « y ».

Je génére un certificat self-signed et c’est partit !!!

Une fois installé je start bitwarden (cela va démarrer les différents containers dockers) :

./bitwarden.sh start

J’arrive sur cette page (après avoir renseignés mon fichier hosts)

Je créer mon compte puis une fois créer je peux me connecter à mon Bitwarden

Pour créer mes mots de passe il suffit de cliquez sur « Ajouter un élément » et ensuite je peux les classifier par dossier.

Il faudra installer ensuite l’extension pour votre navigateur Mozilla, Google ect … Et enregistrez vos mots de passe pour chaque site.

Facile non ? 😀

Dites le moi en commentaires.