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
iptablesoufirewalld.
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.
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.