我正在使用 Ubuntu/Mint 发行版,准备实时运行。有多个帐户,分为三类:管理员、互联网和安全。
- 行政显然有权做任何事情。
- 互联网帐户用于使用互联网。
其他帐户是安全帐户。在任何情况下都不允许使用任何联网互联网、打印机、蓝牙、WiFi 设备等。
我想要做的是从内核中删除网络驱动程序,但这会禁用需要互联网的帐户。
禁用这些安全账户的互联网的最低级别方法是什么?我正在寻找无法连接解决方案。
答案1
iptables
您可以使用( )来实现ip6tables
。
直到重启
在终端上添加规则iptables
sudo iptables -A OUTPUT -p all -m owner --uid-owner username -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --uid-owner username -j DROP
在哪里用户名是您要禁用 Internet 连接的用户。保存文件并退出。
这将向iptables
( ip6tables
) 添加一条规则,规定指定用户创建的任何传出包将被其自动删除。
如果您想对整个组执行相同操作,我建议--uid username
您不要使用--gid-owner groupname
,这将对整个用户组产生相同的效果。
例如,为了阻止该组security
访问互联网,命令应该是这样的
sudo iptables -A OUTPUT -p all -m owner --gid-owner security -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --gid-owner security -j DROP
永恒的
为了使规则永久生效,您可以在中创建一个脚本/etc/network/if-up.d/
,添加必要的行并使其可执行。
作为一个选项,使用iptables-save
( ip6tables-save
) 来保存当前规则并在启动时恢复它们。
保存当前iptables
规则
sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules
使用您喜欢的文本编辑器打开/etc/rc.local
并在文件末尾添加
/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules
这将在每次启动时恢复已保存的规则。请注意仅阻止 IPv4 连接的用户仍将能够连接到互联网。
欲了解更多信息和更多iptables
选项,请咨询其手册页。
答案2
Bruno 的解决方案很好:我认为这可能是最好的独立解决方案。
您可以考虑的另一个选择是在单独的机器上设置防火墙/代理,作为互联网的网关,只允许提供每个用户身份验证的连接。您可以同时使用两者以获得额外的保护。
答案3
如果防火墙是您的设置的一部分,您可以使用直接规则阻止特定用户的网络访问,例如:
/etc/firewalld/direct.xml
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
<?xml version="1.0" encoding="utf-8"?>
<direct>
<chain ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"/>
<rule ipv="ipv4"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv4</rule>
<rule ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"
priority="3">-j DROP</rule>
<chain ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"/>
<rule ipv="ipv6"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv6</rule>
<rule ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"
priority="3">-j DROP</rule>
</direct>
不要忘记重新加载
# firewall-cmd --reload