HAProxy的访问控制
HAProxy的ACL用于實現基于請求報文首部、響應報文的內容或其他的環境狀態信息來做出轉發決策,這大大增強了其配置彈性,其配置法則通常分為兩步,
首先去定義ACL,即定義一個測試條件,而后在條件得到滿足時執行某特定的動作,如阻止請求或轉發至某特定的后端。
1、定義ACL語法:
acl <aclname> <criterion> [flags] [operator] <value> ...
<aclname>:ACL名稱,區分字符大小寫,且只能包含大小寫字母,數字,-(連接線),_(下劃線),.(點號),和:(冒號);
haproxy中,acl可以重名,這可以把多個測試條件定義為一個共同的acl;
<criterion>:測試標準,即對什么信息發起測試,測試方式可以由[flags]指定的標志進行調整,而有些測試標準也可以需要為其在<value>指定指定一個操作符[operator]
[flags]:目前haproxy的acl支持的標志位有3個:
-i:不區分<value>中模式字符的大小寫;
-f:從指定的文件中加載模式;
--:標識符的強制結束標記,在模式中的字符串像標記符時使用;
<value>:acl測試條件支持的值有以下四類:
整數或整數范圍:如1024:65535表示從1024至65535,僅支持使用正整數(如果出現類似小數的標識,其為通常為測試版本),其支持使用的操作符有五個
分別為:eq、ge、gt、le和lt;
字符串:支持使用"-i"以忽略字符大小寫,支持使用"\"進行轉義,如果在模式首部出現了-i,可以在其之前使用"--"標志位;
正則表達式:其機制類同字符串匹配
IP地址及網絡地址
同一個acl中可以指定多個測試條件,這些測試條件需要由邏輯操作符指定其關系,條件件的組合測試關系有三種:
"與"(默認即為與操作)
"或"(使用"||"操作符)
"非"(使用"!"操作符)
2、常用的測試標準(criteria)
be_sess_rate(backend) <integer>
用于測試指定的backend上會話創建的速率(即每秒創建的會話數)
是否滿足指定的條件:常用于在制定backend上的會話速率過高時將用戶請求轉發至另外的backend,用于組織攻擊行為,例如:
backend dynamic
mode http
acl being_scanned be_sess_rate gt 50
redirect location /error_pages/denied.html if being_scanned
fe_sess_rate <integer>
用于測試指定的frontend(或當前frontend)上的會話創建速率是否滿足指定的條件:常用于為frontend指定一個合理的會話創建速錄
上限以防止服務被濫用。例如下面的例子限定入站郵件速率不能大于50封/秒,所有在此指定范圍之外的請求都將被延遲50毫秒。
frontend mail
bind :25
mode tcp
maxconn 500
acl too_fast fe_sess_rate ge 50
tcp-request inspect-delay 50ms
tcp-request content accept if ! too_fast
tcp-request content accept if WAIT_END
hdr(header) <string>
用于測試請求報文中的所有首部或指定首部是否滿足指定條件,指定首部時,其名稱不區分大小寫,且在括號"()"中不能有任何多余的
空白字符,測試服務器端的響應報文時可以使用shdr(),例如下面的例子用于測試首部Connection的值是否為close。
hdr(Connection) -i close
method <string>
測試HTTP請求報文的方法
path_beg <string>
用于測試請求的URL是否以<string>指定的模式開頭,下面的例子用于測試URL是否以/static、/images、/javascript或/stylesheets頭
acl url_static path_beg -i /static /images /javascript /stylesheets
path_end <string>
用于測試請求的URL是否以<string>指定的模式結尾,例如下面的例子測試URL是否以jpg、gif、png、css或js結尾
acl url_static path_end -i .jpg .gif .png .css .js
hdr_beg <string>
用于測試請求報文的指定首部的開頭部分是否符合<string>
指定的模式。例如,下面的例子測試請求是否為提供靜態內容的主機img、vides、download或ftp
acl host_static hdr_beg(host) -i img. video. download. ftp.
hdr_end <string>
用于測試請求報文的指定首部的結尾部分是否符合<string>指定的模式;
3、動靜分離實例:
frontend http-in
bind *:80
mode http
log global
option httpclose
option logasap
option dontlognull
capture request header Host len 20
capture request header Refer len 60
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static_servers if url_static
default_backend dynamic_servers
backend static_servers
balance roundrobin
server imgsrv1 192.168.1.110:80 check maxconn 6000
server imgsrv2 192.168.1.184:80 check maxconn 6000
backend dynamic_servers
cookie srv insert nocache
balance roundrobin
server websrv1 192.168.1.111:80 check maxconn 1000 cookie websrv1
server websrv2 192.168.1.112:80 check maxconn 1000 cookie websrv2
總結
以上是生活随笔為你收集整理的HAProxy的访问控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcm ulaw alaw转换
- 下一篇: 彻底理解Java中的hashcode方法