Eseguo sshblack (trovato tramite site ) nonché portknocker in macOS Sierra , dal momento che al syslog ora si accede tramite il comando 'log show' si dovrebbe regolare le impostazioni di configurazione del registro sotto se sei su una versione precedente del sistema operativo o usa fail2ban seguendo le istruzioni collegate sopra. Utilizza anche l'autenticazione basata su chiave con password disattivate ( How per configurare un accesso SSH senza password - aggiungere una passphrase). Quindi scarica elenchi di blocco ogni giorno e blocca gli IP nel firewall . Dovrebbe essere al sicuro ora ...
Regolazioni:
/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)';
Aggiungi un ritardo di 5 secondi al ciclo
Passare a questo (~ riga 190):
sleep(5);
Si ottiene un errore nel registro ma sembra funzionare comunque bene.
Per aggiungere blocklist che si aggiornano automaticamente, fai questo:
Installa wget (che richiede brew ):
brew install wget
In /etc/pf.conf
table <blocklist> persist file "/usr/local/etc/all.txt"
block drop log quick from <blocklist> to any
Crea un LaunchDaemon:
sudo nano /Library/LaunchDaemons/blocklist.de.allips.plist
con il contenuto:
<?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>
Carica il plist
sudo launchctl load -w /Library/LaunchDaemons/blocklist.de.allips.plist
Questa configurazione di sshd può anche essere utile in combinazione con l'autenticazione della chiave sopra menzionata:
File: / etc / ssh / sshd_config
PermitRootLogin no
ChallengeResponseAuthentication no
UsePAM no
PasswordAuthentication no
LoginGraceTime 20
MaxAuthTries 1
MaxSessions 5
Alcuni background: ho eseguito gli script di blocco (bloccando circa 50000 IP) e durante ca. 5 giorni sshblack ha ancora rilevato ~ 160 IP con tentativi di accesso non riusciti a SSHD o SMTPD. Questo è il motivo per cui sono andato giù per la rotta Portknocking, ora invece gli attaccanti SSH sono bloccati dal firewall.
Modifica: ho passato il mio sshd-log e ho notato che mi mancava un "motivo" nel registro. L'ho aggiunto sopra (l'ultimo).
Alcune statistiche:
Failed ssh logins(with ip-blocklists enabled)
Date No of unique ips
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 enabled during this date)
Total 378
Molti di questi ragazzi sono stati bannati dopo 3 tentativi falliti.