Chaque minute, nombreuses sont les tentatives d'intrusion sur l'ensemble des ordinateurs connectées à Internet.

Parmi les attaques les plus virulentes, il y a bien sûr les tentatives d'accès SSH, l'exploitation de failles de sécurité sur des services Web (Wordpress, PhpMyAdmin ...) et l'exploitation des failles de sécurité sur des services contenant des failles de sécurité connues : services SMB (139), service RDP(3389), service Docker(2376), bases MongoDB ... Ces tentatives d'attaques sont pour la majorité automatisées depuis des serveurs eux-mêmes vulnérables.

Portsentry, une solution pour se protéger des scans de ports

Pour détecter les serveurs qui scannent les ports de votre machine où qui tentent d'exploiter un service défaillant pour se répandre sur Internet, vous pouvez utiliser le logiciel OpenSource Portsentry.

Portsentry est un service Linux très simple qui ouvre des ports réseau pour imiter la présence de réels services et qui se charge d'exécuter des commandes Linux dès que ces ports réseau sont ouverts par un ordinateur tiers.

La réponse par défaut de Portsentry à la tentative de connexion consiste à bloquer les flux réseau de la machine appelante au niveau du système afin que celle-ci ne puisse pas rebondir sur d'autres services. C'est violent comme réaction par défaut, mais efficace !

Portsentry pour se protéger de Shodan ?

Au dela des tentatives d'intrusion, il existe de nombreux ordinateurs sur la toile qui cataloguent les services qu'exposent vos serveurs, c'est par exemple ce que fait Shodan, le moteur de recherche que je vous avais présenté dans mon précédent article. Ces données peuvent être ensuite utilisées par des personnes malveillantes pour exécuter des attaques..

Portsentry utile contre les bruteforces ?

Pour vous protéger des attaques de type force brute, au-delà de restreindre le service via votre firewall, la solution la plus simple à mettre en place s'appelle Fail2ban. Cette solution vous permet de définir des règles de blocage réseau quand Fail2ban détecte des patterns spécifiques dans vos logs.
Vous trouverez plus d'information sur l'usage de Fail2ban dans un précédent article consacré à l'usage Fail2ban.


Comment installer Portsentry ?

L'installation du service Portsentry se fait au travers de votre gestionnaire de package préféré, sur Ubuntu la commande suivante vous permettra d'installer ce service :

$ sudo apt-get install portsentry

Une fois le service installé, la première étape est d'éviter tout risque de se faire bannir soit même, pour cela ajoutez l'IP de votre box Internet dans le fichier "portsentry.ignore.static"

$ sudo vi /etc/portsentry/portsentry.ignore.static

Editer le fichier de configuration principal de Portsentry :

$ sudo vi /etc/portsentry/portsentry.conf

Comment configurer Portsentry ?

Vous avez deux manières d'utiliser Portsentry :

  1. Soit vous définissez vous-même la liste de ports TCP et UDP à écouter depuis les paramètres UDP_PORTS et TCP_PORTS du fichier de configuration. Portsentry écoutera le port.
  2. Soit vous laissez Portsentry ouvrir tous les ports disponibles avant le port 1024, port défini par défaut dans les paramètres ADVANCED_PORTS_TCP et ADVANCED_PORTS_UDP du fichier de configuration de Portsentry.

Dans le premier cas, les paramètres présents dans le fichier "/etc/default/portsentry" devront avoir les paramètres suivants :

TCP_MODE="tcp"
UDP_MODE="udp"

Vous pouvez aussi détecter les "stealth scan" en modifiant les paramètres aux valeurs suivantes, utile pour détecter les scans de ports furtifs :

TCP_MODE="stcp"
UDP_MODE="sudp"

Pour laisser Portsentry ouvrir tous les ports disponibles, vous devrez positionner les valeurs suivantes :

TCP_MODE="atcp"
UDP_MODE="audp"

Dans tous les cas, n'oubliez pas d'ouvrir votre Firewall sur les ports configurés pour que ces ports soient accessibles depuis Internet.

$ sudo iptables -t filter -A INPUT -p tcp --match multiport --dports 1,2,3,4....  -j ACCEPT
$ sudo iptables -t filter -A INPUT -p udp --match multiport --dports 1,2,3,4....  -j ACCEPT

Une fois ce paramétrage réalisé, vous pouvez modifier le comportement par défaut à réaliser en cas de détection de connexion par Portsentry :

# 0 = Ne rien faire, juste loguer ....
# 1 = Bloquer les ports au niveau du réseau
# 2 = Exécuter seulement une commande Linux externe (KILL_RUN_CMD)

BLOCK_UDP="0"
BLOCK_TCP="0"

La première option, l'option 0, vous permettra de loguer les tentatives d'accès, vous pourrez utiliser Fail2ban pour prendre en charge l'action de mise en prison de l'attaquant pendant une durée configurable avec une gestion de la récidive.

L'option 1 bloquera définitivement les flux réseau de l'attaquant dans votre firewall.

Il ne vous reste plus qu'à démarrer le service :

$ sudo service portsentry restart

Comment vérifier que Porsentry fonctionne correctement ?

Vous pouvez maintenant vérifier les tentatives d'accès aux faux services que Portsentry expose sur Internet :

$ sudo less /var/lib/portsentry.history

Vous devrez très vite voir apparaitre des IP dans ce fichier. D'autant plus si vous avez choisi d'ouvrir des ports sensibles comme les ports 139, 22, 3389 .. etc.

Enfin, pour permettre à Portsentry de démarrer à chaque redémarrage de votre serveur :

$ sudo systemctl enable portsentry

Vous voilà protégé contre les scans et autres tentatives d'intrusion sur des services non exposés par votre serveur !