Appunti su sip.conf
Questi sono esempi di configurazione del file sip.conf, per vari client e/o per varie opzioni.
Server Asterisk dietro un NAT
Se il server Asterisk e` dietro un NAT, e ha a che fare sia con telefoni (o provider) dentro al medesimo NAT (in rete locale) e anche fuori dal NAT (dietro ip pubblico statico) occorre configurare sip.conf in modo che Asterisk si presenti ai client della LAN con l'ip privato, e ai client / server su internet con l' ip pubblico. Per farlo uso le direttive "localnet" per dire quali sono le reti per la quali non deve essere applicato l' IP pubblico nei messaggi SIP, e la direttiva "externaddr" per indicare quale IP pubblico Asterisk deve usare nei messaggi SIP quando parla con tutti gli host che non sono nelle localnet.
localnet = 192.168.0.0/255.255.0.0 localnet = 10.0.0.0/255.0.0.0 localnet = 172.16.0.0/12 localnet = 169.254.0.0/255.255.0.0 externaddr = <ip pubblico>
Client softphone attraverso una VPN o nattati
I client softphone che si connettono ad asterisk attraverso il NAT o attraverso una VPN hanno un problema: per quanto si sforzino, non e` affatto detto che riescano a presentare nelle richieste SIP il proprio indirizzo ip "giusto", sia questo uno pubblico (nel caso del nat) oppure uno privato (se sono in vpn, ho almeno due indirizzi ip, quello dell'interfaccia fisica e quello della vpn). Se il client si presenta con l' ip errato, asterisk non sa rispondergli e quindi non va nulla.
La soluzione semplice e` dire ad asterisk che il client non sa da quale ip sta uscendo, e di rispondergli sempre all' ip REALE da cui viene la connessione, e non a quello che lui pensa sia giusto (e che mette nelle richieste SIP).
nat=yes
Limitare l'accesso ai client da una sola rete o indirizzo ip
Se si hanno diversi client, alcuni fidati (telefoni in lan) e altri meno fidati (esterni alla lan) che magari hanno accesso solo agli interni e non possono chiamare fuori, e` possibile limitare l'accesso per indirizzo ip del client. In questo modo i client fidati possono avere una password idiota (uguale allo username, per dire) e chi sta fuori dalla LAN non potra` mai fingere di essere un client fidato.
In questo esempio la lan e` 10.1.42.0/24.
; client fidato [11] username=11 password=11 ... deny=0.0.0.0/0.0.0.0 permit=10.1.42.0/255.255.255.0 ; client non fidato [301] username=301 password=PasswordDifficile ; niente deny o permit, questo si collega da dove vuole
Fare funzionare il BLF su asterisk 1.4 1.6 e 1.8
In asterisk 1.4, 1.6 e 1.8 il BLF non funziona piu` sui telefoni SIP, a meno di non impostare alcune cose in sip.conf.
Nella sezione generale:
[general] notifyringing = yes notifyhold = yes limitonpeers = yes
E poi in ogni telefono:
type=friend call-limit=2
Il valore di call-limit puo` essere oggettivamente sensato (1 o 2 per un analogico, o 6 per un gxp-2020 che ha 6 "linee" virtuali) oppure arbitrariamente alto e quindi non raggiungibile (per dire, 100) pero` deve essere impostato, altrimenti non funziona nulla.
A questo punto dovrebbero funzionare le notifiche per gli stati di "in linea", "sta suonando" e "in attesa".
Si puo` vedere lo stato in cui Asterisk pensa si trovi il telefono usando il comando "core show hints" in console.
Register con password con caratteri strani
Se la password del provider SIP contiene caratteri strani, puo` essere necessario metterla fra virgolette nella linea "register", tipo:
register => 051123456:"password"@voip.eutelia.it/051123456
Sicurezza
In asterisk 1.4, 1.6 e 1.8 il default e` di accettare qualsiasi client SIP anche senza autenticazione, e farlo lavorare nel context "default". Cosi` facendo ci si espone a fantastici furti di telefonate, se il context defualt non e` assolutamente vuoto. La soluzione e` inserire in sip.conf dentro a "[general]" la voce "allowguest=no"
Inoltre, dal momento che oggi fare attacchi brute force sul protocollo SIP e` diventata una moda, qualora si abbia la porta 5060 aperta verso internet, consiglio di applicare quante piu` regole di firewall possibili (limitare ai soli IP noti, per esempio). Non potendo, consiglio di fermare il brute force usando una regola di iptables che ho sperimentato e ho trovato essere molto efficace, che riporto qui:
# sip incoming iptables -A INPUT -i eth1 -p udp --dport 5060 -m recent --update --seconds 30 --hitcount 20 --rttl --name sip -j DROP iptables -A INPUT -i eth1 -p udp --dport 5060 -m recent --set --name sip iptables -A INPUT -i eth1 -m state --state NEW -p udp --dport 5060 -j ACCEPT
Esempio di sip.conf per asterisk 1.6 e 1.8
[general] context=default allowoverlap=no realm=kurgan.org udpbindaddr=0.0.0.0 tcpenable=no tcpbindaddr=0.0.0.0 srvlookup=no ;pedantic=yes maxexpiry=3600 qualifyfreq=30 ;disallow=all ;allow=ulaw ;allow=ilbc language=it callevents=yes notifyringing = yes notifyhold = yes notifycid = yes callcounter = yes ; PAZZI! DI DEFAULT TUTTI POSSONO CONNETTERSI! questo lo impedisce. allowguest=no ; Se si usano dei PAP2 assieme con altri telefoni (Grandstream per esempio) potrebbe essere utile ; disabilitare ulaw, in quanto i pap2 hanno un bug che causa audio monodirezionale quando si trasferisce ; una chiamata in ulaw disallow=ulaw ; ################################### ; Registrazione ai provider voip ; ################################### ; linea 1 register => udp://0510512345:password@voip.eutelia.it/0510512345 ; linea 2 register => udp://051057890:password@voip.eutelia.it/051057890 ;##################################### ; I miei telefoni interni ;##################################### ; Grandstream gpx2xxx [11] type=friend context=interni username=11 secret=password host=dynamic dtmfmode=rfc2833 callerid= "Studio" <11> canreinvite=no pickupgroup=1 callgroup=1 mailbox=1 subscribecontext=interni deny=0.0.0.0/0.0.0.0 permit=10.1.42.0/255.255.255.0 call-limit=6 qualify=yes ; ########################################################### ; provider voip, questa istanza serve per chiamare ; e se abbinata con un register (prima) posso anche ricevere. ; ########################################################### [ehiweb] type=peer secret=password defaultuser=0510512345 fromuser=0510512345 host=voip.eutelia.it fromdomain=voip.eutelia.it context=ehiweb canreinvite=no dtmfmode=rfc2833 insecure=port,invite disallow=all allow=gsm [ehiweb2] type=peer secret=altrapassword defaultuser=051057890 fromuser=051057890 host=voip.eutelia.it fromdomain=voip.eutelia.it context=ehiweb canreinvite=no dtmfmode=rfc2833 insecure=port,invite disallow=all allow=gsm