Bloccare brute force ssh con pf

Tags:

Per lasciar passare le connessioni ssh, pf dovrebbe avere una regola simile a questa:

pass in quick on $external inet proto tcp from any to any port ssh flags S/SA keep state

per bloccare i bruteforce è sufficiente modificarla in:

table <ssh-bruteforce> persist
block in quick from <ssh-bruteforce>
pass in quick on $external inet proto tcp from any to any port ssh flags S/SA keep state \
  ( max-src-conn-rate 2/10, overload <ssh-bruteforce> flush global)

che, nell'ordine:

  • definisce una tabella per conservare gli ip degli attaccanti
  • blocca tutte le connessioni provenienti da tali ip
  • autorizza le connessioni ssh, ma che siano al massimo 2 tentativi di connessione in 10 secondi, altrimenti registra l'ip nella tabella prima definita, e distrugge tutte le connessioni relative a tale ip

Ci sarà anche da implementare un cron job che ogni tanto dia una ripulita alla tabella <ssh-bruteforce>

Ciao ho trovato questo tuo

Ciao ho trovato questo tuo post... e devo dire che cade proprio a pennello!! Solo che per qualche motivo oscuro non mi registra gli ip nella black list!
Questo è il mio pf.conf:

int="fxp0"
table <spammers> persist file "/etc/spammers"
scrub in all
#Blocca gli ip nella lista spammers
block in quick from <spammers>

#autorizza le connessioni ssh alla rete interna, ma che siano al massimo 2 tentativi di connessione in 10 secondi,
#altrimenti registra l'ip nella tabella prima definita, e distrugge tutte le connessioni relative a tale ip
pass in quick on $int inet proto tcp from any to $int port ssh flags S/SA keep state (max-src-conn-rate 2/10, overload <spammers> flush global)

#Permette tutto il traffico in entrata
pass in on $int all keep state

#loopback consentito
pass in quick on lo0 all
pass out quick on lo0 all

#Permetti tutto il traffico in uscita
pass out on $int all keep state

Quello che ho tentato di fare, anche se posso immaginare non sia corretto, è di filtrare il solo traffico ssh.
Infatti tramite l'opzione "quick" in teoria pf dovrebbe vedere la prima regola (quella per ssh) e poi semmai consentire tutto il traffico in entrata.
Tutto questo perchè... bloccando tutto il traffico in entrata e poi (come in realtà si dovrebbe fare) aprire le sole porte interessate mldonkey si pianta ;-)

Quindi per il momento mi basterebbe che pf mi filtri il solo traffico ssh... solo che per qualche diavolo motivo se un ip tenta di loggarsi con più di 2 tentativi non cade in spammers. Però se metto quell'ip nel file... ecco qua che pf blocca il traffico.

Sapresti dirmi dove sbaglio?
-Grazie-

se puoi rispondimi per email :)