使用/etc/hosts文件屏蔽多个网站

通过编辑hosts文件并添加:0.0.0.0 sitetoblock.com,我可以屏蔽特定的网站。使用hosts文件,是否可以屏蔽除了我指定的几个网站之外的所有网站?维基百科和dictionary.com将被列入白名单。
如果在/etc/hosts中无法实现这一点,您会推荐另一种方法或应用程序来实现类似的功能吗?我不想要一个浏览器插件,而是希望在整个操作系统范围内进行屏蔽。

你能在hosts文件中使用通配符吗?(只是一个想法) - Bruno Pereira
我不确定,但那样会很好。然后,在通配符语句之后,我可以列出我想要加入白名单的网站及其实际IP地址吗? - dukevin
你可能需要设置自己的DNS服务器(允许通配符)或使用iptables来过滤所有流量。hosts文件不允许通配符。你有能力设置和更改我们正在讨论的网络吗,还是这只是一台电脑? - Bruno Pereira
2如果你想提高生产力,浏览器扩展可能是更好的选择。你试过Stayfocusd(谷歌浏览器)或Leechblock(火狐浏览器)吗?两者都提供了你所寻找的选项。 - Glutanimate
不错的解决方案来自@Glutanimate ^^ 如果我们所谈论的人不那么聪明,可能会起作用。 - Bruno Pereira
这个回答解决了你的问题吗,楼主?:http://askubuntu.com/questions/160235/how-do-i-block-the-entire-internet-except-a-few-whitelist-sites - Glutanimate
如果你想屏蔽色情内容,你可以免费使用https://dns.norton.com/,并在你的路由器中进行设置。 - Jonathan
1个回答

你可以设置一个透明代理。正如维基百科所说,
拦截代理或强制代理,透明代理在网络层拦截正常通信,而无需任何特殊的客户端配置。客户端不需要知道代理的存在。透明代理通常位于客户端和互联网之间,代理执行一些网关或路由器的功能。
使用/etc/hosts也是可以的,只要用户不知道该文件的存在或者没有编辑该文件的权限。但我猜你想要实现的目标可能会更容易通过使用代理来实现,尽管设置代理可能需要一些时间。
要设置透明代理,你可以使用squid。以下是一些快速设置它的步骤:
  • 安装 squid

    sudo apt-get install squid squid-common
    
  • 编辑 /etc/squid3/squid.conf 文件:

    找到 http_port 3128 这一行,并确保它没有被注释掉。默认情况下,squid 监听端口为3128。

    acl bad dstdom_regex .*abcde.*
    http_access deny bad
    

    这将阻止包含 abcde 的每个URL。

  • 重新启动 squid

    sudo service squid3 restart
    

这里提供了一个非常好的指南here

以下是一些其他链接: