Kamailio TLS module

Il modulo “tls” è pensato appositamente per aggiungere il supporto di TLS (Transport Layer Security) a livello di trasporto TCP e permettere di gestire traffico che fa uso di SIPS (SIP Secure), cioè traffico SIP criptato. Tutti i dettagli sono disponibili sulla documentazione ufficiale di Kamailio relativa al modulo tls. Qui vedremo brevemente come attivarlo sulla nostra installazione di Kamailio.

Cosa serve

Per configurare Kamailio con il supporto di TLS occorre per prima cosa installare il modulo specifico (es. kamailio-tls-5.5.3 - le versioni dei pacchetti sono disponibili qui). Inoltre, ci servirà un certificato con la sua private key, che sia validato da una Certificate Autority. Per una configurazione da usare a scopo di test interni potremmo anche usare un self-signed certificate, ma questo non sarà valido in caso di interconnessioni con sistemi reali, quali VoIP provider ufficiali ad esempio. A questo punto siamo già in grado di gestire traffico SIP criptato su TLS, ma per chiudere il cerchio dovremmo anche validare il certificato del client/server remoto con il quale Kamailio va a scambiare messaggi, e per fare questo abbiamo bisogno del CA certificate dell’elemento remoto.

Configurare il supporto di TLS

Dopo aver installato il pacchetto kamailio-tls dobbiamo procurarci un certificato per il nostro server ed eventualmente la CA del client/server remoto e possiamo poi procedere alla configurazione del sistema.
Nel file /etc/kamailio/tls.cfg configuriamo i parametri relativi allo scambio dei certificati, mentre nel file di configurazione kamailio.cfg attiviamo il supporto di TLS.

File di configurazione tls.cfg
Il file tls.cfg contiene i parametri necessari allo scambio certificati, sia quando Kamailio è server nel flusso dati, sia quando è client.

Per la parte server [server:default]:

  • method: configura la versione di protocollo accettata (es. TLSv1.2+)
  • verify_certificate: yes/no dice al sistema se effettuare la verifica del certificato fornito dal client
  • require_certificate: yes/no richiede al client di fornire un certificato
  • private_key: file che contiene la chiave privata(PEM)
  • certificate: file che contiene il certificato (PEM)
  • ca_list: file che contiene la lista delle trusted CA nel caso in cui sia impostata la verifica del certificato fornito dal client

Per la parte client [client:default]:

  • verify_certificate: yes/no dice al sistema se effettuare la verifica del certificato fornito dal server
  • require_certificate: yes/no richiede al server di fornire un certificato
  • ca_list: file che contiene la lista delle trusted CA nel caso in cui sia impostata la verifica del certificato fornito dal server

File di configurazione kamailio.cfg
Una volta configurati i parametri necessari allo scambio certificati, basta abilitare l’uso di TLS nel file di configurazione principale di Kamailio ed il gioco è fatto.

Come prima cosa abilitiamo la global define #!define WITH_TLS all’inizio del file e poi assicuriamoci che siano presenti le sezioni che attivano la configurazione ed il listening sulla porta 5061 per TLS.

	#!ifdef WITH_TLS
	enable_tls=yes

	## Listen on TLS Port
	listen=tls:PRIVATE_IP4_ADDR:SIPS_PORT

	/* upper limit for TLS connections */
	tls_max_connections=2048
	#!endif
	#!ifdef WITH_TLS
	loadmodule "tls.so"
	#!endif
	#!ifdef WITH_TLS
	# ----- tls params -----
	modparam("tls", "config", "/etc/kamailio/tls.cfg")
	#!endif

TLS all’opera

Terminata la configurazione e riavviato Kamailio, possiamo gestire la prima chiamata su TLS, e con trace tcpdump attivo sulla macchina possiamo anche vedere nel dettaglio lo scambio dati per la fase di handshake TLS.

TLS SIP Call

In questo caso, Kamailio è il server di destinazione che riceve il messaggio Client Hello ed avvia l’handshake TLS inviando al client il proprio certificato e allo stesso tempo richiedendo al client di trasmettere il suo certificato per poterlo validare. Questo avviene perchè abbiamo configurato Kamailio con i parametri verify_certificate = yes e require_certificate = yes. Terminato l’handshake inizia lo scambio dati criptato. Dato che noi disponiamo della chiave privata usata per effettuare l’encryption possiamo anche decodificare il traffico SIP vero e proprio.

TLS SIP decoding