Bonjour,

Je fais face à un problème étrange avec Fedora Server : j’essaye d’implémenter le port-knocking, la configuration suivante fonctionne :

cat /etc/knockd.conf
[options]
interface = eno1
logfile = /var/log/knockd.log
[SSH]
sequence = 7000,8000,9000
seq_timeout = 20
tcpflags = syn
start_command = firewall-cmd --add-service=ssh --zone=FedoraServer
cmd_timeout = 10
stop_command = firewall-cmd --remove-service=ssh --zone=FedoraServer

J’ai ouvert les ports 7000, 8000 et 9000 :

sudo firewall-cmd --list-all --zone=FedoraServer
FedoraServer (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 7000/tcp 8000/tcp 9000/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

le service systemctl est bien activé, et pourtant lors d’un redémarrage, un knock depuis une autre machine n’a aucun effet, par contre si je redémarre knockd.service, là il commence à fonctionner, à faire les bonnes actions quand la séquence est envoyée, je le vois dans ses logs :

[2023-10-29 02:55] 192.168.1.22: SSH: Stage 1
[2023-10-29 02:55] 192.168.1.22: SSH: Stage 2
[2023-10-29 02:55] 192.168.1.22: SSH: Stage 3
[2023-10-29 02:55] 192.168.1.22: SSH: OPEN SESAME
[2023-10-29 02:55] SSH: running command: firewall-cmd --add-service=ssh --zone=FedoraServer
[2023-10-29 02:55] 192.168.1.22: SSH: command timeout
[2023-10-29 02:55] SSH: running command: firewall-cmd --remove-service=ssh --zone=FedoraServer

J’ai l’impression que c’est un soucis avec firewalld, comme si knockd ne voyait pas que les ports étaient ouverts. Cependant je ne suis sûr de rien.

Merci par avance pour vos réponses 🙂

Edit Nicosss : Correction des balises Markdown -> Voir FAQ

  • Nicosss a répondu à ça.
    • Meilleure réponsesélectionnée par Nicosss

    Bonjour,

    Je reviens vers vous car je pense qu’il est utile de clôturer ce sujet qui a été résolu.

    Après avoir vérifié l’état de knockd.service comme suggéré par Nicosss, il s’avère bien qu’après le démarrage, le processus est mort. Il s’avère que si le réseau n’est pas bien actif, knockd ne démarre pas, j’ai donc changé la séquence After=network.target par After=network-online.target et plus de soucis.

    Aussi il semblerait que firewalld surveille les services et ouvre les ports uniquement quand le service en a besoin. Il est donc totalement inutile de les ouvrir manuellement, autant d’un point de vue pratique que de la sécurité (pour ce point je raconte peut-être n’importe quoi, en réalité je suis pas très bon en réseau, toujours est-il que chez moi ça fonctionne “out of the box” sur ce point).

    Pour répondre à nouvo09 : il va en effet de soit que je n’utilise pas des ports prévisibles, surtout qu’il va s’agir d’un serveur de “production” (hébergement d’un site vitrine) et pas d’un petit bricolage.

    En tout cas merci pour vos réponses 🙂

    strike07 J’ai corrigé ton message concernant l’utilisation du bloc code en Markdown.

    Je t’invite vivement à lire les Conditions d’utilisation dont le lien est aussi en bas de page ainsi que plus particulièrement la FAQ du Forum. Merci par avance afin de faciliter la lisibilité.

    Tu dis que le service knockd.service est bien activé mais suite à redémarrage tu as bien vérifié qu’il était démarré ?

    Si tu consultes les logs system tu auras peut-être plus de détails
    $ sudo journalctl -r -u knockd.service

    Que contient /usr/lib/systemd/system/knockd.service ?

    Comme j’ignorais ce qu’est knock et son utilité, j’ai cherché sur le net et j’ai trouvé çà:

    Bien entendu il est impensable de conserver la séquence par défaut qui peut s’écrire également 9000:tcp,8000:tcp,7000:tcp . A vous de configurer votre séquence secrète.

    un mois plus tard

    Bonjour,

    Je reviens vers vous car je pense qu’il est utile de clôturer ce sujet qui a été résolu.

    Après avoir vérifié l’état de knockd.service comme suggéré par Nicosss, il s’avère bien qu’après le démarrage, le processus est mort. Il s’avère que si le réseau n’est pas bien actif, knockd ne démarre pas, j’ai donc changé la séquence After=network.target par After=network-online.target et plus de soucis.

    Aussi il semblerait que firewalld surveille les services et ouvre les ports uniquement quand le service en a besoin. Il est donc totalement inutile de les ouvrir manuellement, autant d’un point de vue pratique que de la sécurité (pour ce point je raconte peut-être n’importe quoi, en réalité je suis pas très bon en réseau, toujours est-il que chez moi ça fonctionne “out of the box” sur ce point).

    Pour répondre à nouvo09 : il va en effet de soit que je n’utilise pas des ports prévisibles, surtout qu’il va s’agir d’un serveur de “production” (hébergement d’un site vitrine) et pas d’un petit bricolage.

    En tout cas merci pour vos réponses 🙂