如何限制对node.js服务器的直接访问

时间:2014-06-23 13:43:31

标签: node.js apache security reverse-proxy

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

2 个答案:

答案 0 :(得分:2)

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

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(); 
}

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

答案 1 :(得分:0)

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

以下是一个示例规则文件:

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows connections for HTTP
-A INPUT -p tcp --dport 80 -j ACCEPT

# Allows SSH connections 
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Now you should read up on iptables rules and consider whether ssh access 
# for everyone is really desired. Most likely you will only allow access from certain IPs.

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

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

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