我有一个Debian服务器,允许用户login。我不介意他们访问networking或下载文件,但我想否则限制他们从该机器的互联网访问。 我应该如何设置我的IPTABLES或其他防火墙来使这个工作轻松?
从技术angular度来看,这实际上是非常棘手的(networking层通常不了解用户的任何信息;networking包中没有“用户”字段)。
但是,Linux非常棒,确实为你提供了一个解决scheme。 你将需要iptables的“所有者”模块,并遵循以下规则:
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -o eth0 -m owner --uid-owner 500 -j DROP
其中“500”是用户的UID,你想阻止networking。 第一个规则只允许所有出站端口80的stream量。
您可能需要加载所有者模块之前,这将工作:
modprobe ipt_owner
所以,添加到您的rc.local文件,或类似的。 当然,这假定你的系统已经安装了这个模块。 我不知道什么软件包在Debian上提供它。 它可能在标准的iptables包中。
另一个select是configuration一个代理服务器(Squid)的地方,允许一般匿名互联网访问,但需要login做任何事情。 然后阻止在防火墙从您的服务器访问,但允许代理通过。
如果你只有一台机器,我会回应swelljoe的build议。 或者结合这两个想法,并使一切更粒度,如果你喜欢:)
我会怀疑你只会阻塞主机的所有入站和出站端口,除了端口22(ssh)和80(networking)。 如果您使用这台计算机为自己的,并帮助一些朋友学习,并需要诸如电子邮件,即时消息等,我build议创build一个特殊的组,只为他们只能访问一个特定的应用程序列表。 我想你可能需要指定,如果这是一个独立的服务器或工作站为你+他们的服务器。
你可以使用SELinux策略,但不幸的是,比iptables解决scheme的设置要复杂一些。
我曾经使用过一次使用squid和“name”的组合 – 一个非常古老的linux / unix服务,它提供了当前的用户名。 一般来说,名字是一个非常糟糕的主意(因为它没有encryption,你可以修改它非常简单;它被irc btw使用),但是对于一套已知的机器,它的工作非常好
您正在寻找代理,以及iptables规则。 使用iptables限制端口访问并将stream量redirect到代理。 在代理中,你可以过滤你不想要的内容。 (所有者模块仅适用于在防火墙上创build的数据包,而不是来自networking的数据包。)