阻止用户在 Linux 上访问互联网

阻止用户在 Linux 上访问互联网

如何在 Linux 下阻止用户访问互联网?

我正在尝试以下操作:

iptables -A OUTPUT -p tcp --dport 80,443 -m owner --uid-owner $USERNAME -j DROP

这是正确的语法或命令吗?

答案1

然后我就开始吧ssh myhost.somewhere.onthe.internet.example.com -D 12345,让我的浏览器使用 SOCKS 代理localhost:12345,然后我就可以高高兴兴地继续浏览了。

换句话说,将特定端口列入黑名单是不够的;你可能需要阻止全部网络访问:

iptables -A OUTPUT -m owner --uid-owner $USERNAME -j DROP

请注意,可能需要访问某些网络资源(例如本地网络共享),因此您可能需要将其列入白名单(或者将本地网络块列入白名单)。

答案2

首先

iptables是完成这项工作的正确命令。但通常你会使用合理数量的命令来设置完整的表格。1 个命令是表格的一次更改。

要找出已存在的表和默认策略(如果未匹配任何规则),请使用iptables -L。我通常会编写一个包含所有 iptables 设置的 bash 脚本。首先,您要刷新所有链,然后一次性放入所有内容。这是为了防止丢失进出记录。

另外,检查你的在里面如果有的话启动脚本可使您的更改在电源循环后保持不变。(通常您的表在重启后会丢失)。

只需创建一个脚本来包含所有 iptables 命令:

#!/bin/bash
# Flush all chains
iptables -F

#Set defaults policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Don't block localhost traffic
iptables -A INPUT -i lo -j ACCEPT
# Don't re-evaluate already accepted connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Allowed incomming tcp ports
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # SSH
# Add watherver you wish to allow more

文章中提供了有关标准 iptable 规则的更多提示。

现在回答你的问题

首先,我们需要确保您已启动并运行基本防火墙。现在,您可以将规则添加到脚本中以使其生效。请考虑其他答案中的建议:用户可以使用代理或备用端口轻松绕过两个被阻止的端口。

此外,您的语法不正确。--dport 只能使用一个端口。您需要使用多端口模块或链接多个规则来实现这一点。

然而,阻止全部此用户的传出连接将导致许多应用程序失败,因为它们依赖于连接位于本地主机或者127.0.0.1. (例如,如果您使用 KDM/KDE,您的系统在登录时会冻结。)

所以你需要排除网络接口。如果您仍想允许用户仅访问某些服务,只需创建一条规则允许这些端口的 DROP 规则。我建议如下:

# Don't re-evaluate already ACCEPTed connections:
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Allow an outgoing connection, like SSH
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner $USERNAME -j ACCEPT

# Drop anything else that not on localhost
iptables -A OUTPUT ! -o lo -m owner --uid-owner $USERNAME -j DROP

答案3

此命令只会阻止用户访问万维网,而不是整个互联网。

除此之外它应该可以工作,假设它在同一台机器上运行$USERNAME

相关内容