如何在 Linux 中使用 iptables 限制局域网上特定用户的互联网访问

如何在 Linux 中使用 iptables 限制局域网上特定用户的互联网访问

假设局域网中有两个用户,A 和 B。如何使用 iptables 规则限制用户 A 访问互联网并保存规则,以便在重新启动后它们仍然有效。还假设我想在某个时刻授予该用户访问权限;我如何再次启用它?我使用的是 Ubuntu Linux 10.04。如果有人告诉我如何从命令行执行此操作,那就太好了,因为我经常使用本地 ssh 登录来登录计算机。

答案1

我假设用户 A 和 B 使用您作为管理员的同一台 Linux 计算机。 (从你的问题来看,这并不完全清楚。如果A和B都有自己的计算机,并且他们是管理员,那么这是一个完全不同的问题。)

以下命令将阻止 uid 1234 的用户在接口上发送数据包eth0

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP
ip6tables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

我建议阅读Ubuntu iptables 指南基本熟悉该工具(并参阅手册页了解 mangle 表等高级内容)。

用户仍然可以运行 ping(因为它是 setuid root),但不能执行其他任何操作。如果本地代理是由其他用户启动的,则用户仍然能够连接到该代理。

要删除此规则,请添加-D到上面的命令。

要使规则永久存在,请将其添加到/etc/network/if-up.d/my-user-restrictions(使其成为以 开头的可执行脚本#!/bin/sh)。或者使用iptables-save(参见Ubuntu iptables 指南了解更多信息)。

答案2

我不会为此使用 iptables。

我假设 A 和 B 与固定 IP ClientA 和 ClientB 关联。我假设您的互联网代理是 ServerI(您的 Ubuntu 服务器?)。

因此,我将添加一个从 ClientA 到 ServerI 的拒绝/丢弃路由条目。

我不使用 Ubuntu - 所以我无法告诉您使用哪个配置文件来使该设置永久存在(重新启动后仍然存在)。

也许有人可以添加这个细节?

答案3

如果防火墙是您设置的一部分,您可以使用直接规则阻止特定用户的网络访问,IE:

/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

参考

相关内容