CitrixADC針對Brute force attack防護設定(三)

 此篇主要是CitrixADC針對Brute force attack防護設定(二)後續,針對不同的需求增加其他方式來達成目標。

這篇文章的需求是當某一來源持續登入失敗次數超過10次時,會進行ip封鎖

先前的文章
CitrixADC針對Brute force attack防護設定(一)

跟上篇同樣會使用到AppExpert中的Rewrite和Rate limiting,再加上HttpCallouts。

Rewrite和Rate limiting的使用跟前篇一樣,利用rewrite policy來判斷登入失敗與否再加上Rate limiting來判定是否同個來源ip及時間內次數,再來是用HttpCallouts在ADC上新增ACL來阻擋嘗試登入的client。

整個流程為

  • 判定目標request是否為登入失敗
  • 判定來源request是否為同個ip
  • 確認登入失敗次數是否達到限制
  • 使用httpcallouts呼叫api在CitrixADC上下IP ACL指令
首先要創建rate limiting的selectors
條件部分填入來源ip
CLIENT.IP.SRC
再來創建rate limiting的identifiers
跟上一篇一樣此處主要是設定tarps和time slice來限制時間內不同帳號登入失敗的次數
接著要設定HttpCallouts,這個feature主要功能是當條件滿足時能執行自定義的http request,故本篇使用此功能來call本機的api來去達成目的
首先要填入ip,這邊是填入CitrexADC的SNIP,接著設定api的種類及參數
可以參考原廠API文件

若不想在header中帶帳號密碼的方式,API文件中也有使用token方式
而body中帶入api cmd的參數
"{\"nssimpleacl\":{\"aclname\":\"" + CLIENT.IP.SRC + "_ACL\",\"srcip\":\"" + CLIENT.IP.SRC + "\",\"aclaction\":\"DENY\",\"ttl\":\"10800\"}}"
接著創建rewrite action
跟前幾篇一樣顯示一個阻擋頁面
"HTTP/1.1 200 OK\r\n\r\n <html><head><title>Block</title></head><body><h1><B>You have reached the maximum allowed login attempts<B><BR></H1><H3>For next 5 minutes you will be block temporarily</H3> <H3>Your device at: <strong> " + CLIENT.IP.SRC + "</H3><br><H3>Please call support services</H3> <UL> Phone : 0903123347<br>Mail : lab@lab.local<br>Support ID : "+HTTP.RES.TXID.BEFORE_REGEX(re/-\w{12}/)+"</UL></body></html>"
接著創建rewrite policy
本篇的rewrite policy其實在action部分可以選擇no action,因為此篇主要是依靠acl block去做阻擋
policy部分為
1.藉由觀察response來判定是否為登入失敗狀況(綠)
2.透過rate limiting來判斷時間範圍內登入失敗的次數(紅)
3.當1,2都為true時httpcallout便會作動
HTTP.RES.BODY(25000).CONTAINS("Username and/or password incorrect") && SYS.CHECK_LIMIT("falied_login_10")  && SYS.HTTP_CALLOUT(addsimpleacl)
接著將policy綁定在目標virtual server上



接著做登入失敗測試
首先觀察rate limiting是否正常做動


當次數達到上限後再確認httpcallout是否執行了
若都正常運作在System>Network>ACLs>SimpleACLs便能看到系統創建的acl deny,當然除了做本機的api call之外還有很多其他應用

留言