SSH - Configuration du Port Knocking

De PedroWiki
Aller à la navigationAller à la recherche

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 resteindre 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