引言
在网络安全领域,服务器信息的暴露常常被视为一种潜在的风险。具体来说,Nginx服务器的版本号暴露无异于向攻击者明牌,增加了被针对性攻击的风险。本文将介绍一种比关闭server_tokens更灵活、更隐蔽的方法 。
暴露版本号的危害
有时候我们可能会质疑,泄露nginx的版本号有什么大不了?但实际上主要通过恶意构造的请求就能产生致命的威胁,如 1.15.6 和 1.14.1 版本之前的 nginx 在 HTTP/2 实现中存在漏洞,构造之后的请求就可能导致nginx内存消耗过大,严重者出现拒绝服务(Dos)。
大型网站的做法
大型的网站基本会隐藏版本号,更有甚者会自定义web引擎的名称,我们先看下天猫和京东的做法。
天猫:
京东:
从上面的截图,我们可以看出,没有一家是显示web引擎的版本号的。
实用方法介绍
在上一篇文章中,我们已经介绍了nginx的编译方法,包含了headers-more-nginx-module模块,其中有个指令more_set_headers可以实现灵活隐藏web引擎版本号,倘若公司的安全防护等级降低,甚至可以自定义名称,下面是实现的方法:
# 在http块中添加,全局生效
http {
more_set_headers 'Server: SRE';
}
# 在server块中添加,局部生效,更加灵活
server {
more_set_headers 'Server: SRE';
}
通过上面的配置后,站点反馈的response headers的server头将返回值为SRE,黑客的攻击成本将大大提高。
当然,headers-more-nginx-module模块还有其他实用的指令,都看一下吧:
1. more_clear_headers:用于删除指定的HTTP头。
location / {
more_clear_headers 'Server';
}
这将删除响应头中的Server
字段。
2. more_set_input_headers:用于修改传入请求的HTTP头。
location / {
more_set_input_headers 'X-Forwarded-Proto: https';
}
这将为所有传入请求添加或修改X-Forwarded-Proto头。
3. more_clear_input_headers:用于删除传入请求的指定HTTP头。
location / {
more_clear_input_headers 'User-Agent';
}
这将删除传入请求中的User-Agent头。
结语
通过合理配置Nginx的server_tokens指令和使用more_set_headers模块,我们可以有效隐藏Nginx版本号,并进一步伪装服务器信息。这不仅提升了服务器的隐蔽性,也增加了攻击者识别和攻击的难度,从而提高了整体安全性。此外,我们往往可能认为nginx的安装很简单,但要构建一套能抗能打的nginx还是需要有实用的插件加持,欢迎阅读上一篇文章,下期将继续为大家分享nginx的实用模块的具体实战。
欢迎订阅我的公众号「SRE运维手记」,可扫下方二维码,或者微信搜“SRE运维手记”