V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
pangtianyu
V2EX  ›  NGINX

如何隐藏服务器信息

  •  
  •   pangtianyu · 2015-05-23 22:26:55 +08:00 · 6006 次点击
    这是一个创建于 3473 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如说我不想让别人知道我的站点是用了 nginx 的。Google 了一下发现大多数都只说了怎么隐藏 nginx 的版本号,而不是彻底隐藏整个 nginx 的(我的意思是不让人知道用的是 nginx)。

    第 1 条附言  ·  2015-05-24 10:17:29 +08:00
    @sanddudu 先生的 fake - IIS 感觉不错 感谢

    不过还有一个地方感觉需要稍作修改

    当在 nginx.conf 文件里 添加 server_tokens off; 时 使用 curl 仍会显示出 nginx 服务器

    所以要在编译前多修改一处地方:src/http/ngx_http_header_filter_module.c

    将 static char ngx_http_server_string[] = "Server: nginx" CRLF;

    替换为 static char ngx_http_server_string[] = "Server: Microsoft-IIS" CRLF;

    请指教

    以上
    第 2 条附言  ·  2015-05-24 10:23:42 +08:00
    好像还有个更厉害的东西 叫做 Nginx Http Headers More Module 可以让你随便乱改

    http://wiki.nginx.org/NginxHttpHeadersMoreModule
    15 条回复    2015-05-25 05:05:57 +08:00
    babyname
        1
    babyname  
       2015-05-23 22:43:42 +08:00 via iPhone
    不要用nginx
    babytomas
        2
    babytomas  
       2015-05-23 22:46:38 +08:00   ❤️ 1
    编译的时候修改点东西,参考: http://www.zntec.cn/archives/nginx-change-tengine-151.html

    然后把错误页改改 。。。估计差不多可以隐藏了
    viko16
        3
    viko16  
       2015-05-23 22:48:56 +08:00   ❤️ 1
    nginx 源码修改

    #define NGINX_VAR

    然后编译安装之
    Septembers
        4
    Septembers  
       2015-05-23 22:49:04 +08:00
    自己做一个"like nginx"
    sanddudu
        5
    sanddudu  
       2015-05-23 22:49:42 +08:00   ❤️ 1
    https://github.com/sanddudu/fake-iis

    只是用来参考,然后改源代码,不要直接用
    vimutt
        6
    vimutt  
       2015-05-23 22:56:33 +08:00   ❤️ 1
    需要改源码然后重新编译nginx吧
    cevincheung
        7
    cevincheung  
       2015-05-23 23:08:12 +08:00   ❤️ 1
    tengine
    服务器配置:

    server_token off;
    server_tag 自己随便写;
    rhwood
        8
    rhwood  
       2015-05-24 11:15:35 +08:00
    nginx前面放一个varnish
    sub vcl_fetch {
    set beresp.http.Server = "爱写什么写什么";
    }
    shakoon
        9
    shakoon  
       2015-05-24 11:16:28 +08:00
    记得把默认的错误页面都换掉,不然随便一个404就知道你是什么了
    holulu
        10
    holulu  
       2015-05-24 11:44:05 +08:00
    除了用 Headers More 来修改 http header 之外,再用 Echo 来改写错误页的内容就 OK 了
    johnsmith123
        11
    johnsmith123  
       2015-05-24 14:14:01 +08:00
    高中狗就好好读书,没事别想这想那的=。=
    ihciah
        12
    ihciah  
       2015-05-24 21:40:20 +08:00
    故意搞一个IIS的出错页面,改源码再编译之类的。不过还是可能被nmap等指纹检测出来的。
    不明白为何用Nginx要藏着...安全问题其实大部分是出在自己的应用代码上
    pangtianyu
        13
    pangtianyu  
    OP
       2015-05-24 23:32:48 +08:00
    @ihciah 不觉得很好玩嘛?安全什么的才不去管呢
    pangtianyu
        14
    pangtianyu  
    OP
       2015-05-24 23:33:21 +08:00
    @johnsmith123 抱歉……我不是高中生……
    orzfly
        15
    orzfly  
       2015-05-25 05:05:57 +08:00   ❤️ 1
    _(:з」∠)_想伪装 IIS 的可以注意一下这个差异,IIS 在遇到无效 HTP 请求的时候返回的 Server 头不是 IIS 而是 Microsoft-HTTPAPI/2.0,而且 400 里会有为什么是无效的请求……

    漏了 Host 的请求:

    -- snip --
    # echo "GET / HTTP/1.1\n\n" | nc 192.168.43.177 80   0  1
    HTTP/1.1 400 Bad Request
    Content-Type: text/html; charset=us-ascii
    Server: Microsoft-HTTPAPI/2.0
    Date: Sun, 24 May 2015 21:02:37 GMT
    Connection: close
    Content-Length: 334

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request - Invalid Hostname</h2>
    <hr><p>HTTP Error 400. The request hostname is invalid.</p>
    </BODY></HTML>
    -- snip --

    根本就不是 HTTP 的请求:

    -- snip --
    # echo "WHAT THE FUCK\n\n" | nc 192.168.43.177 80
    HTTP/1.1 400 Bad Request
    Content-Type: text/html; charset=us-ascii
    Server: Microsoft-HTTPAPI/2.0
    Date: Sun, 24 May 2015 21:04:14 GMT
    Connection: close
    Content-Length: 311

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request</h2>
    <hr><p>HTTP Error 400. The request is badly formed.</p>
    </BODY></HTML>
    -- snip --

    好像是个正常的 HTTP 请求(相应内容被省去了):

    -- snip --
    # echo "GET / HTTP/1.1\nHost: 192.168.43.177\n" | nc 192.168.43.177 80
    HTTP/1.1 200 OK
    Content-Type: text/html
    Last-Modified: Tue, 04 Nov 2014 07:02:27 GMT
    Accept-Ranges: bytes
    ETag: "7b6a334bfdf7cf1:0"
    Server: Microsoft-IIS/8.5
    X-Powered-By: ASP.NET
    Date: Sun, 24 May 2015 21:02:54 GMT
    Content-Length: 701
    -- snip --
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5905 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:24 · PVG 14:24 · LAX 22:24 · JFK 01:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.