如何防止web socket DDOS攻击?
How to prevent web socket DDOS attacks?
我刚刚从我的计算机上执行了一个基本的 DDOS:
websocket-bench -a 2500 -c 200 wss://s.example.com
令我非常沮丧的是我的服务器崩溃了! WS 通过连接到我的 nginx 代理来工作:
location / {
proxy_pass http://sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60;
}
upstream sock {
server 127.0.0.1:1203 fail_timeout=1s;
}
并且本地服务器上的端口 1203
是 ratchet。棘轮的设置是我允许任何连接,第一个 onMessage
执行身份验证,如果无效,连接将关闭。
我也尝试通过在第一个连接上传递 headers 进行身份验证,如果无效,套接字将关闭,但这根本没有帮助,nginx 仍然达到 100% 的资源然后崩溃。
我应该分析什么来防止这些崩溃?
将上游更改为另一个关闭的端口(即禁用它)时,服务器仍然崩溃。
要么更改您的身份验证逻辑以便 Nginx 处理它,要么在 Nginx 中实现 request and connection limits 以控制接受多少连接并将其传递给上游服务器
我刚刚从我的计算机上执行了一个基本的 DDOS:
websocket-bench -a 2500 -c 200 wss://s.example.com
令我非常沮丧的是我的服务器崩溃了! WS 通过连接到我的 nginx 代理来工作:
location / {
proxy_pass http://sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60;
}
upstream sock {
server 127.0.0.1:1203 fail_timeout=1s;
}
并且本地服务器上的端口 1203
是 ratchet。棘轮的设置是我允许任何连接,第一个 onMessage
执行身份验证,如果无效,连接将关闭。
我也尝试通过在第一个连接上传递 headers 进行身份验证,如果无效,套接字将关闭,但这根本没有帮助,nginx 仍然达到 100% 的资源然后崩溃。
我应该分析什么来防止这些崩溃?
将上游更改为另一个关闭的端口(即禁用它)时,服务器仍然崩溃。
要么更改您的身份验证逻辑以便 Nginx 处理它,要么在 Nginx 中实现 request and connection limits 以控制接受多少连接并将其传递给上游服务器