我可以隐藏所有服务器/操作系统信息吗?

我可以隐藏所有服务器/操作系统信息吗?

我不想让任何人能够从互联网上检测到我正在使用 NGINX 甚至 Ubuntu。有一些工具(例如 BuiltWith)可以扫描服务器以检测他们正在使用什么工具。此外,一些破解工具可能有助于检测。我能用什么最好/最接近的方法将所有这些信息隐藏在外部?

答案1

您可以通过添加以下代码来停止输出 Nginx 和 OS 的版本

server_tokens off;

httpserverlocation上下文。

或者,如果您想完全删除服务器标头,则需要使用 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 副本中。如果没有,则可能有一个备用包可用于获取它。

相关内容