SSH - Configuration du Port Knocking
De PedroWiki
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.