我有几个通过 Nginx 服务器访问的 NodeJS 服务器。 Nginx 通过 localhost 中继到 NodeJS 服务器。此时我正在做所有的工作,所以我知道我可以做需要做的事情,但将来我希望用户运行他们自己的服务器。
我需要做的是限制任何给定的非 root 用户只能访问本地主机。我可以这样做吗?
答案1
您可以使用以下方式过滤用户的流量iptables 所有者模块仅允许环回接口:
# accept incoming packets to loopback device
iptables -A OUTPUT -m owner --uid $USER -o lo -j ACCEPT
# drop everything else
iptables -A OUTPUT -m owner --uid $USER -j DROP
通过上述规则,用户仍然可以创建一个在非限制端口中侦听的进程,即使它无法回复收到的任何消息。您还可以将规则编写为整个系统的白名单:首先接受所有良好的流量并丢弃其他所有流量。
为了过滤传入流量,不能使用所有者模块(请参阅手册页)您可以配置输入链以允许已确立的流量并丢弃其他未明确允许的传入流量。
# change default action to drop
iptables -P INPUT DROP
# allow established connections (replies)
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
如果您正在运行侦听网络端口的服务,则需要添加相应的规则以允许它们接收流量。