Installation de portsentry

Objet: bloquer les scanneurs de ports

Installation avec la méthode habituelle: apt install portsentry

Puis modification de certains paramètres dans le fichier /etc/portsentry/portsentry.conf :

##################
# Ignore Options #
##################
\[...]
# 0 = Do not block UDP/TCP scans.
# 1 = Block UDP/TCP scans.
# 2 = Run external command only (KILL_RUN_CMD)

BLOCK_UDP="2"
BLOCK_TCP="2"
###################
# External Command#
###################
\[...]
# The KILL_RUN_CMD_FIRST value should be set to "1" to force the command 
# to run \*before\* the blocking occurs and should be set to "0" to make the 
# command run \*after\* the blocking has occurred. 
#
KILL_RUN_CMD_FIRST = "1"
#
#
KILL_RUN_CMD="/home/unutilisateur/portsentry_ext_cmd.sh $TARGET$"
# for examples see /usr/share/doc/portsentry/examples/

Petite explication: je n’ai pas activé la résolution de nom, fail2ban le faisant et grâce à la dernière commande, portsentry demandera à fail2ban de bloquer l’attaquant: résolution du nom, blocage via nftables et envoi d’un mail d’alerte seront effectue par fail2ban:

# cat portsentry_ext_cmd.sh
#!/bin/sh
#
# Commande externe portsentry
#
# By Smokyr <smokyr@extra-ordinaire.com
#

# en mode BLOCK_UDP="2" et BLOCK_TCP="2" de portsentry, la commande "/sbin/route add -host $TARGET$ reject" n'est pas exécutée.
/sbin/route add -host $1 reject
# appel de fail2ban
/usr/bin/fail2ban-client set portsentry banip $1

Ajout de trois fichiers à fail2ban:

Nouveau fichier /etc/fail2ban/jail.d/potsentry.conf, ayant pour but d’activer un jail utilisant nftables et ban d’une journée:

# Jail for portsentry
#
# Smokyr <smokyr@extra-ordinaire.com>
#

[portsentry]
enabled   = true
filter   = portsentry
logpath   = /var/log/portsentry.log
banaction = nftables-allports
bantime  = 86400 ; 1 days
maxretry  = 1
protocol  = 0-255

Ajout du fichier log que fail2ban va « scanner » (inutilement, puisqu’il restera vide): touch /var/log/portsentry.log

Nouveau fichier /etc/gail2ban/filter.d/portsentry.conf, avec un filtre « bidon », puisque ce n’est pas fail2ban qui fera la détection, mais portsentry.

# Fail2Ban filter for portsentry
#
# Smokyr <smokyr@extra-ordinaire.com>
#

[Definition]
failregex = ^\[\w{1,3}.\w{1,3}.\d{1,2}.\d{1,2}:\d{1,2}:\d{1,2} \d{1,4}. \[error$
ignoreregex =

Redémarrage de fail2ban: service fail2ban restart

Passage de portsentry en mode avancé en modifiant le fichier /etc/default/portsentry

# /etc/default/portsentry
#
# This file is read by /etc/init.d/portsentry. See the portsentry.8
# manpage for details.
#
# The options in this file refer to commandline arguments (all in lowercase)
# of portsentry. Use only one tcp and udp mode at a time.
#
TCP_MODE="atcp"
UDP_MODE="audp"

Modification du fichier /etc/portsentry/portsentry.ignore.static en y ajoutant mon adresse IP personnelle (sans doute pas nescessaire, car cette adresse IP est déjà dans les adresses à ignorer par fail2ban).

Et enfin redémarrage de portsentry: service portsentry restart

7 thoughts on “Installation de portsentry”

  1. Après un petit contrôle des IP bannies par portsentry, il s’avère que 95% sont des tentatives de connexion au port SSH 22, qui n’est pas utilisé par mon serveur (puisque paramétré sur un autre port que le port standard SSH).

  2. Bonjour,

    chez moi il y a déjà un fichier /etc/fail2ban/filter.d/portsentry.conf (Debian Bullseye) avec le contenu suivant, on dirait que çà n’a rien à voir ! :

    # Fail2Ban filter for failure attempts in Counter Strike-1.6
    #
    #

    [Definition]

    failregex = \/ Port\: [0-9]+ (TCP|UDP) Blocked$

    ignoreregex =

    datepattern = {^LN-BEG}Epoch
    {^LN-BEG}

    # Author: Pacop

    1. Je n’avais pas ce fichier (debian Buster): le tien regarde le log général que regarde fail2ban.
      Etrange quand même la première ligne du fichier: # Fail2Ban filter for failure attempts in Counter Strike-1.6
      Donc à tester si elle fonctionne, mais si c’est le cas c’est une solution plus propre que la mienne, car de mon coté, j’ai construit avec mes connaissances (je ne suis pas un pro de linux): Pas besoin de faire appel à une commande externe dans portsentry (et donc de créer le fichier script correspondant).
      J’en prend note pour ma prochaine installation, merci.

      1. Je déterre un peu le sujet, mais une question me taraude, si j’active la jail ci-dessus (présente également dans mes fichiers de conf sous Debian Buster) je dois commenter la ligne : KILL_RUN_CMD= »/home/unutilisateur/portsentry_ext_cmd.sh $TARGET$ » dans le fichier de conf de portsentry et remettre
        BLOCK_UDP= »1″
        BLOCK_TCP= »1″
        pour laisser fail2ban ban l’ip?

        1. Si on veut laisser fail2ban faire le travail, ne faut-il pas laisser
          BLOCK_UDP=”0″
          BLOCK_TCP=”0″

          La conf de blockage se trouve sur fail2ban. Ici on ne devrait que demander les logs, non?

          1. Oui, comme tu le dis, « Si on veut laisser fail2ban faire le travail ».
            L’avantage (et aussi inconvénient) de laisser ces deux paramètres à 1 est que portsentry fera aussi le ban, mais lui tant que la cession est ouverte, donc un ban en double.
            De plus, portsentry fait un ban dans les deux sens (réception et envoi) alors que fail2ban ne le fait qu’en réception.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.