我不希望任何人能够从互联网上检测到我正在使用NGINX甚至是Ubuntu。 有些工具(比如BuiltWith)可以扫描服务器来检测他们正在使用的工具。 此外,一些破解工具可能有助于检测。 什么是最好的/最接近我可以隐藏所有这些信息从外面?
您可以通过添加来停止输出Nginx和OS的版本
server_tokens off;
到http
, server
或location
上下文。
或者如果你想完全删除Server头,你需要编译Nginx的Headers More模块,因为头在Nginx源代码中被硬编码,而且这个模块允许改变任何http头。
more_clear_headers Server;
但是,服务器通过实现有许多隐藏的方式,可能有助于识别系统。 例如,它如何响应不良的SSL请求。 我没有看到防止这种情况的实际方法。
我可能会build议的一些事情:
@马丁F.是的。 您将不得不从源代码编译它,并在编译源代码之前更改所需内容。
我假设你下载了你解压缩的最后一个稳定版本,你知道这些文件在哪里。 如果是这种情况,请执行以下操作:
nano src/http/ngx_http_header_filter_module.c
如果我记得正确的话,find第48行。
static char ngx_http_server_string[] = "Server: nginx" CRLF;
用MyWhateverServerNameIWantreplacenginx
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而言,我会build议使用Suoshin来帮助加强代码的安全性。
如果您在Debian或Ubuntu中使用apt-get安装了nginx,则可能需要安装包nginx-extras以设置或清除“Server”标头
一旦完成,你可以在nginx.conf中添加下面的行(通常是/etc/nginx/nginx.conf):
要完全清除“服务器”标题:
more_clear_headers Server;
将自定义string设置为“服务器”
more_set_headers 'Server: some-string-here';
经过大量的时间研究如何在Ubuntu上做一个自定义的nginx,我意识到你可以使用lua模块。
在ubuntu 14.04上,如果你安装了nginx-extras
软件包,你可以使用下面的命令删除服务器头文件:
header_filter_by_lua 'ngx.header["server"] = nil';
把这个放在http块中,每个请求都会缺less一个Server
头。
如果它不起作用,请运行nginx -V
来validation你的lua模块已经编译到你的nginx的副本中。 如果没有,可能会有一个备用包可以用来获取它。
build议使用新的伪指令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
在nginx源代码文件夹中运行这个bash函数。 在nginx- $版本中,不在src /中。
根据这个答案 。
hidengxver () { read -r -p "Your own http_server_string for safety: " http_server_string first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;" second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;" sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c read -r -p "Your own NGINX_VER const: " nginx_ver third_string="\#define NGINX\_VER \"nginx\/\" NGINX\_VERSION" forth_string="\#define NGINX\_VER \"$nginx_ver\" NGINX\_VERSION" sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' ) read -r -p "Your own NGINX_VERSION const: " new_nginx_version fifth_string="\#define NGINX\_VERSION \"$real_nginx_version\"" sixth_string="\#define NGINX\_VERSION \"$new_nginx_version\"" sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h }
参考这个要点 。 当然会帮助你。