Corro sshblack (encontrado a través de Sebastian Hagedorn's sitio ) así como un portknocker en MacOS Sierra Como ahora se accede al syslog a través del comando 'log show', tendrás que ajustar la configuración del registro si estás en una versión anterior del sistema operativo o utilizar fail2ban siguiendo las instrucciones enlazadas más arriba. También utilice la autenticación basada en claves con las contraseñas desactivadas ( Cómo configurar un inicio de sesión SSH sin contraseña - añadir una frase de contraseña). Luego descargo listas de bloqueo diarias y bloqueo de IPs en el firewall . Debería ser seguro ahora...
Configuración: /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)';
Añade un retardo de 5 segundos al bucle
Cambia a esto (~línea 190):
sleep(5);
Sí que aparece un error en el registro, pero parece que funciona bien de todos modos.
Para añadir listas de bloqueo que se actualicen automáticamente, haga lo siguiente Instale wget (que requiere cervecero ):
brew install wget
En /etc/pf.conf
table <blocklist> persist file "/usr/local/etc/all.txt"
block drop log quick from <blocklist> to any
Crear un LaunchDaemon:
sudo nano /Library/LaunchDaemons/blocklist.de.allips.plist
con el contenido:
<?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>
Cargar el plist
sudo launchctl load -w /Library/LaunchDaemons/blocklist.de.allips.plist
Esta configuración de sshd también puede ser útil en combinación con la autenticación de claves mencionada anteriormente:
Archivo: /etc/ssh/sshd_config
PermitRootLogin no
ChallengeResponseAuthentication no
UsePAM no
PasswordAuthentication no
LoginGraceTime 20
MaxAuthTries 1
MaxSessions 5
Algunos antecedentes: Ejecuté el bloqueo de scripts (Bloqueando alrededor de 50000 IPs) y durante aprox. 5 días sshblack todavía detectó ~160 IPs con intentos fallidos de login a SSHD o SMTPD. Es por esto que he seguido la ruta del Portknocking, ahora los atacantes de SSH son bloqueados por el firewall en su lugar.
Edición: He revisado mi sshd-log y he visto que me faltaba una "razón" en el registro. Lo he añadido arriba (el último).
Algunas estadísticas:
Fallos en los inicios de sesión ssh (con las listas de bloqueo ip activadas)
Fecha Nº de ips únicas
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 (portknocking habilitado durante esta fecha)
Total 378
La mayoría de estos tipos fueron expulsados después de 3 intentos fallidos.