Ecco una procedura dettagliata per installare fail2ban su OS X 10.10 (probabilmente funziona anche su 10.9) basato sul (in qualche modo difettoso) guida a forgetcomputers.zendisk.com.
L'installatore automatico non ha funzionato per me quindi l'ho fatto manualmente.
cd per ~ / Download e download fail2ban-0.8.10
cd ~/Downloads
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287990/fail2ban-0.8.10.tar.gz
Disimballare il pacchetto tar:
tar xzf fail2ban-0.8.10.tar.gz
cd su fail2ban-0.8.10 e installare il software:
cd fail2ban-0.8.10/
sudo python setup.py install
Crea un file per il registro:
sudo touch /var/log/fail2ban.log
torna indietro e scarica il pacchetto di modifiche:
cd ~/Downloads/
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287980/install_fail2ban_mods.tar.gz
Disimballare questo pacchetto:
tar xzf install_fail2ban_mods.tar.gz
Esegui lo script di installazione dal pacchetto di modifiche:
sudo ./fail2ban_mods/install_fail2ban_mod.sh
Crea te stesso sudo e rinomina /etc/fail2ban/jail.local (il file jail.local è superiore a jail.conf e potrebbe rompere tutto perché il file installato contiene una configurazione totalmente inutile):
sudo bash
mv /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak
Aggiungi le seguenti due linee a /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
In /etc/fail2ban/jail.conf, modificare la sezione [ssh-pf] alla fine con nano
come segue:
[ssh-pf]
enabled = true
filter = sshd
action = pf
logpath = /var/log/system.log
maxretry = 3
Puoi inserire un altro conteggio dei maxretry o definire un singolo bantime o un orario di ricerca.
In /etc/fail2ban/action.d/pf.conf, assicurarsi che i seguenti valori siano impostati e modificarli se necessario con nano /etc/fail2ban/action.d/pf.conf
:
actionban = /sbin/pfctl -t fail2ban -T add <ip>
actionunban = pfctl -t fail2ban -T delete `pfctl -t fail2ban -T show 2>/dev/null | grep <ip>`
[Init]
tablename = fail2ban
localhost = 127.0.0.1
Spegni pf, digli di ricaricare la sua configurazione e riavvialo di nuovo:
pfctl -d
pfctl -f /etc/pf.conf
pfctl -e
Arrestare il daemon fail2ban se è già in esecuzione e avviarlo con launchctl:
fail2ban-client stop
launchctl load -w /Library/LaunchDaemons/org.fail2ban.init.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.redo.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.reset.plist
Test del sistema
Apri una finestra di terminale e guarda il log di fail2ban (live-update):
sudo tail -f /var/log/fail2ban.log
Mantenendo questo terminale attivo sul server, SSH nel server da un client e guardando l'output del terminale del server (il nome utente è arbitrario, dal momento che stiamo testando cosa accadrà quando viene tentato un login errato, sostituire server_ip con l'indirizzo IP o il nome host di il server):
ssh username@server_ip
Sul computer client, digitare la password errata più volte finché non viene visualizzato un messaggio nel log di fail2ban che indica che il client è stato bannato. Questo messaggio sarà simile a questo:
2015-08-04 18: 56: 25,001 fail2ban.actions [216]: AVVISO [ssh-pf] Ban 192.168.8.15
Quando vedi questo messaggio, l'IP della macchina client è stato bannato. A questo punto, eventuali futuri tentativi SSH da questo IP (all'interno del periodo bentime di fail2ban) dovrebbero scadere e non avere esito positivo.
Per fermare la coda basta inserire ctrl C
Se si desidera installare l'ultimo fail2ban 0.9.1
Scarica manualmente fail2ban nella tua cartella ~ / Downloads
cd per ~ / scarica e decomprimi il pacchetto tar:
cd ~/Downloads
tar xzf fail2ban-0.9.1.tar.gz
cd su fail2ban-0.9.1 e installare il software:
cd fail2ban-0.9.1/
sudo python setup.py install
Crea un file per il registro:
sudo touch /var/log/fail2ban.log
torna indietro e scarica il pacchetto di modifiche:
cd ~/Downloads/
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287980/install_fail2ban_mods.tar.gz
Disimballare questo pacchetto:
tar xzf install_fail2ban_mods.tar.gz
Effettua un backup di /etc/fail2ban/filter.d/sshd.conf e copia il file dal mod_pack alla directory fail2ban / filter.d. Puoi copiare l'altro filter.conf ma è meglio fare un backup dei file originali. Non ho provato questi però.
sudo bash
mv /etc/fail2ban/filter.d/sshd.conf /etc/fail2ban/filter.d/sshd.conf.old
cp ~/Downloads/fail2ban_mods/filter.d/sshd.conf /etc/fail2ban/filter.d/
cp ~/Downloads/fail2ban_mods/fail2ban_reset.sh /private/etc/fail2ban
cp ~/Downloads/fail2ban_mods/lib-launchdaemons/org.fail2ban* /Library/LaunchDaemons
Aggiungi le seguenti due linee a /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
In /etc/fail2ban/jail.conf, modificare la sezione [ssh-pf] alla fine con nano
come segue:
[ssh-pf]
enabled = true
filter = sshd
action = pf
logpath = /var/log/system.log
maxretry = 3
Puoi inserire un altro conteggio dei maxretry o definire un singolo bantime o un orario di ricerca.
In /etc/fail2ban/action.d/pf.conf, assicurarsi che i seguenti valori siano impostati e modificarli se necessario con nano /etc/fail2ban/action.d/pf.conf
:
actionban = /sbin/pfctl -t fail2ban -T add <ip>/32
actionunban = /sbin/pfctl -t fail2ban -T delete <ip>/32
[Init]
tablename = fail2ban
Spegni pf, digli di ricaricare la sua configurazione e riavvialo di nuovo:
pfctl -d
pfctl -f /etc/pf.conf
pfctl -e
Arrestare il daemon fail2ban se è già in esecuzione e riavviarlo:
fail2ban-client stop
launchctl load -w /Library/LaunchDaemons/org.fail2ban.init.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.redo.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.reset.plist
Ora prova nuovamente il tuo sistema come descritto sopra.
miglioramenti
Poiché l'implementazione della tabella e della regola fail2ban non è standard e il blocco fail2ban reale non sopravvive a un riavvio, ho rielaborato l'intero meccanismo pf, creato un'ancora separata (ispirata da IceFloor ) per rimuovere qualsiasi dipendenza dal file /etc/pf.conf di Apple e modificato l'azione di divieto.
A partire dall'installazione di fail2ban 0.9.1 descritta sopra, immettere:
sudo bash
nano /etc/fail2ban/action.d/pf.conf
e cambia nel file /etc/fail2ban/action.d/pf.conf le linee che iniziano con
actionban = ....
a
actionban = /sbin/pfctl -a fail2ban.anchor -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
e
actionunban = ....
a
actionunban = /sbin/pfctl -a fail2ban.anchor -t fail2ban -T delete <ip>/32
Crea una cartella pf in / etc / fail2ban /
mkdir /etc/fail2ban/pf
Creare tre file fail2ban, fail2ban.conf e fail2ban.sh nella cartella precedentemente creata con il seguente contenuto; successivamente eseguire eseguibile fail2ban.sh con chmod:
fail2ban:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
fail2ban.conf:
############### LOOPBACK ###############
#
# skip loopback (no filtering on loopback interface)
set skip on lo0
scrub-anchor "com.apple/*"
############### INBOUND ###############
#
anchor "fail2ban.anchor"
load anchor "fail2ban.anchor" from "/etc/fail2ban/pf/fail2ban"
fail2ban.sh:
#!/bin/sh
# start
#
# We need to trap on TERM signals, according to Apple's launchd docs:
#
trap 'exit 1' 15
#
# Use the "ipconfig waitall" command to wait for all the interfaces to come up:
#
ipconfig waitall
sleep 5
#
# System sysctl
#
sysctl -w net.inet6.ip6.fw.verbose=0
sysctl -w net.inet.ip.fw.verbose=0
sysctl -w net.inet.ip.fw.verbose_limit=0
#
# interface forwarding enabled by default
#
sysctl -w net.inet.ip.forwarding=1
# enable PF and load rules from default fail2ban configuration file using tokens (apple specific PF options -E and -X)
#
/sbin/pfctl -e
/sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
# Exit with a clean status
exit 0
# this file is public domain and is available to everyone with no exceptions.
Creare il file org.fail2ban.plist in / Library / LaunchDaemon con il seguente 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>Disabled</key>
<false/>
<key>ExitTimeOut</key>
<integer>1</integer>
<key>Label</key>
<string>org.fail2ban</string>
<key>Program</key>
<string>/etc/fail2ban/pf/fail2ban.sh</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Rimuovere le seguenti due righe da /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
Carica il file /Library/LaunchDaemons/org.fail2ban.plist con launchctl dopo l'interruzione di fail2ban e pf:
fail2ban-client stop
pfctl -d
pfctl -f /etc/pf.conf
launchctl load -w /Library/LaunchDaemons/org.fail2ban.plist
fail2ban-client start
o riavviare il Mac dopo aver caricato org.fail2ban.plist con launchctl.
Ora il bando funziona correttamente anche dopo aver riavviato il sistema. Se si desidera aggiungere manualmente un indirizzo IP per bloccarlo, è sufficiente inserire:
sudo /sbin/pfctl -a fail2ban.anchor -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
Per sbloccarlo (non sarà automaticamente non-bannato dopo il fail2ban bantime!) Inserisci:
sudo /sbin/pfctl -a fail2ban.anchor -t fail2ban -T delete <ip>/32
Quindi, per rispondere alla tua domanda:
Se si desidera utilizzare la tabella fail2ban per vietare manualmente un IP dopo aver applicato il miglioramenti , devi inserire il comando sopra. Il motivo per le parti aggiuntive:
/sbin/pfctl -k <ip>/32
è necessario per uccidere tutti delle voci di stato originate dall'host specificato.
/sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
per ricaricare grace2ban.conf con garbo e riflettere le modifiche apportate nella tabella fail2ban.
Senza i suddetti miglioramenti puoi usare:
sudo /sbin/pfctl -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/pf.conf
Installazione di fail2ban 0.9.1 su El Capitan
L'ho installato su El Capitan in modalità senza radici ( sudo nvram boot-args="rootless=0"
e riavviare) dopo aver rimosso la parte di installazione di documenti in / usr / share / docs / fail2ban (= le righe 140-143) nel setup.py di fail2ban 0.9.1.
Utilizzare il miglior metodo di installazione e configurazione 0.9.1. Se il comando pfctl -sA
non rivela fail2ban.anchor controlla le virgolette corrette (senza virgolette!) nel file /etc/fail2ban/pf/fail2ban.conf.