如何拒绝除所选进程之外的所有进程的 Internet 访问?

如何拒绝除所选进程之外的所有进程的 Internet 访问?

有时我被迫使用 56kbps 的非常窄的互联网带宽。在我的 Ubuntu 桌面上,我有太多程序,这些程序经常在网上检查某些内容 - 逐一搜索和禁用它们确实很麻烦。

我想要一些工具,它可以拒绝(通过任何方式)除邮件客户端之外的每个进程的互联网访问。

有可能吗?如果是这样,怎么办?

我想,实现它的一种方法是打开另一个网络设备(例如/dev/tap1)并将其设置为路由到(我常用的互联网设备)并使用可以打开和关闭的/dev/wlan0自定义规则来保护所有内容。iptables但我不是 iptables 方面的专家,所以除非有人给我具体的指示,否则这种解决方案是没有用的。

答案1

您还可以用于iptables允许/限制所需接口上的 udp/tcp 端口。例如,让我们在链filter中的表中引入一条规则OUTPUT,以允许 tcp/udp 端口​​ 143 (IMAP) 上的所有流量。

(sudo) iptables -A OUTPUT -o eth0 -p udp --destination-port 143 -j ACCEPT
(sudo) iptables -A OUTPUT -o eth0 -p tcp --destination-port 143 -j ACCEPT
(sudo) iptables -A OUTPUT -o eth0 -j DROP

我认为 IMAP 通过 TCP,但以防万一我也限制 UDP 协议。对于这个问题,我假设您的互联网接口为eth0.并且您的邮件客户端使用 IMAP 协议连接远程邮件服务器。我自己试了一下,只能访问邮件服务器。请记住,规则的顺序很重要,否则它不会达到您的预期。

编辑#1:正如您在评论中所问的那样。要恢复互联网流量,只需删除您刚刚插入的规则即可。您可以按如下方式执行此操作:

很长的路要走:

(sudo) iptables -D OUTPUT -o eth0 -p udp --destination-port 143 -j ACCEPT
(sudo) iptables -D OUTPUT -o eth0 -p tcp --destination-port 143 -j ACCEPT
(sudo) iptables -D OUTPUT -o eth0 -j DROP

短途:

(sudo) iptables -nvL --line-numbers

运行上面的命令将在每个规则前面显示一个相应的数字,这将帮助您使用该数字删除规则,而不是重写整个规则。输出示例如下:

Chain OUTPUT (policy ACCEPT 73 packets, 8766 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     udp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            udp dpt:143

然后要删除规则,只需运行以下命令:

(sudo) iptables -D OUTPUT 1

如果您还没有设置规则并且您并不真正知道具体情况如何,那么也建议您使用短途方式。尽管您可以根据iptableswith参数的输出重建规则-nvL

注意:这是non-persistent使用方式iptables意味着如果您重新启动系统,您将不会维护规则。如果您希望规则persistent最简单的方法是运行以下命令:

(sudo) iptables-save > /etc/iptables/rules.v4

它将您当前的规则保存/转储到/etc/iptables/rules.v4.然后重新启动后 iptables 将从该文件中读取存储的配置。供IPv6您使用这个其他文件rules.v6。请记住,这适用于Debian您需要安装附加软件包的地方。请检查本指南详细解释。对于 Ubuntu 我发现这另一本指南。对于其他系统,您可以浏览互联网,但原理是相同的:You dump your current rules to file and set up a script at boot time to apply those saved rules to the current iptables configuration.

答案2

您可以在多个虚拟机中运行进程。然后,您可以终止某些虚拟机的网络访问,但不能终止其他虚拟机的网络访问。

相关内容