Asterisk – Sicurezza [nona parte]
Ci sono degli accorgimenti molto importanti affinché il nostro PBX non venga utilizzato per fare qualche migliaio di € di telefonate a scrocco! Negli ultimi due anni infatti sono stati migliaia i Soft PBX sfruttati per fini illeciti come descritto anche in questo articolo. Di seguito cercheremo di illustrare le principali cose da fare…
– allowguest (sip.conf)
Il file di configurazione sip.conf che si ottiene dopo l’installazione del sistema contiene la direttiva “allowguest” che di default (complimenti a quelli della digium 😐 ) permette di fare le chiamate senza autenticazione (quindi inventando direttamente lo username…). Questo può avviene quando si utilizza unicamente il contesto di default. Settare quindi il parametro allowguest=no.
– i contesti (sip.conf, extension.conf e chan_dahdi.conf)
E’ importante capire come funzionano i contesti di ingresso e di uscita e fare in modo che siano assolutamente isolati tra loro. La cosa fondamentale è che in un contesto di ingresso delle chiamate non ci sia la possibilità di farne in uscita. Verificare quindi che il contesto di default sia sicuro e non permettere agli utenti non autenticati (nel caso ci sia allowguest=yes) di raggiungere contesti in cui sono permesse chiamate a pagamento.
– alwaysauthreject (sip.conf)
Impostando alwaysauthreject = yes quando qualcuno cerca di connettersi a un interno esistente sbagliando la password non verrà comunicata se l’interno esiste o no e la risposta sarà la stessa usata per un interno inesistente.
– password
Utilizzare password complesse per le utenze SIP. E’ sempre consigliabile usare un mix di simboli, numeri, lettere maiuscole e lettere minuscole.
– limit-call
Impostare su ciascuna utenza SIP il numero massimo di chiamate contemporanee che l’utente può fare (se non ci sono particolari esigenze si può impostare limit-call=1)
E’ possibile anche utilizzare software di terze parti…Per esempio Fail2ban , un IDS che attraverso la scansione dei file di registro blocca, utilizzando iptables, i tentativi di registrazione falliti.
Un altro sistema simile al precedente è quello di utilizzare le AGI (degli script esterni richiamabili dal dialplan di Asterisk) che possono essere eseguite in base al verificarsi di certi eventi…
Supponiamo il caso di avere un primario (30 canali) di cui sappiamo che generalmente non viene mai usato più del 50% delle sue capacità. Quindi contemporaneamente non abbiamo mai più di 15 chiamate (tra ingresso e uscita). E’ possibile tramite dialplan fare un controllo del numero di canali occupati contemporaneamente (utilizzando le funzioni GROUP() e GROUP_COUNT() ) e nel caso questo valore superi una certa soglia, richiamare un AGI che invii un email (o faccia qualsiasi altra cosa tipo bloccare la porta 5060 tramite iptables) che ci avvisi di quello che sta succedendo. Qui di seguito viene riportato come fare questa cosa:
nel file extension.conf
exten => _X.,1,Set(GROUP()=limit)exten => _X.,2,Noop(${GROUP_COUNT(limit)})exten => _X.,3,GotoIf($[${GROUP_COUNT(limit)} > 15]?108)exten => _X.,4,Dial(DAHDI/g1/${EXTEN})exten => _X.,108,AGI(outgoingcalls.sh)exten => _X.,109,Busyexten => _X.,110,Hangup
#!/bin/bashecho -e “There are more than 15 simultaneous outgoing calls.\n\n\nOutput of ‘tail /var/log/asterisk/cdr-csv/Master.csv:\n\n`tail /var/log/asterisk/cdr-csv/Master.csv`” | mail -s “[ALERT] – Too many outgoing calls from asterisk-pbx” name@domain.com
Sai come configurare iptables per proteggere il server asterisk?
Con Ubuntu puoi fare così: ti crei un file di testo che chiami come ti pare a te (per es regole.fw) in cui scrivi le seguenti regole:
:INPUT DROP [78108:17130003]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [i70043:14300769]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp –dport 22 -j ACCEPT
-A INPUT -p udp -m udp –dport 5060 -j ACCEPT
-A INPUT -p udp -m udp –dport 4569 -j ACCEPT
-A INPUT -p udp -m udp –dport 10000:20000 -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp –icmp-type any -j ACCEPT
COMMIT
e poi digiti il comando iptables-restore < regole.fw