Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
port-knocking [Le 27/01/2008, 21:30]
sidney_v
port-knocking [Le 27/11/2023, 14:39] (Version actuelle)
86.107.127.8 [Liens] Le site Portknoking a changé de propriétaire
Ligne 1: Ligne 1:
-{{tag>​sécurité réseau ​brouillon}}+{{tag>​sécurité réseau}}
  
 ---- ----
- 
- 
-<​note>​Cet article est encore un **brouillon** qui peut ne pas fonctionner</​note>​ 
  
 ====== Port Knocking : sécuriser l'​accès à un port ====== ====== Port Knocking : sécuriser l'​accès à un port ======
  
-Le port-knocking est une méthode permettant de modifier le comportement d'un firewall en temps réel pour provoquer l'​ouverture d'un port suite au lancement préalable d'une suite de connexions sur des ports distincts dans le bon ordre, à l'​instar d'un code frappé à une porte.+Le **port-knocking** est une méthode permettant de modifier le comportement d'un firewall en temps réel pour provoquer l'​ouverture d'un port suite au lancement préalable d'une suite de connexions sur des ports distincts dans le bon ordre, à l'​instar d'un code frappé à une porte.
  
 Cette technique est notamment utilisée pour protéger l'​accès au port 22 dédié au Secure shell (SSH) ; elle ne nécessite pas beaucoup de ressources et reste facile à mettre en œuvre. Cette technique est notamment utilisée pour protéger l'​accès au port 22 dédié au Secure shell (SSH) ; elle ne nécessite pas beaucoup de ressources et reste facile à mettre en œuvre.
Ligne 14: Ligne 11:
 En résumé, **le port knocking est donc une méthode simple pour autoriser un accès distant sur un port non constamment ouvert**. Cela permet d'​éviter les scans de ports et certaines attaques. En résumé, **le port knocking est donc une méthode simple pour autoriser un accès distant sur un port non constamment ouvert**. Cela permet d'​éviter les scans de ports et certaines attaques.
  
-La méthode de port-knocking est considérée comme sécurisée étant donné qu'​elle est située à un niveau bas des couches TCP/IP et qu'​elle ne requière pas de port ouvert (le service knockd est lui aussi invisible). C'est donc une méthode, mais pas infaillible,​ de masquer la présence d'un serveur derrière un port.+La méthode de port-knocking est considérée comme sécurisée étant donné qu'​elle est située à un niveau bas des couches TCP/IP et qu'​elle ne requière pas de port ouvert (le service knockd est lui aussi invisible). C'est donc une méthode, mais pas infaillible, ​permettant ​de masquer la présence d'un serveur derrière un port.
  
 ===== Pré-requis ===== ===== Pré-requis =====
  
-Pour la suite des opérations,​ des pré-requis sont nécessaires : +Pour la suite des opérations,​ des pré-requis sont nécessaires :
   * Disposer des [[:​sudo|droits d'​administration]] ;   * Disposer des [[:​sudo|droits d'​administration]] ;
   * Disposer d'une connexion à Internet configurée et activée pour télécharger le logiciel ;   * Disposer d'une connexion à Internet configurée et activée pour télécharger le logiciel ;
-  * Avoir activé l'​accès au [[:​depots|dépôt APT]] 'universe'.+  * Avoir activé l'​accès au [[:​depots|dépôt APT]] « universe ​».
  
  
  
-===== Paramétrage du serveur ===== 
  
-Le serveur ​doit donc avoir un pare-feu et exécuter le service //knockd//. Le service est donc en écoute d'une séquence spécifique (suite de ports associés a un protocole tcp ou udp). Si la séquence est correcte, alors une commande est exécutée. Généralement,​ l'​adresse ip source est autorisée à accéder au port d'une application à travers le pare-feu.+===== Paramétrage du serveur ​====
  
-La configuration du serveur est très simple puisqu'il suffit ​d'[[:​tutoriel:​comment_installer_un_paquet|installer ​le paquet]] **knockd**+Le serveur ​doit donc avoir un pare-feu et exécuter le service //knockd//. Le service ​est donc en écoute d'une séquence spécifique (suite de ports associés a un protocole TCP ou UDP). Si la séquence est correcte, alors une commande est exécutée. Généralement,​ l'​adresse ip source est autorisée à accéder au port d'une application à travers ​le pare-feu.
  
-Après avoir installé le paquet, [[:​tutoriel:​comment_editer_un_fichier|éditer]] son fichier de configuration ​///​etc/​knockd.conf//+La configuration du serveur est très simple puisqu'​il suffit d'​[[:​tutoriel:​comment_installer_un_paquet|installer le paquet]] [[apt://​knockd|knockd]]. 
 + 
 +Après avoir installé le paquet, [[:​tutoriel:​comment_editer_un_fichier|éditer son fichier de configuration]] **/​etc/​knockd.conf**.  
 + 
 +Deux approches vont être présentées : 
 +  * la première est destinée aux connexions qui ne nécessitent pas d'​être maintenues (comme HTTP) ; 
 +  * la seconde méthode à celles qui doivent l'​être (comme SSH et IRC).
  
-2 approches vont être présentées : 
-  * La première est destinée aux connections qui ne nécessitent pas d'​être maintenues (comme HTTP)  
-  * La seconde méthode à celles qui doivent l'​être (comme SSH et IRC). 
  
  
Ligne 42: Ligne 41:
 ==== Connexions non maintenues (no keep-alive) ==== ==== Connexions non maintenues (no keep-alive) ====
  
-<code>​[options]+<file> 
 +[options]
         logfile = /​var/​log/​knockd.log         logfile = /​var/​log/​knockd.log
  
Ligne 55: Ligne 55:
         seq_timeout = 5         seq_timeout = 5
         command ​    = /​sbin/​iptables -D INPUT -s %IP% -p tcp --dport 80 -j ACCEPT         command ​    = /​sbin/​iptables -D INPUT -s %IP% -p tcp --dport 80 -j ACCEPT
-        tcpflags ​   = syn</code>+        tcpflags ​   = syn 
 +</file>
  
-Explications : +Explications :
     * **sequence** : la combinaison à matcher pour effectuer la '​command'​. Si aucun protocole n'est mentionné, le protocole par défaut est utilisé : TCP     * **sequence** : la combinaison à matcher pour effectuer la '​command'​. Si aucun protocole n'est mentionné, le protocole par défaut est utilisé : TCP
     * **seq_timeout** : le temps en secondes pendant lequel la combinaison doit être effectuée, après quoi elle est annulée, et il faut recommencer la séquence depuis le début.     * **seq_timeout** : le temps en secondes pendant lequel la combinaison doit être effectuée, après quoi elle est annulée, et il faut recommencer la séquence depuis le début.
-    * **command** : représente la règle iptables qui sera ajouté ​au firewall afin de permettre l'​ouverture/​fermeture d'un port particulier.+    * **command** : représente la règle iptables qui sera ajoutée ​au firewall afin de permettre l'​ouverture/​fermeture d'un port particulier.
     * **tcpflags** : met en évidence les flags devant être positionnés dans les paquets reçus pour que le port soit pris en compte. Si une erreur survient, il faut recommencer le tout.     * **tcpflags** : met en évidence les flags devant être positionnés dans les paquets reçus pour que le port soit pris en compte. Si une erreur survient, il faut recommencer le tout.
  
-Nous avons donc définis ​2 séquences :+Nous avons donc défini ​2 séquences :
   * **openHTTP** ouvre le port HTTP 80 si la séquence de ports 7000, 8000 et 9000 a été exécutée   * **openHTTP** ouvre le port HTTP 80 si la séquence de ports 7000, 8000 et 9000 a été exécutée
   * **closeHTTP** ferme le port HTTP 80 si la séquence de ports 9000, 8000 et 7000 a été exécutée   * **closeHTTP** ferme le port HTTP 80 si la séquence de ports 9000, 8000 et 7000 a été exécutée
  
-Il est possible de préciser le protocole "​frappé"​ en adaptant la ligne comme suit par exemple :  +Il est possible de préciser le protocole "​frappé"​ en adaptant la ligne comme suit par exemple : 
-<code>​sequence ​       = 7000:​tcp,​8000:​udp,​9000:​tcp</​code>+<file>​sequence ​       = 7000:​tcp,​8000:​udp,​9000:​tcp</​file> 
  
  
Ligne 75: Ligne 77:
 Ce deuxième exemple est un peu différent du précédent : Ce deuxième exemple est un peu différent du précédent :
  
-<code>​[options]+<file> 
 +[options]
       logfile = /​var/​log/​knockd.log       logfile = /​var/​log/​knockd.log
  
Ligne 84: Ligne 87:
       tcpflags ​   = syn       tcpflags ​   = syn
       cmd_timeout ​  = 10       cmd_timeout ​  = 10
-      stop_command ​ = /​sbin/​iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT</code>+      stop_command ​ = /​sbin/​iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 
 +</file>
  
-Il est recommandé de n'​ouvrir le port qu'un court instant (10 secondes dans cet exemple). Pour que cela soit fonctionnel,​ le pare-feu doit être de type [[http://​fr.wikipedia.org/​wiki/​Pare-feu#​Pare-feu_.C3.A0_.C3.A9tats_.28stateful_firewall.29|stateful]] ​ (il doit exister une règle pour accepter les connexions avec //-m state --state RELATED,​ESTABLISHED//​+Il est recommandé de n'​ouvrir le port qu'un court instant (10 secondes dans cet exemple). Pour que cela soit fonctionnel,​ le pare-feu doit être de type [[wpfr>Pare-feu#​Pare-feu_.C3.A0_.C3.A9tats_.28stateful_firewall.29|stateful]] ​ (il doit exister une règle pour accepter les connexions avec //-m state --state RELATED,​ESTABLISHED//​)
- +
-Si un utilisateurs "​frappe"​ dans l'​ordre les ports 7000, 8000 puis 9000, la comande sera exécutée (ouvrir le port 22). 10 secondes plus tard, la commande //​stop_command//​ sera exécutée, fermant ainsi le port pour les nouvelles connexions (mais pas celle en cours !)+
  
 +FIXME : Cette règle n'est pas présente par défaut ; il faudrait préciser comment la renseigner. (http://​doc.ubuntu-fr.org/​iptables#​autoriser_le_trafic_entrant_d_une_connexion_deja_etablie)
  
 +Si un utilisateurs « frappe » dans l'​ordre les ports 7000, 8000 puis 9000, la commande sera exécutée (ouvrir le port 22). 10 secondes plus tard, la commande //​stop_command//​ sera exécutée, fermant ainsi le port pour les nouvelles connexions (mais pas celle en cours !)
  
  
 ==== Attention ==== ==== Attention ====
  
-Changez impérativement la séquence d'​exemple de votre fichier de configuration, ​et bien entendu, pensez ​à communiquer ​la nouvelle !+Le site officiel du projet knockd (et le fichier de configuration ​installé par défaut) fait référence à la règle iptables **-A**. Comme vous pouvez le voirnous utiliserons ​à la place **-I** pour insérer la règle au début du pare-feu (sinon la règle avec -A ne produit aucun effet puisqu'​elle est ajoutée après la règle DROP)
  
-Vous devez également changer la configuration par défaut dans le fichier ​///​etc/​default/​knockd// :+FIXME : Tout dépend de la règle par defaut, si la décision est drop le -A fonctionnera,​ mais -I fonctionne dans tous les cas. 
 + 
 +Changez impérativement la séquence d'​exemple de votre fichier de configuration,​ et bien entendu, pensez à communiquer la nouvelle en gardant à l'​esprit qu'il est recommandé : 
 +  * d'​utiliser au moins 3 ports  (si vous êtes paranoïaque,​ vous pouvez en ajoutant autant que nécessaire pour vous rassurer) 
 +  * de mélanger pour chaque port les protocoles TCP et UDP 
 + 
 + 
 +Vous devez également changer la configuration par défaut dans le fichier ​« /​etc/​default/​knockd ​» :
   * pour que le service démarre automatiquement,​ la valeur de la ligne //​START_KNOCKD=//​ doit être à 1   * pour que le service démarre automatiquement,​ la valeur de la ligne //​START_KNOCKD=//​ doit être à 1
   * pour que le service écoute sur des interfaces, adapter et décommenter la ligne //​KNOCKD_OPTS="​-i eth0"//​ (en enlevant le '#'​)   * pour que le service écoute sur des interfaces, adapter et décommenter la ligne //​KNOCKD_OPTS="​-i eth0"//​ (en enlevant le '#'​)
-  * pour que les modifications soient prises en compte, redémarrer le service knockd avec la commande : //sudo /​etc/​init.d/​knockd restart//+  * pour que les modifications soient prises en compte, redémarrer le service knockd avec la commande : ''​sudo /​etc/​init.d/​knockd restart''​
  
-Pour en savoir plus, exécutez dans un terminal la commande ​//man knockd//+Pour en savoir plus, exécutez dans un terminal la commande ​''​man knockd''​.
  
 C'est tout ! C'est tout !
- 
- 
  
  
Ligne 114: Ligne 123:
 Pour initier une séquence sur les différents ports, vous pouvez utiliser le client de votre choix, comme **telnet** ou le 'swiss army knife' **nc**... Pour initier une séquence sur les différents ports, vous pouvez utiliser le client de votre choix, comme **telnet** ou le 'swiss army knife' **nc**...
  
-Ou bien utiliser un logiciel client spécifique au port-knocking comme //knock//, après avoir [[:​tutoriel:​comment_installer_un_paquet|installé le paquet]] ​//knockd// (sur le client cette fois-ci !)+Ou bien utiliser un logiciel client spécifique au port-knocking comme //knock//, après avoir [[:​tutoriel:​comment_installer_un_paquet|installé le paquet]] ​**knockd** (sur le client cette fois-ci !).
  
 Pour l'​utiliser,​ lancer simplement la commande (l'​utilisation du protocole TCP est faite par défaut) : Pour l'​utiliser,​ lancer simplement la commande (l'​utilisation du protocole TCP est faite par défaut) :
Ligne 129: Ligne 138:
 ===== Liens ===== ===== Liens =====
  
-  * [[http://​portknocking.org/​|Site officiel]] +  * [[https://​web.archive.org/​web/​20180726181817/​http://www.portknocking.org/​|Site officiel]] 
-  * [[http://​fr.wikipedia.org/​wiki/​Port_knocking|Page sur l'​encyclopédie libre Wikipedia]]+  * [[wpfr>Port_knocking|Page sur l'​encyclopédie libre Wikipedia]]
   * [[http://​www-igm.univ-mlv.fr/​~dr/​XPOSE2004/​killy/​fonctionnement.html|Fonctionnement avec schémas explicatifs]]   * [[http://​www-igm.univ-mlv.fr/​~dr/​XPOSE2004/​killy/​fonctionnement.html|Fonctionnement avec schémas explicatifs]]
 +  * [[https://​www.it-connect.fr/​chapitres/​configuration-du-port-knocking-ssh/​|Mise en place d’un port-knocking SSH]]
  
  
 ---- ----
  
-//​Contributeurs// : [[:​utilisateurs/sidney_v|sidney_v]]+//​Contributeurs : [[:​utilisateurs:sidney_v]].//
  • port-knocking.1201465852.txt.gz
  • Dernière modification: Le 18/04/2011, 14:39
  • (modification externe)