云安全解決方案【云鎖】Nginx模塊開源,,幫助用戶適配更多的Nginx版本,。秉承著讓安全變得更簡(jiǎn)單的宗旨,,讓動(dòng)手能力強(qiáng)的小伙伴親自打造適合自己的Nginx環(huán)境。
除了采用內(nèi)核加固技術(shù)來(lái)增強(qiáng)服務(wù)器自身對(duì)抗惡意代碼和黑客攻擊的策略外,云鎖通過(guò)在web中間件部署安全模塊的方式來(lái)對(duì)抗網(wǎng)絡(luò)攻擊,通過(guò)安全模塊的filter過(guò)濾功能,云鎖能高效過(guò)濾惡意流量和黑客攻擊,強(qiáng)力對(duì)抗CC,、SQL注入、上傳一句木馬等網(wǎng)絡(luò)攻擊,。
一般情況下,,當(dāng)用戶安裝云鎖的時(shí)候,云鎖會(huì)自動(dòng)適配nginx版本,,使用我們已經(jīng)預(yù)編譯好的包含云鎖模塊的 nginx備份并替換掉您當(dāng)前系統(tǒng)中使用的nginx,。卸載時(shí),會(huì)將系統(tǒng)原始nginx文件替換回來(lái),。因此,,云鎖可保護(hù)使用nginx搭建的網(wǎng)站,開創(chuàng)了這個(gè)領(lǐng)域的先河,。
此文檔假設(shè)您曾經(jīng)編譯過(guò)nginx或tengine源代碼,,如果您之前沒(méi)有經(jīng)驗(yàn),請(qǐng)參考:http://nginx.org/en/docs/configure.html
如何編譯云鎖nginx模塊,,步驟如下:
1. 為避免意外情況發(fā)生,, 請(qǐng)先將系統(tǒng)當(dāng)前使用中的nginx進(jìn)行備份(包括相關(guān)的網(wǎng)站配置文件)
2. wget https://codeload.github.com/yunsuo-open/nginx-plugin/zip/master -O nginx-plugin-master.zip
3. unzip nginx-plugin-master.zip
4. cd nginx-plugin-master
5. pwd 獲取當(dāng)前云鎖插件源碼所在目錄的全路徑 (假設(shè)為:/home/nginx-plugin-master,實(shí)際情況以pwd輸出為準(zhǔn))
6. 如果您的環(huán)境是tengine,可以跳過(guò)這一步,。對(duì)于nginx版本,,由于其不支持post過(guò)濾,,所以需要修改nginx源碼目錄下src/http/ngx_http_upstream.c 文件 步驟如下:
a. 查找 static void ngx_http_upstream_init_request(ngx_http_request_t *r)函數(shù),,在其 所在行上方添加:int ngx_http_yunsuo_post_in_handler(ngx_http_request_t *r);
b. 在ngx_http_upstream_init_request函數(shù)開頭,變量聲明后,,添加:
if(ngx_http_yunsuo_post_in_handler(r))
{
return;
}
什么,?沒(méi)看懂?好吧,,以nginx-1.0.11為例:
修改前源碼:
static void
ngx_http_upstream_init_request(ngx_http_request_t *r)
{
ngx_str_t *host;
ngx_uint_t i;
ngx_resolver_ctx_t *ctx, temp;
ngx_http_cleanup_t *cln;
ngx_http_upstream_t *u;
ngx_http_core_loc_conf_t *clcf;
ngx_http_upstream_srv_conf_t *uscf, **uscfp;
ngx_http_upstream_main_conf_t *umcf;
if (r->aio) {
return;
}
u = r->upstream;
......
}
修改后源碼:
static void
ngx_http_upstream_init_request(ngx_http_request_t *r)
{
ngx_str_t *host;
ngx_uint_t i;
ngx_resolver_ctx_t *ctx, temp;
ngx_http_cleanup_t *cln;
ngx_http_upstream_t *u;
ngx_http_core_loc_conf_t *clcf;
ngx_http_upstream_srv_conf_t *uscf, **uscfp;
ngx_http_upstream_main_conf_t *umcf;
if (r->aio) {
return;
}
u = r->upstream;
......
}
7. 云鎖的nginx插件模塊是標(biāo)準(zhǔn)的nginx模塊,,所以您在編譯nginx過(guò)程中,configure時(shí)只要添加額外參數(shù) --add-module=/home/nginx-plugin-master(注意:/home/nginx-plugin-master為示例,,實(shí)際路徑以步驟5中pwd命令為準(zhǔn)) 即可讓nginx支持云鎖的功能,,示例如下:
假設(shè)您之前configure時(shí)的命令如下:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-http_gzip_static_module \
--add-module=../ngx_cache_purge-1.3
現(xiàn)在的configure時(shí)的命令如下:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-http_gzip_static_module \
--add-module=../ngx_cache_purge-1.3
--add-module=/home/nginx-plugin-master
8. 編譯 nginx (注意:如果原本已經(jīng)有 nginx, 只執(zhí)行 make 即可,make install 會(huì)覆蓋掉你的 nginx.conf)
9. 將系統(tǒng)當(dāng)前使用中的nginx二進(jìn)制文件替換為剛剛編譯好的包含了云鎖模塊的nginx文件即可
讓云鎖識(shí)別您自己編譯的nginx,,步驟如下:
1. 安裝云鎖,,如果您已經(jīng)安裝了云鎖,可跳過(guò)此步驟,。如果還沒(méi)有,,請(qǐng)到http://www.yunsuo.com.cn/ht/software/ 下載并安裝云鎖
2. cd /usr/local/yunsuo_agent/nginx/
3. ./configure_compiled_nginx nginx_install_path (nginx_install_path為nginx的安裝路徑,即configure時(shí) --prefix=path 如果未指定過(guò)路徑, 那么默認(rèn)為/usr/local/nginx)
FAQ
1. 什么情況下我需要自己編譯云鎖的nginx模塊,?
(a)當(dāng)您的nginx使用了第三方或者自己開發(fā)的模塊的時(shí)候,需要編譯云鎖的nginx模塊,。您可以通過(guò)nginx -V命令查看輸出的 信息里是否包含了 --add-module= 的字樣 (例如:--add-module=../ngx_cache_purge-1.3 說(shuō)明使用了ngx_cache_purge-1.3第三方 模塊)
(b)當(dāng)使用tengine的時(shí)候,,需要編譯云鎖的nginx模塊 c.當(dāng)您發(fā)現(xiàn)當(dāng)前使用的nginx版本比我們自動(dòng)安裝的版本高的時(shí)候,可以自己編譯云鎖的nginx模塊
(c)當(dāng)您發(fā)現(xiàn)當(dāng)前使用的nginx版本比我們自動(dòng)安裝的版本高的時(shí)候,,可以自己編譯云鎖的nginx模塊
2. 如果我把云鎖卸載了,,nginx需要重新編譯嗎?
不需要,,云鎖的nginx模塊會(huì)判斷云鎖是否安裝,,如果不安裝則不生效。當(dāng)然您也可以替換回之前的nginx
3. 我應(yīng)該先安裝云鎖,,還是先編譯nginx?
都可以,,沒(méi)有先后順序關(guān)系
4. 怎樣單獨(dú)卸載 nginx 插件?
有如下三種方式可以實(shí)現(xiàn)卸載插件:
(a)現(xiàn)有版本 nginx 默認(rèn)不支持從客戶端卸載,如果想支持從客戶端卸載,, 需要手動(dòng)將 系統(tǒng)原有的 nginx 重命名為 nginx.bak, 并將之替換 /usr/local/yunsuo_agent/nginx/backup 目錄下的 nginx.bak(此操作需要關(guān)閉云鎖自保護(hù)功能),, 這樣就可以使用客戶端的插件卸載功能了
(b)手動(dòng)刪除或者重命名 /usr/local/yunsuo_agent/nginx/ 目錄下的 libnginx_plugin.so(此操作需要關(guān)閉云鎖自保護(hù)功能), 重啟 nginx 服務(wù)即可
(c)手動(dòng)使用系統(tǒng)原有的 nginx 直接替換 當(dāng)前使用的帶有云鎖插件的 nginx
推薦使用第一種方式,, 因?yàn)槠浔阌诤罄m(xù)的安裝和卸載
推薦使用第一種方式,, 因?yàn)槠浔阌诤罄m(xù)的安裝和卸載
云鎖在GitHub等您,點(diǎn)擊鏈接 https://github.com/yunsuo-open/nginx-plugin#rd 了解詳情,。