giku 发表于 2016-8-22 09:52:51

Linux_haproxy_acl访问控制(4)v1.0

acl:
The use of Access Control Lists (ACL) provides a flexible solution to perform content switching and generally to take decisions based on content extracted from the request, the response or any environmental status.
基于某种检测条件 ,将用户请求或相应的某一类(通常为请求),做访问控制
acl <aclname> <criterion> [<value>] ...    <aclname>:关键字的名称 '-' (dash), '_' (underscore) , '.' (dot) and ':' (colon).ACL names are case-sensitive. 多个acl可以使用一个名称区分大小写
   <criterion>:标准或规范
   : 不区分大小写什么的 选项
    :运算符
            <value>的类型:
         bool    - boolean 布尔型值
             int      - integer or integer range 整数
             ip      - IP address / networkip地址
             str      - string (exact, substring, suffix, prefix, subdir, domain) 字符串
             - regular expression   正则表达式模式
             - hex block    十进制数据块
            <flags>            -i : ignore case during matching of all subsequent patterns. 不区分大小写
            -m : use a specific pattern matching method 使用特定的模式完成匹配
                                 匹配字符串:                                       (-m str) : 精确匹配
                                    (-m sub) : 子串匹配
                                       (-m beg) : 前缀匹配
                                       (-m end) :后缀匹配
                                       (-m dir) : 以"/"区分匹配    /etc/haproxy/SOME/ 在此种匹配
                                          (-m dom) :以"."区分 做匹配            -n : forbid the DNS resolutions禁用DNS解析
            -u : force the unique id of the ACL ACL名称不能相同
            -- : force end of flags. Useful when a string looks like one of the flags. 当一个字符串看起来像flags时 用来转意
                            运算符                匹配整数值:eq、ge、gt、le、lt

************************************<criterion>*********************************************
acl作为条件时的逻辑关系:默认&&<criterion>            - AND (implicit)
            - OR(explicit with the "or" keyword or the "||" operator)
             - Negation with the exclamation mark ("!")

             if invalid_src invalid_portincalid_src 和incalid_port 都满足
             if invalid_src || invalid_port 或者
             if ! invalid_src invalid_port不满足incalid_src 但满足incalid_port   (每个条件必须单独给"!"才是都去非)


常用的检查标准:
            dst : 匹配目标ip
            dst_port : integer 匹配目标prot
            src : ip 匹配源ip
            src_port : integer 匹配源地址端口
         例acl invalid_srcsrc172.16.200.2 匹配目标ip地址规则名称为invalid_src

path : string 用户所请求的url      (这里的匹配是 或关系)   
This extracts the request's URL path, which starts at the first slash and ends before the question mark (without the host part).
抽取出用户请求的url 的路径 (以"/"开头 "?"之前的内容)
                                                                           /path;<params>            path   : exact string match精确匹配
            path_beg : prefix match    前侧匹配
            path_dir : subdir match    以"/"匹配
            path_dom : domain match 域匹配
            path_end : suffix match   后半段匹配
            path_len : length match    长度匹配
            path_reg : regex match正则表达式匹配
             path_sub : substring match 子串匹配      

url : string 整个url匹配相关 This extracts the request's URL as presented in the request. A typical use is with prefetch-capable caches, and with portals which need to aggregate multiple information from databases and keep them in caches.            url   : exact string match
            url_beg : prefix match
            url_dir : subdir match
            url_dom : domain match
            url_end : suffix match
            url_len : length match
            url_reg : regex match
            url_sub : substring matchreq.hdr([<name>[,<occ>]]) : string请求报文的首部做匹配最后一次
            hdr([<name>[,<occ>]])   : exact string match
            dr_beg([<name>[,<occ>]]) : prefix match
            hdr_dir([<name>[,<occ>]]) : subdir match
            hdr_dom([<name>[,<occ>]]) : domain match
            hdr_end([<name>[,<occ>]]) : suffix match
            hdr_len([<name>[,<occ>]]) : length match
            hdr_reg([<name>[,<occ>]]) : regex match
            hdr_sub([<name>[,<occ>]]) : substring match示例:
            acl   bad_curl   hdr_sub(User-Agent)    -i   curl   #匹配 报文请求报文首部中子串(hdr_sub) 不区分大小写
            lock if bad_curl
status : integer 检查状态码
**************************************************************************************
Pre-defined ACLs haproxy内部定义的aclname和规则





**************************************************************************************

基于ACL的动静分离示例:      frontendweb *:80 定义前段端口
                acl url_static       path_beg       -i /static /images /javascript /stylesheets 规则 从首段匹配aclname=url_static
                acl url_static       path_end       -i .jpg .gif .png .css .js .html .txt .htm规则 从后端匹配    aclname=url_static                use_backend staticsrvs          if url_static                                        当满足url_static定义的条件式 使用 staticsrvs后端服务器组
                default_backend             appsrvs                                                    默认服务器组为appsrvs      backend staticsrvs                                                   定义后端staticsrvs 的主机列表
               balance   roundrobin                                        调度算法是轮询
               server      stcsrv1 172.16.100.6:80 check      指明后端服务器stcsrv1 的ip:port 开启健康状态检查         backend appsrvs                                                      定义后端appsrvs主机列表
            balance   roundrobin                                          调度算法为轮询
            serverapp1 172.16.100.7:80 check                  
            serverapp1 172.16.100.7:8080 check       listen stats                                                                  定义listen
            bind :9091                                                                定义端口
            stats enable                                                             开启状态页面默认/haproxy?status
            stats auth admin:admin                                          指明认证时的user:password
            stats admin if TRUE                                                当认证条件为真是    http://cbonte.github.io/haproxy-dconv/1.5/configuration.html#7.4
页: [1]
查看完整版本: Linux_haproxy_acl访问控制(4)v1.0