Portsentry – Bloquer les scans de ports

Portsentry – Bloquer les scans de ports

Dans le cas où vous souhaitez ouvrir certains ports de votre serveur, pour pouvoir y accéder à distance, vous devez avoir à l’esprit qu’il peut faire l’objet de différents scans de ports. (ce que permet le logiciel Nmap, par exemple.

cf article : https://brlnd-tech.eu/blog/index.php/2020/08/18/conduire-un-scan-de-vulnerabilite-en-mode-boite-noireavec-nmap/ ).

Ces informations pourraient être ensuite exploitées par une personne malveillante afin d’atteindre à l’intégrité de votre serveur par la suite.

Pour se protéger contre ces pratiques, vous pouvez mettre en place portsentry qui bloquera les adresses IP des connexions à l’origine de ces scans.

Portsentry peut être un complément (et non une alternative) à fail2ban si vous souhaitez renforcer la sécurité de votre serveur. En effet, fail2ban bloque les adresses IP des connexions qui effectuent des authentifications infructueuses alors que portsentry, lui, effectue un blocage des adresses IP qui cherchent à identifier les ports ouverts sur votre serveur. Les deux paquets peuvent donc être complémentaires et ainsi renforcer la sécurité de votre parc informatique.

Environnement de mise en place

  • Serveur Ubuntu : 192.168.145.160/24 (Accès à internet obligatoire)
  • Machine kali linux (Attaquant) : 192.168.145.129/29 (Accès à internet facultatif sauf si vous ne disposez pas de nmap)

Installation

Toutes les commandes ci-dessous vont être exécutées par l’intermédiaire du compte root.

apt-get update && apt-get install portsentry

Un message d’avertissement vous indiquera alors que portsentry ne va appliquer aucun blocage par défaut.

Dès lors que l’installation se termine, nous allons stopper le service port entry afin de procéder à sa configuration en toute sécurité.

root@master-node:~# /etc/init.d/portsentry stop
Stopping anti portscan daemon: portsentry.

Configuration

Comme je l’ai dit précédemment, Portsentry ne bloque rien par défaut. nous allons devoir le configurer afin de détecter et bloquer le scan de ports.

Il va falloir modifier le fichier où sont notifiées les adresses IPs à ne pas bloquer afin de ne pas se bloquer soi-même.

Pour cela il existe 2 fichiers

  • portsentry.ignore 
  • portsentry.ignore.static

Pour mettre en place ces exceptions, nous allons éditer le fichier /etc/portsentry/portsentry.ignore.static

Au démarrage du service, le contenu du fichier portsentry.ignore.static sera ajouté au fichier /etc/portsentry/portsentry.ignore.

Éditons le fichier /etc/portsentry/portsentry.ignore.static, afin de renseigner notre « liste blanche » (a minima votre adresse IP ainsi que les adresses IP des serveurs étant en relation avec celui-ci)

Maintenant que vous avez ajouté votre/vos adresses IP en liste blanche, nous allons configurer portsentry à proprement parlé en éditant le fichier de configuration qui est accessible via /etc/portsentry/portsentry.conf.

Nous allons utiliser portsentry en mode avancé concernant les protocoles TCP et UDP. Pour ce faire, il faut modifier le fichier /etc/default/portsentry afin de changer la valeur des deux paramètres tcp udp vers atcp audp. (a pour advanced)

  •  À présent nous allons nous éditer le fichier de configuration principale : /etc/portsentry/portsentry.conf

Nous allons opter pour un blocage des personnes malveillantes par le biais d’iptables. Nous allons donc commenter toutes les lignes du fichier de configuration qui commencent par KILL_ROUTE exceptée la suivante :

KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"

Vous pouvez vérifier ceci grâce à la commande suivante qui vous retournera le cas échéant la commande ci-dessus

cat portsentry.conf | grep KILL_ROUTE | grep -v "#"

Nous pouvons à présent relancer le service portsentry et celui-ci va à présent commencer à bloquer les scans de port :

root@master-node:~# /etc/init.d/portsentry start Starting anti portscan daemon: portsentry in atcp & audp mode.

Test et inspection des logs

Sur une autre machine (kalilinux pour ma part) nous allons effectuer un scan basique des ports de la machine précédemment configurée avec nmap :

nmap 192.168.145.160

Le scan ne devrait pas aboutir. (Certaines fois, un premier scan peut donner lieu à un résultat, mais l’IP de l’attaquant serra par la suite directement bloquée)

Nous constatons que l’@ ip de l’attaquant à bien été bloquée !

Pour allez plus loin

grep attackalert /var/log/syslog
# Analyse rapide des logs 
# ou 
journalctl | grep attackalert 
# (Commande plus récente, mais temps d'exécution plus long) 
grep portsentry /var/log/syslog
# Analyse approfondie des logs 
# ou 
journalctl | grep portsentry 
# (Commande plus récente, mais temps d'exécution plus long) 

Débanir une IP :

iptables -D INPUT -s 192.168.145.129 -j DROP

C’est tout pour aujourd’hui 🙂

++

Brlndtech

Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

Related Posts

Tester la sécurité d’une API : Un Guide Pratique

Tester la sécurité d’une API : Un Guide Pratique

Weevely – un Webshell interactif polyvalent (cheat sheet)

Weevely – un Webshell interactif polyvalent (cheat sheet)

Reconstruction d’OS non chiffrés : Analyse post-exploitation

Reconstruction d’OS non chiffrés : Analyse post-exploitation

Reverse/Bind shell – Quésaco

Reverse/Bind shell – Quésaco