【问题标题】:How to set an IP whitelist on a NodeJS socket.io server?如何在 NodeJS socket.io 服务器上设置 IP 白名单?
【发布时间】:2021-10-10 16:13:17
【问题描述】:

我想将与套接字服务器的连接限制为 IP 列表,有没有简单的方法可以做到这一点?到现在都没找到。

谢谢

【问题讨论】:

    标签: node.js socket.io ip whitelist


    【解决方案1】:

    这可以通过几种方式完成..

    1. 在连接上放置一些中间件以读取传入的请求 IP,根据 IP 列表(数组)检查它,如果它不起作用,则以错误代码响应。

    2. 通过 NGINX 使用 ACL,如果其 IP 未列出,NGINX 将阻止请求

    3. 不是真正基于 IP,而是通过 JWT 控制访问。这将要求您生成令牌并将其与每个请求一起发送,但它确实提供了更多的安全性,您不必管理 IP 范围。在此架构中,您的用户将请求令牌,一旦将令牌发回,您就可以在头部或作为 req 参数的情况下向套接字服务器发出请求。然后套接字服务器对其进行解码,如果它正确解码(意味着它有效)则让它们连接,否则不要

    【讨论】:

      【解决方案2】:

      @proxim0 之后,我使用了一个中间件:

      io.use((socket, next) => {
          fs.readFile(__dirname + '/config.json', function(err, file) {
              if(err) return next(new Error("Internal error : " + err.message));
      
              const config = JSON.parse(file.toString('utf8'));
              if(!config.restrictAccess) return next();
              
              var ip = socket.request.headers['x-forwarded-for'] || socket.request.socket.remoteAddress || null;
      
              if(ip == null || config.allowedAddresses.indexOf(ip) == -1) {
                  console.log("Access denied from remote IP " + ip);
                  return next(new Error("Your IP address is not allowed to access this resource."));
              }
              next();
          });
      });
      

      使用以下格式的 config.json 文件:

      {
          "restrictAccess": true,
          "allowedAddresses": [
              "127.0.0.1",
              "123.456.789"
          ]
      }
      

      欢迎对改进提出任何意见。

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 2016-11-22
        • 2011-10-01
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 2016-08-20
        • 2013-02-07
        • 2018-11-30
        相关资源
        最近更新 更多