OpenResty反爬蟲

近日網站的日誌增長特別快,奇怪的是網商還沒有上線,沒有用戶訪問,哪來這麼多出錯日誌,仔細查看日誌發現,好多跟我們網站無關的請求,host也是一些什麼,jd,58什麼的。對於nginx我也是新手,當時就蒙了,第一反應是難道被攻擊了,被人控制做什麼操作了。由於不知道原因,上網查原因也無從下手,於是從openresty的安全入手開始查,在《OpenResty-Best-Practices.pdf》提到過b防火牆的demo,如下:


其中:access_by_lua:爲每個請求在訪問階段的調用lua腳本進行處理。主要用於訪問控制,能收集到大部分的變量。

在這裏可以訪問到nginx內置綁定的變量,這些可以增加nginx對網絡行爲的控制細度。這些變量大部分是在請求進入是解析的,並把它們緩存到會話中,以方便取用。這些變量有很多,並且還在不斷迭代更新,我們來簡單看幾個變量:


1:host : 請求信息中的"Host"。(我的網站日誌中就包括許多這樣的信息,例如:“host: "ja.58.com"”)

2:remote_addr :客戶端IP地址;


其實根據這兩個變量就可以簡單的把那個惡意的請求過慮掉,

例如:建 立一個 black_ips數組,把需要隔離的客戶端IP存入,當進入access階段時,獲取remote_addr,進行比較,如果在隔離範圍內,則直接返回ngx.exit(ngx.HTTP_FORBIDDEN);

示例代碼:

            access_by_lua '
                if  block_ips[ngx.var.remote_addr] then
                    ngx.exit(ngx.HTTP_FORBIDDEN);
                end
            ';

但是這樣有個問題,太麻煩,還要維護這個block_ips。

於是換了思路,檢查請求中的host,只有host爲我的網站的host時,才通過控制訪問。如果證明是對的。

至此用一個比較簡單的方法解了反爬蟲和反代理的問題。但是作爲新手沒有對nginx有深入的瞭解,肯定還存在一些訪問隱患。

沒辦法,只能戰鬥中成長。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章