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

Asterisk/SipConf (last edited 2015-11-10 12:26:03 by Kurgan)