是否可以限制用户只能访问某个网络接口?

是否可以限制用户只能访问某个网络接口?

我正在运行 CentOS 8 服务器,我想创建一个只能通过 VPN 访问互联网的用户。这意味着该用户使用的所有应用程序只能通过 VPN 访问互联网。而其余用户只能访问“正常”网络。其中 VPN 隧道使用接口 tun0。

编辑:

对于任何追随我尝试做同样事情的人,我就是这样做的:将 DNS 与 VPN 分割隧道结合使用时出现问题。 CentOS 8

答案1

通过iptables

iptables -A OUTPUT -o VPN_INTERFACE -m owner --uid-owner USERNAME -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner USERNAME -j DROP # or REJECT

笔记:

  • 您可以使用-I代替,-A但是这两个命令必须以相反的顺序发出(因为-I不带参数将插入一条规则作为第一个)。
  • 如果您使用iptables -P OUTPUT DROP(默认输出策略 - 不允许任何内容),则仅需要第一条规则。

通过firewalld

通过丰富的规则or/and /etc/firewalld/direct.xml(基本相同):


不要忘记 DNS。如果您使用 VPN 以外的接口解析域名,您的用户将无法访问网站。

答案2

由于您有评论中提到的不同的网卡,您可以将 iptables 与 -o 一起用于 nic 和 --uid-owner :

为 VPN 网卡授权 Outound :

iptables -A OUTPUT -o <vpn-nic> -m owner --uid-owner {<username>} -j ACCEPT

删除其他网卡的出站:

iptables -A INPUT  -m owner --uid-owner {<username>} -j REJECT

使其永久化:

sudo iptables-save /etc/sysconfig/iptables
sudo chkconfig iptables on

相关内容