使用统一阻止列表和白名单来更新主机文件
============================================================

![](https://irp-cdn.multiscreensite.com/58a25abc/dms3rep/multi/desktop/host-400x300.jpg) 

网上有许多持续维护的含有不同垃圾域的有用列表。将这些列表复制到你的主机文件中可以轻松阻止大量的域，你的系统将根本不用去连接它们。此方法可以在不安装浏览器插件的情况下工作，并且将为系统上任何浏览器（和任何其他程序）提供阻止操作。

在本教程中，我将向你展示如何在 Linux 中启动并运行 Steven Black 的[统一主机脚本][1]。该脚本将使用来自多个来源的最新已知的广告服务器、网络钓鱼网站和其他网络垃圾的地址来更新你的计算机主机文件，同时提供一个漂亮、干净的方式来管理你自己的黑名单/白名单，其分别来自于该脚本管理的各个列表。

在将 30,000 个域放入主机文件之前，需要注意两点。首先，这些巨大的列表包含可能需要解除封锁的服务器，以便进行在线购买或其他一些临时情况。如果你弄乱了你的主机文件，你要知道网上的某些东西可能会出现问题。为了解决这个问题，我将向你展示如何使用方便的打开/关闭开关，以便你可以快速禁用你的阻止列表来购买喜马拉雅盐雾灯（它是等离子灯）。我仍然认为这些列表的目的之一是将所有的一切都封锁（有点烦人，直到我想到了做一个关闭开关）。如果你经常遇到你需要的服务器被阻止的问题，只需将其添加到白名单文件中即可。

第二个问题是性能受到了轻微的影响, 因为每次调用一个域时, 系统都必须检查整个列表。只是有一点点影响, 而没有大到让我因此而放弃黑名单，让每一个连接都通过。你具体要怎么选择自己看着办。

主机文件通过将请求定向到 127.0.0.1 或 0.0.0.0（换句话说定向到空地址）来阻止请求。有人说使用 0.0.0.0 是更快，问题更少的方法。你可以将脚本配置为使用 `-ip nnn.nnn.nnn.nnn` 这样的 ip 选项来作为阻止 ip，但默认值是 0.0.0.0，这是我使用的值。

我曾经将  Steven Black  的脚本做的事每隔一段时间就手动做一遍，进到每一个站点，将他们的列表拷贝/粘贴到我的主机文件中，做一个查找替换将其中的 127 变成 0 等等。我知道整件事情可以自动化，这样做有点傻，但我从来没有花时间解决这个问题。直到我找到这个脚本，现在这事已经是一个被遗忘的杂务。

让我们先下载一份最新的  Steven Black  的代码拷贝（大约 150MB），以便我们可以进行下一步。你需要安装 git，因此如果还没安装，进入到终端输入：

```
sudo apt-get install git
```

安装完之后，输入：

```
mkdir unifiedhosts 
cd unifiedhosts
git clone https://github.com/StevenBlack/hosts.git
cd hosts
```

当你打开了 Steven 的脚本时，让我们来看看有什么选项。该脚本有几个选项和扩展，但扩展我不会在这里提交，但如果你到了这一步并且你有兴趣，[readme.md][3] 可以告诉你所有你需要知道的。

你需要安装 python 来运行此脚本，并且与版本有关。要找到你安装的 Python 版本，请输入：

```
python --version
```

如果你还没安装 Python:

```
sudo apt-get install python
```

对于 Python 2.7，如下所示，输入 `python` 来执行脚本。对于 Python 3，在命令中的 `python` 替换成 `python3`。执行后，该脚本会确保它具有每个列表的最新版本，如果没有，它会抓取一个新的副本。然后，它会写入一个新的主机文件，包括了你的黑名单/白名单中的任何内容。让我们尝试使用 `-r` 选项来替换我们的当前的主机文件，而 `-a` 选项可以脚本不会问我们任何问题。回到终端：

```
python updateHostsFile.py -r -a
```

该命令将询问你的 root 密码，以便能够写入 `/etc/`。为了使新更新的列表处于激活状态，某些系统需要清除 DNS 缓存。在同一个硬件设备上，我观察到不同的操作系统表现出非常不同的行为，在没有刷新缓存的情况下不同的服务器变为可访问/不可访问所需的时间长度都不同。我已经看到了从即时更新（Slackware）到重启更新（Windows）的各种情况。有一些命令可以刷新 DNS 缓存，但是它们在每个操作系统甚至每个发行版上都不同，所以如果没有生效，只需要重新启动就行了。

现在，只要将你的个人例外添加到黑名单/白名单中，并且只要你想要更新主机文件，运行该脚本就好。该脚本将根据你的要求调整生成的主机文件，每次运行文件时会自动追加你额外的列表。

最后，我们来创建一个打开/关闭开关，对于打开和关闭功能每个都创建一个脚本，所以回到终端输入下面的内容创建关闭开关（用你自己的文本编辑器替换 leafpad）：

```
leafpad hosts-off.sh
```

在新文件中输入下面的内容：

```
#!/bin/sh
sudo mv /etc/hosts /etc/hostsDISABLED
```

接着让它可执行：

```
chmod +x hosts-off.sh
```

相似地，对于打开开关：

```
leafpad hosts-on.sh
```
在新文件中输入下面的内容：

```
#!/bin/sh
sudo mv /etc/hostsDISABLED /etc/hosts
```

最后让它可执行：

```
chmod +x hosts-on.sh
```

你所需要做的是为每个脚本创建一个快捷方式，标记为 HOSTS-ON 和 HOSTS-OFF，放在你能找到它们的地方。

--------------------------------------------------------------------------------

via: https://www.darrentoback.com/this-script-updates-hosts-files-using-a-multi-source-unified-block-list-with-whitelisting

作者：[dmt][a]
译者：[geekpi](https://github.com/geekpi)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

[a]:https://www.darrentoback.com/about-me
[1]:https://github.com/StevenBlack/hosts
[2]:https://github.com/StevenBlack/hosts.git
[3]:https://github.com/StevenBlack/hosts/blob/master/readme.md
