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 :
PK001

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" :
PK002

Idem que précédemment concernant l'IP de Google.
Puis ajout de la "Phase finale" :
PK003

Nous retrouvons donc nos différentes phases comme ci-dessous :
PK004

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 :
PK005

Puis onglet "Action", nous la rattacherons à notre "Phase1" pour 10 secondes :
PK006

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 :
PK007

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" :
PK008

Puis onglet "Action", nous la rattacherons à notre "Phase2" pour 10 secondes :
PK009

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 :
PK010

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" :
PK011

Puis onglet "Action", nous la rattacherons à notre "Phase Finale" pour 1 minute :
PK012

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 :
PK013

Dans l'onglet "Advanced", nous limitons uniquement aux adresses IP présentes dans la liste d'adresses "PK_Secure" :
PK014

Puis dans l'onglet "Action" nous acceptons que le flux passe :
PK015

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 :
PK016

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 :
PK017

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 :
PK018

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" :
PK019

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 :
PK020

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").