{"id":150,"date":"2020-09-01T13:58:00","date_gmt":"2020-09-01T12:58:00","guid":{"rendered":"https:\/\/ligfy.net\/wordpress\/?p=150"},"modified":"2025-09-02T12:05:45","modified_gmt":"2025-09-02T11:05:45","slug":"securiser-debian-9-avec-portsentry","status":"publish","type":"post","link":"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry\/","title":{"rendered":"S\u00e9curiser Debian 9 avec Portsentry"},"content":{"rendered":"\n<ul><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Installation\">Installation<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Les-dossiers-et-fichiers-de-configuration\">Les dossiers et fichiers de configuration<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Activation du mode avanc\u00e9\">Activation du&nbsp;mode avanc\u00e9<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Configuration\">Configuration<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Tests\">Tests<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-portsentry#Portsentry-avec-Fail2ban\">Portsentry avec Fail2ban<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/h2>\n\n\n\n<p><strong>Portsentry <\/strong>est un programme qui a pour mission de d\u00e9tecter et bloquer (ou pas, selon la config) les scans de ports. Il vous permet par exemple de vous envoyer un mail lors d\u2019un scan suspicieux sur votre serveur. Ou alors il peut carr\u00e9ment bloquer l\u2019attaquant.<\/p>\n\n\n\n<p>Il est donc tr\u00e8s utile d\u2019installer et configurer <strong>Portsentry<\/strong> sur votre serveur. Afin d\u2019obtenir de meilleurs r\u00e9sultats il est possible de le combiner a fail2ban.<\/p>\n\n\n\n<h2 id=\"Installation\">Installation<\/h2>\n\n\n\n<p>Il suffit d&rsquo;installer le paquet.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>apt install portsentry<\/code><\/p><\/blockquote>\n\n\n\n<p>Un message d&rsquo;avertissement vous indiquera alors que <strong>Portsentry<\/strong> ne va appliquer aucun blocage sans que vous lui indiquiez de le faire.<\/p>\n\n\n\n<h2 id=\"Les-dossiers-et-fichiers-de-configuration\">Les dossiers et fichiers de configuration<\/h2>\n\n\n\n<p>Conr\u00eatement, portsentry s&rsquo;axe autour de 3 fichiers.<\/p>\n\n\n\n<p><strong>\/etc\/default\/portsentry<\/strong>&nbsp;: Fichier o\u00f9 l&rsquo;on indique dans quel mode portsentry doit d\u00e9marrer<br><strong>\/etc\/portsentry\/portsentry.conf<\/strong>&nbsp;: Fichier de configuration (o\u00f9 l&rsquo;on indique les actions \u00e0 effectuer quand un scan est detect\u00e9)<br><strong>\/etc\/portsentry\/portsentry.ignore.static<\/strong>&nbsp;: Nous y pla\u00e7ons les IPs que nous autorisons (whitelist)<\/p>\n\n\n\n<h2 id=\"Activation-du-mode-avanc\u00e9\">Activation du&nbsp;mode avanc\u00e9<\/h2>\n\n\n\n<p>Dans le fichier&nbsp;<strong>\/etc\/default\/portsentry<\/strong>, il y a 2 variables&nbsp;<strong>TCP_MODE<\/strong>&nbsp;et&nbsp;<strong>UDP_MODE,<\/strong>&nbsp;par d\u00e9faut, celles-ci sont respectivement en mode&nbsp;<strong>tcp<\/strong>&nbsp;et&nbsp;<strong>udp<\/strong>. Cela signifie que vous devez sp\u00e9cifier \u00e0 la main les ports \u00e0 surveiller. Nous pr\u00e9f\u00e9rons donc le mode&nbsp;<strong>atcp<\/strong>&nbsp;et&nbsp;<strong>audp<\/strong>&nbsp;(<strong>a<\/strong>&nbsp;pour avanc\u00e9).<\/p>\n\n\n\n<p>Pour ce faire, il faut modifier le fichier&nbsp;<strong>\/etc\/default\/portsentry<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/default\/portsentry<\/code><\/p><\/blockquote>\n\n\n\n<p>Et&nbsp;modifiez le&nbsp;param\u00e8tre&nbsp;<strong>TCP_MODE=\u00a0\u00bbtcp\u00a0\u00bb<\/strong>&nbsp;en&nbsp;<strong>TCP_MODE=\u00a0\u00bbatcp\u00a0\u00bb<\/strong>&nbsp;et le param\u00e8tre&nbsp;<strong>UDP_MODE=\u00a0\u00bbudp\u00a0\u00bb<\/strong>&nbsp;en&nbsp;<strong>UDP_MODE=\u00a0\u00bbaudp\u00a0\u00bb<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TCP_MODE=\"atcp\"\nUDP_MODE=\"audp\"<\/code><\/pre>\n\n\n\n<h2 id=\"Configuration\">Configuration<\/h2>\n\n\n\n<p>Nous pouvons mettre en place des exceptions afin de ne pas bloquer diff\u00e9rentes adresses IP (les IPs&nbsp;de votre r\u00e9seau par exemple).<\/p>\n\n\n\n<p>Pour mettre en place ces exceptions, nous allons \u00e9diter le fichier&nbsp;<strong>\/etc\/portsentry\/portsentry.ignore.static<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/portsentry\/portsentry.ignore.static<\/code><\/p><\/blockquote>\n\n\n\n<p>Toutes les IPs que vous allez ajouter dans&nbsp;<strong>portsentry.ignore.static<\/strong>&nbsp;seront ajout\u00e9es&nbsp;dans&nbsp;<strong>portsentry.ignore<\/strong>&nbsp;apr\u00e8s un red\u00e9marrage du service portsentry.Pour ajouter une exception \u00e0 portsentry, il suffit d&rsquo;ajouter une adresse IP par ligne. Vous pouvez \u00e9galement et plus simplement ajouter un ou des CIDR.<\/p>\n\n\n\n<p>\u00c0 pr\u00e9sent nous allons nous attaquer au fichier de configuration principale&nbsp;<strong>\/etc\/portsentry\/portsentry.conf<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/portsentry\/portsentry.conf<\/code><\/p><\/blockquote>\n\n\n\n<h3>Port Configurations<\/h3>\n\n\n\n<p>Avec cette&nbsp;section, Portsentry \u00e9tablit une liste des ports d&rsquo;\u00e9coute, TCP et UDP pour bloquer l&rsquo;h\u00f4te se connectant sur \u200b\u200bces ports, sauf s&rsquo;il est pr\u00e9sent dans le fichier portsentry.ignore.<br>Inutile de modifier cette&nbsp;section&nbsp;si vous utilisez le mode avanc\u00e9, car Portsentry&nbsp;va alors maper automatiquement les ports.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#######################\n# Port Configurations #\n#######################\n...\nTCP_PORTS=\"1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320\"\nUDP_PORTS=\"1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321\"\n...<\/code><\/pre>\n\n\n\n<h3>Advanced Stealth Scan Detection Options<\/h3>\n\n\n\n<p>Dans cette section,&nbsp;ajoutez des ports que vous ne souhaitez pas surveiller.<br>Inutile de modifier cette&nbsp;section&nbsp;si vous utilisez le mode avanc\u00e9, car Portsentry&nbsp;va alors maper automatiquement les ports.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>###########################################\n# Advanced Stealth Scan Detection Options #\n###########################################\n...\nADVANCED_PORTS_TCP=\"1024\"\nADVANCED_PORTS_UDP=\"1024\"\n...\nADVANCED_EXCLUDE_TCP=\"113,139\"\nADVANCED_EXCLUDE_UDP=\"520,138,137,67\"\n...<\/code><\/pre>\n\n\n\n<h3>Configuration Files<\/h3>\n\n\n\n<p>Dans cette section, sont d\u00e9finis les emplacement des fichiers de configuration, laissez les choix par d\u00e9faut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#######################\n# Configuration Files #\n#######################\n...\nIGNORE_FILE=\"\/etc\/portsentry\/portsentry.ignore\"\n...\nHISTORY_FILE=\"\/var\/lib\/portsentry\/portsentry.history\"\n...\nBLOCKED_FILE=\"\/var\/lib\/portsentry\/portsentry.blocked\"<\/code><\/pre>\n\n\n\n<h3>Misc. Configuration Options<\/h3>\n\n\n\n<p>Cette section active&nbsp;ou d\u00e9active&nbsp;la r\u00e9solution DNS.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>###############################\n# Misc. Configuration Options #\n###############################\n...\nRESOLVE_HOST = \"0\"<\/code><\/pre>\n\n\n\n<h3>Ignore Options<\/h3>\n\n\n\n<p>Cette section d\u00e9finie&nbsp;le mode de r\u00e9ponse aux scans.<\/p>\n\n\n\n<ul><li>Le mode 0, permet de ne pas bloquer lors d\u2019une d\u00e9tection de scan (ne rien faire, juste loguer).<\/li><li>Le mode 1, permet d&rsquo;effectuer un blocage lors d\u2019une d\u00e9tection de scan, avec 3 modes de bannissements (vous pouvez les utiliser simultan\u00e9ment):<ul><li>Blocage via <strong>route<\/strong> ou <strong>iptables <\/strong>(Directive <strong>KILL_ROUTE<\/strong>)<\/li><li>Blocage via fichier <strong>hosts.deny<\/strong> (Directive <strong>KILL_HOSTS_DENY<\/strong>)<\/li><li>Blocage via une <strong>r\u00e8gle custom<\/strong> (Directive <strong>KILL_RUN_CMD<\/strong>)<\/li><\/ul><\/li><li>Le mode 2, permet de lancer des scripts externes lors d\u2019une d\u00e9tection de scan (Directive <strong>KILL_RUN_CMD<\/strong>).<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>##################\n# Ignore Options #\n##################\n...\nBLOCK_UDP=\"1\"\nBLOCK_TCP=\"1\"\n...<\/code><\/pre>\n\n\n\n<h3>Dropping Routes<\/h3>\n\n\n\n<p>Cette section d\u00e9finie&nbsp;le bloquage via <strong>route <\/strong>ou <strong>iptables <\/strong>(Directive <strong>KILL_ROUTE<\/strong>).<br>Nous allons opter pour un blocage des scans par le biais d&rsquo;<strong>iptables<\/strong>, donc commentez&nbsp;toutes les lignes qui commencent par&nbsp;<strong>KILL_ROUTE<\/strong>&nbsp;puis d\u00e9commentez la ligne suivante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>###################\n# Dropping Routes #\n###################\n...\nKILL_ROUTE=\"\/sbin\/iptables -I INPUT -s $TARGET$ -j DROP\"<\/code><\/pre>\n\n\n\n<p><strong>Une seule option KILL_ROUTE peut \u00eatre utilis\u00e9 \u00e0 la fois donc ne d\u00e9commentez pas plusieurs lignes<\/strong>.<br>Vous pouvez v\u00e9rifier que c&rsquo;est bien le cas, une fois le fichier enregistr\u00e9 en utilisant cat et grep.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>cat \/etc\/portsentry\/portsentry.conf | grep KILL_ROUTE | grep -v \"#\"<\/code><\/p><\/blockquote>\n\n\n\n<h3>TCP Wrappers<\/h3>\n\n\n\n<p>Cette section d\u00e9finie&nbsp;le bloquage via le fichier <strong>hosts.deny<\/strong> (Directive <strong>KILL_HOSTS_DENY<\/strong>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>################\n# TCP Wrappers #\n################\n...\nKILL_HOSTS_DENY=\"ALL: $TARGET$ : DENY\"<\/code><\/pre>\n\n\n\n<h3>External Command<\/h3>\n\n\n\n<p>Cette section d\u00e9finie&nbsp;le blocage via une <strong>r\u00e8gle custom<\/strong> (Directive <strong>KILL_RUN_CMD<\/strong>) gr\u00e2ce \u00e0 une commande externe.&nbsp;<br>Vous pouvez par exemple, ex\u00e9cuter une commande ou un script.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>####################\n# External Command #\n####################\n...\n#KILL_RUN_CMD_FIRST = \"0\"\n...\n#KILL_RUN_CMD=\"\/some\/path\/here\/script $TARGET$ $PORT$ $MODE$\"<\/code><\/pre>\n\n\n\n<h3>Scan trigger value<\/h3>\n\n\n\n<p>Cette section d\u00e9finie le temps de r\u00e9action (nombre de connections \u00e0 un port) n\u00e9cessaire pour d\u00e9clencher&nbsp;<strong>Portsentry<\/strong>. La valeur par d\u00e9faut est 0 qui r\u00e9agira imm\u00e9diatement.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>######################\n# Scan trigger value #\n######################\n...\nSCAN_TRIGGER=\"0\"<\/code><\/pre>\n\n\n\n<h3>Port Banner Section<\/h3>\n\n\n\n<p>Cette section d\u00e9finie&nbsp;l\u2019affichage de la banni\u00e8re,&nbsp;Inutile de faire de la provocation, laissez comment\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#######################\n# Port Banner Section #\n#######################\n...\n#PORT_BANNER=\"** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY.\"<\/code><\/pre>\n\n\n\n<p>Puis relancez&nbsp;portsentry.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>systemctl restart\u00a0portsentry<\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"Tests\">Tests<\/h2>\n\n\n\n<p>Depuis une autre machine, nous allons effectuer un scan de&nbsp;ports (par exemple avec nmap) de la machine&nbsp;h\u00e9bergeant <strong>Portsentry<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nmap -v 192.168.x.x<\/code><\/p><\/blockquote>\n\n\n\n<p>Maintenent si on regarde les logs&nbsp;g\u00e9n\u00e9r\u00e9s dans&nbsp;<strong>\/var\/log\/syslog<\/strong>&nbsp; de la machine h\u00e9bergeant <strong>Portsentry<\/strong>, en utilisent&nbsp;le mot cl\u00e9 <strong>attackalert<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>grep attackalert \/var\/log\/syslog<\/code><\/p><\/blockquote>\n\n\n\n<p>Nous constatons que l&rsquo;IP&nbsp;de l\u2019attaquant \u00e0 bien \u00e9t\u00e9 bloqu\u00e9e via <strong>iptables <\/strong>et <strong>hosts.deny<\/strong>.<\/p>\n\n\n\n<p>Pour voir le blocage de l&rsquo;IP&nbsp;de l\u2019attaquant via&nbsp;<strong>iptables<\/strong>, utilisez cette commande.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>iptables -L INPUT -v -n | grep DROP<\/code><\/p><\/blockquote>\n\n\n\n<p>Pour voir le blocage de l&rsquo;IP&nbsp;de l\u2019attaquant via&nbsp;le fichier <strong>hosts.deny<\/strong>, utilisez cette commande.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>cat \/etc\/hosts.deny<\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"Portsentry-avec-Fail2ban\">Portsentry avec Fail2ban<\/h2>\n\n\n\n<p><strong>Fail2ban <\/strong>peut utiliser les logs de <strong>Portsentry <\/strong>pour effectuer des actions.<\/p>\n\n\n\n<p>Par d\u00e9faut <strong>Fail2ban <\/strong>poss\u00e8de une prison (jail) et un filtre <strong>Portsentry <\/strong>non activ\u00e9, donc nous pouvons&nbsp;activer la prison <strong>Portsentry<\/strong> pour que les actions d&rsquo;une d\u00e9tection de scan de ports soit g\u00e9r\u00e9e par <strong>Fail2ban<\/strong>.<\/p>\n\n\n\n<p><strong>Portsentry&nbsp;<\/strong>stocke la liste des IPs dans le fichier&nbsp;<strong>\/var\/lib\/portsentry\/portsentry.history<\/strong>&nbsp;et <strong>Fail2ban <\/strong>va utiliser se fichier&nbsp;pour prendre en charge l&rsquo;action de mise en prison de l&rsquo;attaquant.<\/p>\n\n\n\n<p>Dans le fichier de configuration de <strong>Portsentry <\/strong>nous allons&nbsp;d\u00e9finir&nbsp;le mode de r\u00e9ponse aux scans \u00e0 <strong>0<\/strong>, car maintenant c&rsquo;est <strong>Fail2ban <\/strong>qui va bannir les IPs.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/portsentry\/portsentry.conf<\/code><\/p><\/blockquote>\n\n\n\n<p>Et nous modifions la section comme ceci.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>##################\n# Ignore Options #\n##################\n...\nBLOCK_UDP=\"0\"\nBLOCK_TCP=\"0\"\n...<\/code><\/pre>\n\n\n\n<p>Maintenant il faut activer la prison (jail) <strong>Portsentry <\/strong>dans le fichier de configuration de&nbsp;<strong>Fail2ban<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/fail2ban\/jail.d\/jail.local<\/code><\/p><\/blockquote>\n\n\n\n<p>Nous pouvons activer&nbsp;la prison <strong>Portsentry<\/strong> et&nbsp;ajuster&nbsp;sa configuration (en sp\u00e9cifiant par exemple un nombre de tentatives diff\u00e9rent de la valeur par d\u00e9faut, un temps&nbsp;de&nbsp;bannissement diff\u00e9rent de la valeur par d\u00e9faut, etc&#8230;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;portsentry]\nenabled = true\nlogpath = \/var\/lib\/portsentry\/portsentry.history\nmaxretry = 1<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Portsentry est un programme qui a pour mission de d\u00e9tecter et bloquer (ou pas, selon la config) les scans de ports. Il vous permet par exemple de vous envoyer un mail lors d\u2019un scan suspicieux sur votre serveur. Ou alors il peut carr\u00e9ment bloquer l\u2019attaquant.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[7,8],"_links":{"self":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/150"}],"collection":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":5,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/150\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}