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鏈