防火牆即是工作在網絡或者主機邊緣,並且對進出的數據包根據一定的規則進行過濾且作出處理的套件組合。
iptables正是寫這些規則的工具,這些規則本身即是匹配條件和處理辦法。
包過濾性防火牆:工作在二三四層協議,對頭部的過濾。效率高、可靠性低。
網關性防火牆:工作在應用層(對特定的應用層協議作檢查)對數據本身直接過濾。效率低、可靠性高。
硬件防火牆:netscreen checkpoint但是商業版的很貴,所以~~~~~
包顧慮防火牆又分爲:簡單包過濾
帶狀態檢測的包過濾(即連接狀態)
IP頭部報文格式圖:
TCP頭部報文格式:
端口號的範圍就是0-65535,其中1-1023個端口號,在linux主機中,只有管理員才能使用。這些就是特權啊端口號,所有啓動一些服務的時候就必須是由管理員來啓動了。UDP是一種無連接的協議,而TCP是有鏈接的協議。所以TCP是可靠的協議。
TCP:有連接,數據輸出之前要先建立一個專用的通信信道,基於它的協議有HTTP,FTP,SSH
UDP: 無連接,數據傳輸前不建立專用的通信信道,額外開銷少,可靠性低。基於UDP的協議:DNS QQ,
Reserved表示保留位.
TCP的六個標識位,用來標識TCP報文的屬性的。
URG:緊急位。當它的值爲1的時候表示有效,0表示無效。當URG=1的時候,緊急指針(Urgent Point)纔是有效的。
ACK:它就是表示的就是Acknowlegement,表示確認號是否意義,在TCP的三次握手中,第一次是無 意義的所以,第一次握手ACK的值必須是0.
PSH:推送
RST: 重置位,有風險的位,一般不用,當因爲某種原因連接端口後,我們重新連接的時候不需要重新發送請求報文。只需要將連接重新確認,並且進行數據傳輸就可以了。
SYN: 同步位,在三次握手的前兩次握手SYN必須是1,第一次握手ACK=0。第二次握手ACK=1,以後就對SYN沒有要求了。
FYN: 結束位,當請求斷開連接的時候,FYN=1
防火牆即是工作在網絡或者主機邊緣,並且對進出的數據包根據一定的規則進行過濾且作出處理的套件組合。
iptables正是寫這些規則的工具,這些規則本身即是匹配條件和處理辦法。
匹配條件即是:幀首部、IP首部、TCP首部、應用層首部。
在Linux內核當中有內置的軟件防火牆過濾框架即netfilter。
netfilter:爲我們提供了過濾平臺,它工作在內核當中,是由五個鉤子函數組成,iptables定義的規則放到這五個地方當中就會生效。這五個地方對iptables來說認爲是規則鏈PREROUTING INPUT OUTPUT FORWARD POSTROUING.每條鏈對應一個鉤子函數,規則定義後會送給對應的鉤子函數,從而生效。另外Netfilter是由很多的檢查模塊組成,有核心模塊,有擴展模塊,這寫模塊用於netfilter擴展能夠指定什麼樣子的匹配條件。
當被條件匹配到後,就要有對應的處理動作如下:
TARGE DORP REJECT REDIRECT ACCEPTE MASQUERADE DNAT SNAT RETURN LOG
防火牆的功能:filter nat mangle raw
不同的功能不能混雜使用.他們會互相影響。
流向:
到本機:PERROUTING--->INPUT
轉發: PERROUTING--->FORWARD--->POSTROUTING
由本機發出:PERROUTING--->PERROUTING--->POSTROUTING
raw: PREROUTING OUTPUT
mangel: PREROUTING PERROUTING INPUT FORWARD OUTPUT
nat: PERROUTING OUTPUT POSTROUTING
filter: OUTPUT INPUT FORWARD
我們可以自定義鏈,但是我們的鏈不能生效,因爲他們沒有對應的鉤子函數,要想生效必須關聯到我們的五個鏈當中的某個鏈上。即可以被我們的默認鏈調用。實現方式及時可以在我們的主鏈上提供調用自定鏈的入口,當匹配某條規則的時候讓其自動給跳轉到我們的自定鏈,當沒有被匹配到的時候在跳轉到主鏈上,接着往下匹配。
/etc/rc.d/init.d/iptables 管理規則的腳本,它的peiz
/etc/sysconfig/iptabes-config 這裏面存放了很多的規則
service iptalbes {status start stop restart save}
命令的使用:
diptables [-t 表名] COMMAND CHAIN [匹配條件] -j ACTION(一般情況下)
表名只用四種:raw mangle nat filter (默認是filter)
COMMAND:對鏈,或者對鏈中的規則進行管理操作
規則操作: -A 添加
-I # 插入第#條
-R # 替換第#條
-D # 刪除第#條規則 -D CRETERIA
對鏈的操作:
-N: 新建一條自定義鏈
-X:刪除自定義的空鏈
-E:重命名一條自定義鏈
-F:清空指定鏈,如果不指定,則清空整個表中的所有的鏈
-P:設定鏈的默認策略
-Z:置零(每條規則,包括默認策略都有兩個計數器,一個是被本規則匹配到的所有數據包的個數,另個是被本規則匹配到的所有數據包的大小之和)
查看:
-L
-v
-vv
--line-numbers顯示規則的行號
-x顯示計數器的精確值
-n不要對端口和地址做名稱反解
擴展匹配(模塊擴展功能):
隱式擴展
-p tcp(-m tcp指定擴展模塊,可以省略)
--sprot PORT[-PORT2] 指定源端口或者端口端
--dprot PORT[-PORT2] 指定目標端口或者端口端
--tcp-flags 指定tcp的標識位
--tcp-flags SYN,ACK,FIN,RST SYN 表示檢查三個位,SYN必須是1的
匹配第一次握手的簡寫:--syn
匹配第二次握手:
--tcp-flags ACK,SYN,FIN,RST ACK,SYN
匹配第三次握手
--tcp-flags ACK,SYN,FIN,RST ACK
-p udp
--sprot
--dprot
-p icmp
--icmp-type 0:echo-reply
8:echo-request
顯式擴展
netfilter擴展模塊引用的擴展,用於卡擴展匹配條件,通常需要額外專用選項來定義
-m state: 用於是實現連接的狀態檢測
--state
NEW,ESTABLISHED
RELATED,指的是和另一個鏈關聯的鏈接
INVALID非法的
-m multiport
--source-ports
--destination-ports
--ports
-m limit 通過令牌桶過濾器實現數據包的流量
--limit #/min
--limit-burst #
-m connlimit
[!] --connlimit-above # 最多的的訪問量
(表示多餘#個才滿足條件,如果對某選向取反的時候,要放到這個選項的前面)
-m iprange
--src-range ip-ip
--dst-range ip-ip
-m -mac
--mac-souce XX:XX:XX:XX(對mak的限定) 只能用在INPUT OUTPUT FORWORD鏈上面
-m string(這個是對字符編碼的匹配)
--algo {bm|kmp}
--string "PATTERN"
-m recent 限制用戶的請求
--name
--set
--rcheck
--update
--remove
--seconds 禁止訪問的時間長度
--hiconut 某行爲達到幾次後,會被禁掉
--rtl
-m time
--datestart
--datestop
--timestop
--weekdays
-m --l7proto 是用來匹配協議的