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 30/01/2008, 13:57]
Ner0lph
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 ======
Ligne 13: 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 ;
Ligne 24: Ligne 22:
  
  
-===== Paramétrage du serveur ​=====+ 
 +===== 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. 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.
  
-La configuration du serveur est très simple puisqu'​il suffit d'​[[:​tutoriel:​comment_installer_un_paquet|installer le paquet]] ​**knockd**.+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**. ​ 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 : Deux 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 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).   * la seconde méthode à celles qui doivent l'​être (comme SSH et IRC).
 +
  
  
Ligne 58: Ligne 58:
 </​file>​ </​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 :
 <​file>​sequence ​       = 7000:​tcp,​8000:​udp,​9000:​tcp</​file>​ <​file>​sequence ​       = 7000:​tcp,​8000:​udp,​9000:​tcp</​file>​
 +
  
  
Ligne 91: Ligne 92:
 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//​) 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 !)
  
  
Ligne 97: Ligne 100:
  
 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 voir, nous 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) 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 voir, nous 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)
 +
 +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é : 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ïac, vous pouvez en ajoutant autant que nécessaire pour vous rassurer)+  * 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   * de mélanger pour chaque port les protocoles TCP et UDP
  
Ligne 118: 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 133: Ligne 138:
 ===== Liens ===== ===== Liens =====
  
-  * [[http://​portknocking.org/​|Site officiel]]+  * [[https://​web.archive.org/​web/​20180726181817/​http://www.portknocking.org/​|Site officiel]]
   * [[wpfr>​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]]
  
  
  • port-knocking.1201697831.txt.gz
  • Dernière modification: Le 31/01/2008, 06:20
  • (modification externe)
  • Actuellement bloqué par: 18.117.98.178,10.42.2.254