Juniper SRX Firewall Üzerinde SIP ALG ve NAT İşlemleri

SIP ALG ve NAT

Network Address Translation (NAT), lokalde bulunan birçok bilgisayarı tek bir public IP üzerinden internete çıkarmak için kullanılmaktadır. Dışarıya doğru olan trafik için NAT private IP adreslerini public IP adresine çevirmekte; içeriye doğru olan trafik için ise public IP adreslerini private IP adreslerine
çevirmektedir. Buraya kadar OK..

VOIP tarafına istinaden NAT ı Session Initiation Protocol (SIP) ile birlikte kullanmak ise biraz daha komplike bir işlemdir çünkü SIP mesajlarının başlığında ve gövdesinde IP adres bilgisi bulunmaktadır. SIP başlığı arayan (caller) ile aranan (receiver) ın bilgisini tutmakta ve örneğin ağın dışında olan bir yeri aramak için NAT, SIP servisi ile birlikte kullanıldığında cihazın bu bilgileri translate etmesi gerekmektedir. SIP paketinin gövdesinde ise taşınan datanın IP
adres ve port numarasını bulunduran SDP (Session Description Protocol) bilgisi bulunmaktadır. Cihaz, datayı göndermek veya almak için SDP bilgisini translate eder. Örneğin dışarı doğru yapılan bir arama için client ın lokal IP adresi ve port numarası firewall üzerinde translate edilir. Aynı şekilde gelen aramalar için firewall public IP adreslerini iç networke NAT layacaktır. Bu arada SIP Juniper JunosOS üzerinde öntanımlı servislerdendir. 5060 portunu kullanır. Firewall kuralı oluşturularak uygulama bazında SIP e izin verilebilir veya engellenebilir.

Bir INVITE mesajı firewall a doğru gönderildiğinde SIP ALG (Session Initiation Protocol Application Layer Gateway) servisi INTIVE mesaj paketinin başlığından bilgileri alır ve CALL Table (arama tablosu) a yazar. Bu sayede gelecek bir sonraki arama için mesaj doğru endpointe yönlendirilebilmektedir. Mesela ACK veya 200 OK gibi yeni bir mesaj geldiğinde SIP ALG bu paketteki From:, To:, Call-ID:, bilgilerini kendi Call Table ı ile kıyaslar. O an aktif olan bir çağrı ile uyan yeni bir INVITE mesajı geldiğinde ALG servisi bu mesajı REINVITE olarak işler.

Session Description Protocol (SDP) içeren bir mesaj paketi geldiğinde ALG bu paket için port allocate eder ve ilgili NAT mapping ini oluşturur. Çünkü Session Description Protocol, Real-Time Transport Protocol (RTP) ve Real-Time Control Protocol (RTCP) kanalları için ardışık portlara ihtiyaç duymaktadır. ALG bu ihtiyaca binaen ardışık port sağlar. Eğer bu ardışık portları sağlamak mümkün olmazsa ALG, SIP mesajını discard eder.

SIP ALG servisi NAT-PT mod ve NAT64 ile birlikte IPV6 yı da desteklemektedir.

Dışarı Doğru Yapılan Aramalar
Örneğin internal networkten internete doğru bir SIP Call işlemi gerçekleştiğinde NAT, SDP içerisindeki IP adres ve port bilgisini değiştirir ve bu IP-port bilgisini firewall a bind eder. ALG ise yeniden gönderim işlerinde ve SIP responce mesajlarında kullanmak için bu mapping işlemini kaydeder.

Arama Yönlendirme
Mesela A kullanıcısı dışarıdan network içerisindeki B kullanıcısını arıyor olsun ve B kullanıcısı da bu gelen aramayı yine lokal networkün dışında olan C kullanısına yönlendiriyor olsun. SIP ALG, A kullanıcısından gelen aramaya istinaden normal INVITE işlemini gerçekleştirir. Sonra B den lokal networkte bulunmayan C ye yönlendirilmesi gereken bu aramaya istinaden B ye de C ye de aynı interface den erişildiğini anlar ve firewall üzerinde pinhole açmaz çünkü data A ile C arasında direkt olarak akacaktır.

Arama Sonlandırma
Bir çağrı, BYE mesajı ile sonlandırılır. BYE mesajı aranan (receiver) tarafından 200 OK ile kabul edilir. Yani bir taraf aramayı sonlandırdığında BYE mesajı karşı tarafa gönderilir, paketi alan karşı taraf bunu 200 OK ile acknowledge olarak çağrıyı sonlandırana döner. ALG servisi 200 OK paketinin karşı tarafa gidebilmiş olması için arama sonlandırma işlemlerini 5 saniye gecikmeli olarak gerçekleştirir.

Çağrıyı İptal Etme
Arama iptal edildiğinde CANCEL mesajı gönderilir. CANCEL mesajının alınmasından sonra SIP ALG servisi eğer firewall da açılmış bir pinhole varsa bunları kapatır ve adres bindingi ni bırakır. Bırakmadan önce karşı taraftan 200 OK mesajının gelmesi için 5 sn kadar bekler. 5 saniye dolduğunda artık 487 veya non-200 mesajlarının gelip gelmememesine bakmadan arama iptal edilmiş olur.

SIP Mesajları
SIP mesajları header ve body den oluşur. Bir request paketinin ilk satırı request line dır. Bu satırda request-URI ve protokol versiyon bilgisi tutulur. Bir response mesajının ilk satırı ise status line dır ve status code bilgisi içerir. SIP başlığında sinyalizasyon için kullanılmak üzere IP adres ve port bilgisi bulunur. SIP paketinin gövdesi boş bir satır ile SIP başlığından ayrılmaktadır. Bu boş satır ise Session Description Information için rezerve edilmektedir (opsiyonel). SIP body de datanın taşınması için IP adres ve Port bilgileri bulunmaktadır.

SIP Başlığı
Aşağıdaki örnek bir SIP request mesajına aittir. NAT, IP adres bilgilerini başlıkta replace eder.

INVITE ahmet@10.150.20.5 SIP/2.0
Via: SIP/2.0/UDP 10.150.20.3:5434
From: hasan@10.150.20.3
To: ahmet@10.150.20.5
Call-ID: a12abcde@10.150.20.3
Contact: hasan@10.150.20.3:5434
Route: <sip:netscreen@10.150.20.3:5060>
Record-Route: <sip:netscreen@10.150.20.3:5060>

NAT işlemlerinin gerçekleşmesi aşağıdaki durumlara bağlıdır.
•Inbound request
•Outbound response
•Outbound request
•Inbound response

ALG ise bunun bir request mi, response mu olduğunu ve içeriden mi dışarıdan mı gerçekleştiriliyor olduğunu bilmek zorundadır.

Juniper SRX Firewall da Web GUI  üzerinden SIP servisi ile ilgili konfigürasyon yapılabilir.

SRX_SIP

Inactive Media Timeout: Bir görüşme gerçekleştiğinde görüşmeyi yapan taraflar arasında RTP (real-time protocol) ve RTCP (real-time control protocol) paketleri gidip gelir. Görüşme sonlandırılmamış olmasına rağmen bu paketler gidip gelmediğinde örneğin telefonun açık unutulduğu sonucuna varabiliriz. İşte inactive-media-timeout— parametresi bir oturumun boşta kalma süresini (oturum içerisinde RTP ve RSTP paketlerinin saniye cinsinden maksimum idle da kalma süresini) belirler. Yani kısaca telefonu açık unutan arkadaşımızın görüşmesini sistem kaç saniye sonra sonlandıracak bunu belirler. Bu süreye ulaşıldığında firewall üzerinde geçici olarak açılan pinhole ler kapatılır ve oturum sonlandırılır.
Juniper SRX Firewall lar üzerinde bu süre varsayılan olarak 120 saniyedir. 10 saniye ile 2550 saniyeleri arasında değiştirilebilir.

Maximum Call Duration: Bir görüşmenin saniye cinsinden maksimum durasyonunu belirler 🙂 maximum-call-duration— parametresi adından da anlaşılacağı üzere bir telefon görüşmesine saniye cinsinden zaman kotası koyar. Bu süreye ulaşıldığında SIP ALG, oturumu kapatır.
Juniper SRX Firewall lar üzerinde varsayılan olarak normal bir insan evladının 43200 saniyeden (çekinmedim hesapladım 12 saat ediyor) daha fazla konuşmayacağı öngörülmüş. 180 ile 432000 saniye aralığında bir değer ile değişiklik yapılabilir.

T1 Interval: Bu parametre görüşme yapan taraflar arasındaki transaction ın saniye cinsinden tahimini gidiş-geliş gecikmesini belirler. Varsayılan olarak 500 milisaniyedir. RFC3261 de tanımlanmış bir standarttır aslında. Gerekmedikçe dokunmamakta fayda var.

T4 Interval: Bu parametre bir mesajın ağda saniye cinsinden maksimum ne kadar kalabileceğini belirler. Varsayılan olarak 5 saniyedir. 5 saniye ile 10 saniye aralığında değiştirilebilir. Bu parametre de RFC3261 de tanımlanmıştır.

C Timeout: Bir kullanıcı diğerini aradığında INVITE paketi gönderir. Bu parametre dakika cinsinden INVITE işleminin timeout süresini belirler. ( Bu değer SIP Proxy den çekiliyor.)

Table-1 SIP Requests

Inbound Request

(from public to private)

To:

Replace domain with local address

From:

None

Call-ID:

None

Via:

None

Request-URI:

Replace ALG address with local address

Contact:

None

Record-Route:

None

Route:

None

Outbound Response

(from private to public)

To:

Replace ALG address with local address

From:

None

Call-ID:

None

Via:

None

Request-URI:

N/A

Contact:

Replace local address with ALG address

Record-Route:

Replace local address with ALG address

Route:

None

Outbound Request

(from private to public)

To:

None

From:

Replace local address with ALG address

Call-ID:

None

Via:

Replace local address with ALG address

Request-URI:

None

Contact:

Replace local address with ALG address

Record-Route:

Replace local address with ALG address

Route:

Replace local address with ALG address

Outbound Response

(from public to private)

To:

None

From:

Replace ALG address with local address

Call-ID:

None

Via:

Replace ALG address with local address

Request-URI:

N/A

Contact:

None

Record-Route:

Replace ALG address with local address

Route:

Replace ALG address with local address

Table 2: SIP Responses

Informational

100 Trying

180 Ringing

181 Call is being forwarded

182 Queued

183 Session progress

Success

200 OK

202 Accepted

Redirection

300 Multiple choices

301 Moved permanently

302 Moved temporarily

305 Use proxy

380 Alternative service

Client Error

400 Bad request

401 Unauthorized

402 Payment required

403 Forbidden

404 Not found

405 Method not allowed

406 Not acceptable

407 Proxy authentication required

408 Request time-out

409 Conflict

410 Gone

411 Length required

413 Request entity too large

414 Request URL too large

415 Unsupported media type

420 Bad extension

480 Temporarily not available

481 Call leg/transaction does not exist

482 Loop detected

483 Too many hops

484 Address incomplete

485 Ambiguous

486 Busy here

487 Request canceled

488 Not acceptable here

Server Error

500 Server internal error

501 Not implemented

502 Bad gateway

502 Service unavailable

504 Gateway time-out

505 SIP version not supported

Global Failure

600 Busy everywhere

603 Decline

604 Does not exist anywhere

606 Not acceptable

SIP Nedir, ALG Nedir, NAT Nedir, Session Initiation Protocol, Application Layer Gateway, Network Address Translation

Emre BAŞTUĞ

About Emre BAŞTUĞ

Emre BAŞTUĞ