近日個人的幾個小站總是被攻擊,於是准備尋找一款WAF來抵擋一下。
首先嘗試了modsecurity 和 naxsi ,功能是有了,但因為需要在每一台服務器上安裝agent,沒有管理界面,策略也不能統一維護,感覺后面維護起來不怎么方便。
無意中看到了Janusec Application Gateway (Janusec應用網關),其無agent的網關式架構設計令人眼前一亮。
根據其介紹,只需要安裝一次,就可以作為基礎設施供后續復用擴展,業務的服務器上不需要安裝agent,且能夠為證書私鑰提供加密保護。
原理式這樣的:
Janusec工作在反向代理模式,收到請求后,會先檢查合法性,如果是攻擊行為(Web攻擊如SQL注入、XSS等,或CC攻擊),就會攔截下來;如果是正常的訪問請求,就會放行。我決定安裝體驗一番。
首先,找到Janusec網關的快速入門介紹:https://www.janusec.com/cn/quick-start/
然后根據介紹的步驟進行安裝:
步驟 1: 下載
$cd ~
$wgethttps://www.janusec.com/download/janusec-latest.tar.gz
$tar zxf ./janusec-latest.tar.gz
步驟 2: 安裝
請切換到root用戶並運行 install.sh , janusec應用網關將安裝在目錄: /usr/local/janusec/
$su
#cd janusec-0.9.3
#./install.sh
選擇 1. Master Node
, 然后安裝程序會:
- 將所需文件復制到
/usr/local/janusec/
- 將服務配置文件復制到系統服務目錄
- 將Janusec應用網關服務設置為自動啟動,但首次安裝時不會啟動,需要在配置完成后手工啟動一次.
步驟 3: 配置
PostgreSQL沒有包含在發布包中,需要自行准備PostgreSQL數據庫、用戶名 、口令,可參考運維管理中的PostgreSQL安裝。
現在我們假設您已經安裝好了PostgreSQL,且數據庫已創建,用戶名和口令已准備好。
然后編輯 /usr/local/janusec/config.json
:
{
“node_role”: “master”,
“master_node”: {
“admin_http_listen”: “:9080”,
“admin_https_listen”: “:9443”,
“database”: {
“host”: “127.0.0.1”,
“port”: “5432”,
“user”: “your_postgresql_user
”,
“password”: “your_postgresql_password
”,
“dbname”: “janusec
”
}
},
“slave_node”: {
“node_key”: “”,
“sync_addr”: “”
}
}
步驟 4: 啟動網關並測試
#systemctl start janusec.service
打開瀏覽器(比如Chrome),使用如下地址:
http://
網關IP地址
:9080/
這是Janusec應用網關的第一個管理地址(后面可啟用安全的管理地址)。
默認用戶名:admin
默認口令:J@nusec123
配置數字證書
如果僅使用HTTP,不使用HTTPS,可跳過此步驟;但強烈建議配置證書並啟用HTTPS。
使用瀏覽器打開 http://您的網關IP地址
:9080/ 並添加一張數字證書。
如果您還沒有數字證書,可以從Let's Encrypt
申請免費的數字證書。
使用記事本打開兩個證書文件(我的證書是從Let's Encrypt
申請的,一個文件名是fullchain.pem,是公開的證書文件;另一個是privkey.pem,是保密的私鑰文件),將其內容復制到Web管理控制台。
配置Web應用 (必選)
使用瀏覽器打開 http://網關IP地址
:9080/ 並添加一個應用.
填寫應用名稱、實際服務器的 IP:端口
等信息。
修改DNS或Hosts (必選)
生產環境,需要將修改DNS將您的域名指向網關地址。
測試環境,可直接修改您本地電腦的hosts文件: C:\Windows\System32\drivers\etc\hosts
.
驗證
配置完成后,驗證網關是否正常工作。
打開瀏覽器,訪問: http://your_domain_name
/
或
https://your_domain_name
/ .
如果可以正常訪問,表明網關已正常工作。
WAF驗證
安裝配置好之后,就來檢驗一下WAF(Web應用防火牆)是否工作正常。
使用如下測試用例:
http://domain_name/.svn/entries
http://domain_name/test?id=1 and 1=1
這時,立即看到了阻斷效果:
后面的使用就比較簡單了,我的WAF選型就此告一段落。
如果有不清楚的地方,也可參考官方網站上的說明:https://www.janusec.com/cn/ 。