我正在运行 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
(基本相同):
- https://firewalld.org/documentation/man-pages/firewalld.richlanguage.html
- https://www.computernetworkingnotes.com/rhce-study-guide/firewalld-rich-rules-explained-with-examples.html
- https://www.liquidweb.com/kb/an-introduction-to-firewalld/
不要忘记 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