Home > Articolo Tecnico, Voip > Asterisk – Sicurezza [nona parte]

Asterisk – Sicurezza [nona parte]

August 17th, 2010 Leave a comment Go to comments

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,Busy
exten => _X.,110,Hangup
lo script outgoingcalls.sh (che deve essere necessariamente inserito nella directory /var/lib/asterisk/agi-bin/) non fa altro che inviare un email magari dandoci anche l’output del file Master.csv (file dove si trovano tutte le informazioni relative alle chiamate in ingresso e uscita delle linee telefoniche)
Segue il codice dello script:
#!/bin/bash
echo -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
Naturalmente se avete altri suggerimenti fatemeli sapere! Su questi argomenti c’è sempre da imparare molto…
  1. neoast
    September 20th, 2010 at 14:47 | #1

    Sai come configurare iptables per proteggere il server asterisk?

  2. admin
    September 20th, 2010 at 14:53 | #2

    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

  1. August 17th, 2010 at 19:24 | #1
You must be logged in to post a comment.