Szukaj

Bezpieczeństwo Asteriska: rejestracje TLS z użyciem certyfikatu SSL z podpisem własnym

Bezpieczeństwo Asteriska: rejestracje TLS z użyciem certyfikatu SSL z podpisem własnym

Jak dodatkowo i bezpłatnie zabezpieczyć swoja centralę? Można stworzyć własny, lokalny organ certyfikacji, wygenerować certyfikat SSL i klucze oraz odpowiednio skonfigurować kanały SIP oraz PJSIP. A więc do dzieła!

Spis treści

1) Wygenerowanie certyfikatów

Najprostszym sposobem wygenerowania certyfikatów jest użycie gotowego skryptu zawartego w instalatorze oprogramowania.

Jeśli go nie posiadasz, możesz pobrać oprogramowanie z serwerów Asteriska. Może to być dowolna wersja oprogramowania. W naszym przypadku pobierzemy Asteriska 16 do katalogu /usr/src/, ale oczywiście może to być dowolne inne miejsce na serwerze.

				
					cd /usr/src/
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar zxvf asterisk-16-current.tar.gz
rm -rf asterisk-16-current.tar.gz
cd asterisk-*/
				
			
Podpowiedź
Jeśli uruchamiasz Asteriska jako inny użytkownik, np. 'asterisk’, proponujemy zmianę użytkownika przed wykonaniem dalszych poleceń.
				
					# zmień na docelowego użytkownika
su asterisk
				
			

Jeśli chciałbyś uruchomić centralę jako inny użytkownik, sprawdź ten post.

Utwórzmy też katalog, w którym będziemy przechowywali nasze klucze. Poniżej znajdziesz proponowany katalog, ale oczywiście możesz wybrać dowolny inny.

				
					mkdir /etc/asterisk/keys
				
			

Następnie wygenerujmy nasze klucze korzystając z gotowego skryptu. Może przy tym zdefiniować kilka zmiennych:

  • opcja ’-C’ służy do określenia naszego hosta – nazwy DNS lub naszego adresu IP
  • opcja ’-O’ określa naszą nazwę organizacyjną
  • opcja ’-d’ określa miejsce, gdzie zapisać klucze
				
					contrib/scripts/ast_tls_cert -C pbx1.mycompany.local -O "My Company" -d /etc/asterisk/keys
				
			

Zostaniemy poproszeni o ustalenie (oraz powtórzenie) hasła dla głównego klucza ’ca.key’. Utworzy to lokalny organ certyfikacji (z ang. certificate authority). Następnie tego samego hasła użyjemy do stworzenia klucza ’asterisk.key’ oraz pliku ’asterisk.pem’, który jest kombinacją klucza i certyfikatu.

Łącznie hasło wprowadzimy 4 razy.

Dobra wiadomość jest taka, że klucze automatycznie zostały dodane tylko i wyłącznie z uprawnieniami do odczytu.

				
					ls -l /etc/asterisk/keys/
				
			
W razie potrzeby możesz to też zrobić za pomocą:
				
					chmod 600 /etc/asterisk/keys/*.*
				
			

Na tym etapie warto się jednak upewnić, że użytkownik, na którym działa usługa Asteriska ma dostęp do plików kluczy. W przeciwnym wypadku, przeładowanie konfiguracji może wyrzucić błędy, podobne do tych poniżej:

 Reloading SIP
== Using SIP CoS mark 4
[Feb 12 08:50:48] ERROR[1068]: tcptls.c:478 __ssl_setup: TLS/SSL error loading cert file. </etc/asterisk/keys/asterisk.pem>
[Feb 12 08:50:48] ERROR[1068]: tcptls.c:126 write_openssl_error_to_log: 140543266764288:error:0200100D:system library:fopen:Permission denied:bss_file.c:402:fopen('/etc/asterisk/keys/asterisk.pem','r')
140543266764288:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
140543266764288:error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib:ssl_rsa.c:701:

Na naszym przykładzie: jeśli nie stworzyliśmy plików, jako użytkownik ’asterisk’, tylko jako ’root’ to wystarczy zmienić właściciela poleceniem:

				
					chown -R asterisk: /etc/asterisk/keys/
				
			

2) Konfiguracja kanału SIP

Całość konfiguracji przeprowadzimy w głównym pliku, czyli sip.conf.

Do poprawnego uruchomienia komunikacji poprzez TLS dla lokalnych urządzeń wystarczą tylko dwie dodatkowe linijki kodu oraz poprawka w trzeciej. Edytujmy więc nasz plik:

				
					nano /etc/asterisk/sip.conf
				
			
				
					tlsenable=yes
tlscertfile=/etc/asterisk/keys/asterisk.pem
transport=udp,tls
				
			
Podpowiedź
  1. Kolejność w zmiennej transport ma znaczenie. Jeśli ustawimy transport=udp,tls to najpierw nastąpi próba nawiązania zwykłego połączenia UDP.
  2. Żeby dodać kilka możliwości komunikacji wystarczy ustawić zmienną na np. transport=tls,udp,tcp (pod warunkiem, że są dostępne).
  3. W przypadku niedostępności metody komunikacji, Asterisk spróbuje skorzystać z kolejnej.
  4. Zamiast w sekcji [general], możemy te ustawienia zdefiniować dla poszczególnych punktów końcowych.

Opcjonalnie możesz wykorzystać dodatkowe zmienne związane z konfiguracją TLS dla lokalnych kont SIP. Niektóre z nich to:

  • tlsbindaddr=0.0.0.0:5061 – możliwość zmiany adresu IP lub portu nasłuchiwania
  • tlscipher=ALL – wybór szyfrowania (dokumentacja: https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html)
  • tlsclientmethod=tlsv1 – wybór metody szyfrowania (dostępne to tlsv1, sslv3, sslv2)

Pozostałe opcje takie jak np. tlsdontverifyserver dotyczą sytuacji, w których nasze urządzenie działa jako klient TLS, a nie serwer.

Wracając jednak do tematu ….
Teraz wystarczy z poziomu konsoli przeładować konfigurację.

				
					asterisk -rvvv
				
			

w konsoli uruchom:

				
					sip reload
				
			

Żeby sprawdzić czy zmiany działają jak trzeba wystarczy w konsoli wykonać ’sip show settings’ lub po prostu:

				
					asterisk -rx 'sip show settings'
				
			

Widzimy też, że TLS domyślnie nasłuchuje na porcie 5061.

3) Konfiguracja kanału PJSIP

W tym wypadku konfigurację przeprowadzimy w pliku pjsip.conf. Otwórzmy go:

				
					nano /etc/asterisk/pjsip.conf
				
			

W przypadku korzystania zarówno z SIP oraz PJSIP należy odpowiednio ustawić zmienne bindaddr i/lub tlsbindaddr, żeby nie występował konflikt portów.

Następnie dodajmy kontekst, który będzie odpowiedzialny za transport TLS.

				
					[transport-tls]
type = transport
protocol = tls
bind = 0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
				
			

Przeładowanie modułu (z poziomu konsoli Asteriska) sprawi, że zobaczymy nową metodę transportu

				
					module reload res_pjsip.so
pjsip show transports
				
			
Podpowiedź

Zgodnie z dokumentacją nie ma potrzeby definiować transportu dla poszczególnych urządzeń końcowych. System wybierze ją automatycznie.

Możesz też wykorzystać dodatkowe zmienne, takie jak omówiona powyżej zmienna method (tlsv1, sslv2, itp…).

4) Wynik przechwycenia ruchu sieciowego (z plikami .pcap)

Jaki jest wynik końcowy uruchomienia TLS?

Po zalogowaniu urządzenia (w naszym przypadku Yealink) wykonanie na centrali ’sip show peer ....’ (dla SIP) lub ’pjsip show contact ....’ (dla PJSIP), pokarze że wykorzystujemy TLS podczas rejestracji.

Spróbujmy przechwycić ruch sieciowy. Poniżej przedstawimy wynik końcowy.

W pierwszym przypadku widzimy mnóstwo informacji dotyczących wymiany komunikatów z użyciem zwykłego UDP.

Switching to TLS means that you can see practically nothing.

Jeśli chcesz sprawdzić jak wyglądają te pliki, oto one:

 

I to wszystko. Czy było warto poświęcić te kilkanaście minut, żeby dodatkowo i bezpłatnie zabezpieczyć swoja centralę?

Moim zdaniem 'tak’ !

Jeżeli chciałbyś monitorować wszystko co dzieje się na Twojej centrali wypróbuj nasze autorskie oprogramowanie VOIPERO

Instalacja i konfiguracja zajmuje tylko kilka minut a system jest obecnie udostępniany całkowicie za darmo.

Zapoznaj się z tym co potrafi nasz system VOIPERO w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na asterisku.

Share this post

Masz pytania lub potrzebujesz oferty?

Skontaktuj się z naszym doradcą.

Popularne wpisy

Powiązane posty

Projekt wystartował!

Monitorowanie i raportowanie Twojego serwera VoIP