首页 > 代码库 > Nginx基本安全优化

Nginx基本安全优化

隐藏Nginx软件版本号

隐藏Nginx版本号

1、调整参数隐藏版本号信息

  在Nginx配置文件nginx.conf中的http标签段内加入“server_tokens off;”参数如下:

http 
{
……
server_tokens off;
……
}

  此参数放置在http标签内,作用是控制http response header内的web服务版本信息的显示,以及错误信息中web服务版本信息的显示。

server_tokens参数说明:

syntax:   server_tokens on|off; 
#<=此行为参数语法,on为开启,off为关闭
default:  server_tokens on;
#<=此行意思是不配置该参数,软件默认情况的结果
context:  http,server,location
#<=此行为server_tokens参数可以放置的位置
参数作用:激活或禁止nginx的版本信息显示在报错信息和server的响应首部位置中

2、更改源码隐藏版本号

第一步依次修改3个Nginx源码文件

(1)修改第一个文件nginx-1.6.3/src/core/nginx.h如下:

[root@nginx01 core]# sed -n ‘13,17p‘ nginx.h 
#define NGINX_VERSION      "1.6.3"  #<=修改为想要显示的版本号
#define NGINX_VER          "nginx/" NGINX_VERSION  #<=将nginx修改为想要修改的软件名
#define NGINX_VAR          "NGINX"  #<=将nginx修改为想要修改的软件名称
#define NGX_OLDPID_EXT     ".oldbin"

修改后的结果为:

[root@nginx01 core]# sed -n ‘13,17p‘ nginx.h 
#define NGINX_VERSION      "2.2.23"
#define NGINX_VER          "OWS/" NGINX_VERSION
#define NGINX_VAR          "OWS"
#define NGX_OLDPID_EXT     ".oldbin"

(2)修改第二个文件nginx-1.6.3/src/http/ngx_http_header_filter_module.c的第49行:

[root@nginx01 http]# grep -n ‘Server: nginx‘ ngx_http_header_filter_module.c 
49:static char ngx_http_server_string[] = "Server: nginx" CRLF;

替换后的结果:

[root@nginx01 http]# sed -i ‘s#Server: nginx#Server: OWS#g‘ ngx_http_header_filter_module.c 
[root@nginx01 http]# grep -n ‘Server: OWS‘ ngx_http_header_filter_module.c 
49:static char ngx_http_server_string[] = "Server: OWS" CRLF;

(3)修改第三个文件nginx-1.6.3/src/http/ngx_http_special_response.c

[root@nginx01 http]# sed -n ‘21,30p‘ ngx_http_special_response.c 
static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF  #<=此行需要修改
"</body>" CRLF
"</html>" CRLF
;
static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF  #<=此行需要修改
"</body>" CRLF

修改后的结果为:

[root@nginx01 http]# sed -n ‘21,30p‘ ngx_http_special_response.c 
static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "(http://zhanghongxin.blog.51cto.com)</center>" CRLF
#<=此行是定义对外展示的内容
"</body>" CRLF
"</html>" CRLF
;
static u_char ngx_http_error_tail[] =
"<hr><center>OWS</center>" CRLF  #<=此行将对外展示的nginx名称更改为OWS
"</body>" CRLF

第二步修改后编译软件,使其生效

修改后再编译安装软件,如果是已安装好的服务,需要重新编译Nginx,配好配置,启动服务。


更改Nginx服务的默认用户

查看nginx对应的默认用户:

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

(1)为Nginx服务建立新用户

useradd -s /sbin/nologin -M nginx

(2)配置Nginx服务,让其使用刚建立的nginx用户

第一种直接更改配置文件参数,将默认的#user nobody;改为如下内容:

user  nginx nginx;

如果注释或不设置上述参数,默认为nobody用户,不推荐使用nobody用户,最好采用一个普通用户。

第二种为直接在编译Nginx软件时指定编译的用户和组,命令如下:

./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.3 --with-http_stub_status_module --with-http_ssl_module

(3)检查更改用户的效果

重新加载配置后,检查Nginx服务进程的对应用户;

[root@nginx01 conf]# ps -ef|grep nginx|grep -v grep
root       3895      1  0 Sep08 ?        00:00:06 nginx: master process /application/nginx/sbin/nginx
nginx     34007  34006  0 Sep09 ?        00:00:00 nginx: worker process            
nginx     34008  34006  0 Sep09 ?        00:00:00 nginx: worker process













本文出自 “小新” 博客,请务必保留此出处http://zhanghongxin.blog.51cto.com/11255031/1851420

Nginx基本安全优化