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


11

假设LAN上有两个用户A和B。如何使用iptables规则限制用户A的互联网访问并保存规则,以便重新启动后仍然有效。还假设我想在某个时候授予该用户访问权限;如何再次启用它?我正在使用Ubuntu Linux 10.04。如果有人向我展示如何从命令行进行操作,那将是很好的选择,因为我经常使用本地ssh登录名登录计算机。

Answers:


17

我假设用户A和B使用的是您与管理员相同的Linux计算机。(您的问题尚不完全清楚。如果A和B是自己的计算机并由管理员管理,则是完全不同的问题。)

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

iptables -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指南)。


非常感谢你。是的,您的假设是正确的。根据您的答案和提到的ubuntu指南,如果我还想授予受限用户ssh访问权限(有时我想通过ssh使用他的帐户登录),则是正确的处理方式:iptables -t mangle -A OUTPUT- o eth0 -m所有者--uid-owner 1234 -p tcp --dport ssh -j接受iptables -t mangle -A输出-o eth0 -m所有者--uid-owner 1234 -j DROP我将这些规则保持不变提到的文件和一切似乎正常。
Marwan Tanager

@Marwan我认为是正确的。请注意,如果允许ssh访问,则几乎允许任何操作,因为ssh可以轻松地隧道传输其他协议。
吉尔(Gilles)'所以

0

我不会为此使用iptables。

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

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

我不使用Ubuntu-因此无法告诉您使用哪个配置文件来使该设置永久生效(在重新启动后)。

也许有人可以添加该细节?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.