Proteggere il proprio server dagli attacchi brute force con APF e BFD

Usare password lunghe e complesse spesso non è sufficiente a proteggere il proprio server da eventuali intrusioni, per questo oggi spieghiamo come proteggerlo da attacchi di tipo brute force utilizzando due semplici software che sfruttano il firewall iptables.

Questi due software vengono distribuiti gratuitamente dal sito http://www.rfxn.com/, ora andiamo a vedere nel dettaglio cosa fanno e come configurarli.

Partiamo da APF (advanced policy firewall), questo software è una sorta di configuratore per iptables, che ci permette di configurare in modo semplice e rapido le regole base di iptables come ad esempio le porte da aprire in base ai servizi che utilizziamo, il tutto a partire da un semplice file di configurazione molto dettagliato e con ogni opzione ben commentata.

Per installarlo basta scaricare il pacchetto http://www.rfxn.com/downloads/apf-current.tar.gz e decomprimerlo

wget http://www.rfxn.com/downloads/apf-current.tar.gz

tar zxf apf-current.tar.gz

ora entriamo nella directory appena estratta e installare APF

cd apf-9.7-1/

./install.sh

Installing APF 9.7-1: Completed.

Installation Details:
  Install path:         /etc/apf/
  Config path:          /etc/apf/conf.apf
  Executable path:      /usr/local/sbin/apf

Other Details:
  Listening TCP ports: 21,22,80,631,3306,5900,15749,17500
  Listening UDP ports: 5353,15749,17500,38366
  Note: These ports are not auto-configured; they are simply presented for information purposes. You must manually configure all port options.

ora andiamo a modificare il file di configurazione /etc/apf/conf.apf

DEVEL_MODE="1"

questo parametro indica se apf è in modalità sviluppo (e quindi non applica le regole) o in modalità produzione e quindi rende effettive le regole del firewall, prima di impostarlo a 0 per renderlo attivo modifichiamo il resto delle regole altrimenti rischiamo di chiuderci fuori dal server

Impostiamo le porte in ascolto modificando il paramentro IG_TCP_CPORTS

# Common inbound (ingress) TCP ports
IG_TCP_CPORTS="22,21,20,80,25,53,110,143,443,2222,587,953,993,995,4949"

io utilizzo queste impostazioni che sono per i servizi ssh,ftp,web,mail (pop/imap/smtp),directadmin e munin

e queste sono le impostazioni per le porte in uscita

# Common outbound (egress) TCP ports
EG_TCP_CPORTS="21,25,80,443,43"

e poi più sotto impostiamo a “1” le seguenti variabili che ci permettono di scaricare delle liste di ip conosciuti malevoli in modo da filtrare a priori il loro traffico

DLIST_PHP="1"
DLIST_SPAMHAUS="1"
DLIST_DSHIELD="1"
DLIST_RESERVED="1"

salviamo ed avviamo apf con

apf -s

Ora passiamo a BFD (brute force detection), che è un software che analizzando i log rileva tentativi di intrusione alla macchina con metodologia Brute Force, ciò significa che se qualcuno tenta di accedere alla nostra macchina per bucarla nei log di sistema BFD troverà traccia dei vari tentativi, e se questi superano una soglia che possiamo impostare, banna gli ip tramite APF.

Procediamo con il download (http://www.rfxn.com/downloads/bfd-current.tar.gz) e l’installazione

wget http://www.rfxn.com/downloads/bfd-current.tar.gz
tar zxf bfd-current.tar.gz
cd bfd-1.4/
./install.sh

a differenza di apf, bfd viene installato in /usr/local/bfd, procediamo ora alla modifica del fine di configurazione /usr/local/bfd/conf.bfd

# how many failure events must an address have before being blocked?
# you can override this on a per rule basis in /usr/local/bfd/rules/
TRIG="15"

# send email alerts for all events [0 = off; 1 = on]
EMAIL_ALERTS="1"

# local user or email address alerts are sent to (separate multiple with comma)
EMAIL_ADDRESS="tafaz@codelime.net"

# subject of email alerts
EMAIL_SUBJECT="Brute Force Warning for $HOSTNAME"

la prima variabile indica il numero di eventi che devono esser trovati nei file di log per scatenare il ban, questa impostazione può essere modificata successivamente servizio per servizio mentre EMAIL_ALERTS,EMAIL_ADDRESS e EMAIL_SUBJECT servono per ricevere una copia via email dei vari attacchi rilevati e delle azioni intraprese da bfd per bloccare eventuali nuovi attacchi dall’host.

# syslog auth log path
AUTH_LOG_PATH="/var/log/auth.log"

verificate anche che questo file punti correttamente al vostro auth log (di default nell’installazione bfd punta a /var/log/secure)

e come ultima cosa modificate il file /etc/cron.d/bfd e rimuovete le seguenti righe altrimenti il cron non funzionerà

MAILTO=
SHELL=/bin/bash

a questo punto anche bfd è installato e funzionante, non è necessario avviarlo come servizio in quanto gira da crontab ogni 3 minuti e analizza i log in automatico.

Una piccola aggiunta che ho fatto al mio sistema, visto che le regole per exim difficilmente bannavano gli host degli spammer, ho greato una regola aggiuntiva nella directory /usr/local/bfd/rules e l’ho chiamata exim-blacklist, di seguito riporto il contenuto del file

# failed logins from a single address before ban
# uncomment to override conf.bfd trig value
TRIG="1"
BAN_COMMAND="/sbin/ip route add unreachable $ATTACK_HOST"

# file must exist for rule to be active
REQ="/usr/sbin/exim"

if [ -f "$REQ" ]; then
 LP="/var/log/exim/rejectlog"
 TLOG_TF="exim"

 ## EXIM dictionary attacks
ARG_VAL=`$TLOG_PATH $LP $TLOG_TF | grep "Email blocked by" | grep -iw "rejected RCPT" | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | tr -d '<>:' | sed -n -e '/rejected RCPT/s/.*\[\(.*\)] F=\(.*\) rejected RCPT \([^ ]*\).*/\1:\3/p'`

questa regola specifica come trigger dell’evento 1 quindi ad ogni occorrenza trovata nel file di log bannerà l’ip utilizzando il comando

/sbin/ip route add unreachable $ATTACK_HOST

e come criterio di match ho utilizzato la stringa “Email blocked by” che è ciò che viene scritto nei log di exim quando una mail viene rifiutata da una blacklist (es Spamhaus)

In questo caso per bannare l’host non utilizzo apf bensì /sbin/ip per motivi di praticità, visto che il numero di host segnati dalle blacklist è elevato  da far gestire ad apf, e quindi ad iptables, per evitare appesantimenti è meglio utilizzare ip

Condividi:
  • Facebook
  • Twitter
  • Google Bookmarks
  • Digg
  • StumbleUpon
  • del.icio.us
  • Yahoo! Buzz
  • Print
  • email

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Connect with Facebook