我不想让任何人能够从互联网上检测到我正在使用 NGINX 甚至 Ubuntu。有一些工具(例如 BuiltWith)可以扫描服务器以检测他们正在使用什么工具。此外,一些破解工具可能有助于检测。我能用什么最好/最接近的方法将所有这些信息隐藏在外部?
答案1
您可以通过添加以下代码来停止输出 Nginx 和 OS 的版本
server_tokens off;
到http
、server
或location
上下文。
或者,如果您想完全删除服务器标头,则需要使用 Headers More 模块编译 Nginx,因为标头在 Nginx 源中是硬编码的,并且该模块允许更改任何 http 标头。
more_clear_headers Server;
但是,服务器通过其实现方式意外执行了许多隐藏的操作,这可能有助于识别系统。例如,它如何响应错误的 SSL 请求。我看不出有什么实用的方法可以防止这种情况。
我可能会建议以下一些事情:
- 更改错误模板
- 阻止除所需服务之外的所有端口
答案2
如果你已经在 Debian 或 Ubuntu 中使用 apt-get 安装了 nginx,则可能需要安装 nginx-extras 包来设置或清除“服务器”标头
完成后,您可以在 nginx.conf(通常是 /etc/nginx/nginx.conf)中添加以下行:
要完全清除“服务器”标头:
more_clear_headers Server;
将自定义字符串设置为“服务器”
more_set_headers 'Server: some-string-here';
答案3
@Martin F. 是的。您必须从源代码进行编译,并在编译源代码之前更改所需的内容。
我假设您下载了最新的稳定版本,并对其进行了解压,并且知道文件在哪里。如果是这样,请执行以下操作:
nano src/http/ngx_http_header_filter_module.c
如果我没记错的话,然后查找第 48 行。
static char ngx_http_server_string[] = "Server: nginx" CRLF;
将 nginx 替换为 MyWhateverServerNameIWant 例如
static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF;
然后
nano src/core/nginx.h
寻找线
#define NGINX_VER "nginx/" NGINX_VERSION
将“nginx/”更改为“MyWhateverServerNameIWant/”,这样它将读取
#define NGINX_VER "MyWhateverServerNameIWant" NGINX_VERSION
最后,如果你还想更改版本号
查找行#define NGINX_VERSION“1.0.4”
并将“1.0.4”更改为您想要的任何版本。例如它将显示为
#define NGINX_VERSION "5.5.5"
希望它能有所帮助。尽管如此。保护服务器远不止不显示正在运行的内容。PHP 本质上是不安全的,Linux 也是如此。当然,如果采取所有必要的措施来实现良好的安全性,Linux 可以非常安全。就 PHP 而言,我建议使用索辛帮助加强你的代码的安全性。
答案4
在花了大量时间研究如何在 ubuntu 上实现自定义 nginx 风格之后,我意识到可以为此使用 lua 模块。
如果您在 ubuntu 14.04 上安装了该nginx-extras
包,则可以使用以下命令删除服务器标头:
header_filter_by_lua 'ngx.header["server"] = nil';
将其放入 http 块中,每个请求都会缺少一个Server
标头。
如果不起作用,请运行nginx -V
以验证您是否已将 lua 模块编译到您的 nginx 副本中。如果没有,则可能有一个备用包可用于获取它。