TCP/IP详解 第七章 防火墙和网络地址转换(1)
一、引言
1、Internet和協議發展初期,僅用于大學和科研機構。處于沒人攻擊狀態。
2、20世紀80、90年代,成功的攻擊成了家常便飯。為了解決這個問題,引入了防火墻。
? 了解防火墻 l 用一種方法控制互聯網中網絡流量的流向 l 一種能夠限制所轉發的流量類型的路由器。 l 大大緩解了IPv4地址耗盡的問題(NAT,多個范圍地址重復使用,IP地址不是全球唯一的,可重復利用)二、包過濾防火墻? ? ? ?
? 防火墻(Firewall),也稱防護墻,是由Check Point創立者Gil Shwed于1993年發明并引入國際互聯網(US5606668(A)1993-12-15)。防火墻是位于內部網和外部網之間的屏障,它按照系統管理員預先定義好的規則來控制數據包的進出。防火墻是系統的第一道防線,其作用是防止非法用戶的進入。 ? 它實際上是一種隔離技術。防火墻是在兩個網絡通訊時執行的一種訪問控制尺度,它能允許你“同意”的人和數據進入你的網絡,同時將你“不同意”的人和數據拒之門外,最大限度地阻止網絡中的黑客來訪問你的網絡。換句話說,如果不通過防火墻,公司內部的人就無法訪問Internet,Internet上的人也無法和公司內部的人進行通信。 ? 免受攻擊:保證終端軟件最新和不存在任何錯誤(無漏洞)。 ? 分類: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內通常放置一些不含機密信息的公用服務器,比如Web、Mail、FTP等。這樣來自外網的訪問者可以訪問DMZ中的服務,但不可能接觸到存放在內網中的公司機密或私人信息等,即使DMZ中服務器受到破壞,也不會對內網中的機密信息造成影響。
2.TCP/IP參考模型中的防火墻位置
三、代理防火墻
? 本質:??? 運行一個或者多個引用層網關的主機(ALG),該主機擁有多個網絡接口,能夠在應用層中繼兩個連接/關聯之間特定類型的流量。
? 優點:? 比包過濾防火墻更安全
?缺點?? 缺乏靈活性(為每個傳輸層服務設置一個代理)。每個服務需安裝代理,通過代理發起連接。必須配置每個客戶端以便找到代理。
??? 提前確認的環境可以工作的很好,但是添加額外的服務需要ISP重大干預。
?代理防火墻的兩種形式?? 1. HTTP proxy firewall
?? Web代理,用于HTTP和HTTPS協議。內容過濾器&隧道代理服務器.對內是server,對外是client。也提供Web cache功能。
?SOCKS firewall??? 防火墻安全會話轉換協議 (SOCKS: Protocol for sessions traversal across firewall securely) SOCKS 協議提供一個框架,為在 TCP 和 UDP 域中的客戶機/服務器應用程序能更方便安全地使用網絡防火墻所提供的服務。
?? 協議工作在OSI參考模型的第5層(會話層),使用UDP協議傳輸數據,因而不提供如傳遞 ICMP 信息之類的網絡層網關服務。
?? 用于Web之外的其他服務。版本4和5.版本5增加了強大的認證,UDP傳輸和IPv6尋址。
?? Socks代理比其他應用層代理要快得多。它通常綁定在代理服務器的1080端口上。如果您在企業網或校園網上,需要透過防火墻或通過代理服務器訪問Internet就可能需要使用 SOCKS。
?? 注意,瀏覽網頁時常用的代理服務器通常是專門的http代理,它和SOCKS是不同的。因此,您能瀏覽網頁不等于您一定可以通過SOCKS訪問Internet。常用的防火墻,或代理軟件都支持SOCKS,但需要其管理員打開這一功能。
?? 使用場景:電子郵件、新聞組軟件、網絡聊天MIRC和使用代理服務器上聯眾打游戲等等各種游戲應用軟件當中。
?
四、傳統的NAT?
1、公有地址與私有地址
?私有地址:??? 組建內部局域網使用,無償免費使用【RFC1918】。??? 原則上,私有地址可以采用公有地址;但是當這樣的公有地址也別不聯網另外一個實體使用時,這樣可能出現問題,是因為本地系統會屏蔽使用相同地址的遠端系統(在互聯網上不會被路由,出去要被丟掉。即使出去,數據無法回來)。
? 公有地址: 具有全球唯一性,需要申請收費。 ? A類地址范圍:0.0.0.0到127.255.255.255。 10.0.0.0到10.255.255.255是私有地址
第1字節為網絡地址,其它3個字節為主機地址。另外第1個字節的最高位固定為0
?B類地址范圍:128.0.0.0到191.255.255.255. 172.16.0.0到172.31.255.255是私有地址
第1字節和第2字節為網絡地址,其他2個字節為主機地址。另外1個字節的前2為固定為10
?C類地址范圍:192.0.0.0到223.255.255.255。192.168.0.0到192.168.255.255是私有地址
第1字節、第2字節和第3個字節為網絡地址,第4個個字節為主機地址。另外第1個字節的前三位固定為110/2、/2
2、網絡地址轉換(NAT)?
?NAT(Network 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??? 1對1,私有地址轉換,對特殊設備的訪問。
? 動態NAT??? 從地址池中動態獲取,比如easy_ip,還是1對1。
? 端口復用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地址。
?? 因此:在互聯網上的主機,數據包是來自于具有全局路由IP的NAT路由器,而不是位于NAT內部的私有地址的主機。
? 5、NAT的發展歷程? ?
? DHCP思想(租用地址池) ? 帶地址池的NAT(NAT剛產生的思想) ? NAT??? 私有IP和NAT的公共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工作原理??? 使用傳輸層標識符(即TCP和UDP端口,ICMP查詢標識符)來確定一個特定的數據包到底和NAT內部的哪一臺主機關聯。
??? 這使得大量的內部主機(即使好幾千臺)能夠同時訪問互聯網,而使用公有IP地址的數量確很少,通常只需要一個
??? 通常我們所說的NAT將同時包括NAT和NAPT(除非進行區分)。??????
7、防火墻規則? ? ?
? iptables:命令行工具,位于用戶空間;用此工具操作內核空間的netfilter(安全框架)?? 包含過濾表格(table)和過濾連(chain)。table: filter,nat, mangle,
??? filter三條鏈: INPUT、FORWARD、OUTPUT
??? nat表三條鏈:PREROUTING、OUTPUT、POSTROUTING?
??? mangle表有五條鏈,主要用于任意修改數據包。???
? ? raw表兩條鏈:?PREROUTING、OUTPUT
? ? ?
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的過度開始加速。
??? 但目前來看IPv4和IPv6將共存更長一段時間,甚至可能是無期限的。
????? 雙協議棧?DS-Lite(Dual Stack Lite) 一種希望在內部運行IPv6的服務提供者更容易過渡到IPv6(同時支持傳統的IPv4)的方法。利用隧道和SPNAT
?
感謝hebh
總結
以上是生活随笔為你收集整理的TCP/IP详解 第七章 防火墙和网络地址转换(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Greenplum函数 - 身份证号15
- 下一篇: ChatGPT技术原理解析:从RL之PP