有时我被迫使用 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
如果您还没有设置规则并且您并不真正知道具体情况如何,那么也建议您使用短途方式。尽管您可以根据iptables
with参数的输出重建规则-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
您可以在多个虚拟机中运行进程。然后,您可以终止某些虚拟机的网络访问,但不能终止其他虚拟机的网络访问。