您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 规章制度 > F5-iRule 规则编写详解
F5iRule详解©F5Networks2L4和L7交换的本质区别L2PayloadL3L4L7HeaderFullPayload对不定址,不定长的特征码进行的交换是L7交换的特征L2L3L4L7特征码MACIPPort???地址长度对L7交换特征的提取-iRule©F5Networks3WhatisaniRule?•iRule是一种脚本语言工具•它的语法是基于TCL语言的–大部分TCL语言的功能都被支持–同时还有很多iRule的扩展功能•它能帮你实现许多扩展功能–当你在CLI/GUI介面无法找到对应的命令/菜单–请相信iRule!©F5Networks4iRules的组成元素•iRules是基于事件驱动(Event-Driven)的–由LTM系统触发你在iRules中指定/期望的事件•iRules是由以下的基本元素构成:–事件声明–操作符–iRules命令©F5Networks5iRules的基本格式事件声明{表达式{iRules命令}}whenCLIENT_ACCEPTED{if{[IP::addr[IP::remote_addr]equals“202.101.1.0/24”]}{discard}}©F5Networks6iRule的创建和管理(1)©F5Networks7iRule的创建和管理(2)©F5Networks8Datagroup的创建(1)©F5Networks9Datagroup的创建(2)©F5Networks10iRuleEditor©F5Networks11iRule的引用(1)--新建virtualserver©F5Networks12iRule的引用(2)--已有virtualserver©F5Networks13iRule案例(1)whenHTTP_REQUEST{if{[HTTP::uri]starts_with/csp/dwr/and[HTTP::uri]ends_with.js}{poolcsp6_cache_pool}elseif{[HTTP::uri]starts_with/csp/js/}{poolcsp6_cache_pool}elseif{[HTTP::uri]starts_with/csp/resources/}{poolcsp6_cache_pool}elseif{[HTTP::uri]starts_with/csp_help/}{poolcsp6_cache_pool}elseif{[HTTP::uri]starts_with/csp/esales/}{poolcsp6_esales_pool}else{poolcsp6_professional_pool}}©F5Networks14iRule例子(2)•whenHTTP_REQUEST{if{[HTTP::headerexistsx-up-calling-line-id]}{persistuie[HTTP::headervaluesx-up-calling-line-id]#loglocal0.thephonenumberis---[HTTP::headervaluesx-up-calling-line-id]------}}根据http数据包中的手机号码做会话保持©F5Networks15iRule例子(3)•whenHTTP_REQUEST{if{[matchclass[HTTP::uri]ends_with$::class_end]}{poolpool_gatewayloglocal0.theuriis$[HTTP::uri],matchuriclass“}elseif{[matchclass[HTTP::host]contains$::class_domain]}{poolpool_gatewayloglocal0.thedomainnameis$[HTTP::host],matchclass_domain“}else{poolCSS-W3loglocal0.theuriis$[HTTP::uri],usecache}}$::全局变量,在v10在不要再采用,而是直接把$::去掉•classclass_domain{•{blogger.comfacebook.comhotmail.com}}classclass_end{{.aspx.cfm.cgi.jsp.php.phtml.shtml“}}©F5Networks16iRule案例(4)whenCLIENT_ACCEPTED{loglocal0.theclientis[IP::remote_addr],theserveris[IP::local_addr]if{([IP::addr[IP::local_addr]equals10.64.238.0/23]||[IP::addr[IP::local_addr]equals10.64.69.0/23]||\[IP::addr[IP::local_addr]equals10.64.208.0/23])&&\([IP::addr[IP::remote_addr]equals192.168.68.106]||[IP::addr[IP::remote_addr]equals192.168.68.109]||\[IP::addr[IP::remote_addr]equals192.168.68.113]||[IP::addr[IP::remote_addr]equals192.168.68.114])}{snat10.228.69.133loglocal0.snatto10.228.69.133}elseif{([IP::addr[IP::local_addr]equals10.64.238.0/23]||[IP::addr[IP::local_addr]equals10.64.69.0/23]||\[IP::addr[IP::local_addr]equals10.64.208.0/23])&&\([IP::addr[IP::remote_addr]equals192.168.68.132]||[IP::addr[IP::remote_addr]equals192.168.68.135]||\[IP::addr[IP::remote_addr]equals192.168.68.139])}{snat192.168.68.219loglocal0.snatto192.168.68.219}else{snat172.16.0.130loglocal0.snatto172.16.0.130}}©F5Networks17iRule调试—log命令•Log的输出会放在/var/log/ltm中,–/var/log/ltm•iRule本身如果有错误,也会放在–/var/log/ltm•可以增加一些debug语句,来验证iRule的运行loglocal0.“Startoftherule’loglocal0.“Middleoftherule’loglocal0.“Endoftherule’©F5Networks18Log命令的输出•Theargumentforthelogstatementisthefacilitydotlevel•Facilitiesare:–local0is/var/log/ltm–local1is/var/log/em–local2is/var/log/gtm–local3is/var/log/asm–local4is/var/log/ltm–local5is/var/log/pktfilter–local6is/var/log/httpd/httpd_errors–local7is/var/log/boot.log•注意log命令会消耗资源,请在正式生产上,一定要注释掉©F5Networks19iRule的资源•©F5Networks20iRule论坛©F5Networks21iRule其他请注意一定要充分测试F5support只支持命令的语法,但无法支持客户的iRule应用逻辑有顾问服务可以购买,一起开发©F5Networks22演示©F5Networks24TCLFoundational•变量•表达式•流程控制–if-then-else–switch–for©F5Networks25变量•基本操作–setvarname–unsetvarname–appendvarnamearg1arg2…–incrvarnamesteps©F5Networks26变量•列表–setlst{{item1}{item2}{item3}}–lindexlistindex•lindex[lindex[lindex$a1]2]3lindex$a{123}–lappendlistvalue1value2…–linsertlistindexval1val2…•在index之前插入内容–lreplacelistfirstlastval1val2…•替换first至last之间的内容•如果变量不足,则删除对应部分–llengthlist©F5Networks27变量•全局变量–RULE_INIT内定义的均为全局变量–::varname为全局变量–使用全局变量将导致CMP失效,即只能单CPU处理流量,这在v10以后的版本一定非常注意©F5Networks28表达式与操作符::TCLStandardOperatorsDescription(按照优先级由高到低)-+~!一元运算加、减、按位取反、逻辑非。不适用于字符串。按位取反仅适用于整数型变量。*/%乘、除、取模。不适用于字符串。+-加、减。仅适用于数值运算。左移、右移运算。仅适用于整数。右移运算继承符号位。==小于、大于、小于等于、大于等于。返回布尔型。适用于数值与字符串。大小写敏感。==!=等于、不等于。返回布尔型。适用于所有类型。eqne等于、不等于。返回布尔型。仅适用于字符串&按位与。仅适用于整数型变量。^按位异或。仅适用于整数型变量。|按位或。仅适用于整数型变量。&&逻辑与。返回布尔型。仅适用于布尔、数值运算。||逻辑或。返回布尔型。仅适用于布尔、数值运算。x?y:zIf{x}then{returny}else{returnz}©F5Networks29表达式与操作符::iRulesExtended•关联操作符–contains–matches(参考Tcl“stringmatch”,*,?)–equals–starts_with–ends_with–matches_regex(参考常用简单正则表达式)•逻辑操作符–not!–and&&–or||©F5Networks31FlowControlif{expression}then{statement_command}elseif{expression}then{statement_command}else{statement_command}Notice:‘then’and‘else’areoptional注意:请采用尽量少的elseif/elseif©F5Networks32FlowControlswitch[option]strings{pattern-pattern{#dosomethingelse...}default{#don'tdoanything...}}*尽可能多的使用switch,而不是if©F5Networks33FlowControl::Switc
本文标题:F5-iRule 规则编写详解
链接地址:https://www.777doc.com/doc-3103601 .html