iRules的应用.doc_第1页
iRules的应用.doc_第2页
iRules的应用.doc_第3页
iRules的应用.doc_第4页
iRules的应用.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iRuels的使用(翻译自BIGIP参考手册)metoo 1. 前言F5的iRules是F5 BIGIP中最为强大的一个部分,也是非常灵活的部分。在国外F5的应用案例中使用非常广泛,也是F5能占领市场的有力工具。但对于国内的应用来说,很多代理或者用户不了解iRules或者不知道iRules的使用,造成很多F5应该能解决的问题没有解决,而给了竞争对手很多机会。翻译中可能出现错误或者难以理解的部分请指正。2. iRules介绍iRules是F5实现流量均衡的一个强大并且精巧的特性。iRules特性不单是允许你创建一个rules和Classes来选择pool,并且可以配置可以允许BIGIP系统搜索系统中的任何类型连接中的数据来实现不同情况下的persistence。也就是说,iRules特性显著的增强了您对内容交换机的客户化定制能力来满足您的需求。2.1 什么是rule?iRules特性中的一个重要组件,也就是rule是一个用户编写的script,用来在两个或者更多的pool中进行选择。换句话说,rule用于选择和一个Virtual Server相关联的pool。Rules是一个可选的特性使您可以将流量不单是定义到默认的对应Virtual Server的pool。Rules允许您直接将流量分配到您所指定的pool中去。一旦你建立了一个rule来选择一个pool,你可以更进一步定义选择pool中的那个独立的成员,或者实现persistence或符合你特定的负载均衡需求。当配置一个pool的时候,你可以方便的使用rule表达语法来来实现persistence。如果需要获得更多的信息,可参见BIGIP参考手册第四章,Pools。当一个连接到达Virtual Server的时候,如果它没有命中当前的Session表,BIGIP系统可以通过执行rule来选择一个相关的pool。Rule可以根据特定的数据比如IP包头来直接将流量转到相应的pool。例如,Rules可以配置为判断以下条件:l 是否在数据包中包含以”cgi”作为结尾的HTTP请求? 是否数据包的源地址是以八进制“206”为开头?ll 是否在TCP的数据包中包含字符串“ABC”?另外,你可以创建一个rule来对用户请求进行重定向,比如host name,目标端口或者URI路径。Rules包含statements and expressions。在Expressions中,你可以使用许多元素,比如函数,表达式运算符,literal或者运算符。关于这些元素的描述,请参考Expressions, on page 5-5.PART III THE HIGH-LEVEL NETWORK。2.2 一个Rules的例子根据内容交换的需求不同,Rules的创建可以简单也可以复杂。下面给出了一个简单的rule的例子。这个例子中将包含.gif和.html的连接送往cache_pool,其他的流量都送往pool server_pool。if ( http_uri ends_with gif or http_uri ends_with html ) use ( cache_pool )else use ( server_pool )3. 创建一个rules你可以使用BIGIP图形化配置工具或者bigpipe rule命令来创建一个rules。这两种方法都在本节中进行描述。 使用图形化配置工具来创建一个rules。l1. 在导航面板中,单击Rules此时打开Rules配置界面。2. 单击Add按钮打开Add Rule的界面。3. 在Name对话框中,输入131个字符的Rule名称4. 在Type对话框中,选择Rule Builer或者Text Input如果选择Rule Builder,BIGIP可以自动根据你在GUI界面选择的元素创建一个rule。如果你选择Text Input,则会显示一个你可以自行输入rule的界面。5. 点击Donel 使用命令行创建一个rule如果使用命令行创建一个rule,可使用以下语法rule | | | | 更为详细的语法说明请看本章的备注说明:一旦你创建一个rule,你需要配置一个Virtual Server来对应这个rule。关于怎样配置Virtual Server和rule相关联,请参考Referencing BIG-IP system resources, on page 6-184.1 Rule statement一个rule包含一个或多个statement。Rules支持以下statement: Ifl statement用于询问一个true或者false的问题,并且根据结果选择不同的动作。 Discardl statement用于丢弃请求。这个statement必须和if statement有条件的关联。 use pooll statement用于选择一个pool来实现负载均衡,这个statement必须和if statement有条件的关联。 cachel statement用于选择一个pool来实现负载均衡,这个statement必须和if statement有条件的关联。 redirect tol statement用于将流量送到特定的目的,而不是使用某个pool来实现负载均衡。 log statement用于向Syslog发送信息,Thel statement does this by performing variable expansion on the message as defined for the header insert pool attribute. For more information on the header insert pool attribute, see Chapter 4, Pools. accumulate statement terminates rulesl processing until another another packet containing additional data is received from the originating client. This statement is useful with the http_content and tcp_content rule variables, when not enough data has been received to be successfully evaluated. For information on these rule variables, see Variables, on page5-14.警告如果不是很好的使用,log 描述会产生大量的输出信息。警告如果不是很好的使用,log 描述会产生大量的输出信息。下表显示了rule中的statement 语法表格无法贴上去,请大家参照BIGIP ref注意:一个rule中最多包含100个if语句嵌套4.2 表达式表达式可使用在一个rule statements或者pool定义中。他们的目的是描述rule或者pool采取的一些动作,并且提供任何rule或者pool需要采取动作的任何数据。下表显示了在表达式中可包含的元素和它们的语法下图是两个在rule中如何应用expression的例子:在框中的部分为rulerule my_rule if (tcp_content contains XYZ) use pool xyz_serverselse if (substr(tcp_content(100), 50, 3) = ABC use pool abc_serverselse use pool web_servers在上述示例中,元素tcp_content是一个变量运算符。元素contains是一个关系运算符,而元素substr( )是一个函数。这个表达式也包含一些常量,如 50,3,“XYZ”和“ABC”在rule或者pools中使用的表达式包含几个重要特性:l 表达式语法可以在rules之外使用,比如在一个pool内的persistence定义l 表达式支持一些功能用于persistence或直接选择pool的成员 表达式中的函数,变量和常量可以在一个运算符的任何一边出现ll 表达式允许通过加号(+)来进行字符串运算 表达式可将整数,地址等转变为字符串,以便于字符串运算ll 没有参数的函数可以使用没有()的方式在表达式中出现 The syntax for the http_header and http_cookiel variables matches the syntax for functions (for example, http_header(). 下面的部分描述了在表达式中包含的所有元素。注意:一个rule中的if statements不能超过100个。 findstr()findstr() 在一个字符串中查找指定的字符串,并从查找到的位置开始计算偏移量和长度取得一个取得一个新的字符串。这个函数在以下几种情况会返回空字符串: 参数 不是一个字符串 在 参数中没有找到参数 指定的偏移量超出了 的范围。语法findstr()函数使用以下参数:findstr(, , )findstr(, , , )findstr(, , , )在这里: 是一个被用于查找的表达式 是查找的字符串。一个字符串常量应该用双引号进行标记,例如,“user=” 。 是返回字符串从查找到的字符串开始的偏移量。 定义返回的字符串的长度 定义返回字符串的结尾字符的字符常量。一个字符常量使用单引号进行标记,例如 ; 。范例:这个表达式返回在问号之后的1个字符:findstr(http_uri, “?”, 1)这个表达式返回在 x= 之后的3个字符: findstr(http_uri, “x=”, 2, 3)这个表达式返回在 user= 之后直到 & 字符的字符串:findstr(http_uri, “user=”, 5, &)substr()指定的偏移量开始的位置返回一个字符串。这个函数在以下情况下返回一个空字符串: 参数 不是一个字符串 指定的偏移量超出了 的范围。语法substr() 函数使用以下参数:substr(, )substr(, , )substr(, , )其中: 是一个提供源字符串的表达式。 定义返回字符串的开始位置偏移量 定义返回字符串包含多少个字符定义返回字符串的结尾字符的字符常量。范例:这个表达式返回在第一个字符后的全部字符串:substr(http_uri, 1)这个表达式返回在第二个字符后的3个字符substr(http_uri, 2, 3)这个表达式返回在第5个字符之后直到出现&字符为止之间的字符串:substr(http_uri, 5, &)UIE+ I-rules 的原理和功能 1应用流量管理 2针对复杂应用的负载均衡和会话保持处理 2应用安全处理 3UIE+ I-rules 的原理和功能UIE -Universal Inspection Engine 通用搜索引擎,可以将TCP/UDP的数据包打开,并搜索其中的特征数据。i-rules 可以根据UIE搜索到的数据进行应用规则处理。UIE+ I-rules 可以帮助客户实现以下功能:1 应用流量管理2 针对复杂应用的负载均衡和会话保持处理3 应用安全处理典型的UIE 命令:findstr(http_uri, “user=”, 5, &) 可以得到http uri 内的”user=”字符后到”&”前的所有字符substr(tcp_content(100), 50, 3) 可以得到TCP内容中第50 个字符后的3个字符findstr(udp_content, , 2)可以得到UDP包内的后的2个字符应用流量管理通过UIE判断访问用户的user ID,然后根据user ID来判断VIP用户,将VIP用户导向到性能更好的服务器if (findstr(http_uri, “user=”, 5, &) = “gold-“) use pool vipelse use pool normal如上的UIE 和I-rules的配合就可以实现将用户user id 以”gold-”开头的用户导向到VIP的服务器,而一般用户就使用普通的服务器。针对复杂应用的负载均衡和会话保持处理对于一些特别应用来讲,要求一个用户的多个连接要定位在同一台服务器上,以保证用户访问的会话完整性; 一般来讲,我们会提供根据用户IP地址作为相同用户判别的依据Sample Persistence ;或Cookies的会话保持方式,SSL ID会话保持等很多种,但对于一些特别的应用来讲就不够了,而UIE 和I-rules 的配合可以实现绝大多数应用的负载均衡和会话保持。例如:对于金融行业中经常应用的Entrust 公司出品的Direct Server 是采用http的内容加密通讯方式,在用户端安装Direct Client,在用户发起访问时, Direct Client 软件将用户访问的请求加密传送到Direct Server ,由Direct Server 解密处理后再发起访问到目标服务器的访问,得到服务器返回的内容数据后加密传送到Direct Client 。 问题的出现在于Direct Server 同时承担了代理服务器和加解密的处理,在性能上很容易存在瓶颈,负载均衡处理的要求非常明显,而Direct Client 为加强加密级别会更改自己的源端口,通过多个tcp连接完成处理,如何将多个有关联的同一访问连接定位在相同的服务器上就需要特别的会话保持处理。根据Direct Server的使用说明,可以在服务器端修改配置文件,将server 端的http post 的内容改为不同的内容,例如:server 1 上改为post “server1”;而在server 2 上改为post “server2” ,然后根据用户访问时的http header的内容进行新进用户访问的负载均衡处理或在线用户的会话保持。If (findstr(tcp_content(20),”/secure/”,8,1)=1)Use pool A (serverA)Else if (findstr(tcp_content(20),”/secure/”,8,1)=2)Use pool B (serverB)Else Use pool C (load balance of server A, 的处理方法可以保证如果新用户的访问其http header内的相应字段应该为空,就进行负载均衡处理,而如果已经建立连接的在线用户则在相应字段会出现对应的服务器的标识,如server1 或server2 , 就可以根据标识进行会话保持处理了。应用安全处理安全问题是目前互连网上的重点,而多个层次的安全防护对于重要的应用系统来讲是非常必要的,而应用级的安全处理则是应用系统的一道重要防线,以下案例可以作为参考:F5 协助构建完善的安全体系结构案例研讨: 某电信级网站的主营业务于2003-02-28晚6时开始遭到某著名黑客团体进攻攻击, 并且其中包含多种网络攻击方法.服务器提供内容: Web Service port 80攻击方法: 1. ICMP Flooding , source IP 散列2. Syn Flooding ,source IP 散列, 攻击80端口, 峰值400,000并发.3. HTTP 请求, 但不是采用Get内容的访问, 而是发起包含非常多无用的Http请求, 分析Http请求内容为乱码. 峰值110,000并发.危害分析:1. 大批量ICMP包请求的回应, 给服务器带来很大压力, 并且抢占网络带宽, source IP 散列造成无法屏蔽攻击IP 地址.2. port 80的Syn攻击, 不但会消耗服务器的资源, 而且影响正常访问Syn的握手过程; 严重情况下会造成服务瘫痪的情况; source IP 散列造成无法屏蔽攻击IP 地址.3. 通过已经入侵过的国外公网服务器发起http访问, 而且考虑的服务器的服务能力可能会比较强, 黑客没有采用大量Get数据的方法攻击服务, 而是发起无用的Http请求, 在请求包内包含大量无用信息, 服务器因为要处理很多无用的http请求内容而耗尽资源, 完全无法提供服务.防护方法:1. 针对ICMP Flooding , 在防火墙上关闭该服务的ICMP, 防止ICMP对服务器的攻击, 成功拦截.2. 一般防火墙可以通过减少Tcp Idle Time 的方法, 和限制同时发起的Syn 包的方法进行部分防护, 但效果不好, 因为无论Tcp Idle Time多短, 过多的同时发起的Syn包仍然对服务器有很大威胁; 另外限制同时发起的Syn包的方法会连正常访问的握手Syn包也拒绝掉, 无法进行有效的防护; 只有采用Syn 中继的方法才能有效防护, BigIP 的功能得到体现.3. 大量公网服务器发起的无用的Http请求,理论上讲可以通过过滤IP的方法实现, 但因为IP地址非常多,一来无法及时统计攻击来源的IP 地址, 另外会造成防火墙性能的急剧下降, 因此无法使用. 采用IDS 的方法进行入侵监控失败, 因为网络流量超过80M 以上, IDS无法正常工作. 采用BigIP的解决方法如下:i. 开启BigIP 的IDS负载均衡功能, 将访问流量负载均衡的分配到多台IDS设备上, 统计大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论