【问题标题】:How to secure tcp connection - nodejs?如何保护 tcp 连接 - nodejs?
【发布时间】:2015-06-12 14:21:57
【问题描述】:

我在tcp server 中使用了以下sample code

var server = net.createServer();

server.on('connection', function (socket) {

   if(restrictedIP == sock.remoteAddress){
      //How to close the particular connection safely without 
      //affecting other connections
   }

  socket.on('data', function(data) {
    console.log(data);        
  });

  socket.on('close', function(data) {
    console.log('client disconnected');
  });
});

server.listen(3000, '127.0.0.1');

注意:我有一个检查来验证客户端/服务器 ip(第 3 行)。

问题:

  1. 这个逻辑听起来是否适合验证客户端/服务器。

  2. 主要内容,如何从受限 IP 地址关闭特定连接。(第 4 行 - 注释)

场景:

我有两台服务器,一台是客户端服务器,它是 express/http 服务器,我们将其命名为 server1-express,另一台是名为 server2-tcp 的 tcp 服务器。

  1. server1-express 服务器将使用 tcp 与 server2-tcp 通信。

  2. server2-tcp 应该只允许这个特定的server1-express 服务器,它不应该允许连接到任何其他 ip,

  3. 使用 socket.destroy() 将使server2-tcp 崩溃。

  4. 使用 socket.end() 将强制我们 write 到服务器。

如何只允许特定的ip 并拒绝所有其他ip 访问?

任何帮助或建议将不胜感激

【问题讨论】:

    标签: javascript node.js events authentication tcp


    【解决方案1】:

    这取决于您所说的“身份验证”是什么意思,但显然一个 IP 地址可以被多个人使用(例如,在路由器后面)。因此,如果这是一个问题,您将不得不提出自己的协议或重新使用现有协议(使用经过“实战测试”的协议可能更好)。一个更“复杂”的例子是使用TLS,它内置在节点中,可以通过证书/密钥为您提供加密身份验证,同时仍为您提供原始套接字。

    就终止连接而言,您可以通过在套接字上调用.end().destroy() 强制终止套接字来优雅地完成此操作。

    【讨论】:

    • 感谢您的信息,我有两台服务器,一台是客户端服务器,它是 express/http 服务器,另一台是 tcp 服务器。 Express/http 服务器将与 tcp 服务器通信。 Tcp 服务器应该只允许这个特定的 express/http 服务器,它不应该允许从不同的 ip 连接到任何其他服务器,如果我使用 socket.destroy() 服务器崩溃了。
    • 已编辑问题请检查
    猜你喜欢
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2013-08-30
    相关资源
    最近更新 更多