配置Nginx禁止IP访问以防恶意解析

修改默认访问的站点配置文件,添加以下代码即可。

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会提示连接超时。