一個基于 lua-nginx-module 的 Web 應用防火墻:ngx_lua_waf
ngx_lua_waf是我剛入職趣游時候開發的一個基于ngx_lua的web應用防火墻。
代碼很簡單,開發初衷主要是使用簡單,高性能和輕量級。
現在開源出來,遵從MIT許可協議。其中包含我們的過濾規則。如果大家有什么建議和想fa,歡迎和我一起完善。
防止sql注入,本地包含,部分溢出,fuzzing測試,xss,SSRF等web攻擊 防止svn/備份之類文件泄漏 防止ApacheBench之類壓力測試工具的攻擊 屏蔽常見的掃描黑客工具,掃描器 屏蔽異常的網絡請求 屏蔽圖片附件類目錄php執行權限 防止webshell上傳
推薦安裝:
推薦使用lujit2.1做lua支持
ngx_lua如果是0.9.2以上版本,建議正則過濾函數改為ngx.re.find,匹配效率會提高三倍左右。
使用說明:
nginx安裝路徑假設為:/usr/local/nginx/conf/
把ngx_lua_waf下載到conf目錄下,解壓命名為waf
在nginx.conf的http段添加
lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
配置config.lua里的waf規則目錄(一般在waf/conf/目錄下)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
絕對路徑如有變動,需對應修改
然后重啟nginx即可
配置文件詳細說明: RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--規則存放目錄
attacklog = "off"
--是否開啟攻擊信息記錄,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存儲目錄,該目錄需要用戶自己新建,切需要nginx用戶的可寫權限
UrlDeny="on"
--是否攔截url訪問
Redirect="on"
--是否攔截后重定向
CookieMatch = "on"
--是否攔截cookie攻擊
postMatch = "on"
--是否攔截post攻擊
whiteModule = "on"
--是否開啟URL白名單
ipWhitelist={"127.0.0.1"}
--ip白名單,多個ip用逗號分隔
ipBlocklist={"1.0.0.1"}
--ip黑名單,多個ip用逗號分隔
CCDeny="on"
--是否開啟攔截cc攻擊(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--設置cc攻擊頻率,單位為秒.
--默認1分鐘同一個IP只能請求同一個地址100次
html=[[Please go away~~]]
--警告內容,可在中括號內自定義
備注:不要亂動雙引號,區分大小寫
檢查規則是否生效
部署完畢可以嘗試如下命令:
curl http://xxxx/test.php?id=../etc/passwd 返回"Please go away~~"字樣,說明規則生效。
注意:默認,本機在白名單不過濾,可自行調整config.lua配置
效果圖如下:
規則更新:
考慮到正則的緩存問題,動態規則會影響性能,所以暫沒用共享內存字典和redis之類東西做動態管理。
規則更新可以把規則文件放置到其他服務器,通過crontab任務定時下載來更新規則,nginx reload即可生效。以保障ngx lua waf的高性能。
只記錄過濾日志,不開啟過濾,在代碼里在check前面加上--注釋即可,如果需要過濾,反之
一些說明:
過濾規則在wafconf下,可根據需求自行調整,每條規則需換行,或者用|分割 global是全局過濾文件,里面的規則對post和get都過濾 get是只在get請求過濾的規則 post是只在post請求過濾的規則 whitelist是白名單,里面的url匹配到不做過濾 user-agent是對user-agent的過濾規則 默認開啟了get和post過濾,需要開啟cookie過濾的,編輯waf.lua取消部分--注釋即可 日志文件名稱格式如下:虛擬主機名_sec.log
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!