X-WAF 安裝配置指南


X-WAF 安裝配置指南

https://my.oschina.net/u/4317177/blog/3433664

 

X-WAF 是一款方便易用的雲WAF,使用反向代理的方式介入Web服務器和訪問者之間,不需要像 modSecurity 和 Naxsin 那樣作為nginx的模塊,需要進行編譯安裝

X-WAF使用 OpenResty 作為反向代理軟件,並借助 OpenResty 的 Lua 作為防御腳本的編寫和運作工具

所以,實際上X-WAF就是一個運行在 OpenResty 上的 Lua 腳本,並借助了 OpenResty(nginx) 的多平台適用性,可以在各種操作系統運行

部署X-WAF的過程時間是就是安裝 OpenResty,加載Lua腳本,然后建立虛擬主機,並把虛擬主機的訪問直接發送給原本的php、tomcat或者nginx的過程

如果是已經有基於nginx+php構建的站點,就需要把網站配置到 OpenResty 上(80或443端口),把原來的nginx里的虛擬主機的端口改為其他端口比如8080,為防止用戶通過原有IP或域名+8080端口訪問,甚至原有nginx主機配置里面IP都可以直接修改為127.0.0.1。而OpenResty的虛擬主機配置上就通過proxy_pass把訪問發送到127.0.0.1:8080的原有nginx上

 

項目地址:

https://waf.xsec.io/

github:

https://github.com/xsec-lab/x-waf

管理后台

https://github.com/xsec-lab/x-waf-admin

 

主要特性

  • 支持對常見WEB攻擊的防御,如sql注入、xss、路徑穿越,阻斷掃描器的掃描等
  • 對持對CC攻擊的防御
  • waf為反向模式,后端保護的服務器可直接用內網IP,不需暴露在公網中
  • 支持IP、URL、Referer、User-Agent、Get、Post、Cookies參數型的防御策略
  • 安裝、部署與維護非常簡單
  • 支持在線管理waf規則
  • 支持在線管理后端服務器
  • 多台waf的配置可自動同步
  • 跨平台,支持在linux、unix、mac和windows操作系統中部署

 

安裝過程:

 

1、下載安裝 OpenResty  http://openresty.org/cn/,即可以用源碼編譯安裝,也可以使用yum安裝,這樣用源碼編譯安裝的方式

yum -y install pcre pcre-devel

wget https://openresty.org/download/openresty-1.15.8.1.tar.gz

tar -zxvf openresty-1.15.8.1.tar.gz

cd openresty-1.15.8.1

./configure

gmake && gmake install

把openresty加入環境變量,以便可以只用調用openresty命令,實際上 /usr/local/openresty/bin/openresty 是指向 /usr/local/openresty/nginx/sbin/nginx 的一個鏈接,但我們把環境變量指向openresty,以便和系統已有的 nginx 相區別

export PATH=/usr/local/openresty/bin:$PATH

為了下次用戶登錄頁可以正常調用命令,建議把變量寫入到用戶環境變量的配置文件里面

vi ~/.bash_profile

export PATH=/usr/local/openresty/bin:$PATH  # 添加到最后

2、修改原有nginx服務器的虛擬主機IP和端口,還要修改(或者刪除)nginx默認虛擬主機的IP和端口,否則啟動 openresty 時就是會因為 80 或者 443 端口被占用而無法啟動。

 

3、啟動openresty

--啟動
openresty
--停止
openresty -s stop
--重啟
openresty -s reload
--檢驗 openresty (nginx)配置是否正確
openresty -t

因為openresty的默認啟動用戶是nginx,如果系統沒有這個用戶就需要新建,或者使用系統原有nginx服務器的用戶也可以,比如lnmp的nginx默認用戶就是www。否則啟動openresty會報錯

nginx: [emerg] getpwnam("nginx") failed in /usr/local/openresty/nginx/conf/nginx.conf

這個時候就需要新建nginx用戶,或者修改nginx.conf里面的配置文件里的nginx啟動用戶

 

4、下載x-waf的配置文件和規則包

切換到openresty配置文件目錄
cd /usr/local/openresty/nginx/conf/

下載x-waf配置文件和規則文件
git clone https://github.com/xsec-lab/x-waf
下載下來是一個x-waf 的文件夾,里面的 nginx_conf/nginx.conf 文件是一個配置好了lua和x-waf規則目錄的模板文件,可以拷貝到 /usr/local/openresty/nginx/conf/nginx.conf 直接覆蓋原有openresty的配置文件
cp /usr/local/openresty/nginx/conf/x-waf/nginx_conf/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf

 

作者的代碼里面url白名單部分有個錯誤,需要修正一下,否則會因為找不到url白名單文件,而導致白名單失效

vi /usr/local/openresty/nginx/conf/x-waf/waf.lua

找到 writeurl.rule,替換為 whiteUrl.rule

 

建立虛擬主機配置文件目錄
mkdir -p /usr/local/openresty/nginx/conf/vhosts

修改配置文件

vi /usr/local/openresty/nginx/conf/x-waf/config.lua

local _M = {
    -- 開啟WAF
    config_waf_enable = "on",
    -- WAF防護日志目錄,需要保證openresty的運行用戶對該目錄有訪問權限,可通過修改目錄的所有者為openresty的運行用戶來實現,或者修改權限為777
    config_log_dir = "/data/waf",
    -- rule setting
    config_rule_dir = "/usr/local/openresty/nginx/conf/x-waf/rules",
    -- 啟用網址白名單過濾
    config_white_url_check = "on",
    -- 啟用IP白名單過濾
    config_white_ip_check = "on",
    -- 啟用IP黑名單過濾
    config_black_ip_check = "on",
    -- 啟用url過濾
    config_url_check = "on",
    -- 啟用url參數過濾
    config_url_args_check = "on",
    -- 啟用瀏覽器用戶代理過濾
    config_user_agent_check = "on",
    -- 啟用cookie過濾
    config_cookie_check = "on",
    -- 啟用CC攻擊檢測
    config_cc_check = "on",
    -- CC攻擊檢測閾值,10次/60秒
    config_cc_rate = "10/60",
    -- enable/disable post filtering
    config_post_check = "on",
    -- 檢測攻擊后給攻擊者的輸出,默認html文本串,通過config_output_html配置,或者設置為url,則通過config_waf_redirect_url配置
    config_waf_model = "html",
    -- if config_waf_output ,setting url
    config_waf_redirect_url = "http://xxx.com",
    config_expire_time = 600,
    config_output_html = [[
    <html>
    <head>
    <meta charset="UTF-8">
    <title>非法訪問</title>
    </head>
      <body>
        <div>
      <div class="table">
        <div>
          <div class="cell">
            非法訪問,您的IP為: %s
          </div>
          <div class="cell">
            如需幫助請聯系客服
          </div>
        </div>
      </div>
    </div>
      </body>
    </html>
    ]],
}


5、管理后台安裝,管理后台使用GO語言編寫,可以直接下載編譯好的版本直接運行即可
https://github.com/xsec-lab/x-waf-admin/releases/download/x-waf-admin0.1/x-waf-admin0.1-linux-amd64.tar.gz

解壓
tar -xzf x-waf-admin0.1-linux-amd64.tar.gz


進入目錄
cd x-waf-admin


編輯配置文件
vi conf/app.ini


RUN_MODE = dev #開發環境使用
;RUN_MODE = prod #生產環境使用

[server]
HTTP_PORT = 5000 #管理后台端口
API_KEY = xsec.io||secdevops.cn
NGINX_BIN = /usr/local/openresty/nginx/sbin/nginx #指定openresty可執行文件位置
NGINX_VHOSTS = /usr/local/openresty/nginx/conf/vhosts/ #指定虛擬主機配置文件位置
API_SERVERS = 127.0.0.1, 你自己的IP  #指定管理后台的IP地址,加上你自己的服務器IP即可

[database]
USER = 數據庫用戶名
PASSWD = 數據庫密碼
HOST = 127.0.0.1:3306 #數據庫地址和端口
NAME = waf #數據庫名

[waf]
RULE_PATH = /usr/local/openresty/nginx/conf/x-waf/rules/

 

已后台進程方式啟動管理后台,啟動后會自動往MySQL數據庫寫入配置表,如果沒有配置好MySQL,管理后台會因為找不到數據庫里面的用戶而無法登錄
nohup ./server >> x-waf.log 2>&1 &
tail -f x-waf.log 查看運行日志和啟動啟動


然后就可以訪問管理后台 http://ip:5000/login/ 了,默認的管理后台用戶是admin,密碼是 x@xsec.io,生產環境一點要修改賬戶密碼

6、通過管理后台添加站點,在Index頁面點擊新增后端站點

添加以后點擊同步按鈕,就會把配置寫入到openresty的虛擬主機配置文件目錄里面(/usr/local/openresty/nginx/conf/vhosts)

我們需要注意的時,管理后台實際是以 x-waf-admin/templates/proxy.tmpl 文件為模板生成虛擬主機配置文件的,所以如果生成的文件不符合要求,也可以修改這個模板文件
或者參考這個模板文件自行在 /usr/local/openresty/nginx/conf/vhosts 目錄建立虛擬主機配置文件

點擊同步按鈕后可能會提示同步失敗(實際上配置文件已經寫入,只是無法重啟openresty),那是因為通過proxy.tmpl生成的配置文件把日志目錄放到了 /var/log/nginx/ 里面,這個目錄可能不存在。
可以手動建立目錄或者修改目錄

特別需要注意的時,如果你手動修改了虛擬主機配置文件,就不要使用同步按鈕了,點擊同步按鈕將會用proxy.tmpl重新生成配置文件

 

7、測試waf是否生效

http://ip/\?id\=1%20union%20select%201,2,3     #應該會顯示“”歡迎在遵守白帽子道德准則的情況下進行安全測試“”等字樣

在WAF防護日志目錄,剛才我們配置的 /data/waf 目錄應該會出現相應的日志,應當經常檢查改目錄的日志,並作出相應的防護措施

8、檢查原有網站能否正常訪問

9、如果我們想修改waf的攔截提示信息,可以修改 /usr/local/openresty/nginx/conf/x-waf 文件里的 config_output_html 配置

 

=================== End

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM