Je cours sshblack (trouvé via le site de Sebastian Hagedorn site ) ainsi qu'un porte-manteau en MacOS Sierra Le syslog étant accessible via la commande 'log show', vous devrez ajuster les paramètres de configuration du log ci-dessous si vous êtes sur une version antérieure de l'OS ou utiliser fail2ban en suivant les instructions données plus haut. Utilisez également l'authentification par clé avec les mots de passe désactivés ( Comment configurer une connexion SSH sans mot de passe ? - ajouter une phrase de passe). Ensuite, je télécharge les listes de blocage quotidiennement et bloquer les IP dans le pare-feu . Il devrait être en sécurité maintenant...
Paramètres : /etc/pf.conf
# sshblack
block drop log quick from <ssh-block> to any
sshblack.pl
## In sshblack
my($LOG) = '/usr/bin/log show --style syslog --last 5s\|';
my($ADDRULE) = '/sbin/pfctl -t ssh-block -T add ipaddress';
my($DELRULE) = '/sbin/pfctl -t ssh-block -T delete ipaddress';
my($REASONS) = '(maximum authentication attempts exceeded|Invalid user|authentication failed|Auth fail)';
Ajouter un délai de 5 secondes à la boucle
Remplacer par ceci (~ligne 190) :
sleep(5);
Vous obtenez une erreur dans le journal, mais cela semble fonctionner correctement de toute façon.
Pour ajouter des listes de blocage qui se mettent à jour automatiquement, procédez comme suit : Installez wget (qui nécessite brassage ) :
brew install wget
Dans /etc/pf.conf
table <blocklist> persist file "/usr/local/etc/all.txt"
block drop log quick from <blocklist> to any
Créer un LaunchDaemon :
sudo nano /Library/LaunchDaemons/blocklist.de.allips.plist
avec le contenu :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>blocklist.de.allips.plist</string>
<key>Program</key>
<string>/bin/bash</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/bin/mkdir -p /usr/local/etc ; /usr/local/bin/wget -N -P /usr/local/etc rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt ; /usr/local/bin/wget -N -P /usr/local/etc https://lists.blocklist.de/lists/all.txt ; pfctl -t blocklist -T replace -f /usr/local/etc/all.txt</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>47250</integer>
<key>ServiceDescription</key>
<string>Blocklist.de PF Update</string>
<key>StandardErrorPath</key>
<string>/var/log/blocklists.log</string>
<key>StandardOutPath</key>
<string>/var/log/blocklists.log</string>
</dict>
</plist>
Charger la plist
sudo launchctl load -w /Library/LaunchDaemons/blocklist.de.allips.plist
Cette configuration sshd peut également être utile en combinaison avec l'authentification par clé mentionnée ci-dessus :
Fichier : /etc/ssh/sshd_config
PermitRootLogin no
ChallengeResponseAuthentication no
UsePAM no
PasswordAuthentication no
LoginGraceTime 20
MaxAuthTries 1
MaxSessions 5
Un peu d'histoire : J'ai exécuté les scripts de blocage scripts (bloquant environ 50000 IP) et pendant environ 5 jours, sshblack a encore détecté ~160 IP avec des tentatives de connexion échouées à SSHD ou SMTPD. C'est pourquoi j'ai opté pour le Portknocking, maintenant les attaquants SSH sont bloqués par le firewall.
Edit : J'ai parcouru mon sshd-log et j'ai remarqué que j'avais oublié une "raison" dans le log. Je l'ai ajouté ci-dessus (le dernier).
Quelques statistiques :
Échec des connexions ssh (avec les listes de blocage d'adresses activées)
Date Nombre d'ips uniques
13-Mar - 31
14-Mar - 29
15-Mar - 30
16-Mar - 39
17-Mar - 43
18-Mar - 41
19-Mar - 35
20-Mar - 44
21-Mar - 24
22-Mar - 18
23-Mar - 17
24-Mar - 20
25-Mar - 7 (le portknocking est activé pendant cette date)
Total 378
La plupart d'entre eux ont été bannis après trois tentatives infructueuses.