Security
Difficulte: Advanced
4 min de lecture

Portsentry : Détection de scans de ports

Tutoriel pour installer et configurer Portsentry, un outil qui détecte les scans de ports et bloque les adresses IP des attaquants.

Retour aux tutoriels
Qu\'est-ce que Portsentry ?
Portsentry est un outil de défense proactif qui agit comme un "honeypot" (pot de miel). Il écoute sur des ports TCP et UDP que vous n\'utilisez pas. Si un attaquant tente de se connecter à l\'un de ces ports (ce qui est typique d\'un scan de reconnaissance), Portsentry le détecte immédiatement et peut bloquer l\'adresse IP de l\'attaquant au niveau du pare-feu.

Pourquoi utiliser Portsentry ?

  • Détection précoce : Un scan de ports est souvent la toute première étape d\'une attaque. Le détecter permet de bloquer un attaquant avant même qu\'il ne trouve une vraie vulnérabilité.
  • Dissuasion : Bloquer automatiquement les scanners réduit le "bruit" dans les logs et décourage les attaques automatisées.
  • Léger : Consomme très peu de ressources.

Prérequis

  • Un serveur Linux (Ubuntu/Debian, CentOS/RHEL).
  • Accès root ou privilèges sudo.
  • Un pare-feu comme iptables ou firewalld.

Installation

# Sur Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y portsentry

# Sur CentOS / RHEL (via le dépôt EPEL)
sudo yum install -y epel-release
sudo yum install -y portsentry

Configuration

Le fichier de configuration principal est /etc/portsentry/portsentry.conf. Sauvegardez-le avant de le modifier.

sudo cp /etc/portsentry/portsentry.conf /etc/portsentry/portsentry.conf.bak
sudo nano /etc/portsentry/portsentry.conf

Étape 1 : Choisir les ports à surveiller

Descendez jusqu\'aux sections TCP_PORTS et UDP_PORTS. Par défaut, Portsentry surveille les ports les plus scannés. La configuration par défaut est un bon point de départ. Vous pouvez laisser ces valeurs.

Étape 2 : Configurer l\'action de blocage

C\'est la partie la plus importante. Cherchez la ligne BLOCK_UDP et BLOCK_TCP.


# 0 = Ne pas bloquer
# 1 = Bloquer l'IP via /etc/hosts.deny (moins efficace aujourd\'hui)
# 2 = Bloquer l'IP via une règle de pare-feu (la meilleure option)
BLOCK_UDP="2"
BLOCK_TCP="2"

Étape 3 : Spécifier la commande de blocage

Portsentry a besoin de savoir quelle commande exécuter pour bloquer une IP. Décommentez la ligne correspondant à votre système.


# Pour les systèmes Linux modernes utilisant iptables
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"

# Si vous utilisez firewalld (CentOS/RHEL 7+), la commande est différente.
# Vous devriez utiliser une commande comme :
# KILL_ROUTE="/usr/bin/firewall-cmd --add-rich-rule='rule family=\"ipv4\" source address=\"$TARGET$\" drop' --timeout=600"
# (Note : le timeout est une fonctionnalité de firewalld, très pratique)

La variable $TARGET$ sera automatiquement remplacée par l\'IP de l\'attaquant.

Étape 4 : Activer le mode avancé

Par défaut, Portsentry écoute sur tous les ports non utilisés en dessous de 1024. Pour une détection plus agressive, on peut utiliser les modes de détection avancée qui écoutent sur tous les ports non assignés.

Ouvrez le fichier /etc/default/portsentry (ou /etc/sysconfig/portsentry sur CentOS).

sudo nano /etc/default/portsentry

Modifiez les lignes pour utiliser `atcp` et `audp` :

TCP_MODE="atcp"
UDP_MODE="audp"

Cela dit à Portsentry d\'écouter sur tous les ports non utilisés, ce qui le rend beaucoup plus efficace pour attraper les scanners.

Démarrer et tester

Étape 1 : Redémarrer le service

sudo systemctl restart portsentry

Étape 2 : Vérifier les logs

sudo tail -f /var/log/syslog # ou /var/log/messages sur CentOS
# Vous devriez voir des lignes indiquant que portsentry a démarré et écoute sur les ports.

Étape 3 : Tester avec un scan

Depuis une autre machine (dont vous pouvez vous permettre de bloquer l\'IP !), lancez un scan de ports simple avec nmap.

nmap -p 1-1024 IP_DE_VOTRE_SERVEUR

Sur votre serveur, surveillez les logs. Vous devriez voir une alerte de sécurité, puis une ligne indiquant que l\'IP du scanner a été ajoutée à la liste de blocage.

Vous pouvez vérifier la règle dans iptables :

sudo iptables -L INPUT -n

Vous verrez une nouvelle règle en haut de la chaîne `INPUT` qui `DROP` tout le trafic de l\'IP du scanner.

Faux positifs et déblocage
Le mode avancé est très efficace mais peut parfois causer des faux positifs. Si vous bloquez une IP légitime par erreur, vous devrez la retirer manuellement de la table `iptables` : sudo iptables -D INPUT -s IP_BLOQUEE -j DROP.

Conclusion

Portsentry est un outil de la vieille école, mais il reste remarquablement efficace comme première ligne de défense. Il ne remplace pas un pare-feu bien configuré ou un système de détection d\'intrusion complet, mais il constitue un excellent complément en agissant comme un système d\'alerte précoce et en décourageant activement les attaquants automatisés.