nginx基本安全優化

1、調整參數隱藏nginx軟件版本號信息

查看nginx版本信息:html

[root@nginx conf]# curl -I 192.168.200.102
HTTP/1.1 200 OK
Server: nginx/1.8.1    #這裏顯示了nginx的版本號即軟件名稱;
Date: Fri, 31 Aug 2018 09:20:47 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT
Connection: keep-alive
ETag: "5b88ff2f-264"
Accept-Ranges: bytes

 隱藏nginx版本號只須要在nginx.conf文件中的http標籤段內加入「server_tokens off」參數便可。nginx

server_tokens參數的官方說明以下:安全

syntax:    server_tokens on | off;    #此行爲參數語法,on爲開啓狀態,off爲關閉狀態;
default:    server_tokens on;            #此行意思是不配置改參數,軟件默認狀況的結果;
context:    http,server,location          #此行爲server_tokens參數能夠放置的位置;
參數做用:激活或禁止nginx的版本信息顯示在報錯信息和server的響應首部位置中;
Enables or disables emitting of nginx version in error messages and inter"Server" response header field.    #此行是參數的原文做用;

官方資料地址:架構

操做以下:app

[root@nginx conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
	server_tokens off;        #加入這一行便可;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

再次查看,nginx的版本信息就隱藏了:curl

[root@nginx conf]# systemctl reload nginx

[root@nginx conf]# curl -I 192.168.200.102
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 31 Aug 2018 09:34:16 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT
Connection: keep-alive
ETag: "5b88ff2f-264"
Accept-Ranges: bytes

 2、更改源碼隱藏nginx軟件名

建議在編譯安裝前修改,安裝後修改軟件名,須要從新編譯。優化

第一步:依次修改3個nginx源碼文件:ui

修改nginx.h文件
路徑爲:nginx源碼包下面的 src/core/nginx.h

修改後以下:
...
#define NGINX_VERSION      "1.0"
#define NGINX_VER          "Web" NGINX_VERSION
...
#define NGINX_VAR          "Web"
...

修改ngx_http_header_filter_module.c文件
路徑爲:nginx源碼包下面的 src/http/ngx_http_header_filter_module.c

修改第49行,修改後以下:
static char ngx_http_server_string[] = "Server: Web" CRLF;
也能夠 經過sed替換修改,命令以下:
sed -i '49 $#nginx#Web#g' ngx_http_header_filter_module.c

修改ngx_http_header_filter_module.c文件
路徑爲:nginx源碼包下面的 src/http/ngx_http_header_filter_module.c
修改後以下:
第22行:"<hr><center>Web</center>" CRLF
第29行:"<hr><center>Web</center>" CRLF

 第二步:修改後編譯軟件使其生效(若是是已經安裝好的,須要從新編譯。)url

systemctl stop nginx

./configure --user=www --group=www --prefix=/application/nginx-1.8.1 --with-http_stub_status_module --with-http_ssl_module

make && make install

systemctl start nginx

[root@nginx nginx-1.8.1]# curl -I 192.168.200.102
HTTP/1.1 200 OK
Server: Web            #服務名稱和版本號已隱藏;
Date: Fri, 31 Aug 2018 15:00:46 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT
Connection: keep-alive
ETag: "5b88ff2f-264"
Accept-Ranges: bytes

 3、更改nginx服務的默認用戶

 查看nginx服務對應的默認用戶,通常狀況下,nginx服務啓動後,默認使用的用戶是nobody,查看默認的配置文件,以下:spa

[root@nginx conf]# grep '#user' nginx.conf.default
#user  nobody;

 更改nginx的默認用戶,操做以下:

1、爲nginx服務創建新用戶
[root@nginx conf]# useradd www -s /sbin/nologin -M
[root@nginx conf]# id www
uid=1002(www) gid=1002(www) 組=1002(www)

2、配置nginx服務,讓其使用剛創建的nginx用戶
第一種爲直接更改配置文件參數,將默認的#user nobody;改成以下內容:
user nginx nginx

第二種方法爲直接在編譯nginx軟件是指定編譯的用戶和組,命令以下:
./configure --user=www --group=www --prefix=/application/nginx-1.8.1 --with-http_stub_status_module --with-http_ssl_module

3、檢查更改用戶的效果
[root@nginx conf]# ps -ef |grep nginx|grep -v frep
root       7360      1  0 23:00 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
www        7362   7360  0 23:00 ?        00:00:00 nginx: worker process
root       7416   1271  0 23:16 pts/0    00:00:00 grep --color=auto nginx

 經過查看更改後的nginx進程,能夠看到worker processes進程對應的用戶都變成了nginx。固然,nginx的主進程仍是以root身份運行的,後面的文章中會有更改root主進程服務用戶的深度安全優化與架構技巧。

相關文章
相關標籤/搜索