« SSH - Configuration du Port Knocking » : différence entre les versions
De PedroWiki
Aller à la navigationAller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 19 : | Ligne 19 : | ||
= Configuration côté serveur = | = Configuration côté serveur = | ||
Configuration dans < | Configuration dans <code>/etc/knockd.conf</code>: | ||
<pre> | <pre> | ||
| Ligne 49 : | Ligne 49 : | ||
* '''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. | * '''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. | * '''seq_timeout''': la durée pendant laquelle le service attends la séquence de ports. | ||
* '''command''': en général, une commande < | * '''command''': en général, une commande <code>iptables</code> permettant d'ajouter dynamiquement une règle de parefeu. | ||
* '''cmd_timeout''': durée au delà de laquelle on exécute **stop_command**. | * '''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. | * '''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. | * '''tcpflags''': les types de trames TCP attendues pour le jeu de la séquence. | ||
'''NB''': on voit dans le bloc < | '''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 < | Configuration dans <code>/etc/default/</code>: | ||
<pre> | <pre> | ||
| Ligne 72 : | Ligne 72 : | ||
* '''KNOCKD_OPTS''' permet d'ajouter des options à l'appel du lancement du service. | * '''KNOCKD_OPTS''' permet d'ajouter des options à l'appel du lancement du service. | ||
'''NB''': l'option < | '''NB''': l'option <code>-i</code> est très importante, car sans configurer une interface d'écoute, le service ne démarrera tout simplement pas. | ||
= Configuration côté client = | = Configuration côté client = | ||
Version du 23 décembre 2025 à 13:37
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/:
# 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.