🛡️如何在Linux上使用广告拦截器安装dnscrypt代理

如何使用WireGuard或OpenVPN在Linux操作系统上安装带有广告/恶意软件阻止程序的dnscrypt代理应用程序?

DNSCrypt是一种协议,用于对设备与基于Nginx + Bind9的递归DNS服务器(例如Google,Cloudflare,ISP / 3rd第三方服务器或您自己的DoH服务器)之间的DNS通信进行身份验证和加密。

Dnscrypt-proxy是一个免费的开源应用程序,支持诸如DNSCrypt v2和DNS-over-HTTPS(DoH)之类的协议。

它还可以防止DNS欺骗。

它使用加密签名来验证响应是否来自选定的DNS解析器,并且未被篡改。

启用DNSCrypt的免费解析器在全球范围内可用,包括启用DoH的解析器:

https://dnscrypt.info/public-servers/

换句话说,我们正在使用dnscrypt-proxy来保护客户端和DNS解析器之间的通信。

如何安装dnscrypt-proxy

本文向您展示如何在具有OpenVPN / WireGuard VPN服务器的Linux上使用广告拦截器安装dnscrypt-proxy,以保护公共/不可靠的Wi-Fi网络上的通信安全。

在Linux上安装dnscrypt代理

以root用户身份根据您的Linux发行版运行命令:

Debian/Ubuntu пользователи используйте apt/apt-get ##
$ sudo apt install dnscrypt-proxy
## Alpine Linux пользователи используйте apk##
$ sudo apk add dnscrypt-proxy
## CentOS / RHEL пользователи:
## Добавьте EPEL репозиторий на CentOS 8 или RHEL 8
## используйте yum ##
$ sudo yum install dnscrypt-proxy
## Arch Linux используйте pacman ##
$ sudo pacman -S dnscrypt-proxy
## OpenSUSE/SUSE Linux пользователи используйте zypper ##
$ sudo zypper in dnscrypt-proxy
## Fedora пользователи используйте dnf ##
$ sudo dnf install dnscrypt-proxy

Dnscrypt代理配置

在/ etc / dnscrypt-proxy /目录中编辑dnscrypt-proxy.toml。

例如:

$ ls -l /etc/dnscrypt-proxy/
$ sudo vim /etc/dnscrypt-proxy/dnscrypt-proxy.toml

首先,我们需要建立一个使用服务器列表。 让我们同时使用Google和Cloudflare:

server_names = [ 'google' 'cloudflare']

我也可以使用cloudflare:

server_names = [ 'cloudflare']

配置侦听本地地址和端口的列表:

listen_addresses = ['127.0.0.1:53', '[::1]:53']

对于我的VPN 172.168.0.0/24:

listen_addresses = ['127.0.0.1:53', '172.168.0.1:53' ]

如果您具有IPv6连接,请使用通过IPv6可用的服务器(默认情况下为IPv4):

ipv6_servers = true

确保我们使用的服务器实现了DNSCrypt和DoH协议。

dnscrypt_servers = true
doh_servers = true

确保启用DNS缓存以减少延迟和传出流量:

cache = true

服务器必须支持DNS安全扩展(DNSSEC):

require_dnssec = true

Adblock列表每行包含一个模板。 有效模式的示例:

##                                                                  
##   example.com
##   =example.com
##   ads.*                        
##   ads*.example.*               
##   ads*.example[0-9]*.com

阻止规则文件路径:

blacklist_file="/etc/dnscrypt-proxy/blacklist.txt"

保存并关闭文件。

安装dnscrypt代理的adblocker列表

这是一个小的bash脚本,用于下载和更新列表。

#!/bin/bash
DEST="/etc/dnscrypt-proxy/blacklist.txt"
#
# Blocks both adware + malware 
# See for other lists https://github.com/StevenBlack/hosts
SRC="https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
TMP_B_FILE="$(mktemp)"
TMP_B_FILE_SORTED="$(mktemp)"
wget --timeout=10 --tries=5 -qO- "${SRC}" | grep -Ev "(localhost)" | grep -Ev "https://itsecforu.ru/2020/10/12/%F0%9F%9B%A1%EF%B8%8F-%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8-dnscrypt-%D1%81-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE/#" | sed -E "s/(0.0.0.0 |127.0.0.1 |255.255.255.255 )//" >> "${TMP_B_FILE}"
awk '/^[^#]/ { print $1 }' "${TMP_B_FILE}" | sort -u > "${TMP_B_FILE_SORTED}"
cp -f "${TMP_B_FILE_SORTED}" "$DEST"
rm -f "${TMP_B_FILE}" "${TMP_B_FILE_SORTED}"

运行脚本:

# ./update-adblocker.sh

检查清单:

# more /etc/dnscrypt-proxy/blacklist.txt

确保每天运行update-adblocker.sh脚本以获取主机的更新列表。 像这样添加一个新的cron作业:

@daily /path/to/update-adblocker.sh

除了广告和恶意软件,您还可以阻止虚假新闻,赌博,色情和社交媒体!

如何启用dnscrypt代理服务

使用systemctl命令在Linux上启用dnscrypt-proxy服务:

$ sudo systemctl enable dnscrypt-proxy

服务启动:

$ sudo systemctl start dnscrypt-proxy

服务检查:

$ sudo systemctl status dnscrypt-proxy

DNSCrypt状态:

● dnscrypt-proxy.service - DNSCrypt-proxy client
   Loaded: loaded (/usr/lib/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-10-10 05:44:29 EDT; 4s ago
     Docs: https://github.com/jedisct1/dnscrypt-proxy/wiki
 Main PID: 5108 (dnscrypt-proxy)
    Tasks: 8 (limit: 11328)
   Memory: 13.8M
   CGroup: /system.slice/dnscrypt-proxy.service
           └─5108 /usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Wiring systemd TCP socket #1, dnscrypt-proxy.socket, [::1]:53
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Wiring systemd UDP socket #2, dnscrypt-proxy.socket, 127.0.0.1:53
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Wiring systemd UDP socket #3, dnscrypt-proxy.socket, [::1]:53
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Source [public-resolvers] loaded
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: /etc/dnscrypt-proxy/relays.md: open sf-ux5n6prgb5kk4yzf.tmp: read-only file system
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Source [relays] loaded
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Firefox workaround initialized
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: [cloudflare] OK (DoH) - rtt: 18ms
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: Server with the lowest initial latency: cloudflare (rtt: 18ms)
Oct 10 05:44:29 centos-8-cloud.sweet.home dnscrypt-proxy[5108]: dnscrypt-proxy is ready - live servers: 1

高山Linux用户应使用rc-update命令和rc-service命令:

$ sudo rc-update add dnscrypt-proxy
$ sudo rc-service dnscrypt-proxy

Sidebar