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
emballer. 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 à nouveau sur la barre d’espace sur l’écran de configuration IPv6 pour accepter le “Oui” et continuer.
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ètresiptables
d'utiliser des modules de correspondance de paquets supplémentaires, dans cette circonstance, l'appelconntrack
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é.
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:
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
.
Les quelques modifications que nous devons apporter sont surlignées en rouge:
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
Maintenant, 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
pour dave@systempeaker
. Pour vous déconnecter de l'ordinateur distant, écrit:
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);