如何在Linux和Unix上隐藏Nginx版本

时间:2020-01-09 14:16:37  来源:igfitidea点击:

默认情况下,查询HTTP标头或Nginx服务器生成的错误时显示的Nginx版本。
本快速指南介绍了如何在不重新启动系统的情况下在Linux或Unix服务器上隐藏或删除Nginx版本。

使用CLI显示当前Nginx版本

Nginx将在错误页面和服务器响应标题字段中显示版本。
我们可以使用以下命令来验证:

$ curl -I https://your-domain
$ curl -I https://www.theitroad.local

输出示例:

HTTP/2 200 
server: nginx/1.17.10 (Ubuntu)
date: Tue, 23 Jun 2020 09:36:49 GMT
content-type: text/html; charset=UTF-8
strict-transport-security: max-age=15768000
x-whome: l-ncbz01-mg-wg

这是显示信息的HTTP/502错误页面的输出:

使用server_tokens指令隐藏Nginx版本

解决方法:您需要将server_tokens设置为off才能在Linux和类似Unix的系统上隐藏Nginx服务器版本。
使用诸如vim/nano之类的文本编辑器编辑nginx.conf文件:

$ sudo vim /etc/nginx/nginx.conf

我们只能在http,服务器或位置上下文中设置server_tokens。
我将添加到我的http部分:

server_tokens off;

外观如下:

http {
        ## Basic Settings ##
        charset utf-8;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        log_not_found off;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        client_max_body_size 16M;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ## Hide Nginx version ##
        server_tokens   off;
        ## Security headers for Nginx ## 
        add_header Strict-Transport-Security "max-age=15768000" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Xss-Protection "1; mode=block" always;
        add_header Referrer-Policy  strict-origin-when-cross-origin;
        add_header Feature-policy "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'";
        add_header Content-Security-Policy   "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
        ## SSL Settings ##
        ssl_protocols TLSv1.3;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        ## Virtual Host Configs ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

正常重启或重新加载Nginx服务器:

$ sudo nginx -t
$ sudo nginx -s reload

验证Nginx版本是否隐藏

使用curl命令,如下所示:

curl -I https://your-domain-name-here
curl -I https://www.theitroad.local

看起来没有版本显示:

HTTP/2 200 
server: nginx
date: Tue, 23 Jun 2020 09:43:17 GMT
content-type: text/html; charset=UTF-8
strict-transport-security: max-age=15768000

Firefox确认我也成功隐藏了Nginx版本:

隐藏Nginx版本的其他可能值

语法如下:

server_tokens on | off | build | string;

在Linux,* BSD和Unix上,默认设置如下:

server_tokens on;

从服务器标题和错误页面中删除版本

我们可以更改为以下值以启用或禁用发射nginx版本:

  • on:显示版本号。
  • off:关闭显示版本号。
  • build:确保我们发出了一个版本名称以及nginx版本。您必须具有Nginx版本1.11.10。
  • 字符串:仅适用于商业订阅,从1.9.13版本开始,错误页面上的签名和服务器响应标头字段值可以使用带变量的字符串进行显式设置。空字符串将禁用"服务器"字段的发射。

在Nginx中设置自定义版本号

例如,商业订阅(Nginx Plus)用户可以如下设置其以伪造服务器版本和自定义名称:

server_tokens "theitroad_WWW";

重新加载Nginx服务器:

# service nginx reload

使用curl命令进行测试

curl -I http://127.0.0.1/

隐藏版本是默默无闻的安全性

是的,这是通过隐蔽性功能实现的安全性。
它是深度防御的方法之一。
但是,它不应该是防御的主要形式。
解决方法:您需要编写安全的代码。
安装防火墙,尤其是WAF(Web应用程序防火墙)。
没有必要公开Nginx或PHP或Python版本,因为它可能对攻击者有用。
请记住,无论Nginx版本是否公开,Linux/Unix操作系统,Web应用程序/Nginx都应保持安全。
但是,我们不会通过发布版本号来为攻击者提供任何帮助。