這才叫云安全,云鎖Nginx過(guò)濾模塊開(kāi)源啦!
云安全解決方案【云鎖】今日宣布Nginx模塊開(kāi)源,幫助用戶適配更多的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)站,開(kāi)創(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ù)開(kāi)頭,變量聲明后,添加: 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使用了第三方或者自己開(kāi)發(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 了解詳情。