由於廠商CDN無法鎖定Geolocation,所以要在irule上鎖定只有CDN的node可以來存取,且要鎖定user真實IP不讓禁止的國家存取。
when HTTP_REQUEST {
set accessip [IP::client_addr] ;#設定accessip變數為來存取的IP
set original_ip [getfield [HTTP::header "X-Forwarded-For"] "," 1] ;#設定original_ip變數為XFF的第一個IP(user真實IP)
set accessip_country [whereis $accessip country] ;#設定accessip_country變數為存取IP的國家代碼
set realip_country [whereis $original_ip country] ;#設定realip_country變數為XFF的第一個IP(user真實IP)的國家代碼
if { [class match $accessip equals "CDN-node"] || [class match $accessip equals "TW-OA-IP"] } {
log local0. "MYWEB User real IP is $original_ip $realip_country CDN node IP is $accessip $accessip_country"
if { [class match $original_ip equals "TW-OA-IP"] || [class match $original_ip equals "PH-OA-IP"] } {
log local0. "MYWEB User real IP is $original_ip $realip_country CDN node IP is $accessip $accessip_countr"
;#來存取的IP如果等於CDN-node或TW-OA-IP,且user真實IP為TW-OA-IP或PH-OA-IP可正常存取
}
elseif { [class match $realip_country equals "blockedcountries"] } {
HTTP::respond 403 content [ifile get sorry_page]
#如果來存取的IP如果等於CDN-node或TW-OA-IP但是user真實IP的國家代碼是被封鎖的返回無法訪問返回403禁止頁面
}
else {
log local0. "MYWEB User real IP is $original_ip $realip_country CDN node IP is $accessip$accessip_country"
;#如果來存取的IP如果等於CDN-node或TW-OA-IP,user真實IP的國家代碼不是被封鎖的國家是可以正常進入
}
}
else {
HTTP::respond 403 content [ifile get sorry_page]
log local0. " MYWEB Block Geo country User real IP is $original_ip $realip_country $accessip $accessip_country"
;#其他不被允許的存取IP,返回403禁止頁面
}
}