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