TCP/IP詳解 第七章 防火牆和網絡地址轉換(1)

一、引言

1Internet和協議發展初期,僅用於大學和科研機構。處於沒人攻擊狀態。

220世紀8090年代,成功的攻擊成了家常便飯。爲了解決這個問題,引入了防火牆。

Ø 瞭解防火牆
l 用一種方法控制互聯網中網絡流量的流向
l 一種能夠限制所轉發的流量類型的路由器。
l 大大緩解了IPv4地址耗盡的問題(NAT,多個範圍地址重複使用,IP地址不是全球唯一的,可重複利用)

二、包過濾防火牆       

Ø 防火牆Firewall),也稱防護牆,是由Check Point創立者Gil Shwed1993年發明並引入國際互聯網(US5606668A1993-12-15)。防火牆是位於內部網和外部網之間的屏障,它按照系統管理員預先定義好的規則來控制數據包的進出。防火牆是系統的第一道防線,其作用是防止非法用戶的進入。
Ø 它實際上是一種隔離技術。防火牆是在兩個網絡通訊時執行的一種訪問控制尺度,它能允許你“同意”的人和數據進入你的網絡,同時將你“不同意”的人和數據拒之門外,最大限度地阻止網絡中的黑客來訪問你的網絡。換句話說,如果不通過防火牆,公司內部的人就無法訪問InternetInternet上的人也無法和公司內部的人進行通信。
Ø 免受攻擊:保證終端軟件最新和不存在任何錯誤(無漏洞)。
Ø 分類:1.代理防火牆;2.包過濾防火牆。

1. 包過濾防火牆

 
Øfilter

配置爲丟失或者轉發數據包頭中符合(或不符合)特定標準的數據包,這些標準稱爲過濾器。

Ø過濾方式

1.簡單的過濾包括網絡層或者傳輸層報頭中各個部分的範圍比較。

2.最流行的過濾器包含IP地址(選項),ICMP報文類型。

3.端口號確定的各種UDP或者TCP服務。

  較新的防火牆能利用封包的多樣屬性來進行過濾,例如:來源 IP地址、來源端口號、目的 IP 地址或端口號、服務類型(如 HTTP 或是 FTP)。也能經由通信協議TTL 值、來源的網域名稱或網段...等屬性來進行過濾

Ø無狀態的包過濾防火牆(最簡單)

   單獨處理每一個數據報,極易被混淆

Ø有狀態的包過濾防火牆(複雜)

    關聯已經或者即將到達的數據包來推斷流或者數據報的信息。IP分片(第10章),使得防火牆的工作變得更加複雜。

Ø DMZ

     Demilitarized Zone即俗稱的非軍事區,與軍事區和信任區相對應,作用是把WEB,E-mail,等允許外部訪問的服務器單獨接在該區端口,使整個需要保護的內部網絡接在信任區端口後,不允許任何訪問,實現內外網分離,達到用戶需求。

      DMZ可以理解爲一個不同於外網或內網的特殊網絡區域,DMZ內通常放置一些不含機密信息的公用服務器,比如WebMailFTP等。這樣來自外網的訪問者可以訪問DMZ中的服務,但不可能接觸到存放在內網中的公司機密或私人信息等,即使DMZ中服務器受到破壞,也不會對內網中的機密信息造成影響。

2.TCP/IP參考模型中的防火牆位置

         
 
 

三、代理防火牆

Ø 本質

    運行一個或者多個引用層網關的主機(ALG),該主機擁有多個網絡接口,能夠在應用層中繼兩個連接/關聯之間特定類型的流量。

Ø 優點:

  比包過濾防火牆更安全

Ø缺點

   缺乏靈活性(爲每個傳輸層服務設置一個代理)。每個服務需安裝代理,通過代理髮起連接。必須配置每個客戶端以便找到代理。

    提前確認的環境可以工作的很好,但是添加額外的服務需要ISP重大幹預。

Ø代理防火牆的兩種形式

   1. HTTP proxy firewall

   Web代理,用於HTTPHTTPS協議。內容過濾器&隧道代理服務器.對內是server,對外是client。也提供Web cache功能。

ØSOCKS firewall

    防火牆安全會話轉換協議 (SOCKS: Protocol for sessions traversal across firewall securelySOCKS 協議提供一個框架,爲在 TCP UDP 域中的客戶機/服務器應用程序能更方便安全地使用網絡防火牆所提供的服務。

   協議工作在OSI參考模型的第5(會話層),使用UDP協議傳輸數據,因而不提供如傳遞 ICMP 信息之類的網絡層網關服務

   用於Web之外的其他服務。版本45.版本5增加了強大的認證,UDP傳輸和IPv6尋址。

   Socks代理比其他應用層代理要快得多。它通常綁定在代理服務器的1080端口上。如果您在企業網或校園網上,需要透過防火牆或通過代理服務器訪問Internet就可能需要使用 SOCKS

   注意,瀏覽網頁時常用的代理服務器通常是專門的http代理,它和SOCKS是不同的。因此,您能瀏覽網頁不等於您一定可以通過SOCKS訪問Internet。常用的防火牆,或代理軟件都支持SOCKS,但需要其管理員打開這一功能。

   使用場景:電子郵件、新聞組軟件、網絡聊天MIRC和使用代理服務器上聯衆打遊戲等等各種遊戲應用軟件當中。

 

四、傳統的NAT 

1、公有地址與私有地址

Ø私有地址:    組建內部局域網使用,無償免費使用【RFC1918】

    原則上,私有地址可以採用公有地址;但是當這樣的公有地址也別不聯網另外一個實體使用時,這樣可能出現問題,是因爲本地系統會屏蔽使用相同地址的遠端系統(在互聯網上不會被路由,出去要被丟掉。即使出去,數據無法回來)。

Ø 公有地址: 具有全球唯一性,需要申請收費。
Ø A類地址

範圍:0.0.0.0127.255.255.25510.0.0.010.255.255.255是私有地址

1字節爲網絡地址,其它3個字節爲主機地址。另外第1個字節的最高位固定爲0

ØB類地址

範圍:128.0.0.0191.255.255.255. 172.16.0.0172.31.255.255是私有地址

1字節和第2字節爲網絡地址,其他2個字節爲主機地址。另外1個字節的前2爲固定爲10

ØC類地址

範圍:192.0.0.0223.255.255.255192.168.0.0192.168.255.255是私有地址

1字節、第2字節和第3個字節爲網絡地址,第4個個字節爲主機地址。另外第1個字節的前三位固定爲110/2、/2

2、網絡地址轉換(NAT) 

ØNATNetwork Address Translation)本質

    允許在互聯網的不同地方使用相同的IP地址集體。主要動機是正在急劇減少的有限的IP地址空間。解決兩個問題:IP地址枯竭和關於路由可擴展性的擔憂(CIDR的發展)。

Ø NAT快速發展、廣泛使用嚴重影響IPv6的推進

    NAT推出之初僅作爲臨時措施,但NAT是受歡迎的,因爲減少了對全局路由的互聯網地址需求,同時提供了一些防火牆功能,並且僅僅需要很少的配置。

Ø NAT的幾個缺點
l   需要做特殊的配置,才能使NAT內部主機訪問外網
l   每一個隸屬於同一連接都必須通過相同的NAT
l   在很多方面,NAT與互聯網協議背道而馳
l   NAT需要跟蹤每個連接的狀態,操作貫穿多個協議層。修改IP地址需要同時修改傳輸層的校驗碼(見10,13章)。
l NAT對應用層協議造成困擾(FTP),尤其是有效載荷內記錄IP地址信息的協議。

注意:NAT工作在網絡層,但是要結合傳輸層來共同實現

3、NAT的分類和功能

          

Ø靜態NAT

    11,私有地址轉換,對特殊設備的訪問。

Ø 動態NAT

    從地址池中動態獲取,比如easy_ip,還是11

Ø 端口複用NAPT

    1對多。比如思科NAT服務器,一個公有IP可以映射4000個用戶使用。公有IP使用率高。

ØNAT作用

  節約IP地址,使用地址轉換。僅僅是一個過濾,IPv6不用這個技術。

ØNAT功能
   1)解決IP地址不足問題,1對多,還可以保護內部網絡。

   2)安全防護功能

   3)負責均衡

l 不足:1)影響網絡速度;2)與某些應用不兼容;

            3)不能處理加密的IP報頭     4) 無法實現對IP端到端的跟蹤。 

4、NAT工作原理

   重寫通過路由器的數據包的識別信息。

   1. 重寫往一個方向傳輸的數據包的源IP地址。

   2. 重寫往另外一個方向傳輸的數據包的目的IP地址。

   因此:在互聯網上的主機,數據包是來自於具有全局路由IPNAT路由器,而不是位於NAT內部的私有地址的主機。

  5、NAT的發展歷程   

Ø DHCP思想(租用地址池)
Ø 帶地址池的NATNAT剛產生的思想)
Ø NAT

    私有IPNAT的公共IP之間的轉換,那麼,私有網中同時與公共網進行通信的主機數量就受到NAT的公共IP地址數量的限制。取決於ISP提供的地址池或公有地址範圍,這種NAT不是最流行的,因爲他無助於減少需要使用的IP地址數量

Ø NAPT

    爲了克服這種限制,NAT被進一步擴展到在進行IP地址轉換的同時進行Port的轉換,這就是網絡地址端口轉換NAPT(Network Address Port Translation)技術。

Ø EASY IP

  Easy IP 方式的實現原理與地址池NAPT 轉換原理類似,可以算是NAPT的一種特例,不同的是Easy IP 方式可以實現自動根據路由器上WAN 接口的公網IP 地址實現與私網IP 地址之間的映射(無需創建公網地址池)。所以在配置上相對簡單。

 

 

6、NAPT

Ø NAPT工作原理

    使用傳輸層標識符(即TCPUDP端口,ICMP查詢標識符)來確定一個特定的數據包到底和NAT內部的哪一臺主機關聯。

    這使得大量的內部主機(即使好幾千臺)能夠同時訪問互聯網,而使用公有IP地址的數量確很少,通常只需要一個

    通常我們所說的NAT將同時包括NATNAPT(除非進行區分)。      

7、防火牆規則     

Ø iptables命令行工具,位於用戶空間;用此工具操作內核空間的netfilter(安全框架)

   包含過濾表格(table)和過濾連(chain)。tablefilter,nat, mangle,

    filter三條鏈: INPUTFORWARDOUTPUT

    nat表三條鏈:PREROUTINGOUTPUTPOSTROUTING 

    mangle表有五條鏈,主要用於任意修改數據包。   

    raw表兩條鏈: PREROUTINGOUTPUT

     

8、Iptables->table 

    我們把相同功能的規則的集合叫做“表”,所以說,不同功能的規則,放在不同的表中管理。每種表的作用(重要):

Ø filter

   負責過濾功能,防火牆;內核模塊:iptables_filter

Ø nat

   網絡地址轉換功能;內核模塊:iptabel_nat

Ømangle

   拆解報文,做出修改,並重新封裝。

Øraw

  關閉nat表, 啓用的鏈追蹤機制。

9、數據報過來策略

          默認拒接所有消息                                              

      

默認接收所有消息

10、iptables的數據包的流程是怎樣的?

一個數據包到達時,是怎麼依次穿過各個鏈和表的(圖)。 

基本步驟如下: 
1. 數據包到達網絡接口,比如 eth0。 
2. 進入 raw 表的 PREROUTING 鏈,這個鏈的作用是趕在連接跟蹤之前處理數據包。 
3. 如果進行了連接跟蹤,在此處理。 
4. 進入 mangle 表的 PREROUTING 鏈,在此可以修改數據包,比如 TOS 等。 
5. 進入 nat 表的 PREROUTING 鏈,可以在此做DNAT,但不要做過濾。 
6. 決定路由,看是交給本地主機還是轉發給其它主機。 

到了這裏我們就得分兩種不同的情況進行討論了,一種情況就是數據包要轉發給其它主機,這時候它會依次經過: 
7. 進入 mangle 表的 FORWARD 鏈,這裏也比較特殊,這是在第一次路由決定之後,在進行最後的路由決定之前,我們仍然可以對數據包進行某些修改。 
8. 進入 filter 表的 FORWARD 鏈,在這裏我們可以對所有轉發的數據包進行過濾。需要注意的是:經過這裏的數據包是轉發的,方向是雙向的。 
9. 進入 mangle 表的 POSTROUTING 鏈,到這裏已經做完了所有的路由決定,但數據包仍然在本地主機,我們還可以進行某些修改。 
10. 進入 nat 表的 POSTROUTING 鏈,在這裏一般都是用來做 SNAT ,不要在這裏進行過濾。 
11. 進入出去的網絡接口。完畢。 

另一種情況是,數據包就是發給本地主機的,那麼它會依次穿過: 
7. 進入 mangle 表的 INPUT 鏈,這裏是在路由之後,交由本地主機之前,我們也可以進行一些相應的修改。 
8. 進入 filter 表的 INPUT 鏈,在這裏我們可以對流入的所有數據包進行過濾,無論它來自哪個網絡接口。 
9. 交給本地主機的應用程序進行處理。 
10. 處理完畢後進行路由決定,看該往那裏發出。 
11. 進入 raw 表的 OUTPUT 鏈,這裏是在連接跟蹤處理本地的數據包之前。 
12. 連接跟蹤對本地的數據包進行處理。 
13. 進入 mangle 表的 OUTPUT 鏈,在這裏我們可以修改數據包,但不要做過濾。 
14. 進入 nat 表的 OUTPUT 鏈,可以對防火牆自己發出的數據做 NAT 。 
15. 再次進行路由決定。 
16. 進入 filter 表的 OUTPUT 鏈,可以對本地出去的數據包進行過濾。 
17. 進入 mangle 表的 POSTROUTING 鏈,同上一種情況的第9步。注意,這裏不光對經過防火牆的數據包進行處理,還對防火牆自己產生的數據包進行處理。 
18. 進入 nat 表的 POSTROUTING 鏈,同上一種情況的第10步。 
19. 進入出去的網絡接口。完畢。

11、iptables raw表的使用



增加raw表,在其他表處理之前,-j NOTRACK跳過其它表處理
狀態除了以前的四個還增加了一個UNTRACKED

例如:
可以使用 “NOTRACK” target 允許規則指定80端口的包不進入鏈接跟蹤/NAT子系統

iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -s 1.2.3.4 -p tcp --sport 80 -j NOTRACK
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT



12、解決ip_conntrack: table full, dropping packet的問題


在啓用了iptables web服務器上,流量高的時候經常會出現下面的錯誤:

ip_conntrack: table full, dropping packet

這個問題的原因是由於web服務器收到了大量的連接,在啓用了iptables的情況下,iptables會把所有的連接都做鏈接跟蹤處理,這樣iptables就會有一個鏈接跟蹤表,當這個表滿的時候,就會出現上面的錯誤。

iptables的鏈接跟蹤表最大容量爲/proc/sys/net/ipv4/ip_conntrack_max,鏈接碰到各種狀態的超時後就會從表中刪除。

所以解決方法一般有兩個:

(1) 加大 ip_conntrack_max 值

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 393216
net.ipv4.netfilter.ip_conntrack_max = 393216

(2): 降低 ip_conntrack timeout時間

vi /etc/sysctl.conf

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120


上面兩種方法打個比喻就是燒水水開的時候,換一個大鍋。一般情況下都可以解決問題,但是在極端情況下,還是不夠用,怎麼辦?

這樣就得反其道而行,用釜底抽薪的辦法。iptables的raw表是不做數據包的鏈接跟蹤處理的,我們就把那些連接量非常大的鏈接加入到iptables raw表。

如一臺web服務器可以這樣:

iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

五、與防火牆和NAT相關的攻擊

Ø 不完全或者不正確的配置導致的攻擊

 

Ø 利用防火牆的弱點來攻擊:沒有能力處理IP分片

 

Ø  NAT受到外部挾持,爲攻擊者提供僞裝能力。

     隱藏攻擊者的實際地址,從NAT來看是正常

     最簡單的設置僞裝的配置:

     ipchains –P FORWARD MASQUERADE

六、IPv4/IPv6共存和過渡中的NAT

2011年最後一個頂層單播IPv4被分配出去,IPv6的過度開始加速。

    但目前來看IPv4IPv6將共存更長一段時間,甚至可能是無期限的。

Ø     雙協議棧

 DS-Lite(Dual Stack Lite) 一種希望在內部運行IPv6的服務提供者更容易過渡到IPv6(同時支持傳統的IPv4)的方法。利用隧道和SPNAT

 

感謝hebh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章