如何配置nginx在访问路径时发送tcp重置数据包

问题描述 投票:0回答:1

是否可以配置NGINX(或任何反向代理)在访问我网站上的特定路径时发送TCP重置数据包(例如

www.mysite.com/tcp-reset
)。

我尝试将路径指向执行此操作的 python 套接字服务器,但我从客户端得到 502。我的目标是强制浏览器重新解析域名以进行dns重新绑定攻击。

这是我使用的Python脚本(直接访问端口时有效):

import socket
import struct

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(("127.0.0.1", 1234))
    s.listen(5)
    while True:
        conn, addr = s.accept()
        print(f"Connection from {addr}")
        l_onoff = 1
        l_linger = 0
        s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
        conn.close()

这是我使用的 nginx 配置:

location /tcprst/ {
    proxy_pass http://localhost:1234/;
}

当我访问

/tcprst/
时,我得到的是
502 bad gateway

sockets security nginx networking dns
1个回答
0
投票

配置

location = /reset {
    reset_timedout_connection on;
    return 444;
}

说明

返回

停止处理并将指定的代码返回给客户端。 非标准代码 444 关闭连接而不发送响应头[强调]。

重置_超时_连接

启用或禁用重置超时连接和使用非标准代码 444 (1.15.2) 关闭的连接。重置的执行如下。在关闭套接字之前,会对其设置 SO_LINGER 选项,超时值为 0。 当套接字关闭时,TCP RST 会发送到客户端 [强调],并且此套接字占用的所有内存都会被释放。

演示

$ curl http://localhost:8000/reset
curl: (56) Recv failure: Connection reset by peer

© www.soinside.com 2019 - 2024. All rights reserved.