首页 运维 正文
iptables的基础知识-TOS优化提高防火墙性能

 2022-10-23    490  

通过对TOS的优化提高iptables防火墙性能

  为了让Iptables对封包过滤规则更有效率,我们可以通过加载ipt_TOS模块来对各种类型的传输协议来做优化处理,从而来提高整体的性能。IP地址包大家都知道是各种封包的基础,而在IP地址封包的标头(header)的TOS(type-of-service)字段里面,则可以设置处理封包的执行效率。

iptables的基础知识-TOS优化提高防火墙性能

  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-APREROUTING-tmangle-ptcp--dporttelnet-jTOS--set-tosMinimize-Delay 
  •   以下是iptables -j TOS -h 后得到的帮助中的可以使用的数字值

      TOStargetv1.2.1aoptions: 
  •   --set-tosvalueSetTypeofServicefieldtooneofthe
  •   followingnumericordescriptivevalues:
  •   Minimize-Delay16(0x10)
  •   Maximize-Throughput8(0x08)
  •   Maximize-Reliability4(0x04)
  •   Minimize-Cost2(0x02)
  •   Normal-Service0(0x00)
  •   iptables-APREROUTING-tmangle-ptcp--dporttelnet-jTOS--set-tosMinimize-Delay
  •   iptables-APREROUTING-tmangle-ptcp--dportftp-jTOS--set-tosMinimize-Delay
  •   iptables-APREROUTING-tmangle-ptcp--dportftp-data-jTOS--set-tosMaximize-Throughput
  •   iptables-APREROUTING-tmangle-ptcp--dportwww-jTOS--set-tosMinimize-Delay
  •   iptables-APREROUTING-tmangle-ptcp--dportsmtp-jTOS--set-tosMaximize-Throughput
  •   iptables-APREROUTING-tmangle-ptcp--dportdomain-jTOS--set-tosMaximize-Throughput
  •   iptables-APREROUTING-tmangle-pudp--dportdomain-jTOS--set-tosMinimize-Delay
  •   iptables-APREROUTING-tmangle-ptcp--dportpop3-jTOS--set-tosMinimize-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-AOUTPUT-tmangle-ptcp--dporttelnet-jTOS--set-tos0x10 
  •   到这里,你是不是有点奇怪呢?明明在上文中规则都是加在mangle 表中的PREROUTING 链,到这里怎么变成加在OUTPUT链呢?注意上边的实验环境,的确如此,如果你加在PREROUTING,又按照上边的环境实验的话,得到的结果Type of service仍然是0。原因很简单,回顾一下,包在iptables中的流程(那个流程图非常重要,他是数据包的路标)就明白。因为我们是从linux中telnet到win2000 server,这个包是从本地发出的, 所以首先经过的是mangle中的OUTPUT,而不是PREROUTING了。

      这个时候看下mangle表,iptables -L -t mangel

      结果如下:

      ChainOUTPUT(policyACCEPT) 
  •   Targetportoptsourecedestination
  •   TOStcp--anywhereanywheretcpdpt:telnetTOSsetMinimize-Delay
  •   然后再telnet到win2000上,抓包结果见图2:

      这次IP包中的Type of service的值是不是已经变成了0x10,即十进制16了?iptables的基础知识-TOS优化提高防火墙性能就讲到这里了。

      

    原文链接:https://77isp.com/post/8135.html

    =========================================

    https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。