一、引言
1、Internet和協議發展初期,僅用於大學和科研機構。處於沒人攻擊狀態。
2、20世紀80、90年代,成功的攻擊成了家常便飯。爲了解決這個問題,引入了防火牆。
二、包過濾防火牆
1. 包過濾防火牆
配置爲丟失或者轉發數據包頭中符合(或不符合)特定標準的數據包,這些標準稱爲過濾器。
1.簡單的過濾包括網絡層或者傳輸層報頭中各個部分的範圍比較。
2.最流行的過濾器包含IP地址(選項),ICMP報文類型。
3.端口號確定的各種UDP或者TCP服務。
較新的防火牆能利用封包的多樣屬性來進行過濾,例如:來源 IP地址、來源端口號、目的 IP 地址或端口號、服務類型(如 HTTP 或是 FTP)。也能經由通信協議、TTL 值、來源的網域名稱或網段...等屬性來進行過濾
單獨處理每一個數據報,極易被混淆
關聯已經或者即將到達的數據包來推斷流或者數據報的信息。IP分片(第10章),使得防火牆的工作變得更加複雜。
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: 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、公有地址與私有地址
原則上,私有地址可以採用公有地址;但是當這樣的公有地址也別不聯網另外一個實體使用時,這樣可能出現問題,是因爲本地系統會屏蔽使用相同地址的遠端系統(在互聯網上不會被路由,出去要被丟掉。即使出去,數據無法回來)。
範圍:0.0.0.0到127.255.255.255。 10.0.0.0到10.255.255.255是私有地址
第1字節爲網絡地址,其它3個字節爲主機地址。另外第1個字節的最高位固定爲0
範圍:128.0.0.0到191.255.255.255. 172.16.0.0到172.31.255.255是私有地址
第1字節和第2字節爲網絡地址,其他2個字節爲主機地址。另外1個字節的前2爲固定爲10
範圍: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)
允許在互聯網的不同地方使用相同的IP地址集體。主要動機是正在急劇減少的有限的IP地址空間。解決兩個問題:IP地址枯竭和關於路由可擴展性的擔憂(CIDR的發展)。
NAT推出之初僅作爲臨時措施,但NAT是受歡迎的,因爲減少了對全局路由的互聯網地址需求,同時提供了一些防火牆功能,並且僅僅需要很少的配置。
注意:NAT工作在網絡層,但是要結合傳輸層來共同實現。
3、NAT的分類和功能
1對1,私有地址轉換,對特殊設備的訪問。
從地址池中動態獲取,比如easy_ip,還是1對1。
1對多。比如思科NAT服務器,一個公有IP可以映射4000個用戶使用。公有IP使用率高。
節約IP地址,使用地址轉換。僅僅是一個過濾,IPv6不用這個技術。
1)解決IP地址不足問題,1對多,還可以保護內部網絡。
2)安全防護功能
3)負責均衡
3)不能處理加密的IP報頭 4) 無法實現對IP端到端的跟蹤。
4、NAT工作原理
重寫通過路由器的數據包的識別信息。
1. 重寫往一個方向傳輸的數據包的源IP地址。
2. 重寫往另外一個方向傳輸的數據包的目的IP地址。
因此:在互聯網上的主機,數據包是來自於具有全局路由IP的NAT路由器,而不是位於NAT內部的私有地址的主機。
5、NAT的發展歷程
私有IP和NAT的公共IP之間的轉換,那麼,私有網中同時與公共網進行通信的主機數量就受到NAT的公共IP地址數量的限制。取決於ISP提供的地址池或公有地址範圍,這種NAT不是最流行的,因爲他無助於減少需要使用的IP地址數量。
爲了克服這種限制,NAT被進一步擴展到在進行IP地址轉換的同時進行Port的轉換,這就是網絡地址端口轉換NAPT(Network Address Port Translation)技術。
Easy IP 方式的實現原理與地址池NAPT 轉換原理類似,可以算是NAPT的一種特例,不同的是Easy IP 方式可以實現自動根據路由器上WAN 接口的公網IP 地址實現與私網IP 地址之間的映射(無需創建公網地址池)。所以在配置上相對簡單。
6、NAPT
使用傳輸層標識符(即TCP和UDP端口,ICMP查詢標識符)來確定一個特定的數據包到底和NAT內部的哪一臺主機關聯。
這使得大量的內部主機(即使好幾千臺)能夠同時訪問互聯網,而使用公有IP地址的數量確很少,通常只需要一個
通常我們所說的NAT將同時包括NAT和NAPT(除非進行區分)。
7、防火牆規則
包含過濾表格(table)和過濾連(chain)。table: filter,nat, mangle,
filter三條鏈: INPUT、FORWARD、OUTPUT
nat表三條鏈:PREROUTING、OUTPUT、POSTROUTING
mangle表有五條鏈,主要用於任意修改數據包。
raw表兩條鏈: PREROUTING、OUTPUT
8、Iptables->table
我們把相同功能的規則的集合叫做“表”,所以說,不同功能的規則,放在不同的表中管理。每種表的作用(重要):
負責過濾功能,防火牆;內核模塊:iptables_filter
網絡地址轉換功能;內核模塊:iptabel_nat
拆解報文,做出修改,並重新封裝。
關閉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相關的攻擊
隱藏攻擊者的實際地址,從NAT來看是”正常”的
最簡單的設置僞裝的配置:
ipchains –P FORWARD MASQUERADE
六、IPv4/IPv6共存和過渡中的NAT
2011年最後一個頂層單播IPv4被分配出去,IPv6的過度開始加速。
但目前來看IPv4和IPv6將共存更長一段時間,甚至可能是無期限的。
DS-Lite(Dual Stack Lite) 一種希望在內部運行IPv6的服務提供者更容易過渡到IPv6(同時支持傳統的IPv4)的方法。利用隧道和SPNAT
感謝hebh