Nginx基本安全优化

来源:互联网 发布:js主动触发微信分享 编辑:程序博客网 时间:2024/06/15 19:32

1.1 调整隐藏Nginx软件版本号信息
一般来说,软件的漏洞和版本有关,因此,我们应该隐藏或消除web服务对访问用户显示显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就很难猜到他攻击的服务器所用的是否有特定漏洞的软件,或者是否有对应漏洞的某一些特定版本,从而加强web服务安全性。

 **想要了解使用软件的版本号,linux下最简单的方法就是执行curl命令:**
 [root@lb01 nginx-1.10.3]# curl -I 10.0.0.5HTTP/1.1 200 OKServer: nginx/1.10.3    #<==这里很清晰的暴露了web版本号(1.10.3)Date: Mon, 18 Sep 2017 14:16:26 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Mon, 18 Sep 2017 14:12:29 GMTConnection: keep-aliveETag: "59bfd44d-264"Accept-Ranges: bytes

在windows客户端上,通过浏览器访问web服务时,如找不到页面,默认报错的信息:
小颜团子

以上虽然是不同的客户端,但是都获得了Nginx软件名称,而且查到了Nginx的版本号,这就使得Nginx web服务的安全存在一定的风险,因此,应该隐藏掉这些敏感信息或用一个其他的名字将其替代。
事实上,还可以通过配置文件加参数来隐藏Nginx版本号。
在Nginx配置文件nginx.conf 中的http 标签段内加入“server_tokens off; ”参数,如下:
小颜团子
此参数放置在http标签内,作用是控制http response header内的web服务版本信息的显示,以及错误信息中web服务版本的显示。

配置完此参数后保存,重新加载配置文件,在此通过curl查看,结果如下:

[root@lb01 nginx-1.10.3]# curl -I 10.0.0.5HTTP/1.1 200 OKServer: nginx      #<==此时版本号码已消失啦!!Date: Mon, 18 Sep 2017 15:01:32 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Mon, 18 Sep 2017 14:12:29 GMTConnection: keep-aliveETag: "59bfd44d-264"Accept-Ranges: bytes

*1.2更改源码隐藏Nginx软件名及版本号
隐藏了版本号后,可以通过一些手段把web服务软件的名称也隐藏起来,来迷惑黑客。但软件名字的隐藏修改,一般情况下不会有配置参数入口,Nginx也不例外。因此此处需要更改Nginx源代码,具体的解决方法如下。
第一步是一次修改3个Nginx源码文件
修改的第一个文件为/nginx-1.10.3/src/core/nginx.h 如下:

[root@lb01 core]# sed -n  '13,17p' nginx.h#define NGINX_VERSION      "2.10.10" #<==将此处的版本号改成你想要的。#define NGINX_VER          "OWS/" NGINX_VERSION #<==还有这里。

修改第二个文件是nginx-1.10.3/src/http/ngx_http_header_filter_module.c

通过sed替换: sed -i  's#Server: nginx#Server: OWS#g' ngx_http_header_filter_module.c 

修改第三个配置文件是:nginx-1.10.3/src/http/ngx_http_special_response.c

[root@lb01 http]# sed -n '21,31p' ngx_http_special_response.c static u_char ngx_http_error_full_tail[] ="<hr><center>" OWS "</center>" CRLF #<==将此处修改为“OWS”"</body>" CRLF"</html>" CRLF;

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

--prefix=/application/nginx-1.10.3 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

最后通过在命令行curl 命令查看效果,也可以通过浏览器进行查看,这里就不给大家演示了!!!!

1.3更改Nginx服务的默认用户
为了使web服务更安全,要尽可能的改掉软件默认的所有配置,包括端口、用户等。

首先,查看Nginx服务对应的默认用户是nobody,查看默认的配置文件如下:

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

为了防止黑客猜到这个web服务的用户,我们需要改成特殊的用户名,例如nginx或特殊点的inca,但是这个用户必须是系统里事先存在的,下面以nginx用户为例:

1.useradd nginx -s /sbin/nologin -M ###首先这里先创建一个nginx用户2.修改配置文件nginx.confuser  nginx nginx;

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

--prefix=/application/nginx-1.10.3 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

修改完成后 nginx -s reload 重新加载
最后就应该检查更改用户的效果了:

[root@lb01 conf]# ps -ef|grep nginx|grep -v greproot       5358      1  0 11?       00:00:00 nginx: master process nginxnginx      5700   5358  0 00:11 ?        00:00:00 nginx: worker process此时可以看到worker process进程已经变为nginx。上述的两种方法都可以设置worker进行运行的用户。

这里的只是更改了worker进程的用户,当然后续的博文也会有怎么更改root主进程用户,还会有更详细的知识哦!!!!!!!!!!!!!