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