Dev /

FederazioneSIPBasataSuDomainPolicy

Questo è il compito di una nuova tesi, che prevede l'attivazione del trasporto TLS utilizzando come Proxy SIP quello del progetto OpenSER. La versione in lingua inglese costituisce la guida aggiornata dei passaggi necessari per aderire, mentre qui forniamo un primo resoconto dei passi intrapresi, utilizzando una distribuzione Ubuntu:


1.  Installazione e configurazione di OpenSER

OpenSER è un server SIP (RFC 3261) open source, maturo e flessibile. E' scritto in C; è utilizzabile su sistemi Unix/Linux, e può essere ottimizzato a seconda dell'architettura, allo scopo di offrire alte prestazioni. Inoltre, la sua architettura modulare permette di caricare solo le funzionalità richieste. OpenSER può essere personalizzato, e può essere utilizzato come SIP registrar, SIP location server, SIP proxy server, SIP redirect server, gateway per SMS/XMPP, o VoIP application server. Di seguito sono esposti i passi per installare e configurare un SIP proxy server OpenSER.

In effetti, dato che la versione pre-compilata non contiene il supporto al TLS, per il suo uso occorre passare direttamente alla sezione successiva.

1.1  Scaricamento con Synaptic

E' possibile scaricare ed installare OpenSER utilizzando il repository, che è un archivio software. Per far ciò, basta aprire il gestore dei pacchetti Synaptic facendo clic su Sistema -> Amministrazione -> Gestore pacchetti Synaptic, cercare nel repository i package openser e openser-mysql-module e marcarli per l'installazione, ed infine fare clic su Applica. Correntemente utilizziamo la versione 1.2.1-1 di OpenSER. Il modulo openser-mysql-module fornisce il driver del database MySQL per OpenSER; tale modulo ci sarà utile in seguito per supportare un database, allo scopo di permettere l'utilizzo del nostro proxy server, per effettuare chiamate, solo agli utenti registrati.

1.2  Modifica dello script di init

Per far funzionare correttamente OpenSER bisogna modificare il file di init /etc/init.d/openser, ovviamente con privilegi di root; tale file contiene lo script che serve per l'inizializzazione e per la terminazione di OpenSER. La modifica va effettuata nella riga 99, aggiungendo un punto esclamativo, che esprime l'operazione logica di negazione, nella condizione dell'if, e cambiando quindi:

if [ -d $HOMEDIR ]; then

con

if [ ! -d $HOMEDIR ]; then

Guardando lo script interamente, si capisce che questa modifica è necessaria affinché sia possibile creare, se non esiste già, la directory /var/run/openser, che è destinata a contenere il file openser.pid, che a sua volta contiene il numero identificativo del processo di OpenSER.

1.3  Modifica dei file di configurazione

Il file /etc/default/openser

Il file /etc/default/openser contiene le opzioni di startup di OpenSER. Per abilitare OpenSER bisogna quindi modificare la variabile RUN_OPENSER ponendo:

RUN_OPENSER=yes

Il file /etc/openser/openser.cfg

Il file di configurazione di OpenSER /etc/openser/openser.cfg è più di un tipico file di configurazione. Tale file combina le configurazioni statiche con un ambiente di programmazione dinamico. /etc/openser/openser.cfg contiene i parametri di configurazione globali, i comandi di caricamento dei moduli, e lo script che sarà eseguito ad ogni messaggio ricevuto da OpenSER; dunque può essere utile considerare il file di configurazione come un "programma".
Il file di configurazione che otteniamo installando OpenSER fa funzionare il nostro SIP proxy nella modalità più semplice possibile, senza alcuna funzionalità avanzata; è comunque possibile aggiungere funzionalità al SIP proxy andando a modificare il file di configurazione, ed è ciò che faremo nel seguito.
Adesso possiamo attivare il nostro SIP proxy, tramite terminale, attraverso il comando:

sudo etc/init.d/openser start

2.  Supporto a TLS

2.1  Compilazione del sorgente

Il package OpenSER che viene distribuito non offre il supporto al TLS, che invece è fondamentale per lo sviluppo di una Federazione SIP. Per questo, occorre compilare i sorgenti, che scarichiamo dal sito di OpenSER. Quindi, editiamo il Makefile, decommentando la linea TLS=1 in modo da attivarne il supporto. Poi, preoccupiamoci di installare dei componenti aggiuntivi, necessari alla compilazione, ossia

  • bison
  • flex
  • libssl-dev

e quindi, impartiamo il comando make all, e se tutto va bene, sudo make install.

2.2  Configurazione

Nel file openser.cfg occorre

  • decommentare le linee che abilitano il TLS, e
  • inserire il percorso nel filesystem relativo a certificato,
  • alla chiave, e
  • alla lista delle CA.

Inoltre, occorre specificare

  • indirizzo e porta su cui ascoltare
  • il nome del dominio per il quale si intendono ricevere le chiamate.

Infine, occorre che OpenSER sia eseguito in modalità multi-processo, ossia con la direttiva fork = yes. In definitiva, nel file di configurazione devono comparire le direttive

fork=yes
alias = vostro_dominio
disable_tls = no
listen = tls:vostroIP:5061
tls_verify_server = 1
tls_verify_client = 1
tls_require_client_certificate = 1
tls_method = TLSv1
tls_certificate = "/vostro_path/vostro_dominio-cert.pem"
tls_private_key = "/vostro_path/vostro_dominio-privkey.pem"
tls_ca_list = "/vostro_path/vostro_dominio-calist.pem"\\

3.  Attivazione dei moduli

A questo punto abbiamo il nostro semplicissimo SIP proxy, a cui possiamo aggiungere le funzionalità che vogliamo.

3.1  Database

Con questa semplice configurazione, tutti i possessori di uno user agent che conoscono l'indirizzo IP del SIP registrar (coincidente in questo caso con il sip proxy), possono registrarsi ed effettuare delle chiamate verso altri user agent registrati nello stesso dominio o in un dominio differente.
E' importante però limitare gli accessi al servizio ai soli utenti a cui vogliamo offrire tale servizio. Per far ciò è necessario un database in cui registrare gli utenti che possono accedere al servizio. Abbiamo quindi scaricato ed installato MySQL tramite il Gestore dei pacchetti Synaptic.

tutorial su DokuWiki

3.2  Openserctl

Openserctl (openser control tool) è uno script di shell che serve a controllare il server SIP OpenSER che abbiamo installato. Questo può essere utilizzato per gestire gli utenti, i domini, gli alias, ed altre opzioni del server.

Il file /etc/openser/openserctlrc

3.3  DNS

Pubblicazione dei RR SRV e NAPRT

.... riferimenti su RFC, Draft, e sip.edu

... esempio: impartendo il comando host -l -t SRV ing.uniroma1.it si ottiene

_sip._tcp.ing.uniroma1.it has SRV record 0 0 5060 smile.ing.uniroma1.it.
_sips._tcp.ing.uniroma1.it has SRV record 0 0 5061 comel.ing.uniroma1.it.
_sip._udp.ing.uniroma1.it has SRV record 0 0 5060 smile.ing.uniroma1.it.

mentre impartendo host -l -t NAPTR ing.uniroma1.it

ing.uniroma1.it has NAPTR record 0 0 "s" "SIPS+D2T" "" _sips.ing.uniroma1.it.
ing.uniroma1.it has NAPTR record 1 0 "s" "SIP+D2T" "" _sip.ing.uniroma1.it.
ing.uniroma1.it has NAPTR record 2 0 "s" "SIP+D2U" "" _sip.ing.uniroma1.it.

3.4  Adesione alla federazione

Sapientel promuove l'adesione alla federazione SIP SapienFed?, a cui a sua volta aderisce. Di seguito, i passi da intraprendere per fa aderire il proprio server SIP alla federazione.

Pubblicazione del RR NAPTR

$ORIGIN il.vostro.dominio.tld
IN NAPTR 10 50 "U" "D2P+SIP:fed" "!^.*$!http://smile.ing.uniroma1.it/sapienfed!" .

3.5  Richiesta di un certificato

Per aderire ad una federazione SIP, occorre equipaggiare il proprio Proxy con un Certificato X.509 valido, e firmata dalla Certification Authority in comune tra i membri della federazione. Nel caso di SapienFed, occorre recarsi presso la pagina di richiesta di un certificato di base, e riempire i campi come segue

  • la propria email a cui poter essere ricontattati
  • il proprio nome a dominio federato, es. casamia.sipf.undo.it
  • il proprio "Gruppo di Richiesta", ad es. Internet, che in fase di rilascio del certificato verrà cambiato nel nome a dominio (dinamico o statico) che si è registrato per proprio conto
  • sotto User Data, il proprio nome e cognome
  • come Role, scegliere Domain Controller - in questo modo infatti, il certificato assegnerà alla variabile X509v3 Extended Key Usage entrambi i valori TLS Web Client Authentication e TLS Web Server Authentication, necessari alla mutua autenticazione dei Proxy
  • un PIN da usare come passphrase per il ritiro del certificato quando verrà rilasciato
  • una keysize a piacere

Verifichiamo di non aver commesso errori, e proseguiamo. E' anche possibile inserire più informazioni di quelle indicate, ma non di meno happy smiley Dopo che la Registration Authority ci avrà comunicato che il certificato è pronto, assieme ad una seconda password, lo possiamo scaricare individuandolo tra i certificati validi.

  • richiediamo un formato pkcs#12
  • immettiamo la passphrase scelta da noi, e la password assegnata dalla RA
  • scarichiamo il certificato e la chiave, as es. in casamia-cert.p12
  • estraiamo separatamente certificato e chiave in formato pem con i comandi
    • openssl pkcs12 -in casamia-cert.p12 -nokeys -out casamia-cert.pem (viene chiesta la passphrase)
    • openssl pkcs12 -in casamia-cert.p12 -nocerts -out casamia-privkey.pem (viene data l'opportunità di impostare una nuova passphrase)
  • scaricare il certificato della CA in formato pem
  • salviamo sia il certificato della CA, che il certificato e la chiave del Proxy, nella directory /usr/local/etc/openser/tls/sapienfed
  • impostiamo il file di configurazione di OpenSER per usare questi valori:
tls_certificate = "/usr/local/etc/openser/tls/sapienfed/casamia-cert.pem"
tls_private_key = "/usr/local/etc/openser/tls/sapienfed/casamia-privkey.pem"
tls_ca_list = "/usr/local/etc/openser/tls/sapienfed/casamia-calist.pem"




Pagine che puntano a questa: