WebSocket 本質是 **HTTP 升級協議**,IP 訪問控制**不在 WebSocket 應用層實現**,而應在 **Web 伺服器(反向代理)層** 統一配置。
| 伺服器 | 配置方式 |
|---|---|
| IIS | 站點 → 「IPv4 位址和網域限制」→ 添加「拒絕/允許」規則 |
| Nginx | allow 192.168.1.0/24; deny all; 在 location /ws/ 或 server 上下文 |
| Apache | Require ip 10.0.0.0/8 / Require not ip 192.168.1.100 (2.4+) |
| Tomcat | RemoteAddrValve 在 Context 或 Engine |
| Node.js (Express) | 中間件 app.use((req,res,next)=>{ if(blacklist.has(req.ip)) return res.sendStatus(403); next(); }) |
// WebSocket 握手階段攔截
wss.on('connection', (ws, req) => {
const ip = req.socket.remoteAddress.replace('::ffff:', '');
if (blockedIPs.has(ip)) {
ws.close(4001, 'IP blocked');
return;
}
// 正常業務
});
「WebSocket IP 管控 = Web 伺服器 ACL + 應用層動態熔斷,分層防禦最穩健。」