我不希望任何人能够从互联网上检测到我正在使用 NGINX 甚至 Ubuntu。有一些工具(例如 BuiltWith)可以扫描服务器以检测它们正在使用哪些工具。此外,一些破解工具可能有助于检测。我可以从外部隐藏所有这些信息的最佳/最接近的方法是什么?
And*_*ndy 146
您可以通过添加来阻止它输出 Nginx 和 OS 的版本
server_tokens off;
Run Code Online (Sandbox Code Playgroud)
到http,server或location上下文。
或者,如果您想完全删除 Server 标头,则需要使用 Headers More 模块编译 Nginx,因为标头在 Nginx 源代码中是硬编码的,并且该模块允许更改任何 http 标头。
more_clear_headers Server;
Run Code Online (Sandbox Code Playgroud)
然而,服务器通过它们的实施意外执行的许多隐藏方式可能有助于识别系统。例如,它如何响应错误的 SSL 请求。我没有看到防止这种情况的实用方法。
我可能建议的一些事情:
小智 46
如果您在 Debian 或 Ubuntu 中使用 apt-get 安装了 nginx,则可能需要安装 nginx-extras 包来设置或清除“服务器”标头
完成此操作后,您可以在 nginx.conf(通常为 /etc/nginx/nginx.conf)中添加以下行:
要完全清除“服务器”标题:
more_clear_headers Server;
Run Code Online (Sandbox Code Playgroud)
将自定义字符串设置为“服务器”
more_set_headers 'Server: some-string-here';
Run Code Online (Sandbox Code Playgroud)
小智 22
@Martin F. 是的。您必须从源代码编译它并在编译源代码之前更改所需的内容。
我假设您下载了解压后的最后一个稳定版本,并且您知道文件在哪里。如果是这种情况,请执行以下操作:
nano src/http/ngx_http_header_filter_module.c
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,然后查找第 48 行。
static char ngx_http_server_string[] = "Server: nginx" CRLF;
Run Code Online (Sandbox Code Playgroud)
用 MyWhateverServerNameIWant 替换 nginx 例如
static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF;
Run Code Online (Sandbox Code Playgroud)
然后
nano src/core/nginx.h
Run Code Online (Sandbox Code Playgroud)
寻找线
#define NGINX_VER "nginx/" NGINX_VERSION
Run Code Online (Sandbox Code Playgroud)
将“nginx/”更改为“MyWhateverServerNameIWant/”,以便读取
#define NGINX_VER "MyWhateverServerNameIWant" NGINX_VERSION
Run Code Online (Sandbox Code Playgroud)
最后,如果您还想更改版本号
寻找 #define NGINX_VERSION "1.0.4" 行
并为您想要的任何版本更改“1.0.4”。例如它会读
#define NGINX_VERSION "5.5.5"
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。尽管如此。保护服务器远不止不显示正在运行的内容。PHP 本质上是不安全的,Linux 也是如此。当然,如果采取所有必要的措施来实现体面的安全性,Linux 可以非常安全。就 PHP 而言,我建议使用Suoshin来帮助加强代码的安全性。
经过大量时间研究如何在 ubuntu 上自定义 nginx 风格,我意识到您可以为此使用 lua 模块。
在 ubuntu 14.04 上,如果您安装了该nginx-extras软件包,则可以使用以下方法删除服务器标头:
header_filter_by_lua 'ngx.header["server"] = nil';
把它放在 http 块中,每个请求都将缺少Server标头。
如果它不起作用nginx -V,请运行以验证您是否已将 lua 模块编译到您的 nginx 副本中。如果没有,您可能可以使用替代软件包来获取它。
小智 7
建议使用新指令header_filter_by_lua_block而不是header_filter_by_lua ,它直接在大括号 ( )之间内联 Lua 源。这样就不需要转义特殊字符了。{}
header_filter_by_lua_block {
ngx.header["server"] = nil
}
https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block
小智 6
1)安装nginx-extras软件包旁边nginx:
apt install nginx-extras
Run Code Online (Sandbox Code Playgroud)
2)打开nginx.conf并在http块内添加以下行:
more_clear_headers Server;
server_tokens off;
Run Code Online (Sandbox Code Playgroud)
3) 重启 nginx
小智 5
只是想指出,即使服务器标头从响应中删除,服务器的名称(例如 nginx 或 openresty)仍然在服务器发生错误时发送的 html 错误响应中清晰可见。
任何人都可以很容易地得到这个响应,例如发送一个太长的标头。Nginx 将返回一个 400 Bad Request,它不包含服务器标头(如果已修复),但 html 本身会显示它:
PS我也不知道如何摆脱这个,真的html本身会放弃它,所以应该有一种方法可能根本不生成这些?
| 归档时间: |
|
| 查看次数: |
148993 次 |
| 最近记录: |