Linux:網絡防火牆
netfilter:Frame 內核提供的框架
IPtables:數據報文過濾:NAT mangle等規則生成工具數據,過濾放在netfilter中Frame才能生效。
IP Header 32位 版本號4位,報文首部的長度4位(需要乘以4纔是首部長度,首部爲32位),
Type of Service 服務類型,Total Length 報文總長度,Idetification (Fragment ID)段標識
不同設備支持的發送最大數據 進行分片
M F(more Fragment)更多的分片 D F(dont Fragment)不能分片 控制標記
Fragment Offset段偏移 報文的順序 報文的排列順序
Idetification段標識一樣表示要將報文合併在一起,DF是不能分片,報文在互聯網上發送是不能分片,如果分片報錯。
Time-to-live(TTL)生存時間,protocol 協議 ,ICMP(三層半協議)網絡控制協議,header Chercksum首部校驗和(存放首部的校驗碼),
Source IP Address 源IP地址,Destination IP Address 目的地址,Options可變長度可選數據,TCP UDP通過端口號區別是哪個進程,0-1023只能管理員使用。
TCP報文首部 傳輸控制協議 有三次握手 有重傳機子
Source Port Number 源端口號 Destination 目標端口號
sequence Number 序列號(發送方告訴接收方第一個是隨機值後面依次加一) acknowledgement Nunber 確認號 (確認好加一)每一次確認加一 URG緊急指針0無效 1有效 用來說明確認號是否有效
RST 重置 抖動時重置
urgent pointer
windows Size滑動窗口用來接收和發送方的緩衝區大小
TCP Checksum 校驗和
網絡能夠發送的數據格式:文本 二進制
被動打開 listen
請求主動打開 sent
主動發送報文 SYN=1 ack =0第一次 SYN_SENT
服務器回包 SYN=1 ACK =1 SYN_RECV
第二次發包 SYN=1 ACK=2 SYN_established
服務器回包 SYN=1 ACK=3 SYN_established
四次揮手 客戶端狀態 發送 FIN FIN_wait1
服務器端 close_wait ACK TIME_WAIT1
客戶端等待服務器服務器數據發送完成
服務器 FIN 數據發送完成
客戶端不能立即close
2*msl
closing狀態
客戶端 ack 斷開連接 last_ack
服務器立即(closed)斷開
上面爲TCP的狀態轉移
TCP的有限狀態機實現TCP的狀態轉移。
網絡:IP報文首部,TCP協議
防火牆:硬件,軟件
規則:標準
將數據報文按照處理數據,如果數據符合規則,就處理。
FRAMEWORK:
默認規則:
開放(堵非法)
關閉(通認證)
規則:匹配標準
IP:源IP,目標IP
TCP:SPORT,DSPORT SYN=1,FIN=0,RST=0,ACK=0,SYN=1,FIN=0,RST=0,ACK=1
SYN=1,FIN=0,RST=0,ACK=2(establish)
ICMP:ICMP-type 使用報文類型
數據報文過濾:
Linux2.0
ipfw/firewall
Linux2.0
ipchain/firewall
Linux2.4
iptables/netfilter
/proc/sys/net/ipv4/ip_forward是否允許轉發
路由決策:進入本機網卡到tcpip協議棧然後進行決策轉發。
hook:鉤子函數。工作在TCPIP上的三個鉤子。規則就是鉤子。
nat地址轉換:nat會化表
nat轉換使用了5個鉤子。
目標地址轉換:在報文進入時更改目標地址
原地址轉換:在報文離開時更改原地址
hook function:鉤子函數
preouting
input
output
forward
prestrouting
規則:
PREROUTING
INPUT
PORWARD
OUTPUT
POSTROUTING
filter(過濾):表
INPUT
OUTPUT
FORWARD
nat(地址轉換):表
PREROUTING
OUTPUT
POSTROUTING
mangle(拆開、修改、封裝):表
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
raw(原始格式):表
PREROUTING
OUTPUT
iptables:raw :PREROUTING
mangle:PREOUTING
nat :PREOUTING
路由選擇:
1 、本機應用:mangle:INPUT
filter:INPUT
1.1路由選擇
raw:OUTPUT
mangle:OUTPUT
nat:OUTPUT
filter:OUTPUT
2、數據轉發:
mangle:FORROUTING
fliter:FORWARD
出棧數據:
mangle:POSTROUTING
nat:POSTROUTING
500條規則
能否使用自定義規則?
可以使用自定義鏈,但只在被調用才能發揮作用,而且如果沒有自定義鏈中的任何規則匹配,應該還有返回機制:
用可以刪除自定義的空鏈
默認鏈無法刪除
每個規則都有兩個,內置的計數器:
被匹配的報文個數
被匹配的報文大小之和
規則:匹配標準、處理動作
匹配標準:
通用匹配
iptables [-t TABLE] COMMAND CHAIN [num]匹配標準 -j 處理辦法
擴展匹配
-s ,--src 指定原地址
-d,--dst 指定目標地址
-p {tcp|udp|icmp}指定四層協議
-i INTERFACE:指定數據報文流入的接口
可用於定義標準的鏈:PREROUTING,INPUT,FORWARD
-o INTERFACE:指定數據報文流出的接口
可用於標準定義的鏈:OUTPUT,POSTROUTING,FORWARD
-j TARGET跳轉
ACCEPT
DROP 丟棄
REJECT拒絕
隱含擴展:不用特別指明那個模塊進行的擴展時使用-p {tcp|udp|icmp}
顯示擴展:必須指明由那個模塊進行擴展,在ipatles中使用-m選項完成此動作
iptables -t filter -A INPUT -s 192.16.0.0/16 -d 192.16.100.7 -j DROP