设为首页 收藏本站
查看: 1653|回复: 0

[经验分享] Linux_haproxy_acl访问控制(4)v1.0

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-22 09:52:51 | 显示全部楼层 |阅读模式
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> [flags] [operator] [<value>] ...
    <aclname>:关键字的名称 '-' (dash), '_' (underscore) , '.' (dot) and ':' (colon).ACL names are case-sensitive. 多个acl可以使用一个名称区分大小写
     <criterion>:标准或规范
     [flags]: 不区分大小写什么的 选项
    [operator] :运算符

            <value>的类型:
           bool    - boolean 布尔型值
             int        - integer or integer range 整数
             ip        - IP address / network  ip地址
             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时 用来转意
               
            [operator] 运算符
                匹配整数值: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_port  incalid_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_src  src  172.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 match
req.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和规则


dAUBAAAAAAAA&bo=CgN2AgoDdgIDACU%21.jpg

dAUBAAAAAAAA&bo=BQMSAQUDEgEDACU%21.jpg

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

基于ACL的动静分离示例:
        frontend  web *: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                                          调度算法为轮询
              server  app1 172.16.100.7:80 check                  
              server  app1 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                                                当认证条件为真是


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-261229-1-1.html 上篇帖子: haproxy原理与部署 下篇帖子: 使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表