banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

使用OneinStack搭建網站LNMP環境,並配置WAF防火牆防CC攻擊

前言#

現在對於很多站長來說,或多或少的都會遇到CC攻擊,而防禦最好的辦法就是套CDN,比如國外的CloudFlare,而CF很多時候速度並不是很快,在很多地方也被屏蔽了,所以體驗不是很好。這時候我們可以用腳本來防一下,之前發過一個防CC腳本,查看:Linux VPS 防 CC 攻擊一鍵腳本,帶微信提醒,由於需要訪問日誌,所以效果並不是很好,稍微大點的CC都會扛不住,所以該腳本在一些情況下不是很適合。

這裡再講個防CC教程,使用Nginx+Lua設置WAF防火牆來防CC,還可以攔截Url關鍵詞等,其優點Nginx佔用小,高並發的優勢,以及Lua語言的輕快,並在用戶訪問前就可以處理掉攻擊,效果還是很不錯的。

由於配置前需要編譯Lua模塊,而OneinStackLNMP一鍵包中OpenResty自帶Lua模塊,所以博主建議使用該一鍵包安裝網站環境。

LNMP 安裝#

先去OneinStack網站獲取一鍵包,訪問地址:https://oneinstack.com/auto/Nginx選擇OpenResty;如果內存小於1GMysql不能大於5.5,然後其它自己看著辦。

image

將獲取到的一鍵包複製到SSH客戶端運行,直到安裝完成。

LNMP 操作命令:

#操作前請在oneinstack目錄下操作
cd oneinstack
#添加網站
./vhost.sh
#刪除網站
./vhost.sh del
#添加其它組件
./addons.sh
#網站備份
./backup_setup.sh
#更新版本
./upgrade.sh

更多命令及圖文操作查看:https://oneinstack.com/install/

相關目錄:

#數據庫文件夾,請將phpMyAdmin改成不容易猜到的名字比如xx,然後可通過IP:xx訪問數據庫
/data/wwwroot/default
#網站目錄
/data/wwwroot
#網站配置文件
/usr/local/openresty/nginx/conf/vhost

添加網站後,使用FTP工具將程式上傳至根目錄,建立數據庫,打開網站配置就可以了。

配置 WAF 防火牆#

這裡使用Github很火的一個基於ngx_luaWAF防火牆腳本來防CC攻擊和攔截Url關鍵詞等。其功能如下:

  • 防止sql注入,本地包含,部分溢出,fuzzing測試,xss55RFweb攻擊。
  • 防止svn/ 備份之類文件洩漏。
  • 防止ApacheBench之類壓力測試工具的攻擊。
  • 屏蔽常見的掃描黑客工具,掃描器。
  • 屏蔽異常的網絡請求。
  • 屏蔽圖片附件類目錄php執行權限。
  • 防止webshell上傳。

Github地址:https://github.com/loveshell/ngx_lua_waf

先把ngx_lua_waf下載到conf目錄下:

cd /usr/local/openresty/nginx/conf
wget https://www.moeyy.cn/usr/down/waf.tar.gz
tar zxf waf.tar.gz
rm -rf waf.tar.gz

再編輯/usr/local/openresty/nginx/conf/nginx.conf,將以下代碼放入http{}中。

lua_shared_dict limit 10m;
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/openresty/nginx/conf/waf/waf.lua";

然後運行service nginx restart重啟nginx,使其生效。

配置文件:

#配置文件路徑
/usr/local/openresty/nginx/conf/waf/config.lua
#詳細參數,具體自己看著設置
RulePath = "/usr/local/openresty/nginx/conf/waf/wafconf/"
--規則存放目錄
attacklog = "on"
--是否開啟攻擊信息記錄,需要配置logdir
logdir = "/data/wwwlogs/"
--log存儲目錄,該目錄需要用戶自己新建,需要nginx用戶的可寫權限
UrlDeny="on"
--是否攔截url訪問
Redirect="on"
--是否攔截後重定向
CookieMatch = "on"
--是否攔截cookie攻擊
postMatch = "off"
--是否攔截post攻擊
whiteModule = "on"
--是否開啟URL白名單
black_fileExt={"php","jsp"}
--填寫不允許上傳文件後綴類型
ipWhitelist={"127.0.0.1"}
--ip白名單,多個ip用逗號分隔
ipBlocklist={"1.0.0.1"}
--ip黑名單,多個ip用逗號分隔
CCDeny="on"
--是否開啟攔截cc攻擊
CCrate = "10/60"
--設置cc攻擊頻率,單位為秒.
--默認1分鐘同一個IP只能請求同一個地址10次

過濾規則:

#過濾規則在/usr/local/openresty/nginx/conf/waf/wafconf下。
#規則可根據需求自行調整,每條規則需換行,或者用分割
args裡面的規則get參數進行過濾的
url是只在get請求url過濾的規則        
post是只在post請求過濾的規則        
whitelist是白名單,裡面的url匹配到不做過濾        
user-agent是對user-agent的過濾規則
#默認開啟了get和post過濾的,需要開啟cookie過濾,編輯waf.lua取消部分--註釋即可。
#日誌文件名稱格式如下:虛擬主機名_sec.log

白名單設置:

#ip白名單
修改/usr/local/openresty/nginx/conf/waf/wafconf/config.lua中的ipWhitelist。
可以填寫多個ip,多個ip中用,分割,例如{"127.0.0.1","192.155.1.1"}。

#url白名單
修改/usr/local/openresty/nginx/conf/waf/wafconf/whiteurl,一行一個,取字符段驗證,只取uri,通常用於api鏈接放行,且不能帶參數。
例如https://xxx/Rats.php?xx,我們填入^/Rats.php$即可放行全部以/Rats.php開頭的uri。

image

效果測試:
攔截CC攻擊返回503錯誤。

image

觸發關鍵詞會被防火牆攔截。

注意ngx_lua_waf默認攔截phpMyAdmin目錄,請修改成其它名稱訪問數據庫。

部分參考:https://www.94ish.me/1730.html

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。