Linux防火牆系統
Linux系統上的防火牆是由iptables/netfilter組成,其中iptables是規則的制定工具,netfilter在核心協議框架中定義了5個卡點位置,並在這5個位置通過鉤子函式對進出的資料包進行過濾,從而達到防火牆的功能,iptables工具工作在使用者空間,它可以制定一些規則然後送達到核心空間,然後結合netfilter的鉤子函式及處理方法對資料包進行放行或者拒絕處理。防火牆裡面有許多個table,每個表格裡面都定義許多的規則,並且每個表格的用途不同,iptables按用途和功能對其分類成四個表,這四個表又由五個鏈組成,這五個鏈對應上面五個鉤子函式。
防火牆的四個表分別為:filter,nat,mangle,raw;預設表是filter,表的處理優先順序依次為:raw,mangle,nat,filter。每個表的處理功能分別為
##filter:一般的過濾功能;
##nat:用於nat功能(地址轉換、隱射,埠隱射);
##mangle:用於對特定資料包的修改,(較少使用);
##raw:一般是為了不在讓iptables做資料包的連結跟蹤處理,從而提高效能;
四個表下的五個鏈分別為:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
##INPUT:通過路由表判斷後目的地是本機,然後進入本機內部資源
##OUTPUT:由本機產生的資料向外部轉發
##FORWARD:通過路由表判斷後目的地不是本機,然後通過路由轉發到其他地方
##PREROUTING:流入的資料包進入路由表之前
##POSTROUTING:傳出的資料包到達網絡卡出口前
iptables的語法格式: iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET
## -t TABLE: 指定表,預設為filter,包括filter,nat,mangle,raw四表
## SUBCOMMAND:對鏈的操作(被引用中的鏈,無法刪除和改名)
-F 清空指定表的指定鏈上所有的規則;省略鏈名時,清空表中的所有鏈
-N 新建一個使用者自定義的鏈;自定義鏈只能作為預設鏈上的跳轉物件,即在預設鏈通過引用來生效自定義鏈
-X 刪除使用者自定義的空鏈;非空自定義鏈和內建鏈無法刪除
-Z 將規則的計數器置為0
-P 設定鏈的預設處理機制;當所有都無法匹配或有匹配有無法做出有效處理機制時,預設策略即生效
-E 重新命名自定義鏈
##iptables 規則管理
-A 在鏈尾追加一條規則
-I 在指定位置插入一條規則
-D 刪除指定規則
-R 替換指定的規則
-L 列出指定鏈上的所有規則
##CRETERIA: 匹配條件
檢查IP首部、檢查TCP、UDP或ICMP首部,也可以基於擴充套件機制,進行額外的檢查,如做連線追蹤;注意,可同時指定多個條件,預設多條件要同時滿足。匹配條件又分通用匹配和擴充套件匹配
##通用匹配
[!] -s,-src,--source IP|Network :檢查報文中的IP地址
-d,--dst--destination :檢查報文中的目標IP地址
-p :檢查報文中的協議,包括tcp,udp,icmp
-i,--in-interface :資料報文的流入介面,通常用於PREROUTING,INPUT,FORWARD鏈上的規則
-o,--out-interface :資料報文的流入介面,通常用於FORWARD,OUTPUT,POSTROUTING鏈上的規則
##擴充套件匹配
隱形擴充套件:如果在通用匹配上使用-p選項指明瞭協議的話,則使用-m選項指明對其協議的擴充套件就變得可有可無
tcp:針對tcp協議
--dport PORT[-PORT]
--sport
--tcp-flags LIST1 LIST2
LIST1 :要檢查的標誌位
LIST2 :在LIST1中出現過的且為1標記位;而餘下的則必須為0;
--syn :用於匹配tcp會話三次握手中的第一次
udp:針對udp協議
--sport
--dport
icmp:針對icmp協議
--icmp-types
8:echo request
0:echo reply
顯式擴充套件:必須指明使用的擴充套件機制
-m 模組名稱 (每個模組會引入新的匹配機制)
multiport擴充套件: 定義多埠匹配,最多指定15個埠
--source-ports,--sport
--destination-ports
--ports
iprange擴充套件:指定連續的IP地址範圍,在匹配非整個網段地址時使用
[!]--src-range IP
[!]--dst-range IP
srting擴充套件:檢查報文中出現的字串,與給定的字串做匹配
--algo
--string"STRING"
--hex-string"HEX_STRING":HEX_STRING為編碼成16進位制格式的字串
time擴充套件:基於時間區間的訪問控制
--datestart
--dattestop
--timestart
--timestop
--weekdays
connlimit擴充套件:基於連線數作限制;對每個IP能夠發起的併發連線數作限制
--connlimit-above
limit擴充套件:基於發包速率作限制
--limit
--limit-burst
state擴充套件:啟用連線追蹤模板記錄連線
NEW:新建立的連線,連線追蹤模板中無相應記錄時,客戶端第一次發出的請求
ESTABLISHED:NEW狀態後,邊距追蹤模板中的記錄刪除之前進行的通訊過程
RELATED:相關聯的連線
INVALIED:無法識別的狀態
##TARGET:採取的動作
-j :跳轉目標
ACCEPT :允許接受
DROP :丟棄
REJECT :拒絕
SNAT:主要用於實現內網客戶端訪問外部主機時使用,要定義在POSTOUTING鏈,也可以在OUTPUT上使用
DNAT:主要用於釋出內部伺服器,讓內網中的伺服器在外網中可以被訪問到,要定義在PREROUTING鏈