HAProxy的ACL

server/2025/3/1 13:18:40/

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

定义ACL匹配规范,即:判断条件

hdr string,提取在一个HTTP请求报文的首部
hdr([<name> [,<occ>]]):完全匹配字符串,header的指定信息,<occ> 表示在多值中使用的值的出现次数
hdr_beg([<name> [,<occ>]]):前缀匹配,header中指定匹配内容的begin
hdr_end([<name> [,<occ>]]):后缀匹配,header中指定匹配内容end
hdr_dom([<name> [,<occ>]]):域匹配,header中的domain name
hdr_dir([<name> [,<occ>]]):路径匹配,header的uri路径
hdr_len([<name> [,<occ>]]):长度匹配,header的长度匹配
hdr_reg([<name> [,<occ>]]):正则表达式匹配,自定义表达式(regex)模糊匹配
hdr_sub([<name> [,<occ>]]):子串匹配,header中的uri模糊匹配

#示例:
hdr(<string>)     用于测试请求头部首部指定内容
hdr_dom(host)   请求的host名称,如 www.magedu.com
hdr_beg(host)   请求的host开头,如 www.   img.   video.   download.   ftp.
hdr_end(host)   请求的host结尾,如 .com   .net   .cn 

#示例:
acl bad_agent hdr_sub(User-Agent) -i curl wget
block if bad_agent

#有些功能是类似的,比如以下几个都是匹配用户请求报文中host的开头是不是www:
acl short_form  hdr_beg(host)        www.
acl alternate1  hdr_beg(host) -m beg www.
acl alternate2  hdr_dom(host) -m beg www.
acl alternate3  hdr(host)     -m beg www.

base : string
#返回第一个主机头和请求的路径部分的连接,该请求从第一个斜杠开始,并在问号之前结束,对虚拟主机有用
<scheme>://<user>:<password>@#<host>:<port>/<path>;<params>#?<query>#<frag>
    base     : exact string match
    base_beg : prefix match
    base_dir : subdir match
    base_dom : domain match
    base_end : suffix match
    base_len : length match
    base_reg : regex match
    base_sub : substring match

path : string
#提取请求的URL路径,该路径从第一个斜杠开始,并在问号之前结束(无主机部分)
<scheme>://<user>:<password>@<host>:<port>#/<path>;<params>#?<query>#<frag>
    path     : exact string match
    path_beg : prefix match  #请求的URL开头,如/static、/images、/img、/css
    path_end : suffix match  #请求的URL中资源的结尾,如 .gif  .png  .css  .js  .jpg  .jpeg
    path_dom : domain match
    path_dir : subdir match
    path_len : length match
    path_reg : regex match
    path_sub : substring match

#示例:
    path_beg -i /haproxy-status/ 
    path_end .jpg .jpeg .png .gif 
    path_reg ^/images.*\.jpeg$ 
    path_sub image  
    path_dir jpegs 
    path_dom magedu

url : string
#提取请求中的URL。一个典型的应用是具有预取能力的缓存,以及需要从数据库聚合多个信息并将它们保存在缓存中的网页门户入口,推荐使用path
    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

dst         #目标IP
dst_port    #目标PORT

src         #源IP
src_port    #源PORT

#示例:
acl invalid_src src 10.0.0.100 192.168.1.0/24
acl invalid_port src_port 0:1023

status : integer
#返回在响应报文中的状态码   

#七层协议
acl valid_method method GET HEAD
http-request deny if ! valid_method

ACL匹配模式

-i 不区分大小写
-m 使用指定的pattern匹配方法
-n 不做DNS解析
-u 禁止acl重名,否则多个同名ACL匹配或关系

ACL调用方式:

与:隐式(默认)使用
或:使用“or” 或 “||”表示
否定:使用 "!" 表示  #示例:
if valid_src valid_port         #与关系,A和B都要满足为true,默认为与
if invalid_src || invalid_port  #或,A或者B满足一个为true
if ! invalid_src                #非,取反,A和B哪个也不满足为true

ACL示例-域名匹配 

#cat /etc/haproxy/conf.d/test.cfg

frontend  openlab_web
  bind :80
  mode http
  balance  roundrobin
  log global
  option httplog

###################### acl setting ###############################
  acl pc_domain  hdr_dom(host)      -i www.yunjisuan.com
  acl mobile_domain hdr_dom(host)   -i mobile.yunjisuan.com

###################### acl hosts #################################
  use_backend  pc_hosts         if   pc_domain
  use_backend  mobile_hosts     if   mobile_domain
  default_backend pc_hosts 

###################### backend hosts #############################
backend mobile_hosts
  mode http
  server web1 192.168.234.13:80 check inter 2000 fall 3 rise 5

backend pc_hosts
  mode http
   server web2 192.168.234.11:80 check inter 2000 fall 3 rise 5

[root@centos6 ~]#curl www.yunjisuan.com
192.168.234.11
[root@centos6 ~]#curl mobile.yunjisuan.com
192.168.234.13

ACL示例-基于源地址的访问控制

拒绝指定IP或者IP范围访问

测试:

listen  web_host
  bind :80
  mode http
  balance  roundrobin
  log global
  option httplog

###################### acl setting ###############################
  acl acl_deny_src src  192.168.234.0/24

###################### acl hosts #################################
  #block  if  acl_deny_src   #2.1版本后,不再支持block
  http-request deny  if acl_deny_src  
  #http-request allow
  default_backend default_web
###################### backend hosts #############################
backend magedu_host
  mode http
  server web1 192.168.234.11:80 check inter 2000 fall 3 rise 5

backend default_web
  mode http
  server web1 192.168.234.13:80 check inter 2000 fall 3 rise 5

[root@centos6 ~]#curl www.yunjisuan.com

<html><body><h1>403 Forbidden</h1>Request forbidden by administrative rules.</body</html>

ACL示例-基于文件后缀名实现动静分离

#cat /etc/haproxy/conf.d/test.cfg

frontend  magedu_http_port
  bind :80
  mode http
  balance  roundrobin
  log global
  option httplog
###################### acl setting ###############################
  acl acl_static path_end -i .jpg .jpeg .png .gif .css .js
  acl acl_php   path_end -i .php
###################### acl hosts #################################
  use_backend  mobile_hosts if acl_static
  use_backend  app_hosts if acl_php
  
###################### backend hosts #############################
backend mobile_hosts
  mode http
  server web1 192.168.234.13:80 check inter 2000 fall 3 rise 5

backend app_hosts
  mode http
  server web2 192.168.234.11:80 check inter 2000 fall 3 rise 5

#分别在后端两台主机准备相关文件
[root@centos17 ~]#ls /usr/share/nginx/html
index.html  wang.jpg

[root@centos27 ~]#cat /usr/share/nginx/html/test.php
<?php phpinfo(); ?>

ACL-匹配访问路径实现动静分离

#cat /etc/haproxy/conf.d/test.cfg

frontend  magedu_http_port
  bind :80
  mode http
  balance  roundrobin
  log global
  option httplog
###################### acl setting ###############################
  acl  acl_static  path_beg  -i  /static /images /javascript
  acl  acl_static  path_end  -i .jpg .jpeg .png .gif .css.js

###################### acl hosts #################################
  use_backend static_hosts if acl_static
  default_backend app_hosts 
###################### backend hosts #############################
backend static_hosts
  mode http
  server web1 192.168.234.13:80 check inter 2000 fall 3 rise 5

backend app_hosts
  mode http
  server web2 192.168.234.11:80 check inter 2000 fall 3 rise 5

#创建相关文件
[root@centos17 ~]#mkdir /usr/share/nginx/html/static
[root@centos17 ~]#echo 192.168.234.13 >  /usr/share/nginx/html/static/test.html

#测试访问
[root@centos6 ~]#curl 192.168.234.13/static/test.html
192.168.234.13


http://www.ppmy.cn/server/171557.html

相关文章

01文件IO

一、linux_C函数接口手册 在线手册 Linux 常用C函数(中文版) linux一切皆文件 在linux系统下一切都是以文件的形式存储在系统中的&#xff0c;通过linux系统提供的IO(input/output)接口开发板就可以往linux系统中 输入一些信息和获取一些信息。 linux系统的文件分类: - …

自动化问题汇总

PLC【1】伺服轴使用前 机器人【1】机器人使用前 上位机【1】 系统【1】Window的性能测试工具无法加载性能计数器 其他【1】 PLC 【1】伺服轴使用前 机器人 【1】机器人使用前 上位机 【1】 系统 【1】Window的性能测试工具无法加载性能计数器 使用.NET时&#xff0c;编…

git上传仓库操作

在 Visual Studio Code (VSCode) 中&#xff0c;手动将本地仓库与远程仓库关联起来是一个常见的需求。以下是详细的操作步骤和解释&#xff1a; 前提条件 已安装 Git&#xff1a;确保你的系统中已经安装了 Git&#xff0c;并且可以通过命令行运行 git 命令。已初始化本地仓库&…

PipeWire 简介

PipeWire 是一个底层的多媒体框架&#xff0c;旨在替代 PulseAudio 和 JACK 这些 Linux 平台更为传统的音频服务器&#xff0c;它聚焦于处理多媒体数据 (主要是音频、视频和 MIDI)&#xff0c;提供更灵活和高效的音频、视频处理能力。 PipeWire 项目的创始人及最核心贡献者是 …

【每日刷题】Day184

【每日刷题】Day184 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1700. 无法吃午餐的学生数量 - 力扣&#xff08;LeetCode&#xff09; 2. 146. LRU 缓存 - 力扣&a…

极简Redis速成学习

redis是什么&#xff1f; 是一种以键值对形式存储的数据库&#xff0c;特点是基于内存存储&#xff0c;读写快&#xff0c;性能高&#xff0c;常用于缓存、消息队列等应用情境 redis的五种数据类型是什么&#xff1f; 分别是String、Hash、List、Set和Zset&#xff08;操作命…

AF3 pair_sequences函数解读

AlphaFold3 msa_pairing模块的pair_sequences函数的核心目标是基于 MSA(多序列比对)中的物种信息,在多条链之间建立 MSA 配对索引,从而帮助 AlphaFold3 捕捉共进化信息,提升蛋白复合物预测的准确性。函数pair_sequences 通过调用 _make_msa_df、 _create_species_dict 以…

正大杯攻略|量表类问卷数据分析基本步骤

在量表类问卷研究领域&#xff0c;分析变量之间的影响关系是基础且常用的手段。一般先提出关于自变量 X 对因变量 Y 影响关系的假设&#xff0c;随后运用合适的统计方法进行验证&#xff0c;挖掘二者间规律&#xff0c;进而得出结论&#xff0c;为研究发展提供建议。具体分析步…