iptables的基礎知識-TOS優化提高防火墻性能
通過對TOS的優化提高iptables防火墻性能
為了讓Iptables對封包過濾規則更有效率,我們可以通過加載ipt_TOS模塊來對各種類型的傳輸協議來做優化處理,從而來提高整體的性能。IP地址包大家都知道是各種封包的基礎,而在IP地址封包的標頭(header)的TOS(type-of-service)字段里面,則可以設置處理封包的執行效率。
IP地址封包標頭的TOS字段由8位組成,可以由一個十六進制數來描述,在這8位里,分成兩段,precedence(3個bit位)和TOS(4個bit位),和***一個保留位,該位通常為0。TOS的四個位分別來控制封包的:最小延時,***處理量,***可靠度和最小花費。這四個位只有一位是1。如果用十六進制來描述這四種狀態的話,分別是0x10,0x08,0x04,0x02,如果四個位都是0,則表示正常運行,不做封包的特殊處理。更詳細的信息請參考RFC1340和RFC1349。
不同的傳輸協議在封包的傳輸上由其不同的特性,比如telnet,http類型封包需要最小延遲控制;ftp類型封包需要最小延遲與***處理量控制;snmp類型封包需要***可靠度,而icmp則不需要做任何控制。為了讓封包的傳遞能得到優化,當設置防火墻規則時,可以使用iptables的參數tos來對IP地址封包頭的TOS字段做設置,以得到***的傳輸品質。
iptables中為在-j TOS --set-tos 后面接你想要的優化方式(參照iptables -j TOS -h),而在Ipchains中則是在-t后面接十六進制碼,***個十六進制碼會與IP地址封包頭的TOS字段做AND運算,其處理結果會與參數-t后的第二個十六進制碼再做XOR運算,***處理結果則寫入IP地址封包頭的TOS字段,用來控制封包傳輸優化.因此,如果要控制封包傳輸:最小延時,***處理量,***可靠度和最小花費等。早iptables中的設置可直接用iptables -j TOS -h里面得到的數字值。
比如我要優化telnet的TOS我可以用一下語句來進行。
- iptables -A PREROUTING -t mangle -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
以下是iptables -j TOS -h 后得到的幫助中的可以使用的數字值
- TOS target v1.2.1a options:
- --set-tos value Set Type of Service field to one of the
- following numeric or descriptive values:
- Minimize-Delay 16 (0x10)
- Maximize-Throughput 8 (0x08)
- Maximize-Reliability 4 (0x04)
- Minimize-Cost 2 (0x02)
- Normal-Service 0 (0x00)
- iptables -A PREROUTING -t mangle -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
- iptables -A PREROUTING -t mangle -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
- iptables -A PREROUTING -t mangle -p tcp --dport ftp-data -j TOS --set-tos Maximize-Throughput
- iptables -A PREROUTING -t mangle -p tcp --dport www -j TOS --set-tos Minimize-Delay
- iptables -A PREROUTING -t mangle -p tcp --dport smtp -j TOS --set-tos Maximize-Throughput
- iptables -A PREROUTING -t mangle -p tcp --dport domain -j TOS --set-tos Maximize-Throughput
- iptables -A PREROUTING -t mangle -p udp --dport domain -j TOS --set-tos Minimize-Delay
- iptables -A PREROUTING -t mangle -p tcp --dport pop3 -j TOS --set-tos Minimize-Cost
接下來讓我們來驗證一下!
首先我在LINUX中telnet一個win2000服務器,這個win2000的服務器上安裝了telnet服務,先在telnet服務管理器中,啟動telnet服務。其中LINUX的IP是192.168.55.55,win2000 Server的IP是192.168.10.7。
首先對mangle表不做任何設置,采用系統默認值,也就是說對TOS不做任何改變,得到的結果如圖1:
可以看出,Type of service的值為0,因為mangle中默認是不做改變的。
接下來我們要在LINUX的 mangle表中加點東西:
首先我們要裝TOS模塊,執行modprobe ipt_tos就行了,然后執行
- iptables -A OUTPUT -t mangle -p tcp --dport telnet -j TOS --set-tos 0x10
到這里,你是不是有點奇怪呢?明明在上文中規則都是加在mangle 表中的PREROUTING 鏈,到這里怎么變成加在OUTPUT鏈呢?注意上邊的實驗環境,的確如此,如果你加在PREROUTING,又按照上邊的環境實驗的話,得到的結果Type of service仍然是0。原因很簡單,回顧一下,包在iptables中的流程(那個流程圖非常重要,他是數據包的路標)就明白。因為我們是從linux中telnet到win2000 server,這個包是從本地發出的, 所以首先經過的是mangle中的OUTPUT,而不是PREROUTING了。
這個時候看下mangle表,iptables -L -t mangel
結果如下:
- Chain OUTPUT(policy ACCEPT)
- Target port opt sourece destination
- TOS tcp -- anywhere anywhere tcp dpt:telnet TOS set Minimize-Delay
然后再telnet到win2000上,抓包結果見圖2:
這次IP包中的Type of service的值是不是已經變成了0x10,即十進制16了?iptables的基礎知識-TOS優化提高防火墻性能就講到這里了。
上一節:iptables規則 下一節:iptables中的limit 的試驗
【編輯推薦】