【问题标题】:How to restrict direct access to a node.js server如何限制对 node.js 服务器的直接访问
【发布时间】:2014-06-23 13:43:30
【问题描述】:

我有一个 apache Web 服务器,我的大部分内容都在其中托管,然后我有一个 node.js 服务器用于各种任务。我希望用户只能通过我的 apache 服务器的反向代理从我的 node.js 服务器获取信息。我了解如何在 apache 端使用 mod_proxy 设置反向代理,但是除了通过 apache 虚拟主机之外,我如何限制对节点服务器的访问?我确信可行的一个选项是将我的节点服务器托管在一个单独的盒子上,并阻止除 apache 服务器之外的任何 IP 地址。有没有办法让它们都在同一台机器上运行并配置节点以拒绝来自 apache 服务器的请求?

【问题讨论】:

标签: node.js apache security reverse-proxy


【解决方案1】:

您可以在同一个盒子上运行。在节点服务器中有如下内容:

if(req.socket.remoteAddress !== '127.0.0.1'){
  res.writeHead(403, {"Content-Type": "text/plain"});
  res.write('403 Access Denied');
  res.end();
} else { 
  // allow access
  doSomething(); 
}

当然,这允许同一盒子上的其他进程连接到节点服务器。

【讨论】:

    【解决方案2】:

    我使用 iptables 完成了这项工作,允许传入连接到网络服务器的端口 80。允许从网络服务器访问端口 3000,因为它来自同一主机。

    这是一个示例规则文件:

    *筛选 # 允许所有环回 (lo0) 流量并将所有流量丢弃到不使用 lo0 的 127/8 -A 输入 -i lo -j 接受 -输入! -i lo -d 127.0.0.0/8 -j 拒绝 # 接受所有已建立的入站连接 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许所有出站流量 # 你可以修改它只允许某些流量 -A 输出 -j 接受 # 允许 HTTP 连接 -A 输入 -p tcp --dport 80 -j 接受 # 允许 SSH 连接 -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # 现在你应该阅读 iptables 规则并考虑是否 ssh 访问 # 对每个人来说都是非常需要的。您很可能只允许从某些 IP 访问。 # 允许 ping -A 输入 -p icmp -m icmp --icmp-type 8 -j 接受 # 记录 iptables 被拒绝的调用(通过 'dmesg' 命令访问) -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7 # 拒绝所有其他入站 - 默认拒绝,除非明确允许策略: -A 输入 -j 拒绝 -A 转发 -j 拒绝 犯罪

    将此文件放在您的服务器上(例如 /etc/iptables.up.rules),然后运行 ​​iptables 命令来更新您的 iptables 规则。

    iptables-restore < /etc/iptables.up.rules

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2014-07-21
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多