如何强制 Linux 用户组的所有流量都集中在一个接口上

如何强制 Linux 用户组的所有流量都集中在一个接口上

我们正在使用 Linux Mint 20.2 终端服务器ThinLinc 的远程桌面。有点不合常规,我们将所有用户的主要组设置为“员工”或“学生”。我们需要通过 LAN 网关直接为“员工”组提供未过滤的互联网访问权限(通过设备 enp1s0)。我们需要通过 pfSense 网关为 VLAN 上的“学生”组提供过滤访问权限(通过设备 enp1s0.20)。未过滤的访问工作正常;禁用 enp1s0 并通过过滤网关发送所有流量即可正常工作。我们还可以使用以下 iptables 规则阻止学生组:

iptables -A OUTPUT -p tcp -m multiport --dport  80,443 -m owner --gid-owner "students" -j DROP

但是我还没有发现如何在启用两个接口的情况下强制“学生”流量出 VLAN。

提前致谢。

答案1

好吧,在发布本文之前,我花了很多(太多了!)个小时来研究和探索不同的解决方案,但你知道吗,不到一个小时后我就找到了自己的答案。Intika 的回答另一个问题最终让我正确的方向。我确信有带有网络命名空间等的解决方案,但这是迄今为止实现我们期望结果的最简单的方法。

iptables -t mangle -A OUTPUT -m owner --gid-owner "students" -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o enp1s0.20 -m mark --mark 42 -j SNAT --to-source 192.168.20.10
ip rule add fwmark 42 table 42
ip route add default via 192.168.20.2 dev enp1s0.20 table 42
netfilter-persistent save

vlan IP为192.168.20.10;过滤网关为192.168.20.2。

注 1:iptables-save 不会在重启后保持持久性;只有 netfilter-persistent 才会保存 iptables 更改。

注2:这不会保存IP路由配置。需要将其设置为在接口重新激活(拔掉电缆、重新启动等)时重新加载。要使此配置持久,您需要在 /etc/netplan 中配置相应的文件。由于我无法解析语法或找到相关示例,我附加了原始 iptables 规则-j DROP并保存了它(使用 netfilter-persistent),以便在无人值守的网络重置时,所有学生访问都将被阻止。然后我编写了一个非常简单的脚本,从 Filter 表中删除该行,然后ip route再次添加该行。

#!/bin/bash
# Remove the permanent block on Group 'students' from the Filter table: sudo iptables -D OUTPUT -p tcp -m multiport --dport  80,443 -m owner --gid-owner "students" -j DROP
# Add the route policies that don't persist over a network restart without editing the netplan config:
sudo ip route add default via 192.168.20.2 dev enp1s0.20 table 42
echo "Filtered Access should be configured for Group 'students'"
exit

相关内容