« SSH - Configuration du Port Knocking » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 56 : | Ligne 56 : | ||
'''NB''': on voit dans le bloc <code>openHTTPS</code> que le service peut être utilisé à d'autres fins que simplement donner un accès SSH. | '''NB''': on voit dans le bloc <code>openHTTPS</code> que le service peut être utilisé à d'autres fins que simplement donner un accès SSH. | ||
Configuration dans <code>/etc/default/</code>: | Configuration dans <code>/etc/default/knockd</code>: | ||
<pre> | <pre> | ||
| Ligne 75 : | Ligne 75 : | ||
= Configuration côté client = | = 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 <code>knock</code>: | |||
<pre> | |||
knock <ip_destination> -v <port1> <port2> <port3>... | |||
</pre> | |||
Version du 23 décembre 2025 à 13:40
Introduction
La technique de Port Knocking consiste à autoriser des connexions SSH (mais pas que) en fonction de l'accès à une suite de port 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.
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>...