Varnish實現阻止異常IP訪問請求

2022-04-15 14:17:19 字數 1785 閱讀 8812

若**已在使用varnish,下面這個示例場景可以參考,作技術交流

現在很多**尤其是電商類的**比較容易遭到網路攻擊,如dos,ddos網路攻擊

當然在當今社會,當今網際網路環境中,這種現象也是正常的,但如何應對,大公司有大公司做法,小公司有小公司做法,也有小公司借助大公司,如借助第三方雲服務商應對

若已有安全解決方案(請繞行^_^),這裡介紹的利用varnish實現動態阻止異常ip訪問請求的方法,限於相關資源缺乏,成本受限情況。當服務端被攻擊時,除了網路流程,

服務端應用程式與伺服器無法為正常請求提供服務,所以需要阻止那些異常請求,比如通過封掉異常ip,從而緩解被異常ip請求對服務端超成的壓力。

varnish作為反向**,位於web伺服器前面,可作為web前端快取,若能在這端阻止,異常請求就不會到後端伺服器,也就不會給後端伺服器超成壓力。

如下圖(略去防火牆、路由器等網路裝置)

那麼只要在vcl指令碼中加如下**

acl forbiddenip 

subvcl_recv

...

varnish_forbidip1

看起來很簡單,但這裡有個問題,首先我們得知道異常ip列表,其次就算有了ip列表,也不能每次更改vcl檔案,將ip位址填入,若ip有成千上萬,這vcl**看起來...嗯,不能看:)

其實vcl檔案中可以include相應檔案,這樣就可以將ip存放在相應的檔案中

1

acl forbiddenip

5sub

vcl_recv

10 ...

view code

注意,filteriplist.html檔案中iplist需要以 "192.168.1.11";"192.168.1.12";"192.168.1.13";格式儲存

這裡是.html檔案,也可以是文字檔案

如何獲得這個ip list 呢,其實這個與我們應用程式有關了,不管是asp,php,jsp中哪一種,在關鍵頁面中,識別request請求訊息,通常是請求頭中的內容,對每次請求的客戶端

ip做記錄(可存入rmdb,檔案,nosql等) 

頁面中獲得ip方法,示例

string ip = request.getheader("

x-forwarded-for

");

if(ip == null || ip.length() == 0 || "

unknown

".equalsignorecase(ip))

if(ip == null || ip.length() == 0 || "

unknown

".equalsignorecase(ip))

if ((ip == null || ip.length() == 0|| "

unknown

".equalsignorecase(ip))

if(ip == null || ip.length() == 0 || "

unknown

".equalsignorecase(ip))

get ip

同時統計,根據既定的條件,如同乙個ip一定時間內,訪問次數超過一定限制的,將這類ip整合到上面所用的異常ip list (filteriplist.html)     中,當這些ip再次訪問varnish時,        varnish將會做出判斷,並引導其到出錯頁面,不再訪問後端伺服器了。

CDN加速的實現 varnish

cdn的全稱 content delivery network,即內容分發網路。其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快 更穩定。通過在網路各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智慧型虛擬網路,cdn系統能夠實時地根據網路流量和各...

Varnish 負載均衡的實現

步驟一 開啟ll3快照,設定ip,主機名,yum源 準備將server4作為第二個web伺服器 這一步在上篇已經詳細介紹,在此省略 步驟二 將server4也作為乙個後端web伺服器 也就是在server4上面搭建乙個web伺服器 檢測一下 curl localhost 步驟三 在server1 伺...

varnish下使用acl限制ip位址訪問

acl forbidden chinaip.data 192.168.1.0 24 10.0.0.0 24 第2步 在vcl recv中定義策略,放到最前面。if client.ip forbidden 第3步 可選 自定義錯誤頁面 根據不同的錯誤 執行不同的操作 將錯誤 為750的,重定向goog...