Traduction(s) : ?Deutsch - English - ?Español - Français - ?Italiano - ?Português Brasileiro
Contents
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
# Si le paquet n'est pas présent dans la distribution stable de Debian 10 Buster, installer DenyHosts 2.10.2 depuis le paquet .deb provenant de la version SID de Debian : cd ~/ # Télécharger DenyHosts 2.10.2 depuis le dépôt de Debian SID : wget http://ftp.fr.debian.org/debian/pool/main/d/denyhosts/denyhosts_2.10-2_all.deb # Équivalent avec les options de wget : -c permet de reprendre le chargement en cas d'arrêt et -O permet de définir la destination. wget -c -O denyhosts_2.10-2_all.deb http://ftp.fr.debian.org/debian/pool/main/d/denyhosts/denyhosts_2.10-2_all.deb
# Ajouter son adresse IP dans la liste blanche avant d'installer DenyHosts ! sudo nano /etc/hosts.allow sshd: xx.xx.xx.xx # Installer le paquet .deb : sudo dpkg -i denyhosts_2.10-2_all.deb Sélection du paquet denyhosts précédemment désélectionné. (Lecture de la base de données... 28060 fichiers et répertoires déjà installés.) Préparation du dépaquetage de denyhosts_2.10-2_all.deb ... Dépaquetage de denyhosts (2.10-2) ... Paramétrage de denyhosts (2.10-2) ... Created symlink /etc/systemd/system/multi-user.target.wants/denyhosts.service → /lib/systemd/system/denyhosts.service. Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u3) ... # LA CONNEXION AU SERVEUR EST COUPÉE ! # En cas de blocage, utiliser un proxy ou un VPN pour pouvoir se reconnecter au serveur.
# Il faut ajouter son adresse IP publique dans la liste blanche des utilisateurs autorisés /etc/hosts.allow avant d'installer DenyHosts ! # Ce n'est pas normal que l'administrateur se fasse blacklister lors de l'installation. J'ouvre une issue dans ce sens : https://github.com/denyhosts/denyhosts/issues/128 # Ajouter son adresse IP dans la liste blanche : sudo nano /etc/hosts.allow sshd: xx.xx.xx.xx # Retirer son adresse IP de la liste noire : sudo nano /etc/hosts.deny # Retirer son adresse IP bloquée de Iptables : sudo iptables -S sudo iptables -D INPUT -s xx.xx.xx.xx/32 -j DROP
# Redémarrer DenyHosts : sudo service denyhosts restart # Supprimer le ficher .deb : cd ~/ sudo rm denyhosts_2.10-2_all.deb
Installer DenyHosts depuis le dépôt officiel sur Github - Avec le .deb
# Installer DenyHosts 3.1 depuis le dépôt officiel sur Github. Le Github officiel de DenyHosts : https://github.com/denyhosts/denyhosts
# Une version .deb est également disponible : https://github.com/denyhosts/denyhosts/releases/tag/v3.1 Téléchargement direct du .deb de DenyHosts 3.1.2-2 : https://github.com/denyhosts/denyhosts/releases/download/v3.1/denyhosts_3.1.2-2_all.deb Cette version actuelle ne semble pas (forcément) fonctionner, car, elle ne redémarre pas. Privilégier l'installation manuellement depuis le dépôt devrait mieux fonctionner.
Installer DenyHosts depuis de dépôt officiel sur Github - Depuis les sources
# Le tutoriel suivant est fonctionnel, il sert de support de documentation pour identifier les problématiques actuelles rencontrées lors de l'installation de DenyHosts sur une version Stable de Debian Buster. https://github.com/denyhosts/denyhosts/blob/master/documentation/README-Installation-Debian-Buster.txt
Configurer DenyHosts
# Éditer le fichier de configuration de 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
# Renseigner les accès vers un serveur SMTP distant pour envoyer les mails de DenyHosts. # DenyHosts ne gère pas le port 465 chiffré pour l'envoie de mails.
# Ajouter une fonctionnalité SSL à DenyHosts en installant Stunnel4. sudo apt-get install stunnel4 # Stunel4 Configuration sudo touch /etc/stunnel/stunnel.conf
cat > /etc/stunnel/stunnel.conf <<EOF [ssmtp] client = yes accept = 25 connect = mail.example.com:465 EOF # Changer ENABLED de "0" à "1" pour démarrer le tunnel au démarrage du serveur. sudo nano /etc/default/stunnel4 cat /etc/default/stunnel4 ENABLED=1 FILES="/etc/stunnel/*.conf" OPTIONS="" PPP_RESTART=0 # Redémarrer le service Stunnel4 : sudo /etc/init.d/stunnel4 restart # Vérifier avec netstat si Stunnel4 est à l'écoute du port 25: netstat -nltp | grep :25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 24687/stunnel4
# Paquet Stunel4 sur Debian : https://packages.debian.org/fr/buster/stunnel4
hosts.allow et hosts.deny
- Pour restreindre l'accès à votre machine Unix ou Linux, vous devez modifier les fichiers /etc/hosts.allow et /etc/hosts.deny. Ces fichiers sont utilisés par les programmes tcpd (tcp wrapper) et sshd pour décider d'accepter ou non une connexion provenant d'une autre adresse IP. ITS recommande que, pour commencer, vous restreignez l'accès aux seules adresses de réseau que vous êtes certain devrait avoir accès. Les deux exemples de fichiers suivants permettent les connexions à partir de n'importe quelle adresse dans le domaine de réseau visionduweb.eu, mais pas d'autres.
Installer le paquet <code>denyhosts</code> pour autoriser des adresses IP SSH avec <code>hosts.allow</code>. Installer le paquet <code>denyhosts</code> pour protéger ssh avec <code>hosts.deny</code>.
/etc/hosts.allow
- # Ce fichier décrit les noms des hôtes autorisés à utiliser les services INET locaux, comme décidé par le serveur '/usr/sbin/tcpd'. # Tout autoriser. # ALL : ALL ALL: localhost # Autoriser uniquement le domaine visionduweb.eu à se connecter. # ALL: .visionduweb.eu # Autoriser une adresse IP. # Ajouter son adresse IP publique pour ne pas se retrouver exclus du serveur distant. sshd: 127.0.0.1 sshd: 127.0.1.1 sshd: xx.xx.xx.xx # Autoriser plusieurs adresses IP. # sshd : IP-Address1, IP-Address2, IP-Address3 # Autoriser une plage d'adresses IP. # sshd : 33.*.*.* # sshd : 66.66.*.* # Autoriser toutes les adresses. # sshd : ALL
/etc/hosts.deny
- # Avec cette configuration, l'accès à votre machine par n'importe quel hôte est refusé, sauf ceux spécifiés dans hosts.allow. # hosts.deny This file describes the names of # the hosts that are *not* allowed # to use the local INET services, as # decided by the '/usr/sbin/tcpd' # server. # # deny all by default, only allowing hosts or # domains listed in hosts.allow. ALL: ALL sshd: ALL # Une autre possibilité serrait de tout interdire sauf une adresse IP, directement depuis hosts.deny : sshd : ALL EXCEPT 127.0.0.1 Utiliser la commande --purge permet de vider les adresses en mémoire dans hosts.deny.
You must set the PURGE_DENY parameter in your configuration file and invoke DenyHosts with the --purge command line flag: denyhosts.py --purge
?Fichier:ko.png TCP Wrappers hosts allow deny : https://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/
Télécharger une version à jour du fichier hosts.deny
# Télécharger une version à jour du fichier hosts.deny depuis le site Sécurité Info : https://www.securiteinfo.com/administration-systeme-et-reseau/outils/ultimate-hosts-blacklist.shtml # Proposition pour créer manuellement le nouveau fichier hosts.deny depuis un script lancé par sudo :
# Utiliser le lien direct vers le fichier host.deny (Moins de 3Mo) : https://hosts.ubuntu101.co.za/hosts.deny sudo cp /etc/hosts.deny /etc/hosts.deny.bak # On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur. # Arrêter le script si le fichier ne peut pas être téléchargé. wget https://hosts.ubuntu101.co.za/hosts.deny -P /tmp || exit 1 sudo -s cat /tmp/hosts.deny > /etc/hosts.deny exit rm /tmp/hosts.deny # Proposition pour créer manuellement le nouveau fichier hosts.deny depuis un script lancé par sudo :
# Utiliser le lien direct vers le fichier superhosts.deny (Plus de 15Mo) : https://hosts.ubuntu101.co.za/superhosts.deny sudo cp /etc/hosts.deny /etc/hosts.deny.bak # On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur. # Arrêter le script si le fichier ne peut pas être téléchargé. wget https://hosts.ubuntu101.co.za/superhosts.deny -P /tmp || exit 1 sudo -s cat /tmp/superhosts.deny > /etc/hosts.deny exit rm /tmp/superhosts.deny # Proposition pour créer le nouveau fichier hosts.deny depuis une tâche cron lancée avec la crontab de root :
# Utiliser le lien direct vers le fichier superhosts.deny (Plus de 15Mo) : https://hosts.ubuntu101.co.za/superhosts.deny cp /etc/hosts.deny /etc/hosts.deny.bak # On peut télécharger le fichier dans le répertoire /tmp en tant que simple utilisateur. # Arrêter le script si le fichier ne peut pas être téléchargé. sudo - utilisateur_normal wget https://hosts.ubuntu101.co.za/superhosts.deny -P /tmp || exit 1 # On quitte le simple utilisateur pour copier le contenu du fichier temporaire vers le fichier appartenant à root:root exit cat /tmp/superhosts.deny > /etc/hosts.deny # On supprime le fichier temporaire avec le simple utilisateur : sudo - utilisateur_normal rm /tmp/superhosts.deny # On quitte, deux fois (?) exit exit # Ici il me faut faire confiance au contenu téléchargé. # Cela pourrait être affiné, je suppose, avec des contrôles de certificats, ou, une politique de contrôle basée sur md5sum, ou les deux, et, peut être encore d'autres méthodes. # Il est également possible de vérifier dans le fichier temporaire, si des adresses IP bloquées ne sont pas également dans ma liste blanche, pour les retirer de la liste des adresses bloquées ! # Le fichier sera copié par après. for w in /etc/hosts.allow do
- sed -i '/$w/d' /tmp/hosts.deny
# Central Repository (?GitHub) ≈ 19:05 ≈ 19:15 # API / Search engine 19:05 ≈ 19:20 # Central Mirror (hosts.ubuntu101.co.za) 19:20 ≈ 19:25 # DNS Server (#293) 19:20 ≈ 19:30
# Redémarrer DenyHosts : sudo service denyhosts restart
# La version du fichier hosts.deny proposée par https://www.securiteinfo.com est régulièrement mise à jour à l'aide des sources suivantes : 2o7.net Adblock No-Coin List Add_Risk Add_Spam Ads_Disconnect.me Airelle's Anti-Sex Hosts Anti-?PopAds Bad JAV Sites Badd Boyz Hosts BadIPS.com Barbock filter list Blocklist.de Cameleon DShield.org Suspicious Domain List Firehol Global Advert Servers Blocklist - Personal Edition Hosts ADBlock ?JustDomains KADHosts malc0de Malware Domain List Michael Trimm's Hosts MoaAB adblock.makala.is Phishing.Database pl-host file Quidsup ?NoTrack Malicious Sites Quidsup ?NoTrack Ransomware Tracker Domain Blocklist ?ShallaList SMed79 - Various Lists somewhocares.org Spam404 Suspicious.Snooping.Sniffing.Hacking.IP.Addresses The Big List of Hacked Malware Web Sites Top Attacking Wordpress IP's uBlock Filters Plus WaLLy3K_Blacklist ?YousList ?YoYo.org ?ZeroDot1 - ?CoinBlocker Lists ?ZeusTracker
Tester le paramétrage
- # Tester le paramétrage avec tcpdmatch. # Va retourner "access: granted" ou "access: denied". tcpdmatch sshd www.visionduweb.fr client: hostname visionduweb.fr client: address 139.99.173.195 server: process sshd access: denied tcpdmatch in.telnetd www.visionduweb.fr client: hostname visionduweb.fr client: address 139.99.173.195 server: process in.telnetd access: denied
Bibliographie
Document partagé d'après le wiki https://wiki.visionduweb.fr Source de la page : https://wiki.visionduweb.fr/index.php?title=Sommaire_S%C3%A9curit%C3%A9#Prot.C3.A9ger_son_serveur_avec_DenyHosts
Ressources complémentaires
Faq officielle de Denyhost : http://denyhost.sourceforge.net/faq.php Informations complémentaires sur le paramétrage du fichier de configuration : https://flexion.org/posts/2012-11-ssh-brute-force-defence/ Informations complémentaires sur le paramétrage du fichier de configuration : http://www.desmoulins.fr/index.php?pg=informatique!linux!denyhosts Informations complémentaires sur le paramétrage du fichier de configuration : https://www.it-connect.fr/proteger-son-acces-ssh-avec-denyhosts%EF%BB%BF/ Informations complémentaires sur le paramétrage du fichier de configuration : https://www.it-connect.fr/proteger-son-acces-ssh-avec-denyhosts%ef%bb%bf/ Informations complémentaires sur le paramétrage du fichier de configuration : https://www.tecmint.com/block-ssh-server-attacks-brute-force-attacks-using-denyhosts/ Informations complémentaires sur le paramétrage du fichier de configuration : https://www.cyberciti.biz/faq/how-to-install-denyhosts-intrusion-prevention-security-for-ssh-on-ubuntu/