前言
在 上一篇文章 我們提到了 OpenResty,是 Nginx 與 Lua 語言的結合。因此今天推薦的這款插件,就是安裝於 OpenResty 上的。他叫做 Nginx-Lua-Anti-DDoS,功能就像是 Cloudflare 的 5 秒盾,會在你訪問網頁的前 5 秒鐘計算流量是否合法,在重新導向回原本的網站。
先前準備
你必須先完成 上一篇文章 所提到的,所以你若尚未安裝 OpenResty,請先操作完後再回來吧!
安裝方式
前往目錄 /usr/local/openresty/nginx/conf
,這底下建立一個資料夾 lua
並進入他。
cd /usr/local/openresty/nginx/conf && sudo mkdir lua && cd lua
將 Nginx-Lua-Anti-DDoS 的主要程式碼下載到這個資料夾中。
sudo wget https://raw.githubusercontent.com/C0nw0nk/Nginx-Lua-Anti-DDoS/master/lua/anti_ddos_challenge.lua
回到目錄 /usr/local/openresty/nginx/conf
,我們要來編輯 nginx.conf
。
cd /usr/local/openresty/nginx/conf && sudo vim nginx.conf
在 HTTP 的範圍裡,將你需要的站點添加上 access_by_lua_file conf/lua/anti_ddos_challenge.lua;
,範例如下:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
access_by_lua_file conf/lua/anti_ddos_challenge.lua;
location / {
try_files $uri $uri/ =404;
}
}
接著重啟 OpenResty 即可。
sudo systemctl restart openresty
細項設定
在 anti_ddos_challenge.lua
裡面,你可以調整一些細項設定,來讓他更符合你的需求。
尋找 secret
,你會找到一個預設值為 enigma
的字串,你可以隨意改變他,他是用來加密用的。
local secret = " enigma"
尋找 expire_time
,這是用來設定驗證的過期時間,預設為 86400,也就是一天。
local expire_time = 86400
尋找 javascript_REQUEST_TYPE
,他是用來回傳用戶解出來答案的方式,1
代表 GET
,2
代表 POST
,3
代表 Dynamic
。
local javascript_REQUEST_TYPE = 2
尋找 refresh_auth
,這是驗證所需要花的時間,預設是 5 秒,也就是祖傳 5 秒盾的意思。
local refresh_auth = 5
尋找 encrypt_javascript_output
,他有提供多種 JavaScript 的加密方式,預設 0
就是代表隨機,我是建議保持不動就好,真的想動可以去看原檔案設定。
local encrypt_javascript_output = 0
尋找 credits
,他是用來在網頁上顯示原作者的訊息,預設是 1
顯示,依照需求可以改成 2
不顯示。
local credits = 1
上方的改動結束請都使用 sudo systemctl restart openresty
來讓配置生效。
成果展示
現在,當你進入網頁,就會顯示這樣子的 5 秒盾來進行驗證。當然如果你希望讓網頁版型自訂義,你也可以自己動手編輯 anti_ddos_challenge.lua
最下方的 html 程式碼來達成。
結語
這就是這款 Nginx-Lua-Anti-DDoS 的安裝及使用方式啦!根據官方的說法,他可以用來抵擋 L7 的洪水功能等攻擊,所以對於某些常被攻擊的族群確實挺好用的。