文章目錄
- 防火墻
- 基于實現方式,防火墻的發展分為四個階段:
- Linux 環境中主要的防火墻形式
- TCP wrappers~~詳解~~ 粗解
- Tcp wrappers的認識
- 它的基本過程是這樣的:
- iptable
- 攻擊和防御
- DDOS 攻擊
- 常見的可能受到 DDOS 攻擊體現的癥狀有:
- 而常見的 DDOS 攻擊有以下幾種
- SYN 攻擊
- SYN flood(SYN 洪水攻擊)
防火墻
防火墻指的是一個由 軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障。
基于實現方式,防火墻的發展分為四個階段:
- 第一代防火墻:基于路由器的防火墻,由于多數路由器中本身就包含有分組過濾功能,故網絡訪問控制可通過路由控制來實現,從而使具有分組過濾功能的路由器成為第一代防火墻產品。
- 第二代防火墻:用戶化的防火墻,將過濾功能從路由器中獨立出來,并加上審計和告警功能。針對用戶需求,提供模塊化的軟件包,是純軟件產品。
- 第三代防火墻:建立在通用操作系統上的防火墻,近年來在市場上廣泛使用的就是這一代產品。包括分組過濾和代理功能。第三代防火墻有以純軟件實現的,也有以硬件方式實現的。
- 第四代防火墻:具有安全操作系統的防火墻:具有安全操作系統的防火墻本身就是一個操作系統,因而在安全性上得到提高
Linux 環境中主要的防火墻形式
- Netfilter 的數據包過濾機制
- Netfilter 這個機制主要就是分析進入主機的數據包,也就是將包的報頭信息提取出來進行分析,以決定該鏈接是應該放行或阻擋下來。
由于這種方式可以直接分析數據報頭的信息,而報頭的信息主要就是 OSI 參考模型中的數據鏈路層,網絡層,以及傳輸層的信息,如 MAC 地址, IP 地址 , TCP, UDP, ICMP 等的信息都可以進行分析過濾,并且 Netfilter 提供了 iptables 來作為防火墻封包過濾的指令。十分強大
- Netfilter 這個機制主要就是分析進入主機的數據包,也就是將包的報頭信息提取出來進行分析,以決定該鏈接是應該放行或阻擋下來。
- TCP Wrappers 的程序管理
- TCP Wrappers 主要是分析TCP的報頭信息,并與/etc/hosts.allow和/etc/hosts.deny中的規則進行匹配,從而決定哪些主機可以訪問系統服務或資源。他的功能并沒有 Netfilter 那么強大,但是他的配置相對于 Netfilter 的 iptables 要簡單許多。
- Proxy 的代理服務器
- 其實代理服務器這樣的防火墻相對于 Netfilter 是更安全一些,若是外面的人給小姐的物品是有毒的(外面發送有害的數據,或者想獲取 server 信息),那也是丫鬟先中毒,小姐很安全呀(代理服務器中招,內網還是安全的)。
但是這是因為所有的鏈接,所有的數據包都中轉過一層,多了一個環境,就需要多消耗一些時間,效率便降低了,高帶寬也會到達瓶頸,并且因為通過代理服務器的轉發那么便需要修改表頭中的信息,地址轉換,這樣的話對 VPN 的使用也會增加一定的難度。所以相對來說 Netfilter 比 代理服務器式的防火墻應用的更加的廣泛
而為什么上文說相較而言,proxy 形式比 Netfilter 要安全些,是因為數據包式的防火墻主要是在網絡的七層模型中處理這樣的事情:
-
拒絕讓外部網絡的數據包進入主機的部分敏感的端口:比如我的 FTP 只是供給公司內部人員使用的,外面的人不能從中獲取消息,那么添加規則讓所有想訪問該端口的請求數據包全部丟棄。
-
拒絕某些 IP 來源的數據包進入主機:就如我知道有一個 IP 地址屬于某個黑客的常用 IP,這個 IP 的請求一定是來攻擊我或者對我不利的,便可添加規則將只要是由這個 IP 地址發來的請求數據包全部丟棄
-
拒絕帶有某些特殊標簽(flag)的數據包進入:最常見的便是帶有 SYN 的主動連接標簽了,便可添加規則只有一發現這個標簽,就把這個帶有該標簽的數據包丟掉
-
拒絕某些 MAC 地址的鏈接與數據包:如果內網中有人中病毒,或者他是有意搗亂網絡的,封 IP 地址他可以更換,那么我們就直接封掉其 MAC 地址,這樣即使更換 IP 地址也沒有用。
這樣的處理雖然可以阻擋大部分不利的數據,或者說攻擊,但是還有許多的問題是無法防范的: -
防火墻不能有效的阻擋病毒或者木馬程序:
- 比如內網中的 DMZ 區域有一臺 web 服務器,有 web 服務供給外網訪問勢必我們就需要將80端口開放出去,讓外部網絡能夠請求,否則外部網絡得不到數據,該服務器的功能根本無法起作用,而80端口的開放是的外部網絡的數據包可以進入主機中,若是web服務有漏洞,數據包中有病毒利用該漏洞做一些事情。
-
防火墻主要是針對外網的攻擊添加規則,所以對于內網的攻擊并無太強的招架之力。
TCP wrappers詳解 粗解
TCP wrappers 是 Linux 中兩大防護措施的其中之一,這層保護通過定義哪些主機允許或不允許連接到網絡服務上來實現。
Tcp wrappers的認識
它被設計為一個介于外來服務請求和服務回應的中間處理
它的基本過程是這樣的:
當服務器或主機接收到一個外來服務請求的時候,
先由TCP Wrapper 來對請求進行分析處理,TCP Wrapper 會根據請求所需要的服務和對這個服務所設定的規則來判斷請求方是否有權限,
如果有,TCP Wrapper 會把這個請求按照配置文件所設定的規則轉交給相應的守護進程去處理,同時記錄這個請求動作。
TCP Wrappers雖然能對 TCP 協議的報文做過濾動作,
但是并不是所有的 TCP 協議報文 TCP Wrappers 都可以過濾掉。
只有該服務鏈接到TCP Wrappers的函式庫才可以使用TCP Wrappers進行報文過濾。
因為 TCP Wrapper 的功能主要來自于 libwrap.a這個靜態庫,它是一個服務庫。
像 xinetd、sshd 和 portmap 等許多服務編譯時都依賴于 libwrap.so 這個動態鏈接庫,其他的網路服務甚至你自己編寫的服務都可以加上這個編譯選項來提供 TCP Wrapper 的功能。
iptable
這個是Linux內核到了2.4才有的,很復雜,另開一篇文章研究吧
攻擊和防御
DDOS 攻擊
在計算中,拒絕服務( DOS,denial-of-service )攻擊是試圖消耗一臺機器或網絡的資源,例如去暫時或無限期中斷甚至去暫停服務的主機連接到互聯網,使其無法給予真正需求的用戶。拒絕服務通常是通過 flood 攻擊有針對性的嘗試對目標機器或資源的多余請求,以使得系統過載,并防止一些或所有合法的請求。因為早期的服務器的性能和網絡剛發展,性能并不高,所以由一臺主機去不斷地請求服務,就可以導致服務器應付不過來
后來硬件與網絡飛速的發展,一臺主機發動再多的請求,服務器也能夠從容地應對,既然一臺不夠,那就成千上萬臺的來,所以有了分布式拒絕服務(DDoS,distributed denial-of-service)。
一個分布式拒絕服務(DDoS,distributed denial-of-service)攻擊源往往不止一個,又往往成千上萬個,并且都是真實唯一的IP地址。
它類似于一群人擁擠的堵在一家商店里面,就連門口都是人,而且這些人什么也不干,不買東西,無所事事,而真正需要買東西的人卻堵在門口,進不去,這樣便擾亂了商店或者企業的正常的運作。DDoS攻擊的規模仍在不斷增長
常見的可能受到 DDOS 攻擊體現的癥狀有:
- 網絡堵塞,打開網站的速度異常的緩慢,或者平時都能打開,卻打不開了
- 服務器的 CPU 長期處于滿負荷
- 服務器的頻繁死機,重啟
而常見的 DDOS 攻擊有以下幾種
- Ping flood :發送ping包的攻擊者壓倒性的數量給受害者
- Ping of Death:攻擊者發送修改后的 ping 數據包,如添加分包使前后的邏輯不正確,或者加長數據包使其超過 IP 報文的限制
- Teardrop attacks:向目標機器發送損壞的IP包,諸如重疊的包或過大的包載荷。
- UDP flood:利用大量UDP小包沖擊服務器
- SYN flood:利用 TCP 的連接過程,來消耗系統資源。
- CC(challenge Collapsar):通過構造有針對性的、對最為消耗服務器端資源的業務請求,讓服務器“勞累過度”而停止服務等等
SYN 攻擊
據統計,在所有黑客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。在2000年時 YAHOO 的網站遭受的攻擊,就是黑客利用的就是簡單而有效的 SYN 攻擊,而 SYN 攻擊依靠的就是 TCP 三次握手
TCP( Transmission Control Protocol 傳輸控制協議)是一個 Internet 協議套件的核心協議。它起源于最初的網絡實現,它補充了互聯網協議(IP,網絡層的 IP 協議,IPv4、IPv6)。因此,整個套件通常被稱為 TCP/IP。TCP 提供可靠的,有序的,和錯誤檢查流在 IP 網絡上的主機通信的運行的應用程序之間傳遞數據。
TCP是面向連接的,可靠的進程通信的協議,提供全雙工服務,即數據可在同一時間雙向傳輸,也正是因為 TCP 的可靠連接,所以廣泛應用在大多數的應用層協議,而 TCP 在建立一個連接,需要客戶端與服務器端發送3個數據包,這個過程叫 Three-way Handshake(三次握手)。
在這之前,服務器必須先綁定到一個端口并監聽一個端口,以打開它的連接:這被稱為被動打開。一旦被動打開,客戶端可以啟動一個主動打開,建立連接
1.由客戶端使用一個隨機的端口號,向服務器端特定的端口號發送 SYN 建立連接的請求,并將 TCP 的SYN 控制位置為1。SYN(synchronous)是TCP/IP建立連接時使用的握手信號,客戶端將該段的序列號設置為一個隨機值。
2.服務器端收到了客戶端的請求,會向客戶端發送一個確認的信息,表示已收到請求,這是的數據包里會將 ACK 設置為客戶端請求序列號+1,同時服務器端還會向客戶端發送一個 SYN 建立連接的請求,SYN 的序列號為另外一個隨機的值
3.客戶端在收到了服務器端的確認型號以及請求信號之后,也會向服務器端發送一個確認信號,確認信號的序列號為服務器端發送來的請求序列號+1。在這一點上,客戶端和服務器都已收到了連接的確認。步驟1,2建立一個方向的連接參數(序列號),它是公認的。步驟2、3建立了另一個方向的連接參數(序列號),并被確認。有了這些,便建立了一個全雙工通信。
SYN flood(SYN 洪水攻擊)
這樣是一次完整的 TCP 連接過程,而若是我的客戶端發送了 SYN 的請求連接的信號,然后服務器從關閉變成監聽狀態,然后響應了我的請求,發送來了確認信息以及他的請求信號,并將該信息加入未連接的隊列中,變成SYN_RCVD的狀態若是客戶端若是不處理,不給予響應,那么服務器便會一直的等待,只有等待超過了一定的時間,才會將此信息從隊列中移除,而當有很多這樣的事情發生時是非常耗費資源的。這是整個服務器建立連接時 TCP 狀態的變化過程: