Haproxy使用ACL可以进行客户端访问控制与内容路由控制

一.客户端访问控制

1.使用方式

(1).定义ACL控制规则

#acl(关键字) 规则名称(自定义) src(标识源端host) IP(地址段)标识

acl allow_client src 192.168.10.184/32

acl deny_client src 0.0.0.0/0

(2).使定义的规则生效

#http-request(关键字) allow/deny if Acl规则名称

http-request allow if allow_client

http-request deny if deny_client


注:

(1).如果"访问权限"所定义的"客户端IP地址"有重叠部分,那么其访问权限以http-request所指定的优先顺序为主,即如果"allow"在前,则允许访问,反之,deny在前则拒绝访问。

(2).如果某个客户端同时不在"allow"与"deny"所定义的范围内,也会具有"allow"权限


2.测试:

(1).环境:

客户端:

192.168.10.184

192.168.10.35

服务端:

192.168.10.33


(2).allow与deny部分都有包含10.184地址并且deny优先设定在allow前。

haproxy-acl_第1张图片


(3).在10.184做HOST 绑定www.17173.com到10.33,并在浏览器访问,出现403错误(权限不足)

haproxy-acl_第2张图片


(4).在10.35(该地址不在规则定义中)以同样方式进行访问,可以正常获取数据

haproxy-acl_第3张图片



二.ACL内容路由模式:

1.几种常用ACL路由模式:

(1).hdr_beg(host) #精确匹配主机,表示以xx开头的域名

   acl host_beg hdr_beg(host) -i "www.baidu.com"  #匹配以www.baidu.com开头的域名

(2).hdr_reg(host) #正则匹配主机,表示以xx开头的域名

   acl host_reg hdr_reg(host) -i ".*baidu.com" #匹配baidu.com域名

(3).path_beg #匹配路径,以xx路径开头

(4).path_end #匹配路径,以xx路径结尾

(5).url_sub #表示请求URL中包含xx字符串

(6).url_dir #表示请求url中包含xx路径


2.使用方式:

(1).定义acl路由策略,如

   acl hostacl hdr_beg(host) -i www.baidu.com

(2).引用所定义的acl路由策略

   use_backend backgroup if hostacl #将符合hostacl策略的请求调度到后端backgroup组的服务器


3.测试:

(1).环境

服务端:192.168.10.33 (HA)

       192.168.10.35  (NGINX)

       192.168.10.38  (NGINX)

客户端:192.168.10.184


(2).定义两个后端服务器组web1、web2,并且对默认所有的请求都走web1服务器组。

 haproxy-acl_第4张图片


(3).直接访问域名,检测默认条件下是否从10.38设备获取数据

haproxy-acl_第5张图片



(4).指定内容路由规则,当访问acltest域名的时候走10.35设备。

haproxy-acl_第6张图片


(5).重新访问域名www.acltest.com,检测请求的服务器为10.35

haproxy-acl_第7张图片