Port Knocking

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Port Knocking

Définition du Port Knocking

Le Port Knocking est une méthode simple pour autoriser un accès distant sur un port qui n'est pas constamment ouvert. Cela permet d'éviter les scans de ports et certaines attaques automatiques.
Il permet de modifier le comportement d'un pare-feu en temps réel pour ouvrir un port suite au lancement préalable d'une suite de connexions dans le bon ordre sur des ports distincts.
Cette méthode située à un niveau bas des couches TCP/IP est considérée comme sécurisée. Elle ne requière pas de port ouvert, le service knockd est également invisible.
Le Port Knocking permet de masquer le port SSH pour y accéder avec un enchaînement de requêtes sur des ports prédéfinis. Par exemple 1111 puis 2222 puis 3333 et enfin vers le port SSH.
Le masquage de port ne fournit pas de protection contre un attaquant surveillant le trafic entre le client et le serveur ce qui fera ressortir les commandes d'accès au vrai port SSH.
La meilleure sécurité, si on doit laisser un port SSH ouvert, n'est ni de le changer ni de le masquer mais tout simplement d'utiliser une clé avec une phrase secrète.
Le Port Knocking doit être utilisé uniquement comme une méthode complémentaire à un mécanisme d’authentification et non comme un système de sécurité.
Changer le port permettra principalement de se prémunir contre un bon nombre de scripts et de scanners qui ciblent le port 22 par défaut.
Il est indispensable de toujours sécuriser les services à l'aide des outils natifs disponibles pour obtenir les meilleurs résultats.
La sécurité par obfuscation est parfois dénigrée puisqu'elle consiste à masquer un service au lieu de le sécuriser.
On peut voir un point commun entre le Port Knocking et la stéganographie, ou art de la dissimulation.
L'attaquant n'a pas idée qu’il existe un port à attaquer avec le Port Knocking ou qu’il existe un message à trouver pour la stéganographie.

Vérifier les règles Iptables existantes

La commande suivante permet de connaître les règles de Iptables.
sudo iptables -S

Le résultat retourné pour un système GNU/Linux Debian 9 Stretch venant d'être installé par défaut sur un serveur VPS OVH.
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
La commande suivante permet de lister les règles en cours.
sudo iptables -L

Le résultat retourné pour un système GNU/Linux Debian 9 Stretch venant d'être installé par défaut sur un serveur VPS OVH.
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
La commande suivante permet de lister les règles en cours en ajoutant le mode verbeux.
sudo iptables -L -v

Le résultat retourné pour un système GNU/Linux Debian 9 Stretch venant d'être installé par défaut sur un serveur VPS OVH.
Chain INPUT (policy ACCEPT 3052 packets, 217K bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2498 packets, 250K bytes)
pkts bytes target     prot opt in     out     source               destination

Sauvegarder les règles Iptables existantes

Sauvegarder les règles avec la commande iptables-save.
sudo iptables-save > /home/debian/iptables.save.rules
Afficher les règles sauvegardées.
cat /home/debian/iptables.save.rules

# Generated by iptables-save v1.6.0 on Tue Jul 16 01:50:00 2019
*filter
:INPUT ACCEPT [747:34647]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [670:32821]
COMMIT
# Completed on Tue Jul 16 01:50:00 2019
Restaurer les règles avec la commande iptables-restore.
sudo iptables-restore < /home/debian/iptables.save.rules

Vider le contenu des règles existantes avant de commencer a paramétrer Iptables

Avant de vider les règles, il est toujours judicieux de réaffirmer que les règles par défaut dans une table vide sont de tout accepter afin de maintenir la connexion actuelle.
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Vider les tables pour supprimer toutes les règles. Le pare-feu sera alors complètement ouvert.
sudo iptables -F
Restreindre maintenant le pare-feu en fonction des besoins.

Méthode 1 - Paramétrer le Port Knocking avec Iptables uniquement

Avantage de cette configuration

Iptables est très couramment utilisé et fait souvent l’objet d’un audit pour des problèmes de sécurité.
Ce service de frappe n'a aucune possibilité d'échouer et de vous laisser bloqué hors du serveur contrairement à un service de frappe spécifique.
Si le service Iptables échoue, il est toujours possible de rentrer dans le serveur en mode rescue pour le réparer : https://docs.ovh.com/fr/dedicated/ovh-rescue/

Préparer la restriction avec Iptables

Les chaînes OUTPUT et FORWARD ne nous concernent pas dans ce contexte.
Créer les chaînes qui seront utilisées lors de la connexion autorisée vers le serveur.
sudo iptables -N KNOCKING
sudo iptables -N GATE1
sudo iptables -N GATE2
sudo iptables -N GATE3
sudo iptables -N PASSED
Accepter toutes les connexions de la machine locale pour permettre aux services de communiquer entre eux.
sudo iptables -A INPUT -i lo -j ACCEPT
Fermer tous les ports entrants avec IPtables revient a fermer le port SSH et donc notre accès administrateur actuel, il faut donc avant tout autoriser les connexions déjà établies avant de fermer les ports.
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Services devant rester accessibles

Ajouter une règle par service entrant qui doit rester accessible et visible, sauf pour le SSH puisque lui va être caché
La règle est toujours la même, il faut juste changer le port (PORT) et éventuellement le protocole TCP par UDP en fonction de nos configurations, pour OpenVPN par exemple.
sudo iptables -A INPUT -p tcp --dport (PORT) -j ACCEPT
Si un serveur DNS est installé, par défaut debian n'en a pas besoin :
# sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Si un serveur FTP est installé, utiliser l'une des deux commandes suivantes :
# sudo iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
Si un serveur de mail avec SMTP, POP3 et IMAP est installé :
Mail SMTP:25
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Mail POP3:110
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT

Mail IMAP:143
sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT

Mail POP3S:995
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT
Si un serveur Web Apache2 en HTTP/HTTPS est installé :
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Si OpenVPN Server qui tournerait sur le port 913 en UDP est installé :
# sudo iptables -A INPUT -p udp --dport 913 -j ACCEPT
Si un serveur webmin est installé, il fonctionne en localhost, on y accède en export display, inutile de l'ouvrir :
# sudo iptables -A INPUT -p tcp --dport 1000 -j ACCEPT
Si l'outil de monitoring Monit est utilisé, privilégier le transfert de port depuis la configuration de Monit vers le port proxy 8080 pour ne pas avoir à ouvrir le port 1337.
# sudo iptables -A INPUT -p tcp --dport 1337 -j ACCEPT
Si un serveur de base de données MariaDB est installé, autoriser le trafic en interne pour localhost, ce qui a été fait plus haut.
Ne pas ouvrir le port 3306 sauf pour faire communiquer des serveurs en interne.
# sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Si le serveur de partage d'écran Teamviewer est installé :
C'est le port 5938 TCP et UDP qui sera utilisé, puis, le port 443 ou 80 en dernier recours.
Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
# sudo iptables -A INPUT -p tcp --dport 5938 -j ACCEPT
# sudo iptables -A INPUT -p udp --dport 5938 -j ACCEPT
Si SickRage est installé, autoriser le trafic en interne pour localhost, ce qui a été fait plus haut. Ne pas ouvrir le port 8081. Je n'utilise pas SickRage, tester en situation.
# sudo iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
Si la synchronisation avec DropBox est installée :
DropBox utilise le port 17500 TCP et UDP pour la synchronisation réseau par défaut.
Il utilise également les ports TCP 17600 et TCP 17603 pour le bouton Web «Ouvrir».
Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
# sudo iptables -A INPUT -p tcp --dport 17500 -j ACCEPT
# sudo iptables -A INPUT -p udp --dport 17500 -j ACCEPT
# sudo iptables -A INPUT -p tcp --dport 17600 -j ACCEPT
# sudo iptables -A INPUT -p tcp --dport 17603 -j ACCEPT

Transférer tout le trafic qui n'a pas été traité vers la chaîne KNOCKING

Transférer tout le trafic qui n'a pas été traité dans les règles ci-dessus vers la chaîne KNOCKING
Attention, il ne faut pas fermer le terminal à partir de cette étape !
Il est indispensable de conserver le premier terminal ouvert pour ne pas perdre l'accès au serveur car aucune règle n'a été ajoutée dans Iptables pour laisser le port 22 de SSH accessible.
Il est indispensable de terminer toute la configuration qui va suivre pour pouvoir tester son bon fonctionnement depuis un deuxième terminal.
Si la connexion devait ne pas s'effectuer correctement, on pourra encore réinitialiser les règles de Iptables depuis le premier terminal.
Une fois la configuration ajoutée, ouvrir un deuxième terminal pour tester que la connexion fonctionne correctement.
Si la connexion ne fonctionne pas, supprimer toutes les règles de Iptables depuis le premier terminal.
La perte d'accès au serveur obligerait a utiliser le mode rescue pour supprimer les règles IPtables.
On transfère tout le trafic qui n'a pas été traité dans les règles ci-dessus vers la chaîne KNOCKING pour réaliser la logique de cognement.
Inutile d'interdire le port de SSH depuis Iptables directement. Les règles suivantes vont gérer l'autorisation ou le refus de connexion au port de SSH.
sudo iptables -A INPUT -j KNOCKING

Configurer la première porte GATE1

Quand un client se connecte, nous devons observer si il envoie un paquet à notre première cible.
Si c'est le cas, le client a réussi le premier test et on abandonne la connexion.
Si ce n'est pas le cas, on abandonne la connexion.
Définir le drapeau sur la tentative de port correcte.
sudo iptables -A GATE1 -p tcp --dport 1111 -m recent --name AUTH1 --set -j DROP
Cette ligne ajoute une règle à la chaîne GATE1.
Cette règle correspondra lorsque le protocole utilisé sera "tcp" et que le port auquel on tentera d'accéder sera "1111".
Si cette condition est vraie, le module récent appelé avec -m recent marquera l'adresse IP ayant effectuée la demande avec le nom AUTH1 avec la règle --name AUTH1 --set.
C'est le drapeau que nous utiliserons pour voir si la seconde frappe à venir correspond.
Le paquet est abandonné après la définition de l'indicateur pour que le client ne sache pas si quelque chose s'est passé.
On supprime alors tous les autres paquets car les informations envoyées à cette chaîne ne nécessitent que le premier paquet à ce stade.
sudo iptables -A GATE1 -j DROP
Nous avons maintenant couvert notre premier port.
L'adresse est marquée si le bon port est demandé. Si aucune autre action n'est entreprise, le paquet est supprimé.

Configurer la deuxième porte GATE2

La deuxième porte est configurée de la même manière que la première.
La logique d’envoi du trafic vers cette chaîne existera dans la chaîne principale KNOCKING.
Cette chaîne n'a pas à vérifier si l'indicateur défini par la première porte correspond car cela a déjà été effectué en GATE1.
Les indicateurs sont supprimés à l'aide du module recent avant de commencer le traitement pour éviter qu'une adresse ne soit marquée avec des noms différents et que cela n'entraîne le blocage de l'adresse.
sudo iptables -A GATE2 -m recent --name AUTH1 --remove
Il s’agit d’une règle de traitement, on ne prend donc aucune décision, on supprime simplement le drapeau actuel, celui qui aurait autorisé le trafic dans cette chaîne.
L'adresse a dépassé notre première règle, dans cette chaîne, elle est propre et ne contient aucun drapeau.
On vérifie si cette tentative de connexion correspond correctement à la prochaine cible de port.
sudo iptables -A GATE2 -p tcp --dport 2222 -m recent --name AUTH2 --set -j DROP
Cette approche est traité de la même manière que la première porte.
On place un drapeau AUTH2 qui indique que l'adresse demandée a réussi le deuxième test si le port correct a été activé.
L'indicateur est défini et le paquet est à nouveau supprimé ce qui n'apporte aucune indication au client sur sa progression.
Un cas particulier pour éviter une situation particulière :
Si nous avions une règle "tout supprimer" ici et que le paquet envoyé à ce stade corresponde à la première cible frappante, il ne serait pas enregistré comme début de la séquence frappante.
Si notre client frappe deux fois par inadvertance sur le premier port, il ne sera pas considéré comme correct :
Premier port frappé. Le pare-feu marque le premier test réussi. Va vérifier pour le deuxième port suivant.
Premier port frappé. Ne correspond pas à la deuxième règle de port. La séquence est réinitialisée. Va vérifier le premier port ensuite.
Deuxième port touché. Ne correspond pas à la première règle de port. La séquence est réinitialisée. Va vérifier le premier port ensuite.
Troisième port frappé. Ne correspond pas à la première règle de port. La séquence est réinitialisée. Va vérifier le premier port ensuite.
Pour éviter cette situation, nous ne laisserons pas tomber le paquet à ce stade.
On tire partie de la chaîne GATE1 que nous avons déjà configurée.
On renvoie le trafic qui ne correspond pas à la deuxième cible frappée vers la première porte :
sudo iptables -A GATE2 -j GATE1
Cela entraîne la réinitialisation de la position du client.
Si la demande concerne le premier port, la séquence est redémarrée au premier coup réussi. Si ce n'est pas le premier port, la séquence est abandonnée.

Configurer la troisième porte GATE3

Mettre en œuvre la troisième porte de la même manière que la deuxième porte.
Les indicateurs sont supprimés à l'aide du module recent avant de commencer le traitement pour éviter qu'une adresse ne soit marquée avec des noms différents et que cela n'entraîne le blocage de l'adresse.
sudo iptables -A GATE3 -m recent --name AUTH2 --remove
Cette approche est traité de la même manière que la première porte.
On place un drapeau AUTH3 qui indique que l'adresse demandée a réussi le deuxième test si le port correct a été activé.
L'indicateur est défini et le paquet est à nouveau supprimé ce qui n'apporte aucune indication au client sur sa progression.
sudo iptables -A GATE3 -p tcp --dport 3333 -m recent --name AUTH3 --set -j DROP
On renvoie à nouveau le trafic qui ne correspond pas à la troisième cible vers la première porte pour voir s'il doit compter comme une première frappe réussie pour relancer la séquence.
sudo iptables -A GATE3 -j GATE1
Les clients ayant effectués une séquence de frappe correcte doivent être signalés avec AUTH3 pour permettre l'ouverture du service depuis la chaîne PASSED.

Configurer la chaîne PASSED

Le démon SSH ne sera disponible que si le prochain paquet envoyé par le client est une demande de connexion SSH.
Cette chaîne est utilisée pour ouvrir le démon SSH pendant 30 secondes pour le client qui a réussi à renseigner la séquence correcte.
Les personnes qui voudraient se connecter au hasard devraient tenter une connexion SSH entre chaque frappe, tout en ignorant le nombre de portes qui sont requises pour valider la séquence.
Les indicateurs sont supprimés à l'aide du module recent avant de commencer le traitement pour éviter qu'une adresse ne soit marquée avec des noms différents et que cela n'entraîne le blocage de l'adresse.
sudo iptables -A PASSED -m recent --name AUTH3 --remove
On accepte les connexions SSH des utilisateurs qui ont validés la séquence.
sudo iptables -A PASSED -p tcp --dport 22 -j ACCEPT
On renvoie à nouveau le trafic qui ne correspond pas à PASSED vers la première porte pour voir s'il doit compter comme une première frappe réussie pour relancer la séquence.
sudo iptables -A PASSED -j GATE1

Configurer la chaîne KNOCKING

Toutes les sous-chaînes sont configurées.
On les relies à notre chaîne générale KNOCKING qui permettra de faire passer le trafic.
On achemine le trafic des clients qui ont réussi tous les coups directement dans la chaîne PASSED.
Une option de limite de temps peut être ajoutée pour ne donner au client qu'une fenêtre de 30 secondes pour se connecter au service SSH.
sudo iptables -A KNOCKING -m recent --rcheck --seconds 30 --name AUTH3 -j PASSED
Tester chaque autres indicateurs du plus restrictif au moins restrictif.
On ajoute une limite de temps de 10 secondes avant l'expiration du coup précédent.
La commande de connexion sera certainement saisie en une seule fois, donc, le délai est respecté lors d'une tentative de connexion par un humain.
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH2 -j GATE3
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH1 -j GATE2
On renvoie à GATE1 tout le trafic qui ne correspond pas jusqu'à présent. Comme vu précédemment, cela renvoie toute tentative vers le premier coup.
Cela permet de définir une politique de suppression par défaut pour notre chaîne KNOCKING en ajoutant implicitement la logique GATE1 à la fin de la chaîne KNOCKING.
sudo iptables -A KNOCKING -j GATE1
À ce stade, toutes nos chaînes de frappe sont en place. Notre mécanisme de frappe de port est configuré.
Toute la structure de la chaîne KNOCKING et ses sous-chaînes sont raccordées à notre chaîne d’entrée habituelle.

Notes

Plutôt que d'utiliser nmap, le test peut également être effectué avec netcat -w 1 IP_SERVEUR [port]
A tester.
Ajouter la règle -j LOG avant les règles -j DROP dans les chaînes GATE, pour journaliser les frappes dans /var/log/.
Exemple :
First knock chain
-A knock1 -j LOG --log-level 4 --log-prefix "In knock 1: "
-A knock1 -p tcp --dport 1111 -m recent --name KNOCK1 --set -j DROP
-A knock1 -j DROP
Second knock chain
-A knock2 -m recent --name KNOCK1 --remove
-A knock2 -j LOG --log-level 4 --log-prefix "In knock 2: "
-A knock2 -p tcp --dport 2222 -m recent --name KNOCK2 --set -j DROP
-A knock2 -j knock1
Third knock chain
-A knock3 -m recent --name KNOCK2 --remove
-A knock3 -j LOG --log-level 4 --log-prefix "In knock 3: "
-A knock3 -p tcp --dport 3333 -m recent --name KNOCK3 --set -j DROP
-A knock3 -j knock1
After successful a successful know, allow the target to port 22
-A knockpassed -m recent --name AUTH3 --remove
-A knockpassed -j LOG --log-level 4 --log-prefix "Knock accepted!: "
-A knockpassed -p tcp --dport 10085 -j ACCEPT
-A knockpassed -j knock1
Exemple du fichier de journalisation kern.log :
[609900.632323] In knock 1: IN=eth0 OUT= MAC=04:01:01:0e:af:01:00:24:38:ab:b5:00:08:00 SRC=111.111.111.111 DST=222.222.222.222 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=34402 DF PROTO=TCP SPT=36717 DPT=6422 WINDOW=29200 RES=0x00 SYN URGP=0
[609901.626766] In knock 2: IN=eth0 OUT= MAC=04:01:01:0e:af:01:00:24:38:ab:b5:00:08:00 SRC=111.111.111.111 DST=222.222.222.222 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=65363 DF PROTO=TCP SPT=37284 DPT=2887 WINDOW=29200 RES=0x00 SYN URGP=0
[609901.633832] In knock 3: IN=eth0 OUT= MAC=04:01:01:0e:af:01:00:24:38:ab:b5:00:08:00 SRC=111.111.111.111 DST=222.222.222.222 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=41615 DF PROTO=TCP SPT=53437 DPT=9971 WINDOW=29200 RES=0x00 SYN URGP=0
[609902.630056] Knock accepted!:

Méthode 2 - Paramétrer le Port Knocking avec Knock sur un serveur Debian

Avantage de cette configuration

La configuration de Iptables pour Knock est presque identique à la configuration précédente, sauf que cette fois, c'est Knock va être chargé d'ouvrir les ports.

Tester la configuration

Tester la connexion avec le Port Knocking sous linux

Exemple de frappe unique avec Nmap qui utilise les paquets TCP par défaut.
Faire expirer notre connexion après une seconde, pour pouvoir continuer au coup suivant.
Ne pas scanner par défaut pour que éviter que les paquets n'interfèrent avec notre frappe.
nmap -Pn --host_timeout 201 --max-retries 0 -p 1111 IP_du_serveur
Exemple pour toute notre séquence de frappe.
nmap -Pn --host_timeout 201 --max-retries 0 -p 1111 IP_du_serveur
nmap -Pn --host_timeout 201 --max-retries 0 -p 2222 IP_du_serveur
nmap -Pn --host_timeout 201 --max-retries 0 -p 3333 IP_du_serveur
Nous avons alors 30 secondes pour nous connecter avec notre client SSH.
Automatiser ce processus avec bash en utilisant une boucle "for" pour parcourir la séquence de ports, puis la transmettre au client SSH.
for x in 1111 2222 3333; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x IP_du_serveur && sleep 1; done && ssh Utilisateur_du_serveur@IP_du_serveur
Tester la commande de connexion sans avoir mis en place le Port Knocking.
La tentative de connexion est bien effectuée avec une seconde d'intervalle sur le premier, le deuxième puis le troisième port.
La commande demande alors une connexion au service SSH sur le port 22 par défaut. La passphrase est demandée. Une fois renseignée, la connexion est établie.
for x in 1111 2222 3333; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x IP_du_serveur && sleep 1; done && ssh Utilisateur_du_serveur@IP_du_serveur -i /home/Utilisateur_client/.ssh/cle_du_serveur/id_rsa_private -o VisualHostKey=yes
Indenter le code pour le rendre plus lisible.
Créer le fichier de connexion knock_client sur la machine cliente, se connecter au serveur distant.
nano knock_client
#!/bin/bah
ports="1111 2222 3333" 
host="IP_du_serveur" 
for x in $ports
do
   nmap -Pn --host_timeout 201 --max-retries 0 -p $x $host
   sleep 1
done
ssh Utilisateur_du_serveur@IP_du_serveur -i /home/Utilisateur_client/.ssh/cle_du_serveur/id_rsa_private -o VisualHostKey=yes
Rendre le fichier knock_client exécutable.
chmod 755 knock_client
On peut maintenant faire appel à ce script pour se connecter.
Se positionner dans le dossier dans lequel le script a été sauvegardé et lancer la commande d'exécution.
./knock_client

Tester la connexion avec le Port Knocking sous Windows

Utiliser KnockKnock pour déverrouiller la séquence de Port Knocking
Site officiel : https://sourceforge.net/projects/knockknock/
Télécharger la version courante : https://netix.dl.sourceforge.net/project/knockknock/KnockKnock/KnockKnock_v0.92/KnockKnock_v0.92.zip
Dézipper l'archive sur le Bureau et entrer dans le dossier.
Ouvrir le raccourci : Shortcut to KnockKnock
J'ai tenté de placer le dossier à la racine du disque et de faire un raccourci de Shortcut to KnockKnock vers le Bureau mais cela ne fonctionne pas.
Je conserve donc le dossier de KnockKnock sur le Bureau pour l'avoir à disposition.
Saisir l'adresse IP du serveur dans l'interface de saisie de KnockKnock :
xxx.xx.xxx.x
Ajouter la séquence actuelle des ports à frapper, un port sur une ligne :
1111
2222
3333
Cliquer sur le bouton "Knock". Un message répond :
Done!

La connexion SSH peut maintenant être établie avec PuTTY ou cmder pour une durée de 25 à 30 secondes.

Rendre les règles du pare-feu persistantes

Maintenant que nous avons vérifié que nos règles fonctionnent comme prévu, nous pouvons rendre nos règles de pare-feu persistantes.
sudo apt-get install iptables-persistent
Nos règles peuvent être appliquées au démarrage du serveur en activant le service "iptables-persistent".
sudo service iptables-persistent start

Bibliographie

Paramétrer le Port Knocking avec Iptables uniquement

How To Configure Port Knocking Using Only Iptables on an Ubuntu VPS : https://www.digitalocean.com/community/tutorials/how-to-configure-port-knocking-using-only-iptables-on-an-ubuntu-vps
  Implement port knocking using iptables : http://www.microhowto.info/howto/implement_port_knocking_using_iptables.html

Paramétrer le Port Knocking avec Knock

How To Use Port Knocking to Hide your SSH Daemon from Attackers on Ubuntu : https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu
Port Knocking : cacher son port SSH : Port Knocking cacher son port SSH : https://mondedie.fr/d/8277-tuto-port-knocking-cacher-son-port-ssh
Port Knocking : sécuriser l'accès à un port : https://doc.ubuntu-fr.org/port-knocking
Knockd a port-knocking server : http://www.zeroflux.org/projects/knock

Pourquoi ne pas utiliser le Port Knocking

Why Not Use Port Knocking : https://bsdly.blogspot.com/2012/04/why-not-use-port-knocking.html

Alternative au Port Knocking

Shimmer offre une alternative au programme de frappe de port : http://shimmer.sourceforge.net

La synthèse sur le Port Knocking depuis le wiki de Visionduweb

La synthèse pour le Port Knocking : https://wiki.visionduweb.fr/index.php?title=Port_Knocking
La synthèse pour le script Iptables permettant le Port Knocking : https://wiki.visionduweb.fr/index.php?title=Configurer_le_pare-feu_Iptables#Cr.C3.A9er_un_script_de_r.C3.A8gles_sur_mesure

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.