修改默认访问的站点配置文件,添加以下代码即可。
return 408;
当然改成 502 、 403 等其它状态码都可以,如果想把这部分流量导入到指定网站,添加以下代码即可实现 301 跳转。
rewrite ^(.*) https://www.jiangdefu.com permanent;
若要禁止 HTTPS 访问,添加监听端口 443 并配置任意的 SSL 证书即可。
2025 年 1 月 30 日补充更新:
如果需要隐藏存在 Web 服务,建议使用不会返回任何响应的状态码 444,这样可防止攻击者嗅探到存在 Web 服务。
| 特性 | 408(Request Timeout) | 444(Nginx 直接关闭连接) |
|---|---|---|
| 是否返回响应 | 是,返回 408 状态码和响应头 | 否,直接关闭连接,不返回任何数据 |
| 是否符合标准 | 是,HTTP 标准状态码 | 否,Nginx 特有状态码 |
| 客户端感知 | 客户端会收到 408 状态码 | 客户端只会发现连接被关闭 |
| 攻击者感知 | 攻击者知道服务器存在并返回了 408 | 攻击者无法判断服务器是否存在 |
| 适用场景 | 客户端请求超时 | 隐藏服务器存在,丢弃非法请求 |
为了进一步迷惑攻击者进行嗅探,可以延迟一段时间后再返回状态码,攻击者可能会认为网络延迟或服务器性能问题导致了连接关闭,而不是服务器主动拒绝请求。
实现代码:
access_by_lua_block {
ngx.sleep(60) -- 延迟 60 秒
ngx.exit(444) -- 返回 444
}
使用前需要确认 Nginx 安装了 Lua 模块 (OpenResty 默认支持) 。
主流浏览器的默认超时时间是 30 秒和 60 秒,为了提高迷惑性因此延迟 60 秒
1. Chrome
Chrome 浏览器的默认超时时间通常为 30 秒。如果在 30 秒内无法建立连接,Chrome 会显示 ERR_CONNECTION_TIMED_OUT 错误。
2. Firefox
Firefox 浏览器的默认超时时间也通常是 30 秒。如果连接请求在 30 秒内没有响应,Firefox 会提示连接超时。
3. Edge
Edge 浏览器的默认超时时间与 Chrome 类似,也是 30 秒。如果连接请求在 30 秒内没有响应,Edge 会显示 ERR_CONNECTION_TIMED_OUT 错误。
4. Safari
Safari 浏览器的默认超时时间通常为 60 秒。如果连接请求在 60 秒内没有响应,Safari 会提示连接超时。