我运行 NodeJS 作为一种 Web 应用服务器,为 AngularJS 前端提供服务。它们仅通过 WebSockets 进行通信,使用 Socket.IO 的 SailsJS 实现。在前端(客户端)和 NodeJS 后端之间,有一个 nginx 作为代理,配置如下:
server {
listen 1337 ssl;
location /socket.io/ {
proxy_pass https://localhost:1338;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
到目前为止一切顺利。我现在想要监控和保护 Websocket 连接。特别是,我想防止 XSS 攻击并排除试图强行登录我的应用程序的 IP。我对这些东西还很陌生,但经过一番研究,我发现了 fail2ban 和 nginx-naxsi,它们可能正是我需要的。但是,我不知道如何让它们与我的设置一起工作。
这有可能吗?我能以某种方式拦截通过代理(nginx)中的 Websocket 隧道传输的流量吗?
答案1
我个人没有使用过 fail2ban 或 nginx-naxsi,但我知道ModSecurity 自 2012 年起可用于 nginx并且能够轻松处理您的请求。它也是开源的,因此可以根据您的需求进行定制。
ModSecurity 包含 base_rulesets 和optional_rulesets,其中包含已准备好且可立即使用的XSS 和 DOS 规则来保护您的服务器。
它肯定会对你的性能造成轻微的影响(取决于你使用的规则数量和你处理的流量大小),但确实功能强大的工具。
这里有一个教程关于如何为 nginx 设置它。也许你会喜欢它 :)
答案2
naxsi 和 fail2ban 不同 naxsi 是一种 WAF(Web 应用程序防火墙),这意味着所有请求首先经过 naxsi,然后您将设置一些规则来检查每个请求,以防客户端向您不想授予访问权限的资源发出请求,那么 naxsi 将阻止该请求
fail2ban 是一个 IDS(入侵检测系统),fail2ban 的作用是监控你的nginx logs
(或任何与此相关的日志),并根据一些正则表达式,在一定次数尝试后阻止客户端。假设你有一个暴力攻击,客户端试图访问不存在的 URL,那么 fail2ban 会检测到该客户端有很多 404 响应,然后它会禁止该 IP
因此 naxsi 会拒绝恶意请求,而 fail2ban 只会在满足条件时才禁止