GNU/Linux >> Tutoriels Linux >  >> Debian

Comment masquer les ports réseau avec une séquence de frappe de port sur Debian 10

Le frappement de port est une méthode d'ouverture dynamique des ports réseau en « frappant » (c'est-à-dire en se connectant) sur une séquence prédéfinie de ports. Ceci est particulièrement utile pour obscurcir un port réseau ouvert de l'analyse de port puisque le port en question sera fermé à moins que la séquence de frappe de port ne soit exécutée. Une séquence de frappe de port suffisamment longue est pratiquement impossible à forcer :par exemple, pour réussir à deviner (par force brute) une combinaison de 3 ports TCP, un attaquant devrait essayer de frapper sur chacune des 281 000 milliards de combinaisons possibles, et rechercher ports ouverts après chaque séquence de frappe de port. Comme vous pouvez probablement l'imaginer, cela prendrait très, très longtemps.

Ce guide vous aidera dans l'installation de knockd, un démon de frappe de port flexible, sur Debian 10. À des fins de démonstration, nous le configurerons pour masquer le port SSH, bien que tout autre port/service puisse être protégé avec cette approche.

Exigences

  • Un serveur exécutant Debian 10.
  • Accès root à votre serveur.
  • La variable d'environnement $EDITOR doit être définie.
  • Un deuxième système de test.

REMARQUE :Si vous avez l'intention d'utiliser le port knocking pour masquer le port SSH, assurez-vous de disposer d'une méthode d'accès alternative (via la console par exemple), qui vous sera utile si vous vous verrouillez accidentellement.

Avant d'installer knockd, vérifiez le nom de l'interface réseau publique de votre système avec la commande suivante :

ip link show | grep -v lo
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

Notez le nom de l'interface (ens18 dans ce cas). Il sera nécessaire plus tard.

Étape 1 :Installer Knockd

knockd est un démon de frappe de port qui écoute les connexions et ouvre les ports en conséquence. Nous utiliserons knockd avec les règles iptables pour implémenter le port knocking. Installez les packages requis comme suit :

apt update
apt install knockd iptables-persistent

Étape 2 :Configuration de Knockd

Knockd utilise un seul fichier de configuration, /etc/knockd.conf, pour définir les séquences de frappe et d'autres paramètres. Il existe deux modes de fonctionnement pratiques. Le premier nécessite une seule séquence de frappe pour ouvrir et fermer le port prédéfini, tandis que l'autre utilise des séquences d'ouverture et de fermeture séparées. Nous utiliserons le premier car il nécessite moins d'interaction de l'utilisateur.

Tout d'abord, sauvegardez le fichier de configuration existant :

mv /etc/knockd.conf /etc/knockd.conf.bak

Deuxièmement, ouvrez le fichier de configuration dans votre éditeur de texte :

$EDITOR /etc/knockd.conf

Et entrez la configuration ci-dessous :

(remplacez ens18 par le nom de votre interface réseau.)

[options]
        UseSyslog
	Interface = ens18
[SSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout = 20

Cela demandera à knockd d'activer le trafic vers le port 22 après avoir reçu la séquence de frappe correcte (1000,2000,3000 dans ce cas), puis de désactiver à nouveau le trafic après un délai de 20 secondes. Les connexions SSH ne seront donc acceptées que pendant cette fenêtre de 20 secondes.

Ensuite, activez knockd en éditant le fichier /etc/default/knockd :

$EDITOR /etc/default/knockd

Et définissez START_KNOCKD sur 1 :

START_KNOCKD=1

Enregistrez le fichier et quittez. Nous modifierons également l'unité systemd pour knockd. Pour ce faire, créez un nouveau fichier d'unité pour remplacer la valeur par défaut :

$EDITOR /etc/systemd/system/knockd.service

Et collez ce qui suit :

[Unit]
Description=Port-Knock Daemon
After=network.target
Requires=network.target
Documentation=man:knockd(1)
[Service]
EnvironmentFile=-/etc/default/knockd
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/sbin/knockd $KNOCKD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=0 2 15
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN
[Install]
WantedBy=multi-user.target

Utilisez ensuite la commande suivante pour charger et activer la nouvelle unité :

systemctl daemon-reload
systemctl enable --now knockd.service

Étape 3 :Règles de pare-feu

À ce stade, Knockd est prêt, mais tout le trafic est activé par défaut via le pare-feu. Nous allons créer des règles de pare-feu pour refuser l'accès au port 22/tcp.

Les commandes suivantes garantissent que les connexions existantes ne sont pas interrompues.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Voici les règles pour supprimer les connexions au port 22/tcp :

iptables -A INPUT -p tcp --destination-port 22 -j DROP
ip6tables -A INPUT -p tcp --destination-port 22 -j DROP

Ensuite, enregistrez les chaînes de règles actuelles pour la persistance entre les redémarrages :

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Étape 4 :Tester

À partir d'un autre système, essayez de démarrer une nouvelle session SSH sur votre serveur. Vous ne devriez pas pouvoir vous connecter. Pour effectuer la séquence de frappe, différents outils peuvent être utilisés, bien que nous démontrions avec frappe, le client de frappe inclus avec Knockd. Installez le package knockd comme indiqué à l'étape 1 sur un autre système, puis exécutez les commandes :

knock server_ip_address 1000 2000 3000
ssh [email protected]_ip_address

La connexion SSH devrait maintenant réussir.

Configuration alternative

Knockd peut également être configuré pour exiger deux séquences distinctes pour l'ouverture et la fermeture des ports réseau. Ceci est utile si vous souhaitez garder les ports ouverts pendant de longues périodes. Pour configurer Knockd de la manière, ouvrez son fichier de configuration :

$EDITOR /etc/knockd.conf

Et remplacez la configuration existante par ce qui suit :

[options]
        UseSyslog
        Interface = your_interface
[openSSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
        sequence = 3000,2000,1000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Redémarrez ensuite le service pour charger la nouvelle configuration :

systemctl restart knockd.service

Conclusion

Knockd peut être une solution efficace aux attaques par force brute, qui sont très courantes sur SSH et d'autres services. Même si systemd redémarrera Knockd en cas d'échec, vous devriez toujours disposer d'une méthode de secours pour accéder à votre serveur si vous utilisez le port-knocking pour masquer le port SSH.


Debian
  1. Comment configurer une adresse IP statique sur Debian Linux

  2. Comment convertir HTML en PDF avec HTMLDoc sur Debian 10

  3. Comment masquer les ports réseau avec une séquence de frappe de port sur Debian 10

  4. Comment installer WonderCMS avec Nginx sur Debian 11

  5. Comment sécuriser le service SSH avec Port Knocking

Comment installer Gitea avec PostgreSQL sur Debian 11

Comment installer Debian 11 (Bullseye) avec des captures d'écran

Comment configurer LAMP avec Debian 11

Comment configurer le serveur Samba avec Debian 11

Comment installer Itch avec Debian 11

Comment installer phpMyAdmin avec Nginx sur Debian 11