haproxy之ACL

haproxy之ACL

haproxy的ACL简介

1)访问控制列表(ACL,Access Control Lists)是一种基于包过滤的访问控制技术,它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配),即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,允许其通过或丢弃。

2)参考:http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#7

ACL配置选项

acl   <aclname> <criterion>   [flags]     [operator]   [<value>]
acl     名称     匹配规范     匹配模式     具体操作符     操作对象类型


示例:
acl   image_service hdr_dom(host)   -i   img.root4578.com
  • ACL-Name:ACL名称,可以使用大字母A-Z、小写字母a-z、数字0-9、冒号:、点.、中横线和下划线,并且严格区分大小写,必须Image_site和image_site完全是两个acl。

  • ACL-criterion:定义ACL匹配规范

hdr([<name> [,<occ>]]):完全匹配字符串
hdr_beg([<name> [,<occ>]]):前缀匹配
hdr_dir([<name> [,<occ>]]):路径匹配
hdr_dom([<name> [,<occ>]]):域匹配
hdr_end([<name> [,<occ>]]):后缀匹配
hdr_len([<name> [,<occ>]]):长度匹配
hdr_reg([<name> [,<occ>]]):正则表达式匹配
hdr_sub([<name> [,<occ>]]):子串匹配

dst 目标IP
dst_port   目标PORT
src   源IP
src_port 源PORT
  • ACL-flags:ACL匹配模式
    -i 不区分大小写
    -m 使用指定的pattern匹配方法
    -n 不做DNS解析
    -u 禁止acl重名,否则多个同名ACL匹配或关系

  • ACL-operator:ACL 操作符

    • 整数比较:eq、ge、gt、le、lt

    • 字符比较:
      exact match (-m str) :字符串必须完全匹配模式
      substring match (-m sub) :在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配
      prefix match (-m beg) :在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL将匹配
      suffix match (-m end) :将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则ACL进行匹配
      subdir match (-m dir) :查看提取出来的用斜线分隔(“/”)的字符串,如果其中任何一个匹配,则ACL进行匹配
      domain match (-m dom) :查找提取的用点(“.”)分隔字符串,如果其中任何一个匹配,则ACL进行匹配

  • ACL-value:value的类型

    • Boolean #布尔值
    • integer or integer range #整数或整数范围,比如用于匹配端口范围
    • IP address / network #IP地址或IP范围, 192.168.0.1 ,192.168.0.1/24
    • string
      exact –精确比较
      substring—子串 www.root4578.com
      suffix-后缀比较
      prefix-前缀比较
      subdir-路径, /wp-includes/js/jquery/jquery.js
      domain-域名,www.root4578.com
    • regular expression #正则表达式
    • hex block #16进制

ACL调用方式:

  • 与:隐式(默认)使用
  • 或:使用“or” 或 “||”表示
  • 否定:使用“!“ 表示

ACL的使用场景

  • ①公网地址较少,域名需要共用某个公网IP地址
  • ②内网使用,预发布环境和测试环境(提供一个环境,做与用户行为一致的访问)
  • ③机房搬迁时,使用七层代理作为临时使用。

ACL示例-域名匹配:

  • ACL域名匹配有可能使用(其他ACL示例此处不总结了),其他的操作一般在nginx上面实现(动静分离、浏览器版本不同访问的资源不同、访问控制、全栈https等)

  • 动静分离、浏览器版本不同访问的资源不同、访问控制、全栈https在haproxy上面均能实现,但是一般在后端服务器nginx上面实现,haproxy一般作为四层负载均衡服务器即可。

  • 实验规划:实现pc端和mobile端调度至不同的服务器
    haproxy:192.168.38.27
    URI:http:www.root4578.com ==>为pc端域名,调度至192.168.38.17
    URI:http:mobile.root4578.com ==>为mobile端域名,调度至192.168.38.37

  • haproxy配置:

[root@centos7-27 ~# cat /etc/haproxy/conf/acl-pc-mobile.cfg 
frontend pc_mobile_test
  bind 192.168.38.27:80,192.168.38.27:81
  mode http
  balance roundrobin
############acl setting############################################
  acl pc_page hdr_dom(host)      -i www.root4578.com
  acl mobile_page hdr_dom(host)	 -i mobile.root4578.com
#############acl  hosts############################################
  use_backend pc_page_hosts       if pc_page
  use_backend mobile_page_hosts   if  mobile_page

#############backend hosts#########################################
backend pc_page_hosts 
  mode http
  server 192.168.38.17 192.168.38.17:80 check inter 2 fall 3 rise 5

backend mobile_page_hosts
  mode http
  server 192.168.38.37 192.168.38.37:80 check inter 2 fall 3 rise 5
  • 测试主机:192.168.38.87
①写hosts:
192.168.38.27  www.root4578.com  mobile.root4578.com


②curl命令测试:
[root@centos7-87 error]# curl http://www.root4578.com
web1 192.168.38.17 page
[root@centos7-87 error]# curl http://mobile.root4578.com
web2 192.168.38.37 page
  • haproxy状态页:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值