FireWall&NAT
FireWall是一種被動網絡安全防衛技術,位於網絡的邊界。在兩個網絡之間運行訪問控制策略。防止外部網絡對內部信息資源的非法訪問,也可以阻止特定信息從內部網絡被非法輸出。通常來講,防火牆將過濾掉所有不請自到的網絡通訊(除指定開放的地址和port)。安全
NAT技術分爲主要的網絡地址轉換技術(NAT)和網絡地址與port轉換技術(NAPT。Network Address and Port Translator),其主要功能是爲流出內網的分組分配一個全局的IP地址和port號做爲其源地址和源port號,並將此映射關係增長一個地址/port映射表。markdown
對於外來分組,NAT server將利用地址/port映射表將外來分組的目的IP地址和port號正確的變換回內部主機所使用的內部IP地址和port號,而後再轉發給內網主機。網絡
主要的NAT實現的功能很是easy,在子網內使用一個保留的IP子網段,這些IP對外是不可見的。子網內僅僅有少數一些IP地址可以相應到真正全球惟一的IP地址。假設這些節點需要訪問外部網絡,那麼基本NAT就負責將這個節點的子網內IP轉化爲一個全球惟一的IP而後發送出去。(主要的NAT會改變IP包中的原IP地址,但是不會改變IP包中的port)。架構
第二種NAT叫作NAPT。從名稱上咱們也可以看得出,NAPT不但會改變通過這個NAT設備的IP數據報的IP地址,還會改變IP數據報的TCP/UDPport。post
基本NAT的設備可能咱們見的很少。見下圖
性能
有一個私有網絡10.0.0.0,Client A是當中的一臺計算機,這個網絡的網關(一個NAT設備)的外網IP是155.99.25.11(應該另外一個內網的IP地址。比方10.0.0.10)。假設Client A中的某個進程(這個進程建立了一個UDP Socket,這個Socket綁定1234port)想訪問外網主機18.181.0.31的2234port。那麼當數據包經過NAT時會發生什麼事情呢?加密
首先NAT會改變這個數據包的源IP地址,改成155.99.25.11。spa
接着NAT會爲這個傳輸建立一個Session(Session是一個抽象的概念,假設是TCP,或許Session是由一個SYN包開始。以一個FIN包結束。而UDP呢,以這個IP的這個port的第一個UDP開始,結束呢,或許是幾分鐘,或許是幾小時),並且給這個Session分配一個port,比方62000,而後改變這個數據包的源port爲62000。插件
因此原本是(10.0.0.1:1234->18.181.0.31:2234)的數據包到了互聯網上變爲了(155.99.25.11:62000->18.181.0.31:2234)。3d
一旦NAT建立了一個Session後,NAT會記住62000port相應的是10.0.0.1的1234port。之後從18.181.0.31發送到62000port的數據會被NAT本身主動的轉發到10.0.0.1上。(注意:這裏是說18.181.0.31發送到62000port的數據會被轉發,其它的IP發送到這個port的數據將被NAT拋棄)這樣Client A就與Server S1創建以了一個鏈接。前面咱們所說的在NAT上創建的那個Session,就是咱們常說的:」在內網的NAT上打上一個’洞’」。這個洞不能由外部來打,僅僅能由內網的主機來打。並且這個洞是有方向的。
如上例所說的是從內部某臺主機(10.0.0.1)向外部的某個IP(18.181.0.31)發送一個UDP包。那麼就在這個內網的NAT設備上打了一個方向爲18.181.0.31的」洞」。
之後18.181.0.31就可以經過這個洞與內網的10.0.0.1聯繫了。(此處說明一點,在NAT上打的這個」洞」僅僅能由這兩個IP使用。其它的IP不能利用這個洞進行通訊。) 這就是稱爲UDP Hole Punching的技術。
在沒有活動的時候,這個Hole會過時。NAT對於地址轉換關係是有必定生命期的,某個地址轉換後在一段時間內沒有被使用將會被清除。當這個業務流再次出現時。將會創建一個新的地址轉換關係。
NAT常用的分類例如如下:
Full Cone NAT(全然圓錐型)
Address Restricted Cone NAT(地址限制圓錐型 )
Port Restricted Cone NAT(port限制圓錐型)
Symmetric NAT(對稱型)
Full Cone NAT(全然圓錐型NAT )
在全然圓錐型NAT(Full Cone NAT)中,NAT會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。不論什麼包都可以經過地址{A:b}送到客戶主機的{X:y}地址上。如圖所看到的:
Address Restricted Cone NAT(地址限制圓錐型)
地址限制圓錐型NAT(Address Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。僅僅有來自主機{P}的包才幹和主機{X:y}通訊。
例如如下圖所看到的:
Port Restricted Cone NAT(port限制圓錐型)
port限制圓錐型NAT(Port Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。僅僅有來自主機{P,q}的包才幹和主機{X:y}通訊。
例如如下圖所看到的:
Symmetric NAT(對稱型)
對稱型NAT(Symmetric NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定爲{X:y}|{A:b}<->{P:q}。對稱型NAT僅僅接受來自{P:q}的incoming packet,將它轉給{X:y} ,每次客戶機請求一個不一樣的公網地址和port,NAT會新分配一個port號{C,d} 。例如如下圖所看到的:
部署SIP網絡出現的問題
基於SIP協議的語音和視頻會話採用主叫呼入方式(unsolicited incoming calls)。被叫方沒法事先預知,因此終端必須隨時監聽外來的呼叫,這和前面介紹的防火牆工做原理是相悖的。即便打開防火牆上的一個port來專門接收呼叫信令。SIP語音和視頻通訊協議還會動態分配別的port來傳送語音和視頻等媒體數據。
怎樣在不減小網絡安全性的前提下爲防火牆後面的用戶提供安全的雙向通訊就是一個重要問題。
同一時候NAT對SIP語音和視頻通訊的傳輸有關鍵性的影響。首先,SIP會話信令(Layer 5)的SDP中包括了終端準備用來收發信令/媒體的地址和port信息。這些信息對NATserver是透明的,在通過NATserver以後保持不變。當位於內網的SIP終端做爲主叫向外發起呼叫請求的時候,SIP信令通過NATserver以後僅僅有(Layer 3)的地址信息被改寫,而layer 5的會話信令中包括的地址信息被原封不動的送到了被叫,中間可能通過多個SIP Proxy,利用SIP協議的這一機制,主叫和被叫可以完畢媒體協商過程。但是當被叫使用主叫的私有地址來發送媒體的時候,媒體流將發送失敗。總之,針對NAT 的解決方式必須保證安全的雙向通訊,支持主叫呼入方式,同一時候要儘量避免對NAT設備的改動或是依賴於特定類型的設備。
NAT的常用解決方式
解決NAT穿越有很是多中解決方式,常用的有:
一、ALG(Application Level Gateway)
可以識別SIP信令,可以適當地改動數據包。
ALG可以是單獨的鏈接於外網和內網之間的設備。也可以是內置於防火牆內的插件。當FW/NAT發現外網呼叫信令爲SIP時,將其轉發到ALG(應用層網關)。經過ALG創建起內網僞地址終端與外網終端的通訊鏈接。
通過NAT轉換後。到外網SIP包中via,contact。ower/creator,connection information均需要改成NAT外網IP。
使用ALG需要對現有設備升級改造。好比思科的路由器都支持配置ALG。光口板用的正是ALG功能。
附件爲光口板sip alg功能所遇到的一些關鍵問題。
二、MidCom(Middlebox Communications)
MIDCOM技術是爲了解決ALG和代理技術所共同擁有的可擴展性不強而出現的一種NAT穿越解決方式。MIDCOM技術是採用可信的第三方(MIDCOM Agent)對Middlebox(NAT)進行控制,由MIDCOM Agent控制Middlebox打開和關閉媒體port。
總的來講,MIDCOM技術是一種理想的NAT穿越解決方式,它將IP語音和視頻業務識別的智能從Middlebox轉移到外部的MIDCOM Agent上,應用協議對Middlebox來講是透明的。
一般。MIDCOM Agent的功能可以集成在呼叫控制server(如SIPserver、GK或軟交換設備)之中。而Middlebox功能集成在NAT之中,MIDCOM Agent和Middlebox之間接口採用MIDCOM協議完畢互通。
MIDCOM技術的優點在於可擴展性強,新增應用僅僅需對MIDCOM Agent進行擴展。而不會致使MIDBOX又一次升級。
然而。MIDCOM技術的實施需要對server和現有的NAT需要同一時候進行MIDCOM協議的升級擴展。所以該方案的實施不可避免帶來了現有設備升級的困難。同一時候,MIDCOM協議尚處於不斷無缺的階段。設備製造商提供的產品種類有限,於是現階段MIDCOM方式的實際應用並很少見。但可以預見的是。隨着MIDCOM協議的不斷成熟和發展,該方式將得到愈來愈多的應用前景。
使用MidCom需要對現有設備升級改造。
三、STUN(Simple Traversalof UDP Through Network)
IETF RFC 3489定義了怎樣肯定由NAT分配的公網地址和port,不需要改造現有NAT。
主要特點:
- 可以讓client發現NAT的存在以及類型;
- 可以讓client發現NAT的綁定生命週期。
- 可以工做在多NAT串聯環境下。
- 很是easy的協議,易於實現。負載低;
- STUNserver可以位於公網不論什麼地方。
適用範圍:
四、SBC(Session Border Controller)
SBC是VoIP接入層設備。它經過在網絡的邊界處對會話進行控制來實現NAT/防火牆穿透功能。同一時候還可以進行帶寬限制、會話管理、流量統計等。
其次。SBC還可以被看做支持VoIP的代理server,可以識別第五層和第七層的消息,並且還可以處理第五層以上的衆多會話信令協議。改動數據包頭的地址,從而實現SBC內外網地址變換。
SBC的穿透過程遵循必定的通訊模型,在模型中可將會話分解成若干信道。
在信道層面,經過對信道進行創建、維護和刪除等操做保證信道的可用性,在會話層面,將不一樣信道進行鏈接和釋放等操做,可以實現整個會話穿透過程。SBC位於兩個網絡的邊界,其架構通常包括兩個主要的功能模塊:Signaling Proxy 和Media Proxy。當中Signaling Proxy 負責處理SIP會話信令,而Media Proxy負責對媒體流進行控制。Signaling Proxy和Media Proxy之間使用特定的協議和接口(好比Megaco 協議)來交換信息。例如如下圖
–Signaling Proxy
Signaling Proxy是一個高性能的B2BUA(Back to Back User Agent)。負責對所有通過此節點的雙向SIP會話信令進行必要的處理。在B2BUA中。當中一個做爲UAS(User Agent Server)負責接收並處理主叫終端的會話請求,而另外一個就做爲UAC(User Agent Client)向下一跳發出會話請求。與代理server不一樣。B2BUA必須維護各個會話的狀態。並參與到會話創建的信令交互過程當中。
爲了確保SIP會話信令經過SBC,可以改動域名server中相應於呼叫server(Call Server)的條目。將SBC的IP地址做爲呼叫server的IP地址響應給進行DNS查詢的終端,終端就會把發往呼叫server的信令都直接發到SBC。這些改動對終端用戶是透明的,但SBC可以得到所有的呼叫信息,並可以參與到呼叫創建的過程當中去詳細實施控制。
其次,Signaling Proxy也必須對SIP會話信令中與信令和媒體有關的地址信息進行改動。
(1)SIP用戶註冊消息處理。Signaling Proxy在截獲SIP的用戶註冊消息以後。將使用本身的IP地址和port號改寫SIP頭標中的Via和Contact域。而後再發往呼叫server(SIP註冊server),這樣就可以把SIP用戶的當前位置綁定在SBC上,當該SIP用戶做爲被叫的時候。信令都會首先發至SBC。
同一時候,因爲NATserver會在比較短的間隔內清除地址/port映射表中的UDP無效表項,因此當終端使用UDP來傳輸SIP信令的時候。位於NATserver以後的終端必須週期性(大概幾十秒)的向外部的呼叫server發送註冊消息。才幹夠使NATserver中相應於該終端的地址/port映射表項保持有效。
(2)SIP消息改寫,爲了確保Signaling Proxy始終位於信令通路上,Signaling Proxy必須使用本地的地址和port號來改寫SIP消息中的Via和Contact域。
當使用內部地址的終端用戶向呼叫server發送信令的時候。通過Firewall/NAT以後的IP分組將使用NATserver分配的源地址和源port。收到此信令的Signaling Proxy就會在本地創建一個映射關係,NATserver將爲此終端分配的地址和port號。以及Signaling Proxy爲此會話分配的地址和port號綁定在一塊兒。這樣。當反向信令到達Signaling Proxy的時候,Signaling Proxy將透過Firewall/NAT上正確的地址和port號將信令發送給終端。
(3)改動SDP,爲了將Media Proxy增長到媒體通路中,SIP消息中的SDP部分也應當被改寫。SDP中包括了終端準備用來收發媒體的地址和port信息。當終端位於Firewall/NAT以後的時候。這些信息假設原封不動的送達通訊對端。就會致使通訊對端發送媒體流失敗。Signaling Proxy將經過Media Proxy分配本地的地址和port號。並使用本地的地址和port號改寫這些信息,就可以保證雙向媒體流的創建。
Signaling Proxy僅僅對特定SIP信令消息中的特定域進行改動,其它的消息和域都將維持不變。
–Media Proxy
Media Proxy接受Signaling Proxy的控制,是會話兩方之間RTP/RTCP媒體流的轉換點。因爲所有的媒體流都要通過Media Proxy,因此應當具備控制媒體流的能力。對服務質量進行管理,獲取計費信息及動態的網絡地址/port轉換等。
通過SBC信令和媒體流整個過程如圖2所看到的。當主叫的用戶代理(UA)發起呼叫的時候①,Signaling Proxy會在收到INVITE消息以後向Media Proxy申請分配本地的NAT地址和port(呼叫server側)②。並使用Media Proxy 返回的地址和port號③,改寫信令消息中攜帶的SDP。而後再發往呼叫server④。終於由呼叫server送達被叫方⑤。
當反向信令到達Signaling Proxy的時候⑥⑦。Signaling Proxy會再次向Media Proxy申請分配本地的NAT地址和port(主叫用戶側)⑧。並使用返回的地址和port號⑨改寫反向信令中攜帶的SDP,而後再發往主叫的用戶代理⑩。
通過這樣的信令處理以後,主叫和被叫都會將媒體流發往Media Proxy上指定地址和port,此時Media Proxy就可以經過讀取媒體流的源地址和源port來肯定位於NAT以後的主叫/被叫在其Firewall/NAT上所使用的全局地址和port。進而把通訊對端的媒體流發往該地址/port。因爲Firewall/NAT上已經存在了相應此全局地址/port的映射關係,Firewall/NAT會將此媒體流轉發給內部的終端,至此雙向的媒體鏈接創建成功。所以,SBC在不減小網絡安全性的前提下,爲Firewall/NAT後的用戶提供了安全的雙向通訊。
(1)動態的網絡地址/port轉換(NAPT),Media Proxy所具有的NAPT功能不只可以解決運營商網絡或用戶網絡的IPv4地址短缺問題,還隱藏了運營商網絡和用戶網絡的拓撲信息,加強了對拒絕服務(Denial of Service)攻擊的防護能力,也保證了運營商網絡拓撲的機密性。
(2)產生計費信息。Media Proxy 是媒體流的必經之處,所以可以對會話的時長、會話的類型(語音、視頻等)以及雙向的數據流量進行監視和統計。是產生CDR(Charge Detail Records)的合適位置。
(3)網間的QoS映射。IP頭標中的ToS域(Type Of Service)/DS域(Differentiated Service)指示了分組所應得到的QoS(Quality of Service)級別。爲了保證端到端的服務質量,必須在兩個網絡的邊緣完畢QoS映射。
當會話的IP分組在通過Media Proxy的時候,都攜帶了來源網絡所作的ToS/DS標記。Media Proxy可以依據事先配置好的映射規則改變這些標記。再送入目的網絡中,從而保證該會話的QoS 在不一樣運營商的網絡內保持一致,也就是保證其端到端的QoS。
(4)IPv4到IPv6的協議轉換,當處在兩個異種網絡(IPv4/IPv6)邊緣的時候,Media Proxy還可以提供這兩種IP協議的轉換。
Media Proxy因爲其所處的特殊位置成爲部署IPv4/IPv6協議轉換的理想設備。
五、rport機制
得到IP地址是在Via頭中帶上received參數。爲了獲得port信息,也參考了這樣的方式。即在Via頭中帶上rport屬性來指明port信息。
當在client和server之間是NAT的時候,請求可能會在NAT中建立(或刷新)一個綁定。爲了讓client收到響應信息。在事務處理的過程當中這個綁定必須保持存在。大多數的NAT綁定有超過1分鐘的超時時間。這超過了non-INVITE事務的持續時間。於是對non-INVITE事務的請求的響應僅僅能在綁定存在的時候存在。
INVITE事務卻是不存在這個問題。
爲了保持這個綁定。client應該在每隔20s左右重發INVITE請求。這樣的重發機制需要發生在收到一個暫時的響應後。
固然剛纔所說的大概1分鐘的超時時間也不是肯定的,有時候會比這長,此時重發機制可以發慢一點,不然,可以發快一點。這些問題可參考RFC3489。
假設是支持rport機制的server,它需要在接收到的請求中檢查Via頭是否包括一個沒有值的rport參數。
假設有,它需要在迴應中帶上rport的值。這與received的處理類似。
爲了穿越對稱性的NAT,響應需要發送到一樣的IP地址和port。當server在多port或接口的請求上監聽請求時,它必須記住請求是從何處發的。
對一個穩定的Proxy,在一個傳輸的持續時間中,記住這些東西是沒有問題的。但是對於不穩定的Proxy。它不存儲請求和響應中的狀態信息。爲了達到本規範的要求。它需要將地址和port信息加密到Via頭字段中,在響應信息到達的時候。它能提取加密的信息並將它放到響應中。
rport機制需要終端支持該種機制,所以應用狀況比較受限。
–實例
如下舉一個發送REGISTER信息的實例。在請求信息的Via頭中包括了沒有值的rport參數,例如如下所看到的:
REGISTER sip:124.40.120.188:5060 SIP/2.0
Via:SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport
Max-Forwards:70
Contact: <sip:19988888888@192.168.2.65:12344;rinstance=7cd1c532e92fdb0e>;expires=0
To: "19988888888"<sip:19988888888@124.40.120.188:5060>
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 1 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE,INFO
User-Agent: eyeBeam release 1105a stamp 56793
Content-Length: 0
發送到的server支持rport機制,它看到請求中的rport後,將經過分析UDP包信息獲得的NAT的公網地址(124.42.4.203)和port信息(15500)分別做爲received和rport屬性帶給client:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport=15500;
received=124.42.4.203
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
To: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=0005-058-7d6dc90516ae2e21
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 4 REGISTER
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,
NOTIFY,MESSAGE
Contact: <sip:124.40.120.188:5060>
Content-Length: 0
client在獲得響應信息後。知道了所使用的公網地址和port,在然後按期重發的REGISTER信息中,Contact變換成124.42.4.203: 15500。好比新發的REGISTER信息變爲:
REGISTER sip:124.40.120.188:5060 SIP/2.0
Via: SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport
Max-Forwards: 70
Contact: <sip:19988888888@124.42.4.203: 15500;rinstance=7cd1c532e92fdb0e>;expires=0
To: "19988888888"<sip:19988888888@124.40.120.188:5060>
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 2 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: eyeBeam release 1105a stamp 56793
Content-Length: 0