1. 程式人生 > >Nginx優化實戰--基本安全優化

Nginx優化實戰--基本安全優化

1.調整引數隱藏Nginx軟體版本號資訊

軟體的漏洞都和版本有關。因此我們應儘量隱藏或消除Web服務對訪問使用者顯示各類敏感資訊(如Web軟體名稱及版本號等資訊),這樣惡意的使用者就不會跟局軟體版本漏洞來攻擊,從而加強Web服務的安全性。

☁  ~  curl -I www.gzsteam.cn
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.3   #<== 這裡很清晰地暴露了Web版本號以及軟體名稱 
Date: Tue, 30 May 2017 13:52:23 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive Location: https://www.gzsteam.cn/

隱藏版本號的方法:在nginx.conf的http標籤段內加入server_tokens off 引數

http 
{
    ......
    server_tokens off
    ......
}

重啟nginx,執行結果如下:

☁  centstead [master] curl -I www.gzsteam.cn
HTTP/1.1 301 Moved Permanently
Server: nginx    #<== 這裡沒有版本號了
Date: Tue, 30
May 2017 14:07:55 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://www.gzsteam.cn/

2.更改原始碼隱藏Nginx軟體名及版本號

  1. 第一步是修改依次修改3個Nginx原始碼檔案。
#nginx-1.12.0/src/core/nginx.h 13-17行左右

#define NGINX_VERSION   *1.12.0*  #<==修改成你想要顯示版本號如2.2.0
#define NGINX_VER       *nginx/* NGINX_VERSION #<==修改成想要的軟體名稱,如百度的bfe 自己隨便寫,如hank/*
#define NGINX_VAR *NGINX* #<==對應上面的修改hank #nginx-1.12.0/src/http/ngx_http_header_filter_module.c 49行左右 static char ngx_http_server_string[] = "Server:nginx " CRLF; #<==修改成Server: hank " CRLF #nginx-1.12.0/src/http/ngx_http_special_response.c "<hr><center>" NGINX_VER"</center>" CRLF #<==此處修改" NGINX_VER"(http://[email protected] "<hr><center>Nginx</center>" CRLF #<==此處修改成hank

2.修改後編譯軟體,使其生效

3.更改Nginx服務的預設使用者

nginx預設配置檔案是nginx.conf.default

[root@vultr conf]# grep "#user" nginx.conf
#user  nobody;

防止被攻擊者猜到這個Web服務使用者,我們需要修改成特殊的使用者名稱。如nginx

  • 為Nginx服務建立新使用者
useradd nginx -s /sbin/nologin -M
  • 配置Nginx服務,讓其使用剛建立的nginx使用者(nginx.conf)
user nginx nginx;

另外可以在編譯的時候,直接指定使用者和使用者組

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 檢查更改使用者的效果

重新載入配置後,檢查Nginx服務程序的對應使用者

[root@vultr conf]# ps -ef|grep nginx|grep -v grep
root       911     1  0 323 ?       00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     2648   404  0 323 ?       00:00:13 php-fpm: pool www
nginx     6342   404  0 426 ?       00:00:04 php-fpm: pool www
nginx     9040   911  0 14:07 ?        00:00:00 nginx: worker process