Traduction(s) : ?Deutsch - English - ?Español - Français - ?Italiano - ?Português Brasileiro

Introduction

(ASAP : Finaliser la mise en page. Le contenu est pertinent.)

DenyHosts établit des règles pour les tentatives de connexions sur le serveur distant. Denyhosts est un daemon qui analyse en permanence le fichier de log /var/log/auth.log. Au bout de plusieurs tentatives de connexion infructueuses l'adresse IP est blacklistée dans le fichier /etc/hosts.deny.

Avec un fichier hosts.deny trop lourd, Denyhosts devient un gros consommateur de CPU car il va lire et relire le fichier hosts.deny pour chaque adresse IP affichée dans le journal. DenyHosts peut utiliser des wrappers TCP et utilise maintenant Iptables par défaut. DenyHosts met également à jour le fichier /etc/hosts.deny quand une adresse IP est à bannir. Rien n'est mis en cache mémoire ce qui n'est pas optimisé.

Fail2ban est plus adapté que DenyHosts mais pour une protection facile et rapide à mettre en oeuvre, rien ne vaut DenyHosts. La différence notable est que Fail2ban utilise iptables et gère la mise en ban sur une certaine durée uniquement. ?Fail2Ban utilise environ 10 Mo de mémoire de plus que DenyHosts, donc, pour un petit VPS, privilégier DenyHosts. DenyHosts agit en amont de Fail2ban. ( A confirmer. )

DenyHosts permet une synchronisation de la liste de ban avec d'autres services. Une liste de blocage peut facilement être importée ou exportée.

Installer le paquet DenyHosts

Installer DenyHosts sur Debian Buster

# Installer DenyHosts sur Debian Buster :
sudo apt install denyhosts

E: Impossible de trouver le paquet denyhosts

Installer DenyHosts depuis le paquet .deb de la version SID de Debian

Installer DenyHosts depuis le dépôt officiel sur Github - Avec le .deb

Installer DenyHosts depuis de dépôt officiel sur Github - Depuis les sources

Configurer DenyHosts

 sudo nano /etc/denyhosts.conf

 # Le fichier journal qui contient les informations de journalisation du serveur SSH.
 # Identifier le fichier avec la commande : grep "sshd:" /var/log/*
 SECURE_LOG = /var/log/auth.log
 # Le fichier qui contient des informations d'accès restreint à l'hôte.
 HOSTS_DENY = /etc/hosts.deny
 # Ne jamais purger le fichier :
 # PURGE_DENY =
 # 'y' = years 'w' = weeks 'd' = days 'h' = hours 'm' = minutes
 # Purger le fichier /etc/hosts.deny toutes les 4 semaines :
 PURGE_DENY = 4w
 # Si la valeur est définie un hôte bloqué sera purgé au moins autant de fois.
 # Si cette valeur est définie sur 3, DenyHosts purgera un hôte au maximum 4 fois.
 # Après que l'hôte ait été purgé 3 fois, l'hôte restera bloqué dans le HOSTS_DENY pour toujours.
 # Si la valeur est définie sur 0, DenyHosts purgera chaque hôte indéfiniment sans le bloquer de façon permanente.
 PURGE_THRESHOLD = 3
 # Bloquer les tentatives d'intrusion avec l'option ALL empêchera le serveur ne répondre aux adresses IP attaquantes.
 # Bloquer uniquement les attaques sur le serveur SSH avec la commande : BLOCK_SERVICE  = sshd
 BLOCK_SERVICE = ALL
 # Bloquer un hôte qui tente de se connecter avec un compte d'utilisateur inexistant après 2 tentatives.
 DENY_THRESHOLD_INVALID = 2
 # Bloquer un hôte qui tente de se connecter avec un compte d'utilisateur valide après 3 tentatives.
 # L'utilisateur root n'est pas concerné.
 DENY_THRESHOLD_VALID = 3
 # Bloquer un hôte qui tente de se connecter avec le compte root après 1 tentative.
 DENY_THRESHOLD_ROOT = 1
 # Les utilisateurs dans le fichier d'utilisateurs restreints sont limités par DENY_THRESHOLD_RESTRICTED.
 # Il est défini sur DENY_THRESHOLD_ROOT par défaut.
 DENY_THRESHOLD_RESTRICTED = 1
 # Le chemin absolu utilisé par DenyHosts pour écrire les données.
 WORK_DIR = /var/lib/denyhosts
 # Le chemin pour lire une configuration.
 ETC_DIR = /etc
 # Si une tentative de connexion suspecte résulte d'un hôte autorisé alors il est considéré comme suspect.
 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
 # Bloquer le nom de l'hôte lorsque qu'il est possible de le récupérer.
 HOSTNAME_LOOKUP=YES
 # Verrouiller le fichier PID de DenyHosts pour qu'il y ait que une seule instance en fonctionnement.
 LOCK_FILE = /run/denyhosts.pid
 # Bloquer les connexions entrantes en utilisant le pare-feu Linux IPTABLES.
 # Définir la variable vers le chemin de l'exécutable iptables "/sbin/iptables".
 # Si cette option n'est pas définie ou commentée, le pare-feu n'est pas utilisé.
 IPTABLES = /sbin/iptables
 # Ne pas bloquer tous les ports avec ALL mais uniquement les ports indiqués.
 # BLOCKPORT = 22
 # Si iptables est renseigné et activé, désactiver les deux options suivantes.
 # PFCTL_PATH = /sbin/pfctl
 # PF_TABLE = blacklist
 # Mail de l'administrateur à prévenir lors d'un nouveau blocage.
 # Les mails de root peuvent être redirigés par le système.
 ADMIN_EMAIL = root@localhost
 # Hôte SMTP.
 SMTP_HOST = localhost
 # Port SMTP.
 SMTP_PORT = 25
 # Renseigner les paramètres suivants si le serveur SMTP nécessiste une authentification.
 # SMTP_USERNAME=Username
 # SMTP_PASSWORD=Password
 # Mail émetteur du message.
 SMTP_FROM = DenyHosts <nobody@localhost>
 # Sujet du message.
 SMTP_SUBJECT = DenyHosts Report
 # Date du message.
 SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z
 # Activer la journalisation dans le fichier syslog.
 SYSLOG_REPORT=YES
 # Si la configuration du serveur SSH et tcp_wrappers enregistrent des noms d'hôtes plutôt que des adresses IP,
 # DenyHosts peut résoudre chaque adresse IP du fichier hosts.allow pour déterminer le nom d'hôte correspondant.
 # Tout hôte correspondant à cette adresse IP résolue ou au nom d'hôte ne sera pas bloqué.
 # Si les noms d'hôtes n'apparaissent jamais dans le SECURE_LOG, définir ce paramètre sur NO.
 ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO
 # Période pour la remise à zéro du compteur de tentative de connexion invalide, sauf pour l'utilisateur root.
 AGE_RESET_VALID=4h
 # Période pour la remise à zéro du compteur de tentative de connexion invalide pour l'utilisateur root.
 AGE_RESET_ROOT=4w
 # Période pour la remise à zéro du compteur de tentative de connexion invalide pour les utilisateurs dans le
 # fichier "WORK_DIR/restricted-usernames".
 AGE_RESET_RESTRICTED=4w
 # Période pour la remise à zéro du compteur de tentative de connexion invalide pour les utilisateurs invalides.
 # Ceux qui n'apparaissent pas dans "/etc/passwd".
 AGE_RESET_INVALID=4w
 # Le nombre d'échecs pour une adresse IP sera réinitialisé à 0 suite à une connexion réussie.
 RESET_ON_SUCCESS = yes
 # Si elle est définie, cette valeur doit pointer vers un programme exécutable qui sera invoqué lorsqu'un hôte sera
 # ajouté au fichier HOSTS_DENY.
 #PLUGIN_DENY=/usr/bin/true
 # Si elle est définie, cette valeur doit pointer vers un programme exécutable qui sera invoqué lorsqu'un hôte sera
 # supprimé au fichier HOSTS_DENY. 
 #PLUGIN_PURGE=/usr/bin/true
 # Si définie, cette valeur doit contenir une expression régulière qui peut être utilisée pour identifier des pirates
 # pour votre configuration ssh particulière. Cette fonctionnalité étend les expressions régulières intégrées 
 # utilisées par DenyHosts. Ce paramètre peut être spécifié plusieurs fois.
 #USERDEF_FAILED_ENTRY_REGEX=
 # Fichier journal utilise pour signaler l'état de DenyHosts en mode démon (--daemon).
 # Laisser vide pour désactiver la journalisation.
 DAEMON_LOG = /var/log/denyhosts
 # Format de la date dans les logs.
 DAEMON_LOG_TIME_FORMAT = %b %d %H:%M:%S
 # Spécifie le format de message de chaque entrée de journal en mode démon (--daemon).
 # Par défaut, le format suivant est utilisé :
 #DAEMON_LOG_MESSAGE_FORMAT = %(asctime)s - %(name)-12s: %(levelname)-8s %(message)s
 # Durée pendant laquelle DenyHosts dormira entre les interrogations en mode démon (--daemon).
 # Valeur par défaut de 30s que je ralonge un peu pour économiser les ressources du système.
 DAEMON_SLEEP = 1m
 # Fréquence de purge en mode démon (--daemon).
 DAEMON_PURGE = 1h
 
 # Synchronisation entre plusieurs DenyHosts.
 # Dès qu'un de vos serveurs subis une attaque, tous vos serveurs blacklistent cette adresse IP.
 # Le serveur central qui communique avec le démon DenyHost.
 # Pour activer la synchronisation, décommenter la ligne suivante :
 SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
 # Activer un proxy HTTP.
 #SYNC_PROXY_SERVER = http://mon.serveur.proxy:3128
 # Intervale de temps entre chaque synchronisation.
 SYNC_INTERVAL = 1h
 # Autoriser le démon DenyHosts à transmettre des hôtes qui ont été refusé.
 # Cette option ne s'applique que si SYNC_SERVER n'a pas été commenté.
 SYNC_UPLOAD = yes
 # Autoriser le démon DenyHosts à recevoir des hôtes qui ont été refusés par d'autres.
 # Cette option ne s'applique que si SYNC_SERVER n'a pas été commenté.
 SYNC_DOWNLOAD = yes
 # Définir un filtre pour des adresses bloquées reçues par d'autres serveurs.
 # Le chiffre indique le nombre de fois que l'adresse IP aura été bloquée au minimum.
 SYNC_DOWNLOAD_THRESHOLD = 4
 # Durée minimum de la période d'attaque observée sur d'autres serveurs.
 SYNC_DOWNLOAD_RESILIENCY = 8h

Redémarrer DenyHosts

# Redémarrer DenyHosts :
sudo /etc/init.d/denyhosts restart

Notes post installation de DenyHosts

Error

 # Le fichier de log de DenyHosts affiche le message d'erreur suivant :
 nano /var/log/denyhosts
 AllowedHosts: WARNING  Couldn't load warned hosts from /var/lib/denyhosts/allowed-warned-hosts

Je ne sais pas pourquoi ce fichier est demandé par DenyHosts. Je crée ce fichier qui n'existe pas pour éviter d'avoir le message d'erreur :

 sudo touch /var/lib/denyhosts/allowed-warned-hosts

Les mails ne sont pas envoyés

hosts.allow et hosts.deny

/etc/hosts.allow

/etc/hosts.deny

Télécharger une version à jour du fichier hosts.deny

Tester le paramétrage

Bibliographie

Ressources complémentaires