如何在 Linux 和 Unix 上隐藏 Nginx 版本
教程要求 | |
---|---|
要求 | 在 Linux/Unix 上运行的 Nginx |
Root 权限 | 是的 |
难度等级 | 简单的 |
类别 | Web 服务器 |
操作系统兼容性 | BSD • Linux • Unix |
预计阅读时间 | 3 分钟 |
使用 CLI 显示当前 Nginx 版本
Nginx 会在错误页面和“Server”响应头字段中显示版本。我们可以使用以下命令进行验证:
示例输出:
$ curl -I https://your-domain
$ curl -I https://www.example.com
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 命令如下:
查看我的 Nginx 服务器显示的版本:
$ curl -I https://your-domain-name-here
$ curl -I https://www.example.com
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 版本的其他可能值
语法如下:
Linux、*BSD 和 Unix 上的默认设置如下:
server_tokens on | off | build | string;
server_tokens on;
从服务器标头和错误页面中删除版本
我们可以更改为以下值来启用或禁用发射 nginx 版本:
- on:显示版本号。
- off:关闭显示版本号。
- build:确保我们发出构建名称以及 nginx 版本。您必须拥有 Nginx 版本 1.11.10。
- string:仅适用于商业订阅,从版本 1.9.13 开始,可以使用带变量的字符串明确设置错误页面上的签名和“服务器”响应标头字段值。空字符串将禁用“服务器”字段的发射。
在 Nginx 中设置自定义版本号
例如,商业订阅(Nginx Plus)用户可以按如下方式设置来伪造服务器版本和自定义名称:使用 service 命令或 systemctl 命令
server_tokens "example_WWW";
重新加载 Nginx 服务器
$ service nginx reload
:
再次使用 curl 命令进行测试,如下所示:
$ curl -I http://127.0.0.1/
隐藏版本是通过隐藏来实现安全性
是的,这是通过模糊性功能实现的安全性。它是纵深防御的方法之一。但是,它不应该成为主要的防御形式。您需要编写安全的代码。安装防火墙,尤其是 WAF(Web 应用程序防火墙)。没有理由公开 Nginx 或 PHP 或 Python 版本,因为它可能是攻击者的有用信息。请记住,无论 Nginx 版本是否公开,Linux/Unix 操作系统、Web 应用程序/Nginx 都应该保持安全。但是,我们不会通过发布版本号来给攻击者任何好处。有关更多信息,请参阅“前 25 个 Nginx Web 服务器最佳安全实践”。
结论
我们已向您展示了如何在基于 Linux 或 Unix 的系统上轻松隐藏 Nginx 版本。您可以从 Nginx 中的服务器标题横幅中删除版本。此外,Nginx plus(商业/付费选项)用户可以设置自定义 Nginx 版本。与往常一样,请参阅此处的 Nginx 文档。