Le tocage à la porte, ou port-knocking, est une méthode permettant de modifier le comportement d'un pare-feu (firewall) en temps réel en provoquant l'ouverture de ports permettant la communication, grâce 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.
Nous allons donc mettre en place celle-ci sur un Mikrotik RB750GL afin de protéger l'accès à notre VPN en itinérance.
Nous n'aborderons pas la partie mise en place du VPN.
Pour résumer, votre terminal (smartphone, tablette, PC Portable ...) distant va envoyer une séquence (via l'envoi d'un paquet TCP ou UDP sur certains ports) sur votre Firewall, et celui-ci va autoriser les connexions depuis notre adresse IP.
Pour ce faire, notre Firewall va donc devoir stocker les adresses IP qui vont arriver, et ce pour une durée que nous allons lui préciser.
Nous devons mettre une durée car il se peut qu'une personne scanne les 65535 ports de votre Firewall et donc déclenche l'autorisation, ce qui ne serait pas souhaitable.
Création des listes d'adresses (stockage des adresses IP)
Dans un premier temps, nous allons ajouter 3 phases.
Nous pouvons en rajouter plus sans aucun soucis.
Nous lançons WinBox, puis dans le menu de gauche "IP", "Firewall" et pour finir l'onglet "Address Lists".
Nous ajoutons donc une première liste d'adresses, la "Phase1" comme indiqué ci-dessous :
Comme on peut le voir sur la capture, il n'est pas possible de créer une liste d'adresses vide.
Nous avons donc ajouté une adresse IP qui ne risque normalement pas de nous pirater, le DNS de Google.
Ajout de la "Phase2" :
Idem que précédemment concernant l'IP de Google.
Puis ajout de la "Phase finale" :
Nous retrouvons donc nos différentes phases comme ci-dessous :
Ajout des règles du Firewall
Toujours dans la partie "Firewall", nous allons sur l'onglet "Filter Rules", puis ajoutons nos 3 différentes règles qui serviront de séquences.
Première séquence
Onglet "General" nous utiliserons le Protocol TCP et le port 12345 :
Puis onglet "Action", nous la rattacherons à notre "Phase1" pour 10 secondes :
Cela nous laisse donc 10 secondes pour jouer la seconde séquence. En cas de lenteur sur le réseau, c'est suffisant.
Seconde séquence
Onglet "General" nous utiliserons le Protocol UDP et le port 23456 :
Dans l'onglet "Advanced", nous vérifions que l'adresse IP en question est déjà présente dans notre liste d'adresses de la "Phase1" :
Puis onglet "Action", nous la rattacherons à notre "Phase2" pour 10 secondes :
Cela nous laisse donc 10 secondes pour jouer la dernière séquence.
Dernière séquence
Onglet "General" nous utiliserons le Protocol TCP et le port 45678 :
Dans l'onglet "Advanced", nous vérifions que l'adresse IP en question est déjà présente dans notre liste d'adresses de la "Phase2" :
Puis onglet "Action", nous la rattacherons à notre "Phase Finale" pour 1 minute :
Nous avons donc 1 minute pour lancer notre connexion finale, dans mon cas mon client VPN.
Ouverture du Firewall pour notre adresse IP
Dans l'onglet "General", nous autorisons les connexions sur notre interface WAN :
Dans l'onglet "Advanced", nous limitons uniquement aux adresses IP présentes dans la liste d'adresses "PK_Secure" :
Puis dans l'onglet "Action" nous acceptons que le flux passe :
Toutes ces règles sont bien entendu à remonter avant la règle de "DROP".
Résumé des modifications
Nous pouvons constater que notre séquence est bien présente, ainsi que l'ordre dans laquelle nous devons l'effectuer :
Configuration de la séquence sur Android
Il suffit de configurer les ports et protocoles dans le même ordre que ce que vous avez fait sur votre Firewall, soit :
Test de connexion
Nous voici à la fin de cette mise en place, le saint Graal est au bout, nous allons nous connecter !
Une fois la séquence lancée depuis notre téléphone Android, nous pouvons voir dans la partie "Firewall" onglet "Filter Rules" que les 3 paquets sont bien arrivés :
Nous allons voir toujours dans la partie "Firewall", mais onglet "Address Lists", et nous pouvons constater que notre adresse IP est présentes dans les différentes "Phases" :
Ping des machines sur le réseau
Dans mon cas, je monte donc mon VPN avec mon téléphone Android, mais il se trouve que je ne pouvais pas me connecter sur les machines de mon réseau local.
Je surfais par contre bien via le VPN, et me trouvais avec l'adresse IP du serveur VPN.
Pour corriger le soucis, il suffit d'aller sur l'interface du réseau local et dans l'onglet "General" de passer l'ARP en "proxy-arp", comme ci-dessous :
Optimisation possible
Nous pouvons noter qu'il est également possible d'aller plus loin sur les vérifications, et d'envoyer depuis votre appareil mobile et de récupérer sur le Firewall un "code secret" via une "regexp" (onglet "Layer7 Protocols").