1. 程式人生 > >iptables 實現防禦CC攻擊

iptables 實現防禦CC攻擊

Shell程式碼

  1. iptable -I INPUT -s 192.168.1.125 -j DROP  
  2. iptable -I INPUT -s 192.168.1.125 -j DROP  

這就遮蔽了192.168.1.125的訪問,不止是禁止了80哦

還有刪除規則的

Shell程式碼

  1. iptables -D INPUT 1  
  2. iptables -D INPUT 1  

netfilter/iptables IP 資訊包過濾系統是一種功能強大的工具,可用於新增、編輯和除去規則,這些規則是在做資訊包過濾決定時,防火牆所遵循和組成的規則。這些規則儲存在專用的資訊包過濾表中,而這些表整合在 Linux 核心中。在資訊包過濾表中,規則被分組放在我們所謂的鏈(chain)中。

雖然 netfilter/iptables IP 資訊包過濾系統被稱為單個實體,但它實際上由兩個元件 netfilter 和 iptables 組成。

netfilter 元件也稱為核心空間(kernelspace),是核心的一部分,由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。

iptables 元件是一種工具,也稱為使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。

iptables包含4個表,5個鏈。其中表是按照對資料包的操作區分的,鏈是按照不同的Hook點來區分的,表和鏈實際上是netfilter的兩個維度。

4個表:filter,nat,mangle,raw,預設表是filter(沒有指定表的時候就是filter表)。表的處理優先順序:raw>mangle>nat>filter。

filter:一般的過濾功能

nat:用於nat功能(埠對映,地址對映等)

mangle:用於對特定資料包的修改

raw:有限級最高,設定raw時一般是為了不再讓iptables做資料包的連結跟蹤處理,提高效能

5個鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

PREROUTING:資料包進入路由表之前

INPUT:通過路由表後目的地為本機

FORWARDING:通過路由表後,目的地不為本機

OUTPUT:由本機產生,向外轉發

POSTROUTIONG:傳送到網絡卡介面之前。如下圖:

iptables中表和鏈的對應關係如下:

內容簡介
防火牆的概述
iptables簡介
iptables基礎
iptables語法
iptables例項
案例詳解

防火牆的簡介
防火牆是指設定在不同網路或網路安全域之間的一系列部件的組合,它能增強機構內部網路的安全性。它通過訪問控制機制,確定哪些內部服務允許外部訪問,以及允許哪些外部請求可以訪問內部服務。它可以根據網路傳輸的型別決定IP包是否可以傳進或傳出內部網。
防火牆通過審查經過的每一個數據包,判斷它是否有相匹配的過濾規則,根據規則的先後順序進行一一比較,直到滿足其中的一條規則為止,然後依據控制機制做出相應的動作。如果都不滿足,則將資料包丟棄,從而保護網路的安全。
防火牆可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火牆偏重攔阻傳輸流的通行,而另一些防火牆則偏重允許傳輸流通過。

通過使用防火牆可以實現以下功能:可以保護易受攻擊的服務;控制內外網之間網路系統的訪問;集中管理內網的安全性,降低管理成本;提高網路的保密性和私有性;記錄網路的使用狀態,為安全規劃和網路維護提供依據。(圖1)

圖片1

防火牆的分類
防火牆技術根據防範的方式和側重點的不同而分為很多種型別,但總體來講可分為包過濾防火牆和代理伺服器兩種型別。

防火牆的工作原理
1.包過濾防火牆工作原理(圖2)
圖片2

2.代理服務型防火牆工作原理
代理服務型防火牆是在應用層上實現防火牆功能的。它能提供部分與傳輸有關的狀態,能完全提供與應用相關的狀態和部分傳輸的資訊,它還能處理和管理資訊。

iptables簡介
netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

iptables基礎
規則(rules)其實就是網路管理員預定義的條件,規則一般的定義為“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。規則儲存在核心空間的資訊包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務型別(如HTTP、FTP和SMTP)等。當資料包與規則匹配時,iptables就根據規則所定義的方法來處理這些資料包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是新增、修改和刪除這些規則。
鏈(chains)是資料包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該資料包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該資料包;否則iptables將繼續檢查下一條規則,如果該資料包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的預設策略來處理資料包。
表(tables)提供特定的功能,iptables內建了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網路地址轉換、包重構(修改)和資料跟蹤處理。

Iptables表、鏈、規則(圖3)
圖片3

iptables傳輸資料包的過程
① 當一個數據包進入網絡卡時,它首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去。
② 如果資料包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。資料包到了INPUT鏈後,任何程序都會收到它。本機上執行的程式可以傳送資料包,這些資料包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
③ 如果資料包是要轉發出去的,且核心允許轉發,資料包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。(圖4)
圖片4

iptables命令格式

iptables的命令格式較為複雜,一般的格式如下:
iptables [-t table] 命令 [chain] [rules] [-j target]
table——指定表明
命令——對鏈的操作命令
chain——鏈名
rules——規則
target——動作如何進行
1.表選項
表選項用於指定命令應用於哪個iptables內建表,iptables內建包括filter表、nat表、mangle表和raw表。
2.命令選項iptables命令格式

命令 說明
-P或–policy <鏈名> 定義預設策略
-L或–list <鏈名> 檢視iptables規則列表
-A或—append <鏈名> 在規則列表的最後增加1條規則
-I或–insert <鏈名> 在指定的位置插入1條規則
-D或–delete <鏈名> 從規則列表中刪除1條規則
-R或–replace <鏈名> 替換規則列表中的某條規則
-F或–flush <鏈名> 刪除表中所有規則
-Z或–zero <鏈名> 將表中資料包計數器和流量計數器歸零

3.匹配選項
匹配 說明
-i或–in-interface <網路介面名> 指定資料包從哪個網路介面進入,如ppp0、eth0和eth1等
-o或–out-interface <網路介面名> 指定資料包從哪塊網路介面輸出,如ppp0、eth0和eth1等
-p或—proto協議型別 < 協議型別> 指定資料包匹配的協議,如TCP、UDP和ICMP等
-s或–source <源地址或子網> 指定資料包匹配的源地址
–sport <源埠號> 指定資料包匹配的源埠號,可以使用“起始埠號:結束埠號”的格式指定一個範圍的埠
-d或–destination <目標地址或子網> 指定資料包匹配的目標地址
–dport目標埠號 指定資料包匹配的目標埠號,可以使用“起始埠號:結束埠號”的格式指定一個範圍的埠

4.動作選項
動作 說明
ACCEPT 接受資料包
DROP 丟棄資料包
REDIRECT 與DROP基本一樣,區別在於它除了阻塞包之外, 還向傳送者返回錯誤資訊。
SNAT 源地址轉換,即改變資料包的源地址
DNAT 目標地址轉換,即改變資料包的目的地址
MASQUERADE IP偽裝,即是常說的NAT技術,MASQUERADE只能用於ADSL等撥號上網的IP偽裝,也就是主機的IP是由ISP分配動態的;如果主機的IP地址是靜態固定的,就要使用SNAT
LOG 日誌功能,將符合規則的資料包的相關資訊記錄在日誌中,以便管理員的分析和排錯

iptables命令格式(圖5)
圖片5

iptables過濾條件(圖6)
圖片6

iptables的語法

1.定義預設策略
當資料包不符合鏈中任一條規則時,iptables將根據該鏈預先定義的預設策略來處理資料包,預設策略的定義格式如下。
iptables [-t表名] <-P> <鏈名> <動作> ?引數說明如下。
[-t表名]:指預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
<-P>:定義預設策略。
<鏈名>:指預設策略將應用於哪個鏈,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
<動作>:處理資料包的動作,可以使用ACCEPT(接受資料包)和DROP(丟棄資料包)。

2.檢視iptables規則
檢視iptables規則的命令格式為:
iptables [-t表名] <-L> [鏈名]
引數說明如下。
[-t表名]:指檢視哪個表的規則列表,表名用可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設檢視filter表的規則列表。
<-L>:檢視指定表和指定鏈的規則列表。
[鏈名]:指檢視指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪個鏈,則將檢視某個表中所有鏈的規則列表。

3.增加、插入、刪除和替換規則
相關規則定義的格式為:
iptables [-t表名] <-A | I | D | R> 鏈名 [規則編號] [-i | o 網絡卡名稱] [-p 協議型別] [-s 源IP地址 | 源子網] [--sport 源埠號] [-d目標IP地址 | 目標子網] [--dport目標埠號] <-j動作>
引數說明如下。
[-t表名]:定義預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
-A:新增加一條規則,該規則將會增加到規則列表的最後一行,該引數不能使用規則編號。
-I:插入一條規則,原本該位置上的規則將會往後順序移動,如果沒有指定規則編號,則在第一條規則前插入。
-D:從規則列表中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號。
<鏈名>:指定檢視指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[規則編號]:規則編號用於插入、刪除和替換規則時用,編號是按照規則列表的順序排列,規則列表中第一條規則的編號為1。
[-i | o 網絡卡名稱]:i是指定資料包從哪塊網絡卡進入,o是指定資料包從哪塊網絡卡輸出。網絡卡名稱可以使用ppp0、eth0和eth1等。
[-p 協議型別]:可以指定規則應用的協議,包含TCP、UDP和ICMP等。
[-s 源IP地址 | 源子網]:源主機的IP地址或子網地址。
[--sport 源埠號]:資料包的IP的源埠號。
[-d目標IP地址 | 目標子網]:目標主機的IP地址或子網地址。
[--dport目標埠號]:資料包的IP的目標埠號。
<-j動作>:處理資料包的動作,各個動作的詳細說明可以參考前面的說明。

4.清除規則和計數器
在新建規則時,往往需要清除原有的、舊的規則,以免它們影 ?響新設定的規則。如果規則比較多,一條條刪除就會十分麻煩, ?這時可以使用iptables提供的清除規則引數達到快速刪除所有的規 ?則的目的。
定義引數的格式為:
iptables [-t表名] <-F | Z>
引數說明如下。
[-t表名]:指定預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
-F:刪除指定表中所有規則。
-Z:將指定表中的資料包計數器和流量計數器歸零。

NAT的定義
NAT英文全稱是Network Address Translation,稱是網路地址轉換,它是一個IETF標準,允許一個機構以一個地址出現在Internet上。NAT將每個區域網節點的地址轉換成一個IP地址,反之亦然。它也可以應用到防火牆技術裡,把個別IP地址隱藏起來不被外界發現,使外界無法直接訪問內部網路裝置,同時,它還幫助網路可以超越地址的限制,合理地安排網路中的公有Internet 地址和私有IP地址的使用。

NAT的型別

靜態NAT(Static NAT)
靜態NAT設定起來最為簡單和最容易實現的一種,內部網路中的每個主機都被永久對映成外部網路中的某個合法的地址。

動態地址NAT(Pooled NAT)
動態地址NAT是在外部網路中定義了一系列的合法地址,採用動態分配的方法對映到內部網路。
動態地址NAT只是轉換IP地址,它為每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠端聯接也可以採用動態NAT。

網路地址埠轉換NAPT(Port-Level NAT)
NAPT是把內部地址對映到外部網路的一個IP地址的不同埠上。
最熟悉的一種轉換方式。NAPT普遍應用於接入裝置中,它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的TCP埠號。

iptables例項

禁止客戶機訪問不健康網站
【例1】新增iptables規則禁止使用者訪問域名為www.sexy.com的網站。
iptables -I FORWARD -d www.sexy.com -j DROP
【例2】新增iptables規則禁止使用者訪問IP地址為20.20.20.20的網站。
iptables -I FORWARD -d 20.20.20.20 -j DROP

禁止某些客戶機上網
【例1】新增iptables規則禁止IP地址為192.168.1.X的客戶機上網。
iptables -I FORWARD -s 192.168.1.X -j DROP
【例2】新增iptables規則禁止192.168.1.0子網裡所有的客戶機上網。
iptables -I FORWARD -s 192.168.1.0/24 -j DROP

禁止客戶機訪問某些服務
【例1】禁止192.168.1.0子網裡所有的客戶機使用FTP協議下載。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 21 -j DROP
【例2】禁止192.168.1.0子網裡所有的客戶機使用Telnet協議連線遠端計算機。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 23 -j DROP

強制訪問指定的站點
【例】強制所有的客戶機訪問192.168.1.x這臺Web伺服器。
iptables -t nat -I PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.1.x:80

禁止使用ICMP協議
【例】禁止Internet上的計算機通過ICMP協議ping到NAT伺服器的ppp0介面,但允許內網的客戶機通過ICMP協議ping的計算機。
iptables -I INPUT -i ppp0 -p icmp -j DROP

釋出內部網路伺服器
【例1】釋出內網10.0.0.3主機的Web服務,Internet使用者通過訪問防火牆的IP地址即可訪問該主機的Web服務。
iptables -t nat -I PREROUTING -p tcp –dport 80 -j DNAT –to-destination 10.0.0.3:80
【例2】釋出內網10.0.0.3主機的終端服務(使用的是TCP協議的3389埠),Internet使用者通過訪問防火牆的IP地址訪問該機的終端服務。
iptables -t nat -I PREROUTING -p tcp –dport 3389 -j DNAT –to-destination 10.0.0.3:3389

案例詳解
【案例1】做為客戶端/終端的基本配置 ?DNS PING LO
【案例2】做為服務端的基本配置:SSH DNS WWW FTP EMAIL (圖7)
圖片7
【案例3】做為閘道器的基本配置:SSH DNS WWW FTP EMAIL NAT )SNAT DNAT)限速 (圖8)
圖片8
【案例4】狀態檢測(圖9)
圖片9