ACL实践

1、什么是ACL

	主要对请求报文和响应报文进行匹配和过滤。其配置法则通常分为两步:首先定义 ACL 规则,即定义一个测试条件,条件可以是请求报文中的源地址、源端口、目标地址、目标端口、请求方法、URL 、文件后缀等;然后在条件得到满足时执行相应的动作;比如阻止请求、又或着转发请求至某特定的后端。


	#ACL语法
acl   <aclname> <criterion>	[flags]     [operator]        [<value>]#acl名称
#acl	名称		条件 		条件标记位	具体操作符			  操作对象


#ACL示例
acl  my_chrome   hdr(User-Agent)   -m    sub    -i    Chrom

<aclname> : ACL名称,可使用字母数字;﹒-_区分字符大小写

<criterion>:比较的标准和条件
	'基于源地址、源端口、目标地址、目标端口: src、src_port、dst、dst_port
	'基于 Header信息比对:hdr、hdr_beg、hdr_end、hdr_dom
	'基于路径或后缀比对: path_beg、path_end
	'基于请求的方法比对:	method
	
<flags>:条件标记
	'-i不区分大小写
	'-m 使用 pattern匹配方法。 
	'-n不做 DNS 解析
	'-u禁止acl重名,否则多个同名的 ACL为或的关系
	
[ operator]:条件筛选
	'-eq、-ne、-ge、le、gt、lt
	'(-m str)∶字符串必须完全匹配模式
	'(-m sub):在提取的字符串中查找,如果其中任何一个被发现,ACL 将匹配
	'(-m beg):在提取的字符串首部中查找,如果其中任何一个被发现,ACL 将匹配
	'(-m end):在提取的字符串尾部中查找,如果其中任何一个匹配,则ACL进行匹配
	'(-m dir):提取用斜线/分隔的字符串,如果其中任何一个匹配,则 ACL进行匹配
	'(-m dom)︰提取用点的.分隔字符串.如果其中任何一个匹配.则 AcL讲行匹配

<value>:条件目标
	'布尔值: 比如,false,true
	'整数或整数范围,比如用于匹配端口范围 1024~32768
	'I地址或IP范围: 192.168.0.1~192.168.0.1/24
	'字符串: 比如匹配URL 路径,/static、/images

2、条件判断

其实就是acl中的条件匹配,不同的值不同的用法

3、ACL逻辑关系

多个acl作为条件时的逻辑关系:
		'与:默认,如if acl1 ac12表示满足第一个的同时要满足第二acl此条件才为真
		'或:使用or或|表示,如if acl1 || acl2表示满足acl1或ac12中的任意一个此条件就为真
		'非:使用!表示,如if ! acl1表示对该ACL取相反的操作,意思就是非该ACL此条件为真1

4、ACL访问控制

配置七层的请求访问控制;只能用在mode http中;

http-request { allow | deny} [ {if | unless }<condition> ]

示例:仅允许10.0.0.1访问haproxy的 stats
	listen haproxy-stats
		bind *:9999
		stats enable
		stats hide-version
		stats uri /haproxy ?stats
		stats realm "HAProxy statistics "stats auth admin:123456
		stats admin if TRUE
		
		acl all_ip src 10.0.0.1  #定义acl
		http-request deny if ! all_ip  #不匹配all_ip的地址全部拒绝访问


配置四层的请求访问控制;只能用在 mode tcp 中;

	tcp-request connection {acceptlreject} [if | unless }<condition>]
	
示例:拒绝来源tcp应用,比如 SSH
	listen ssh
		bind*:2222
		mode tcp
		balance roundrobin
		server sshsrv1 172.16.1.7:22 check
		server sshsrv2 172.16.1.8:22 check
		
		acl invalidiIsrc src 172.16.1.1   # 定义acl匹配规则
		tcp-request connection reject if invalid_src  # 在四层拒绝满足名为invaLla_src 的 acl 匹配规则

5、实例

1. 基于域名调度
	根据用户请求的不同域名,调到不同的后端集群
	用户请求www.oldzhang.com 调度到 172.16.1.7:80;172.16.1.8:80
	用户请求java.oldzhang.com 调度到 172.16.1.7:8080;172.16.1.8:8080
	
2.基于设备调度
	根据用户请求的user-agent,调到不同的后端集群
	用户请求chrom   调度到 172.16.1.7:80
	用户请求firefox 调度到 172.16.1.8:80
	
3.基于路径调度
	根据用户请求的URL,调到不同的后端集群
	用户请求/static   调度到 172.16.1.7:80
	用户请求/user     调度到 172.16.1.8:80
	
4.基于后缀调度
	根据用户请求的后缀,调到不同的后端集群
	用户请求.txt   调度到 172.16.1.7:80
	用户请求.pdf 调度到 172.16.1.8:80
	

6、场景

6.1.haproxy实现mysql负载均衡

用户请求3306端口,调度到172.16.1.7:3306  172.16.1.8:3306

6.2.haproxy实现HTTP负载均衡

用户请求www.oldzhang.com,调度到172.16.1.7:80  172.16.1.8:80

6.3.haproxy实现HTTPS负载均衡

用户通过http请求,自动跳转到https
	与后端web_cluster 集群通过http协议通讯
	web_cluster 集群中的节点:172.16.1.7:80 172.16.1.8:80

keepalived: 虚拟地址漂移技术

posted @ 2022-04-12 21:37  kirin(麒麟)  阅读(73)  评论(0编辑  收藏  举报
Δ