« SSH - Configuration du Port Knocking » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (Une version intermédiaire par le même utilisateur non affichée) | |||
| Ligne 1 : | Ligne 1 : | ||
= Introduction = | = Introduction = | ||
La technique de Port Knocking consiste à autoriser des connexions SSH (mais pas que) en fonction de l'accès à une suite de | La technique de Port Knocking consiste à autoriser des connexions SSH (mais pas que) en fonction de l'accès à une suite de ports depuis le client. | ||
De cette façon, | De cette façon, | ||
| Ligne 10 : | Ligne 10 : | ||
* certaines IPs de box notamment sont susceptibles de changer dans le temps. | * certaines IPs de box notamment sont susceptibles de changer dans le temps. | ||
* on n'est pas toujours derrière ces IPs au moment où on a besoin de se connecter. | * on n'est pas toujours derrière ces IPs au moment où on a besoin de se connecter. | ||
= Pré requis = | |||
Le système à protéger doit disposer du package <code>iptables</code> et d'une configuration de parefeu restrictive sur le port SSH. | |||
A toutes fins utiles, cf [https://lea-linux.org/documentations/iptables ce très bon guide iptables de Léa Linux]. | |||
= Packages à installer = | = Packages à installer = | ||
Dernière version du 23 décembre 2025 à 13:59
Introduction
La technique de Port Knocking consiste à autoriser des connexions SSH (mais pas que) en fonction de l'accès à une suite de ports depuis le client.
De cette façon,
- il n'est pas nécessaire d'avoir une règle autorisant une IP ou une liste d'IP à se connecter en SSH.
- il suffit simplement de connaître la séquence de port à prober pour ouvrir le flux temporairement et pouvoir se connecter.
NB: il peut être contraignant de restreindre l'accès au port SSH par iptables pour plusieurs raisons
- certaines IPs de box notamment sont susceptibles de changer dans le temps.
- on n'est pas toujours derrière ces IPs au moment où on a besoin de se connecter.
Pré requis
Le système à protéger doit disposer du package iptables et d'une configuration de parefeu restrictive sur le port SSH.
A toutes fins utiles, cf ce très bon guide iptables de Léa Linux.
Packages à installer
Qu'on souhaite utiliser le service knockd ou le client knock, le package à installer est le même:
apt install knockd
Configuration côté serveur
Configuration dans /etc/knockd.conf:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 2001,2004,2007
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 2007,2004,2001
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[openHTTPS]
sequence = 12345,54321,24680,13579
seq_timeout = 5
command = /usr/local/sbin/knock_add -i -c INPUT -p tcp -d 443 -f %IP%
tcpflags = syn
Détails sur l'utilité des options:
- logfile: par défaut, le service log dans le log système global, il est parfois plus pratique d'avoir un log dédié pour éviter les pollutions pendant un diag de fonctionnement.
- seq_timeout: la durée pendant laquelle le service attends la séquence de ports.
- command: en général, une commande
iptablespermettant d'ajouter dynamiquement une règle de parefeu. - cmd_timeout: durée au delà de laquelle on exécute **stop_command**.
- stop_command: dans notre cas, commande iptables retirant l'autorisation temporaire d'accès. **NB**: cela évite d'oublier de jouer la séquence de ports pour refermer le parefeu et donc de laisser un port inutilement ouvert.
- tcpflags: les types de trames TCP attendues pour le jeu de la séquence.
NB: on voit dans le bloc openHTTPS que le service peut être utilisé à d'autres fins que simplement donner un accès SSH.
Configuration dans /etc/default/knockd:
# control if we start knockd at init or not # 1 = start # anything else = don't start # PLEASE EDIT /etc/knockd.conf BEFORE ENABLING START_KNOCKD=1 # command line options KNOCKD_OPTS="-i enp0s3"
- START_KNOCKD à 1 permet d'activer le service au démarrage du serveur.
- KNOCKD_OPTS permet d'ajouter des options à l'appel du lancement du service.
NB: l'option -i est très importante, car sans configurer une interface d'écoute, le service ne démarrera tout simplement pas.
Configuration côté client
Pour jouer la séquence d'accès aux ports servant de combinaison d'accès (ou d'annulation de l'accès), utiliser le client knock:
knock <ip_destination> -v <port1> <port2> <port3>...
Options:
-v: mode verbeux, pour voir en temps réel le travail du client knock.-d: délai entre chaque accès aux ports de la liste.
Dans le cas où l'on utilise un fichier de configuration SSH (ex: ~/.ssh/config), on peut configurer l'accès comme suit:
Host maquetteknock
Hostname 10.0.2.9
Port 22
User julien
IdentityFile ~/.ssh/id_ecdsa
Match host 10.0.2.9 exec "knock -d 500 %h 2001 2004 2007"
Le bloc Host est assez classique:
- définition du hostname / de l'IP à joindre.
- port à contacter pour se connecter en SSH.
- l'utilisateur de connexion.
- le fichier de clé privé servant à l'authentification.
La configuration Match host/exec sert, dans notre cas, à exécuter une commande en préalable de l'établissement de la session: ici la commande knock permettant d'ouvrir les flux.