Comment utiliser le port Knocking sur Linux (et pourquoi ne devrait-il pas)

Contenu

Main frappant à une porte fermée.

La désactivation des ports est un moyen de protéger un serveur en fermant les ports du pare-feu, même ceux que vous connaissez seront utilisés. Ces ports s'ouvrent à la demande si, et seulement si, la demande de connexion fournit le hit secret.

Port Knocking est un “coup d’État secret”

Dans la décennie de 1920, lorsque interdiction il battait son plein, si vous vouliez saisir un bar clandestin, vous deviez connaître le coup secret et le jouer correctement pour entrer.

Le coup de port est un moderne comme. Si vous voulez que les gens aient accès aux services sur votre ordinateur, mais vous ne voulez pas ouvrir votre pare-feu à Internet, vous pouvez utiliser l'appel de port. Il vous permet de fermer les ports de votre pare-feu qui autorisent les connexions entrantes et de les ouvrir automatiquement lorsqu'un modèle prédéfini de tentatives de connexion est effectué. La séquence des tentatives de connexion agit comme un hit secret. Un autre coup secret ferme le port.

Le coup de port est une nouveauté, mais il est essentiel de savoir que c'est un exemple de sécurité dans l'obscurité, et ce concept est fondamentalement défectueux. Le secret pour entrer dans un système est sûr car seuls ceux qui appartiennent à un groupe spécifique le connaissent. Mais une fois ce secret découvert, soit parce qu'il est révélé, Regardez, deviner ou résoudre, votre sécurité est outrepassée. Il est préférable de protéger votre serveur par d'autres moyens plus solides, comment exiger des connexions basées sur des clés pour un serveur SSH.

Les approches les plus solides de la cybersécurité sont multicouches, alors peut-être que l'appel de ports devrait être l'une de ces couches. Plus il y a de couches, mieux, vérité? Malgré cela, on pourrait dire que le déclenchement de port n'ajoute pas grand-chose (si ça ajoute quelque chose) à un système sûr et correctement renforcé.

La cybersécurité est un sujet vaste et compliqué, mais vous ne devriez pas utiliser l'escale comme seule forme de défense.

EN RELATION: Comment créer et installer des clés SSH à partir du shell Linux

Installation défoncée

Pour démontrer le coup de port, nous l'utiliserons pour contrôler le port 22, c'est quoi le port SSH. nous utiliserons un outil appelé knockd. Utilisation apt-get pour installer ce paquet sur votre système si vous utilisez Ubuntu ou une autre distribution basée sur Debian. Sur d'autres distributions Linux, utilisez l'outil de gestion de paquets de votre distribution Linux.

Écrivez ce qui suit:

sudo apt-get install knockd

Vous avez probablement déjà le pare-feu iptables installé sur votre système, mais vous devrez peut-être installer le iptables-persistent paquet. Gère le chargement automatique des sauvegardes iptable règles.

Tapez ce qui suit pour l'installer:

sudo apt-get install iptables-persistent

Lorsque l'écran de configuration IPV4 apparaît, appuyez sur la barre d’espace pour accepter l’option “Oui”.

Appuyez sur la barre d'espace pour accepter l'option

Appuyez à nouveau sur la barre d’espace sur l’écran de configuration IPv6 pour accepter le “Oui” et continuer.

Appuyez sur la barre d'espace pour accepter l'option

La commande suivante dit iptables pour permettre aux connexions établies et en cours de continuer. Maintenant, nous allons émettre une autre commande pour fermer le port SSH.

Si quelqu'un est connecté par SSH lorsque nous émettons cette commande, nous ne voulons pas qu'il soit coupé:

sudo iptables -A INPUT -m conntrack --ctstate ÉTABLI,CONNEXES -j ACCEPTER

Cette commande ajoute une règle au pare-feu, que dit-il:

  • -UNE: Ajouter la règle au tableau des règles de pare-feu. Autrement dit, l'ajouter à la fin.
  • SAISIR: Il s'agit d'une règle concernant les connexions entrantes.
  • -je conntrack: Les règles de pare-feu agissent sur le trafic réseau (paquets) qui correspondent aux critères de la règle. Les -m causes des paramètres iptables d'utiliser des modules de correspondance de paquets supplémentaires, dans cette circonstance, l'appel conntrack fonctionne avec les capacités de suivi des connexions réseau du noyau.
  • –État ÉTABLI, EN RELATION: Spécifie le type de connexion auquel la règle s'appliquera, En d'autres termes, Connexions ÉTABLIES et CONNEXES. Une connexion établie est une connexion déjà en cours. Une connexion connexe est celle qui est établie en raison d'une action d'une connexion établie. Peut-être que quelqu'un en ligne veut télécharger un fichier; cela pourrait se produire via une nouvelle connexion initiée par l'hôte.
  • -j ACCEPTER: Si le trafic correspond à la règle, sauter à la destination OK sur le pare-feu. Autrement dit, le trafic est accepté et autorisé à traverser le pare-feu.

Maintenant, nous pouvons émettre la commande pour fermer le port:

sudo iptables -A INPUT -p tcp --dport 22 -j REJETER

Cette commande ajoute une règle au pare-feu, que dit-il:

  • -UNE: Ajouter la règle au tableau des règles de pare-feu, En d'autres termes, l'ajouter à la fin.
  • SAISIR: Cette règle fait référence aux connexions entrantes.
  • -p tcp: Cette règle s'applique au trafic utilisant le protocole de contrôle de transmission.
  • –Dport 22: Cette règle s'applique spécifiquement au trafic TCP destiné au port 22 (le port SSH).
  • -j REJETER: Si le trafic correspond à la règle, passer à la destination REJECT sur le pare-feu. Ensuite, si le trafic est rejeté, pas possible à travers le pare-feu.

Nous devons commencer le netfilter-persistent diable. Nous pouvons le faire avec cette commande:

sudo systemctl démarrer netfilter-persistent

Nous voulons netfilter-persistent passer par un cycle de sauvegarde et de rechargement, donc il charge et contrôle le iptable règles.

Tapez les commandes suivantes:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Vous avez maintenant installé les utilitaires et le port SSH est fermé (avec chance, sans mettre fin à la connexion de quiconque). Il est maintenant temps de mettre en place le coup secret.

Configuration de knockd

Il y a deux fichiers que vous modifiez pour configurer knockd. La première est la suivante : knockd fichier de configuration:

sudo gedit /etc/knockd.conf

Les gedit l’éditeur s’ouvre avec le knockd fichier de configuration chargé.

Le fichier de configuration knockd dans l’éditeur gedit.

Nous éditerons ce fichier pour répondre à nos besoins. Les sections qui nous intéressent sont “openSSH” et “fermerSSH”. Les quatre entrées suivantes sont dans chaque section:

  • séquence: La séquence de ports que quelqu'un doit entrer pour ouvrir ou fermer le port 22. Les ports par défaut sont 7000, 8000 et 9000 pour l'ouvrir et 9000, 8000 et 7000 pour la fermer. Vous pouvez les modifier ou ajouter plus de ports à la liste. Pour nos fins, nous nous en tiendrons aux valeurs par défaut.
  • seq_timeout: Le délai dans lequel une personne doit entrer dans les ports pour activer leur ouverture ou leur fermeture.
  • commander: La commande envoyée à iptables pare-feu lorsqu'une action d'ouverture ou de fermeture est déclenchée. Ces commandes ajoutent une règle au pare-feu (ouvrir le port) ou ils l'éliminent (fermer le port).
  • tcpflags: Le type de paquet que chaque port doit recevoir dans la séquence secrète. Un paquet SYN (synchroniser) est le premier d'un TCP demande de connexion, appel poignée de main à trois.

La section “openSSH” peut être lu comme suit : “une demande de connexion TCP doit être faite sur les ports 7000, 8000 et 9000, dans cet ordre et dans 5 secondes, pour la commande d'ouvrir le port 22 être envoyé au pare-feu”.

La section “fermerSSH” peut être lu comme suit : “une demande de connexion TCP doit être faite sur les ports 9000, 8000 et 7000, dans cet ordre et dans 5 secondes, pour la commande de fermer le port 22 être envoyé au pare-feu”.

Les règles du pare-feu

Les entrées de “commander” dans les sections openSSH et closeSSH restent les mêmes, à l'exception d'un paramètre. C'est ainsi qu'ils sont constitués:

  • -UNE: Ajouter la règle à la fin de la liste des règles de pare-feu (pour la commande openSSH).
  • -ré: Supprimer la commande de la liste des règles de pare-feu (pour la commande closeSSH).
  • SAISIR: Cette règle fait référence au trafic réseau entrant.
  • -siroter%: L'adresse IP de l'appareil demandant une connexion.
  • -page: Protocole réseau; dans cette circonstance, est TCP.
  • –Dport: Le port de destination; dans notre exemple, est le port 22.
  • -j ACCEPTER: Aller à la destination d'acceptation à l'intérieur du pare-feu. Autrement dit, laisser le paquet passer par le reste des règles sans agir dessus.

Les éditions du fichier de configuration knockd

Les modifications que nous apporterons au fichier sont surlignées en rouge ci-dessous:

Le fichier de configuration knockd dans l'éditeur gedit avec les modifications en surbrillance.

Nous prolongeons la “seq_timeout” une 15 secondes. c'est généreux, mais si quelqu'un tire manuellement sur les demandes de connexion, il est possible que cela prenne autant de temps.

Dans la rubrique “openSSH”, nous changeons le -A (Ajouter) option dans la commande de -I (insérer). Cette commande insère une nouvelle règle de pare-feu dans le en haut de la liste des règles de pare-feu. Si vous quittez le -A option, il est annexe la liste des règles de pare-feu et la place dans le bas.

Le trafic entrant est testé par rapport à chaque règle de pare-feu répertoriée de haut en bas. Nous avons déjà une règle qui ferme le port 22. Pour cela, si le trafic entrant est testé par rapport à cette règle avant de voir la règle qui active le trafic, la connexion est rejetée; si vous voyez cette nouvelle règle en premier, la connexion est possible.

La commande close supprime la règle ajoutée par openSSH des règles de pare-feu. Le trafic SSH est à nouveau géré via la règle préexistante de “le port 22 c'est fermé”.

Après avoir effectué ces modifications, enregistrer le fichier de configuration.

EN RELATION: Comment éditer graphiquement des fichiers texte sous Linux avec gedit

Fichier de contrôle des modifications knockd

Les knockd Le fichier de contrôle est beaucoup plus simple. Malgré cela, avant de plonger et de modifier cela, nous devons connaître le nom interne de notre connexion réseau; pour le trouver, écrire cette commande:

adresse ip

La connexion que cette machine utilise pour enquêter sur ce message s'appelle enp0s3. Notez le nom de votre connexion.

La commande suivante modifie le knockd fichier de contrôle:

sudo gedit /etc/default/knockd

Voici la knockd présenter à gedit.

Le fichier de contrôle knockd dans gedit.

Les quelques modifications que nous devons apporter sont surlignées en rouge:

Le fichier de contrôle knockd dans gedit avec les modifications en surbrillance.

Nous changeons l'entrée “START_KNOCKD =” de 0 une 1.

Nous supprimons également le hachage # depuis le début du poste “KNOCKD_OPTS =”, et remplacé “eth1” avec le nom de notre connexion réseau, enp0s3. Depuis lors, si votre connexion réseau est eth1, tu ne le changeras pas.

La preuve est dans le pudding

Il est temps de voir si ça marche. Nous commencerons le knockd démon avec cette commande:

sudo systemctrl start knockd

À présent, nous allons passer à une autre machine et essayer de nous connecter. Nous installons le knockd outil sur cet ordinateur, en outre, pas parce que nous voulons configurer l'appel de port, mais parce que le knockd package fournit un autre outil appelé knock. Nous utiliserons cette machine pour tirer dans notre séquence secrète et nous appellerons.

Utilisez la commande suivante pour envoyer votre séquence secrète de demandes de connexion aux ports de l'ordinateur hôte qui atteint le port avec l'adresse IP 192.168.4.24:

frappe 192.168.4.24 7000 8000 9000 -ré 500

Cela dit knock pour pointer l'ordinateur vers l'adresse IP 192.168.4.24 et lancer une demande de connexion aux ports 7000, 8000 et 9000, en même temps, avec un -d (retard) de 500 millisecondes entre eux.

Un utilisateur nommé “dave” fait ensuite une requête SSH à 192.168.4.24:

ssh [email protected]

Votre connexion est acceptée, entrez votre mot de passe et démarrez votre session à distance. Votre invite de commande change de dave@nostromo afin de dave@systempeaker. Pour vous déconnecter de l'ordinateur distant, écrivez:

sortir

Votre invite de commande revient sur votre ordinateur local. Il utilise knock une fois de plus, et cette fois, pointe vers les ports dans l'ordre inverse pour fermer le port SSH sur l'ordinateur distant.

frappe 192.168.4.24 9000 8000 7000 -ré 500

Il est vrai que ce n'était pas une session à distance particulièrement fructueuse, mais il montre l'ouverture et la fermeture du port via les traits du port et tient dans une seule capture d'écran.

Ensuite, A quoi ça ressemble de l'autre côté? L'administrateur système sur le port hit host utilise la commande suivante pour voir les nouvelles entrées arriver dans le syslog:

tail -f /var/log/syslog

  • Vous verrez trois entrées openSSH. Ceux-ci sont générés lorsque l'utilitaire d'accès distant pointe vers chaque port.
  • Lorsque les trois étapes de la séquence d'activation sont remplies, une entrée qui dit “SÉSAME OUVRE-TOI,“Il est enregistré
  • La commande pour insérer la règle dans le iptables La liste des règles est envoyée. Permet l'accès via SSH sur le port 22 à partir de l'adresse IP spécifique du PC qui a donné le bon secret (192.168.4.23).
  • Utilisateur “dave” ne se connecte que quelques secondes puis se déconnecte.
  • Vous verrez trois entrées closeSSH. Ceux-ci sont générés lorsque l'utilitaire d'activation à distance pointe vers chaque port; demande à l'hôte déclencheur de port de fermer le port 22.
  • Une fois les trois étapes activées, nous recevons le message “SÉSAME OUVRE-TOI” de nouveau. La commande est envoyée au firewall pour supprimer la règle. (Pourquoi pas “FERMER SÉSAME” quand ferme le port? Qui sait?)

Désormais, la seule règle dans le iptables La liste des règles concernant le port 22 est celui que nous écrivons au début pour fermer ce port. Ensuite, le port 22 maintenant il est à nouveau fermé.

Frappez-le sur la tête

C'est le tour de salon des coups de port. Traitez cela comme une distraction et ne le faites pas dans le monde réel. O, si tu dois, ne lui fais pas confiance comme seule forme de sécurité.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.