« 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 <pre>/etc/knockd.conf</pre>:
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 <pre>iptables</pre> permettant d'ajouter dynamiquement une règle de parefeu.
* '''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 <pre>openHTTPS</pre> 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 <pre>/etc/default/</pre>:
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 <pre>-i</pre> est très importante, car sans configurer une interface d'écoute, le service ne démarrera tout simplement pas.
'''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 iptables permettant 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.

Configuration côté client