Jump to content
ankar84

entware
Защищаем DNS запросы с помощью dnscrypt-proxy2. Бонусом блокировка рекламы.

140 posts in this topic

Данная тема создана по следам инструкций по использованию предыдущих версий первой ветки замечательного приложения dnscrypt-proxy, которое автор вернул к плотной разработке, правда, сменив язык на Go.

Для начала рекомендую ознакомиться с первыми статьями:

Сразу уточню, вторая версия dnscrypt-proxy подойдет скорее тем пользователям, у кого роутер с достаточным количеством оперативной памяти, так как приложения на go довольно требовательны к ресурсам. Например, на моей Keenetic Ultra проблем с памятью нет, поэтому я и перешел на вторую ветку dnscrypt-proxy не особо раздумывая.

Ознакомиться со всеми преимуществами dnscrypt-proxy2 перед первой веткой можно на странице проекта на GitHub. Хочу заметить, что при использовании dnscrypt-proxy2 уже нет необходимости в связке с dnsmasq или чем-то еще. dnscrypt-proxy2 сам умеет и кэшировать запросы и работать с несколькими серверами сразу, выбирая наиболее быстрый и ещё много чего.

На момент написания данной статьи актуальной версией является dnscrypt-proxy 2.0.14

Итак, начиная с версии 2.0.8 (кажется) dnscrypt-proxy2 собрана уважаемым @zyxmon в тестовой ветке репозитория Entware.

Пользователям Entware-3x и Entware-NG нужно перейти на репозиторий Entware с помощью следующих команд, введенных 2 раза подряд (за подробностями и решением проблем нужно пройти в соответствующую тему) иначе будете получать ошибку, что пакет dnscrypt-proxy2 не найден.

opkg update 

opkg upgrade

Установка

Начиная с 2.0.11 пакет dnscrypt-proxy2 доступен для обычной установки из репозитория Entware следующей командой:

# opkg install dnscrypt-proxy2

Далее установим вспомогательные пакеты: 

iptables для того, чтобы "приземлить" все DNS запросы наших клиентов на наш dnscrypt-proxy2

cron для того, чтобы обновлять список блокируемых адресов в автоматическом режиме на регулярной основе.

# opkg install cron iptables

Стандартный конфигурационный файл достаточно полно документирован комментариями по той или иной настройке, да и в целом по-умолчанию всё должно запуститься успешно командой:

# /opt/etc/init.d/S09dnscrypt-proxy2 start

Хранение файлов DNSCrypt

По-умолчанию, файл конфигурации создается в папке /opt/etc/dnscrypt-proxy.toml но лично мне гораздо удобнее все файлы (а их у меня набирается около 10ти) держать в отдельной папке, например, /opt/etc/dnscrypt/

Во-первых, когда все файлы, с которыми DNSCrypt работает располагаются рядом, под рукой, это удобно. Во-вторых, не создается лишнего беспорядка в корне папки конфигурации - /opt/etc/

Но, если вы, как и я решите перенести файл конфигурации и другие сопутствующие DNSCrypt файлы, необходимо учитывать, что при каждом обновлении нужно будет править скрипт запуска /opt/etc/init.d/S09dnscrypt-proxy2 указывая фактическое расположение файла.

Для ознакомления приведу полный листинг своего файла конфигурации:

Скрытый текст

~ # cat /opt/etc/dnscrypt/dnscrypt-proxy.toml

##############################################
#                                            #
#        dnscrypt-proxy configuration        #
#                                            #
##############################################

## This is an example configuration file.
## You should adjust it to your needs, and save it as "dnscrypt-proxy.toml"
##
## Online documentation is available here: https://dnscrypt.info/doc


##################################
#         Global settings        #
##################################

## List of servers to use
##
## Servers from the "public-resolvers" source (see down below) can
## be viewed here: https://dnscrypt.info/public-servers
##
## If this line is commented, all registered servers matching the require_* filters
## will be used.
##
## The proxy will automatically pick the fastest, working servers from the list.
## Remove the leading # first to enable this; lines starting with # are ignored.

# server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare']

## List of local addresses and ports to listen to. Can be IPv4 and/or IPv6.
## Note: When using systemd socket activation, choose an empty set (i.e. [] ).

listen_addresses = ['192.168.1.1:53', '[fe80::52ff:20ff:fe00:1f2e%br0]:53']
#listen_addresses = ['127.0.0.1:5353']


## Maximum number of simultaneous client connections to accept

max_clients = 250

## Switch to a non-privileged system user after listening sockets have been created.
## Two processes will be running.
## The first one will keep root privileges, but is only a supervisor, that does nothing
## except create the sockets, manage the service, and restart it if it crashes.
## The second process is the service itself, and that one will always run as a different
## user.
## Note (1): this feature is currently unsupported on Windows.
## Note (2): this feature is not compatible with systemd socket activation.

user_name = 'nobody'


## Require servers (from static + remote sources) to satisfy specific properties

# Use servers reachable over IPv4
ipv4_servers = true

# Use servers reachable over IPv6 -- Do not enable if you don't have IPv6 connectivity
ipv6_servers = false

# Use servers implementing the DNSCrypt protocol
dnscrypt_servers = true

# Use servers implementing the DNS-over-HTTPS protocol
doh_servers = true

## Require servers defined by remote sources to satisfy specific properties

# Server must support DNS security extensions (DNSSEC)
require_dnssec = false

# Server must not log user queries (declarative)
require_nolog = false

# Server must not enforce its own blacklist (for parental control, ads blocking...)
require_nofilter = false


## Always use TCP to connect to upstream servers.
## This can be can be useful if you need to route everything through Tor.
## Otherwise, leave this to `false`, as it doesn't improve security
## (dnscrypt-proxy will always encrypt everything even using UDP), and can
## only increase latency.

force_tcp = false


## HTTP / SOCKS proxy
## Uncomment the following line to route all TCP connections to a local Tor node
## Tor doesn't support UDP, so set `force_tcp` to `true` as well.

# proxy = "socks5://127.0.0.1:9050"

## How long a DNS query will wait for a response, in milliseconds

timeout = 2500

## Keepalive for HTTP (HTTPS, HTTP/2) queries, in seconds

keepalive = 30


## Load-balancing strategy: 'p2' (default), 'ph', 'fastest' or 'random'

lb_strategy = 'p2'


## Log level (0-6, default: 2 - 0 is very verbose, 6 only contains fatal errors)

# log_level = 2


## log file for the application

# log_file = 'dnscrypt-proxy.log'


## Use the system logger (syslog on Unix, Event Log on Windows)

use_syslog = true


## Delay, in minutes, after which certificates are reloaded

cert_refresh_delay = 240


## DNSCrypt: Create a new, unique key for every single DNS query
## This may improve privacy but can also have a significant impact on CPU usage
## Only enable if you don't have a lot of network load

# dnscrypt_ephemeral_keys = false


## DoH: Disable TLS session tickets - increases privacy but also latency

# tls_disable_session_tickets = false


## DoH: Use a specific cipher suite instead of the server preference
## 49199 = TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
## 49195 = TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
## 52392 = TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
## 52393 = TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
##
## On non-Intel CPUs such as MIPS routers and ARM systems (Android, Raspberry Pi...),
## the following suite improves performance.
## This may also help on Intel CPUs running 32-bit operating systems.
##
## Keep tls_cipher_suite empty if you have issues fetching sources or
## connecting to some DoH servers. Google and Cloudflare are fine with it.

tls_cipher_suite = [52392, 49199]


## Fallback resolver
## This is a normal, non-encrypted DNS resolver, that will be only used
## for one-shot queries when retrieving the initial resolvers list, and
## only if the system DNS configuration doesn't work.
## No user application queries will ever be leaked through this resolver,
## and it will not be used after IP addresses of resolvers URLs have been found.
## It will never be used if lists have already been cached, and if stamps
## don't include host names without IP addresses.
## It will not be used if the configured system DNS works.
## A resolver supporting DNSSEC is recommended. This may become mandatory.
##
## People in China may need to use 114.114.114.114:53 here.
## Other popular options include 8.8.8.8 and 1.1.1.1.

fallback_resolver = '9.9.9.9:53'


## Never let dnscrypt-proxy try to use the system DNS settings;
## unconditionally use the fallback resolver.

ignore_system_dns = true


## Maximum time (in seconds) to wait for network connectivity before
## initializing the proxy.
## Useful if the proxy is automatically started at boot, and network
## connectivity is not guaranteed to be immediately available.
## Use 0 to disable.

netprobe_timeout = 30


## Offline mode - Do not use any remote encrypted servers.
## The proxy will remain fully functional to respond to queries that
## plugins can handle directly (forwarding, cloaking, ...)

# offline_mode = false


## Automatic log files rotation

# Maximum log files size in MB
log_files_max_size = 10

# How long to keep backup files, in days
log_files_max_age = 7

# Maximum log files backups to keep (or 0 to keep all backups)
log_files_max_backups = 1



#########################
#        Filters        #
#########################

## Immediately respond to IPv6-related queries with an empty response
## This makes things faster when there is no IPv6 connectivity, but can
## also cause reliability issues with some stub resolvers.
## Do not enable if you added a validating resolver such as dnsmasq in front
## of the proxy.

block_ipv6 = false



##################################################################################
#        Route queries for specific domains to a dedicated set of servers        #
##################################################################################

## Example map entries (one entry per line):
## example.com 9.9.9.9
## example.net 9.9.9.9,8.8.8.8,1.1.1.1

#forwarding_rules = '/opt/etc/dnscrypt/forwarding-rules.txt'


###############################
#        Cloaking rules       #
###############################

## Cloaking returns a predefined address for a specific name.
## In addition to acting as a HOSTS file, it can also return the IP address
## of a different name. It will also do CNAME flattening.
##
## Example map entries (one entry per line)
## example.com     10.1.1.1
## www.google.com  forcesafesearch.google.com

cloaking_rules = '/opt/etc/dnscrypt/cloaking-rules.txt'


###########################
#        DNS cache        #
###########################

## Enable a DNS cache to reduce latency and outgoing traffic

cache = true

## Cache size

#cache_size = 512
cache_size = 2048

## Minimum TTL for cached entries

cache_min_ttl = 600


## Maximum TTL for cached entries

cache_max_ttl = 86400


## Minimum TTL for negatively cached entries

cache_neg_min_ttl = 60


## Maximum TTL for negatively cached entries

cache_neg_max_ttl = 600


###############################
#        Query logging        #
###############################

## Log client queries to a file

[query_log]

  ## Path to the query log file (absolute, or relative to the same directory as the executable file)

  # file = 'query.log'


  ## Query log format (currently supported: tsv and ltsv)

  format = 'tsv'


  ## Do not log these query types, to reduce verbosity. Keep empty to log everything.

  # ignored_qtypes = ['DNSKEY', 'NS']



############################################
#        Suspicious queries logging        #
############################################

## Log queries for nonexistent zones
## These queries can reveal the presence of malware, broken/obsolete applications,
## and devices signaling their presence to 3rd parties.

[nx_log]

  ## Path to the query log file (absolute, or relative to the same directory as the executable file)

  # file = 'nx.log'


  ## Query log format (currently supported: tsv and ltsv)

  format = 'tsv'



######################################################
#        Pattern-based blocking (blacklists)        #
######################################################

## Blacklists are made of one pattern per line. Example of valid patterns:
##
##   example.com
##   =example.com
##   *sex*
##   ads.*
##   ads*.example.*
##   ads*.example[0-9]*.com
##
## Example blacklist files can be found at https://download.dnscrypt.info/blacklists/
## A script to build blacklists from public feeds can be found in the
## `utils/generate-domains-blacklists` directory of the dnscrypt-proxy source code.

[blacklist]

  ## Path to the file of blocking rules (absolute, or relative to the same directory as the executable file)

  # blacklist_file = 'blacklist.txt'
blacklist_file = '/opt/etc/dnscrypt/blacklist-domains.txt'

  ## Optional path to a file logging blocked queries

  # log_file = 'blocked.log'


  ## Optional log format: tsv or ltsv (default: tsv)

  # log_format = 'tsv'



###########################################################
#        Pattern-based IP blocking (IP blacklists)        #
###########################################################

## IP blacklists are made of one pattern per line. Example of valid patterns:
##
##   127.*
##   fe80:abcd:*
##   192.168.1.4

[ip_blacklist]

  ## Path to the file of blocking rules (absolute, or relative to the same directory as the executable file)

  # blacklist_file = 'ip-blacklist.txt'


  ## Optional path to a file logging blocked queries

  # log_file = 'ip-blocked.log'


  ## Optional log format: tsv or ltsv (default: tsv)

  # log_format = 'tsv'



######################################################
#   Pattern-based whitelisting (blacklists bypass)   #
######################################################

## Whitelists support the same patterns as blacklists
## If a name matches a whitelist entry, the corresponding session
## will bypass names and IP filters.
##
## Time-based rules are also supported to make some websites only accessible at specific times of the day.

[whitelist]

  ## Path to the file of whitelisting rules (absolute, or relative to the same directory as the executable file)

  # whitelist_file = 'whitelist.txt'
whitelist_file = '/opt/etc/dnscrypt/domains-whitelist.txt'

  ## Optional path to a file logging whitelisted queries

  # log_file = 'whitelisted.log'


  ## Optional log format: tsv or ltsv (default: tsv)

  # log_format = 'tsv'



##########################################
#        Time access restrictions        #
##########################################

## One or more weekly schedules can be defined here.
## Patterns in the name-based blocklist can optionally be followed with @schedule_name
## to apply the pattern 'schedule_name' only when it matches a time range of that schedule.
##
## For example, the following rule in a blacklist file:
## *.youtube.* @time-to-sleep
## would block access to YouTube only during the days, and period of the days
## define by the 'time-to-sleep' schedule.
##
## {after='21:00', before= '7:00'} matches 0:00-7:00 and 21:00-0:00
## {after= '9:00', before='18:00'} matches 9:00-18:00

[schedules]

  # [schedules.'time-to-sleep']
  # mon = [{after='21:00', before='7:00'}]
  # tue = [{after='21:00', before='7:00'}]
  # wed = [{after='21:00', before='7:00'}]
  # thu = [{after='21:00', before='7:00'}]
  # fri = [{after='23:00', before='7:00'}]
  # sat = [{after='23:00', before='7:00'}]
  # sun = [{after='21:00', before='7:00'}]

  # [schedules.'work']
  # mon = [{after='9:00', before='18:00'}]
  # tue = [{after='9:00', before='18:00'}]
  # wed = [{after='9:00', before='18:00'}]
  # thu = [{after='9:00', before='18:00'}]
  # fri = [{after='9:00', before='17:00'}]



#########################
#        Servers        #
#########################

## Remote lists of available servers
## Multiple sources can be used simultaneously, but every source
## requires a dedicated cache file.
##
## Refer to the documentation for URLs of public sources.
##
## A prefix can be prepended to server names in order to
## avoid collisions if different sources share the same for
## different servers. In that case, names listed in `server_names`
## must include the prefixes.
##
## If the `urls` property is missing, cache files and valid signatures
## must be already present; This doesn't prevent these cache files from
## expiring after `refresh_delay` hours.

[sources]

  ## An example of a remote source from https://github.com/DNSCrypt/dnscrypt-resolvers

  #[sources.'public-resolvers']
  #urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
  #cache_file = '/opt/etc/dnscrypt/public-resolvers.md'
  #minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  #refresh_delay = 72
  #prefix = ''

  [sources.'opennic']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/opennic.md', 'https://download.dnscrypt.info/resolvers-list/v2/opennic.md']
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  cache_file = '/opt/etc/dnscrypt/opennic.md'
  refresh_delay = 72
  prefix = ''

  #[sources.'quad9-resolvers']
  #urls = ['https://www.quad9.net/quad9-resolvers.md']
  #minisign_key = 'RWQBphd2+f6eiAqBsvDZEBXBGHQBJfeG6G+wJPPKxCZMoEQYpmoysKUN'
  #cache_file = '/opt/etc/dnscrypt/quad9-resolvers.md'
  #refresh_delay = 72
  #prefix = ''

  ## Another example source, with resolvers censoring some websites not appropriate for children
  ## This is a subset of the `public-resolvers` list, so enabling both is useless

  #  [sources.'parental-control']
  #  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/parental-control.md', 'https://download.dnscrypt.info/resolvers-list/v2/parental-control.md']
  #  cache_file = 'parental-control.md'
  #  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'



## Optional, local, static list of additional servers
## Mostly useful for testing your own servers.

[static]

  # [static.'google']
  # stamp = 'sdns://AgUAAAAAAAAAAAAOZG5zLmdvb2dsZS5jb20NL2V4cGVyaW1lbnRhbA'

~ #

 

Приведу некоторые отличия моего конфигурационного файла от стандартного.

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

В отличии от дефолтовой строчки, где сервер будет слушать на 127.0.0.1 мне было необходимо, чтобы сервер "слушал" на 192.168.1.1, чтобы я мог прописать данный сервер в настройках DHCP как сервер DNS для всех устройств моей домашней сети.

Кстати, так как будем использовать dnscrypt-proxy2 как единственный DNS сервер на роутере, необходимо отключить (а точнее перевести в специальный режим работы при котором компоненты прошивки все равно смогут обращаться к DNS резолверу прошивки через RPC оставив порт 53 свободным) основной DNS сервер NDMS. Сделаем это следующими командами в Cli (не в Entware):

opkg dns-override 

system configuration save

Включать только на устройствах с функционирующим IPv6. На самом деле я особой скорости у серверов IPv6 не увидел, так что можно и не включать.

ipv6_servers = true

Я сейчас вообще рекомендую включить опцию use_syslog и смотреть события DNSCrypt в веб интерфейсе Кинетика на странице Диагностика - Системный журнал

use_syslog = true

Но если все же привычно работать с логами в виде фалов, то 

Скрытый текст

 

Полный путь до журнала нашего dnscrypt-proxy2


log_file = '/opt/var/log/dnscrypt-proxy-v2.log'

Для диагностики проблем так же будет полезным включить наиболее подробный уровень логгирования.

 

Когда все работает хорошо и стабильно, уровень логгирования нужно вернуть на исходный - 2 (можно и выше)

log_level = 0

Далее идет fallback_resolver. Вообще его можно не менять, но мне захотелось поставить популярный ныне CloudFlare DNS с его красивым адресом.

fallback_resolver = '1.1.1.1:53'

Размер кэша я ставлю в 4 раза больше, чем по умолчанию. Можно не менять. Кстати, в ответах просьба высказаться, какой размер кэша оптимальный по вашему?

cache_size = 2048

Блокировка рекламы

Далее идет раздел блокировки. В качестве значения параметра blacklist_file указываем полный путь до вашего файла с блокируемыми доменными именами. 

UPD. Можно воспользоваться скриптом от @TheBB вот из этого поста

Я свой файл получаю скриптом автора dnscrypt-proxy

blacklist_file = '/opt/etc/dnscrypt/dnscrypt-blacklist-domains.txt'

А обновляю этот список еженедельно с помощью cron: Создаем файл скрипта /opt/etc/cron.weekly/generate-blacklist для еженедельного обновления со следующим содержимым:

#!/opt/bin/sh
cd /opt/etc/dnscrypt/
python generate-domains-blacklist.py -i > list.txt.tmp && mv -f list.txt.tmp /opt/etc/dnscrypt/blacklist-domains.txt
/opt/etc/init.d/S09dnscrypt-proxy2 restart

И не забываем сделать его исполняемым:

chmod +x /opt/etc/cron.weekly/generate-blacklist

Можно в принципе логи не зачищать, тогда строчку с rm нужно закомментировать или удалить.

Для нормальной работы скрипта генерации blacklist-domains.txt необходимо установить еще 2 пакета:

opkg install python ca-certificates

После того, как пакеты будут установлены, переходим в папку, где расположен скрипт генерации и проверяем его работу (ошибок быть не должно.?

python generate-domains-blacklist.py -i > list.txt.tmp && mv -f list.txt.tmp list

Для диагностики корректности блокировки того или иного ресурса или для отлова false positive блокировок рекомендую включить журнал того, что блокируется:

  log_file = '/opt/var/log/blocked.log'

  log_format = 'tsv

Далее у меня прописан белый список доменных имен, которые не нужно блокировать никогда (привет РКН еще раз). На самом деле, данная опция появилась в последних версиях (кажется в 2.0.11) и ранее белый список обрабатывался скриптом генерации черного списка блокируемых адресов. То есть вхождения белого списка удалялись из черного при генерации. Теперь вот отдельная опция:

 whitelist_file = '/opt/etc/dnscrypt-proxy/generate-domains-blacklists/domains-whitelist.txt'

Добавляем возможность разрешать домены в зоне *.lib

Переходим к настройке dnscrypt серверов. И вот тут я очень рекомендую использовать серверы проекта OpenNIC.

То есть настройка в конфигурационном файле у меня вот такая (закомментировал основной список публичных серверов и добавил только серверы проекта OpenNIC?

  #[sources.'public-resolvers']
  #urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
  #cache_file = '/opt/etc/dnscrypt/public-resolvers.md'
  #minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  #refresh_delay = 72
  #prefix = ''

  [sources.'opennic']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/opennic.md', 'https://download.dnscrypt.info/resolvers-list/v2/opennic.md']
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  cache_file = '/opt/etc/dnscrypt/opennic.md'
  refresh_delay = 72
  prefix = ''

Почему именно OpenNIC

Используя именно эти серверы получаем один замечательный бонус - разрешение EmerCoin доменных имен типа *.lib и других.

Благодаря этому я пользуюсь одним популярным торрент трекером по его доменному имени в зоне *.lib не занимаясь постоянным поиском живых зеркал.

Опять же, эти серверы вроде бы не вносят своих блокировок и не логгируют запросы. Хотя как знать.

Так же я НЕ рекомендую использовать серверы проекта компании Cisco - OpenDNS. Недавно @Александр Рыжов в канале Keenetic в одном известном мессенджере сообщил, что Cisco заворачивала на себя трафик mail.ru подставляя при этом фейковый сертификат, так что будьте бдительны.

Так же прошу обратить внимание, большинство серверов проекта OpenNIC с поддержкой dnscrypt находятся в Европе и Америке, так что моментальных ответов ждать не приходится. У меня самый быстрый сервер дает около 100 мс, и на том спасибо. Отсюда и увеличенный размер кэша, которым я пытаюсь эти задержки свести к минимуму.

Перехват всех DNS запросов на роутере. "Приземление" DNS трафика

Теперь переходим к очень важной теме, изучая которую я потратил много времени. А именно, речь пойдет об использовании только локального DNS сервера dnscryprt-proxy2 вместо провайдерских DNS серверов на всех устройствах сети.

Суть здесь вот в чем. Начиная, кажется. с 6 версии ОС Андроид, видимо, для повышения стабильности (и, имхо, для утоления своей тотальной любознательности) параллельно посылает запросы и на тот сервер, что указан в сетевых настройках, которые получены устройством от DHCP сервера и на сервер 8.8.8.8

Я очень долго не мог понять, почему на всех устройствах я не вижу рекламу, так как она блокируется на роутере, но всегда вижу рекламу на своем Андроид смартфоне. 

Тогда я с помощью захвата пакетов все и обнаружил. Кстати, более простым способом было посмотреть трафик в Entware с помощью tcpdump.

tcpdump -i br0

или посмотрим только трафик на сетевой порт 53

tcpdump port 53 -n -nn -v

Итак, для начала избавимся от провайдерских DNS серверов. В cli вводим вот эти 2 замечательные команды:

interface ISP no ip dhcp client name-servers
system configuration save

Все эти моменты хорошо расписаны в статье Использование публичных DNS-серверов в интернет-центре, но лично мне их удалось найти тут, на форуме в ответе уважаемого @Le ecureuil

От слежки провайдера избавились, осталось приземлить все DNS запросы в корпорацию добра на наш сервер dnscrypt-proxy2. Здесь мне так же помог @Александр Рыжов на канале Keenetic.

У данного метода есть и плюсы - например, при подмене локального DNS сервера вирусом на компьютере с Windows запросы пойдут все равно на роутер, а не DNS сервер злоумышленников. Есть и минусы, например, не весь трафик, который идет по UDP\53 это обязательно DNS запросы, это вполне может быть портом для подключения к, положим, OpenVPN серверу. Но так или иначе, для большинства домашних сетей данный способ приносит больше плюсов, имхо.

В вашем любимом текстовом редакторе создаем файл скрипта /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh:

#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0
[ -z "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" ] && iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53
exit 0

Либо, если любимого редактора еще нет, можно воспользоваться вот такой длинной командой:

echo -e '#!/bin/sh\n[ "$type" == "ip6tables" ] && exit 0\n[ "$table" != "nat" ] && exit 0\n[ -z "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" ] && iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53\nexit 0' >> /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh

Ранее использовалась конструкция "$(iptables-save | grep " --dport 53 -j DNAT --to-destination 192.168.1.1")" но из-за некоторых ошибок она была заменена конструкцией "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" которая должна отрабатывать быстрее.

Далее делаем созданный скрипт исполняемым:

chmod +x /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh

Вероятно, скрипт можно написать значительно изящнее и ловить не только UDP, но и TCP трафик, но у меня получилось только вот так. В ответах, гуру баша могут подсказать как сделать правильнее, подправлю для общего блага. Мне "приземление" только UDP трафика на 53 порт роутера помогло полностью избавиться от рекламы на всех устройствах домашней сети. Так что TCP можно и не трогать.

В итоге:

  • Защитили весь свой DNS трафик от перехвата со стороны провайдера и Гугла
  • Заблокировали рекламу на всех устройствах домашней сети (это наиболее актуально для всяких Смарт ТВ и других девайсов не нет возможности блокировать рекламу на самом устройстве)
  • Получили разрешение имен *.lib и других, чем немного упростили себе жизнь в все более блокируемом интернете

Диагностика проблем с запуском\работой.

Рекомендую для диагностики запустить DNSCrypt из консоли строкой запуска из скрипта, то есть командой:

dnscrypt-proxy -config /opt/etc/dnscrypt/dnscrypt-proxy.toml

Путь до файла конфигурации при необходимости поправить, по-умолчанию будет вот такой -config /opt/etc/dnscrypt-proxy.toml

Для начала посмотрим журнал dnscrypt-proxy2 в том месте, где вы его настроили. Я смотрю вот такой командой:

# tail -f -n 30 /opt/var/log/dnscrypt-proxy-v2.log

Либо если включили syslog, то события смотрим веб интерфейсе Кинетика на странице Диагностика - Системный журнал


Следующая команда должна выдать PID процесса. Если ничего не выдала - DNSCrypt не запущен (возможно завершился с ошибкой)

~ # ps | grep dnscrypt
19766 root      655m S    dnscrypt-proxy -config /opt/etc/dnscrypt/dnscrypt-proxy.toml
19792 nobody    655m S    /opt/sbin/dnscrypt-proxy -config /opt/etc/dnscrypt/dnscrypt-proxy.toml -child
20271 root      4780 S    grep dnscrypt
~ #

Проверить, слушается ли порт 53. Обратите внимание, слушать должен именно процесс dnscrypt-proxy, а не ndmproxy

~ # netstat -tulnp | grep dnscrypt
tcp        0      0 192.168.1.1:53          0.0.0.0:*               LISTEN      19766/dnscrypt-prox
tcp        0      0 ::1:53                  :::*                    LISTEN      19766/dnscrypt-prox
udp        0      0 192.168.1.1:53          0.0.0.0:*                           19766/dnscrypt-prox
udp        0      0 ::1:53                  :::*                                19766/dnscrypt-prox
~ #

Опять же все ограничения, которые касались использования первой версии dnscrypt-proxy справедливы и для второй, ссылки на инструкции я приложил выше.

Это моя первая инструкция в этом разделе, так что сильно не пинать, а конструктивная критика крайне приветствуется. Если есть, что нужно подправить\доработать - пишите, вместе сделаем использование данного пакета проще и эффективнее.

Edited by ankar84
Обновление информации, исправления. Добавил ссылку на пост по генерации файла блокировки
  • Thanks 5
  • Upvote 5

Share this post


Link to post
Share on other sites
В 05.12.2018 в 21:40, Le ecureuil сказал:

Про conndmmark: 

 

Что-то не пойму, куда именно добавлен патч. Установил самый свежий драфт 2.15.A.3.0-1, в Entware сделал update&&upgrade, а ошибка осталась.

Share this post


Link to post
Share on other sites
58 минут назад, ankar84 сказал:

Что-то не пойму, куда именно добавлен патч. Установил самый свежий драфт 2.15.A.3.0-1, в Entware сделал update&&upgrade, а ошибка осталась.

Ещё рано для `opkg update`. Но можете затестить предварительную версию пакета )))

iptables_1.4.21-2b_mipsel-3.4.ipk

  • Thanks 2

Share this post


Link to post
Share on other sites
1 час назад, TheBB сказал:

Ещё рано для `opkg update`. Но можете затестить предварительную версию пакета )))

iptables_1.4.21-2b_mipsel-3.4.ipk

Теперь понял где и что поправлено.

Подожду штатного обновления, так как проблема не слишком критичная.

Share this post


Link to post
Share on other sites
В 09.12.2018 в 08:19, TheBB сказал:

Ещё рано для `opkg update`. Но можете затестить предварительную версию пакета )))

iptables_1.4.21-2b_mipsel-3.4.ipk

после ввода команды

iptables-save | grep " --dport 53 -j DNAT --to-destination 192.168.1.1"

дает адекватный ответ без ругани. И в журнале пропала запись.

Цитата

-A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.1.1:53

 

Share this post


Link to post
Share on other sites
3 часа назад, rotor сказал:

дает адекватный ответ без ругани. И в журнале пропала запись.

А у меня всё по прежнему, вывод с ошибкой. Пока вроде нечего не обновилось.

Share this post


Link to post
Share on other sites
2 часа назад, ankar84 сказал:

А у меня всё по прежнему, вывод с ошибкой.

Ошибку выдает iptables-save. Это не мешает работоспособности скрипта из этой темы. Я помню, мы обсуждали - нужно ли включать патчи, о которых писал @Le ecureuil в entware или нет. Entware это же универсальный репозиторий, а не только для кинетиков.

Если не включили, можно включить только для mips* по схеме https://github.com/Entware/Entware/commit/846502743e2335cbec1634cc612cb31e5f4ee688

Share this post


Link to post
Share on other sites

Мне кажется следует в скрипте заменить iptables-save на выдачу правил только из PREROUTING - и быстрее чуть работать будет.

  • Upvote 1

Share this post


Link to post
Share on other sites

Всё это конечно классно. Но долго разбираться нужно. Есть способ для ленивых. Никаких OPKG, телнетов и установки сторонних пакетов не требуется.

Всё настраивается в web-интерфейсе роутера. Если у вас используется какое-нибудь PPPOE или VPN соединение для входа в инет, перенастраиваем его чтоб подключалось по IP. Провайдерские DNS везде убираем. В клиенте роутера настраиваем любой бесплатный VPN по IP адресу с шифрованием. (выбирайте стабильный, чтоб соединение не разрывалось часто). Прописываем на вкладке Интернет-Фильтр гугловские или клаудовские DNS сервера в роутере и там же выбираем "Подключение" через вашу бесплатную VPN. Тем самым заворачиваем работу DNS на этот VPN тунель. И всё. Весь DNS трафик спрятан. У данного решения есть rконечно и свои минусы. За то предельно просто.

Edited by keenet07
  • Thanks 1

Share this post


Link to post
Share on other sites
11 час назад, zyxmon сказал:

Мне кажется следует в скрипте заменить iptables-save на выдачу правил только из PREROUTING - и быстрее чуть работать будет

А может быть уже есть готовая реализация? А то я далек от баша и iptables.

Share this post


Link to post
Share on other sites
58 минут назад, ankar84 сказал:

А может быть уже есть готовая реализация? А то я далек от баша и iptables.

Все от этого далеки. Что-нибудь в духе

`

.... iptables -nvL PREROUTING | grep "udp dpt:53" .....

Допилить предлагаю самостоятельно. Я dnscrypt-proxy2 не юзаю.

 

  • Thanks 1

Share this post


Link to post
Share on other sites
В 12.12.2018 в 23:46, zyxmon сказал:

Допилить предлагаю самостоятельно. Я dnscrypt-proxy2 не юзаю.

В итоге получилось почти так как вы указали, только добавил вывод таблицы nat, так как без этого наше правило не выводилось.

#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0
[ -z "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" ] && iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53
exit 0

После перезагрузки проверил - правило на месте, ошибки разумеется нет.

Edited by ankar84
  • Thanks 1

Share this post


Link to post
Share on other sites

При запуске

python generate-domains-blacklist.py

Ругается:

  File "generate-domains-blacklist.py", line 7
    <!DOCTYPE HTML>
    ^
SyntaxError: invalid syntax

В чём может быть проблема?

Share this post


Link to post
Share on other sites
17 часов назад, Andrey Che сказал:

В чём может быть проблема?

Очень странно.

Прикладываю свой скрипт (там в самом начале и строка запуска показана)generate-domains-blacklist.py

 

 

Share this post


Link to post
Share on other sites

Вот что выдало:

/opt/etc/dnscrypt # python generate-domains-blacklist.py > list.txt.tmp && mv -f
 list.txt.tmp list
Loading data from [<!DOCTYPE html>]
unknown url type: !DOCTYPE html/opt/etc/dnscrypt #

PS: система стоит свежая. Установлен tor, dnsmasq, dnscrypt2, python, ca и зависимые библиотеки.

Скрытый текст

bind-dig - 9.11.5-2
bind-libs - 9.11.5-2
busybox - 1.29.2-1
ca-bundle - 20180409-3
ca-certificates - 20180409-3
cron - 4.1-3
curl - 7.62.0-1
dnscrypt-proxy2 - 2.0.19-1
dnsmasq-full - 2.80-1
dropbear - 2017.75-8
entware-release - 1.0-2
findutils - 4.6.0-1
glib2 - 2.58.1-2
grep - 3.1-1
ipset - 6.38-1
iptables - 1.4.21-2a
ldconfig - 2.27-8
libattr - 2.4.48-1
libblkid - 2.32.1-1
libbz2 - 1.0.6-4
libc - 2.27-8
libcap - 2.25-2
libcurl - 7.62.0-1
libdb47 - 4.7.25.4.NC-5
libevent2 - 2.1.8-2
libexpat - 2.2.6-1
libffi - 3.2.1-3
libgcc - 7.3.0-8
libgdbm - 1.11-1
libiconv-full - 1.11.1-3
libintl-full - 0.19.8.1-1
libipset - 6.38-1
libmbedtls - 2.13.0-1
libmnl - 1.0.4-1
libmount - 2.32.1-1
libncurses - 6.1-1
libncursesw - 6.1-1
libndm - 1.1.9-1
libnetfilter-conntrack - 2017-07-25-e8704326-1
libnfnetlink - 1.0.1-1
libopenssl - 1.0.2p-1a
libpcre - 8.42-1
libpthread - 2.27-8
librt - 2.27-8
libslang2 - 2.3.2-1
libsqlite3 - 3250300-1
libssh2 - 1.8.0-3
libssp - 7.3.0-8
libstdcpp - 7.3.0-8
libtirpc - 1.1.4-1
libuuid - 2.32.1-1
libxml2 - 2.9.8-3
locales - 2.27-8
mc - 4.8.21-4
ndmq - 1.0.2-4a
openssh-sftp-server - 7.9p1-2
opkg - 2011-04-08-9c97d5ec-17c
opt-ndmsv2 - 1.0-10a
polipo - 1.1.1-2
privoxy - 3.0.26-4
python - 2.7.15-2
python-base - 2.7.15-2
python-codecs - 2.7.15-2
python-compiler - 2.7.15-2
python-ctypes - 2.7.15-2
python-db - 2.7.15-2
python-decimal - 2.7.15-2
python-distutils - 2.7.15-2
python-email - 2.7.15-2
python-gdbm - 2.7.15-2
python-light - 2.7.15-2
python-logging - 2.7.15-2
python-multiprocessing - 2.7.15-2
python-ncurses - 2.7.15-2
python-openssl - 2.7.15-2
python-pydoc - 2.7.15-2
python-sqlite3 - 2.7.15-2
python-unittest - 2.7.15-2
python-xml - 2.7.15-2
terminfo - 6.1-1
tor - 0.3.4.9-1
tor-geoip - 0.3.4.9-1
zlib - 1.2.11-2
zoneinfo-asia - 2018g-1
zoneinfo-europe - 2018g-1

 

 

Edited by Andrey Che

Share this post


Link to post
Share on other sites
8 часов назад, Andrey Che сказал:

Вот что выдало:

У меня выдача вот такая:

 # /opt/etc/cron.weekly/1-generate-blacklist
Loading data from [file:domains-blacklist-local-additions.txt]
.....

Значит проблема где-то в районе загружаемых источников для генерации итогового файла блокировки. Первым источником стоит локальный файл domains-blacklist-local-additions.txt

Посмотрите что у вас в этом файле. Может ошибка именно оттуда.

Так же в качестве конфигурационного файла по умолчанию для скрипта является файл domains-blacklist.conf, который должен находиться рядом со скриптом. 

Вот содержимое моего файла. Посмотрите внимательно, что в вашем.

##################################################################################
#                                                                                #
#   Generate a black list of domains using public data sources, and the local    #
#   domains-blacklist-local-additions.txt file.                                  #
#                                                                                #
#   The default configuration is just indicative, and corresponds to the one     #
#   used to produce the public "mybase" set.                                     #
#                                                                                #
#   Comment out the URLs of the sources you wish to disable, leave the ones      #
#   you would like enabled uncommented.  Then run the script to build the        #
#   dnscrypt-blacklist-domains.txt file:                                         #
#                                                                                #
#   $  generate-domains-blacklist.py > dnscrypt-blacklist-domains.txt            #
#                                                                                #
#   Domains that should never be blocked can be put into a file named            #
#   domains-whitelist.txt.                                                       #
#                                                                                #
#   That blacklist file can then be used in the dnscrypt-proxy.toml file:        #
#                                                                                #
#   [blacklist]                                                                  #
#                                                                                #
#   blacklist_file = 'dnscrypt-blacklist-domains.txt'                            #
#                                                                                #
##################################################################################

# Local additions
file:domains-blacklist-local-additions.txt

#StevenBlack
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

# Bambenek malware C2s
https://osint.bambenekconsulting.com/feeds/c2-dommasterlist.txt

# hpHosts’ Ad and tracking servers
https://hosts-file.net/.%5Cad_servers.txt

# Malware domains
https://mirror1.malwaredomains.com/files/justdomains

# Abuse.ch Ransomware Tracker
https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt

# Malware Domain List
http://www.malwaredomainlist.com/mdlcsv.php?inactive=off

# Adblock Warning Removal List
https://easylist-downloads.adblockplus.org/antiadblockfilters.txt

# EasyList
https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt

# EasyList China
https://easylist-downloads.adblockplus.org/easylistchina.txt

# RU AdList
https://easylist-downloads.adblockplus.org/advblock.txt

# Fanboy’s Social Blocking List
https://easylist-downloads.adblockplus.org/fanboy-social.txt

# Peter Lowe’s Ad and tracking server list
https://pgl.yoyo.org/adservers/serverlist.php

# Spam404
https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt

# CJX Annoyance List
https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt

# EU: Prebake - Filter Obtrusive Cookie Notices
https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt

# Malvertising filter list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt

# Malware filter list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt

# Basic tracking list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt

# Sysctl list (ads)
http://sysctl.org/cameleon/hosts

# KAD host file (fraud/adware) - https://github.com/azet12/KADhosts
https://raw.githubusercontent.com/azet12/KADhosts/master/KADhosts.txt

# BarbBlock list (spurious and invalid DMCA takedowns)
https://ssl.bblck.me/blacklists/domain-list.txt

# Dan Pollock's hosts list
http://someonewhocares.org/hosts/hosts

# NoTracking's list - blocking ads, trackers and other online garbage
https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt

# CoinBlockerLists: blocks websites serving cryptocurrency miners - https://zerodot1.github.io/CoinBlockerLists/ - Contains false positives
# https://raw.githubusercontent.com/ZeroDot1/CoinBlockerLists/master/list_browser.txt

# Websites potentially publishing fake news
# https://raw.githubusercontent.com/marktron/fakenews/master/fakenews

# Quidsup NoTrack - Contains too many false positives to be enabled by default
# https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt

# Dynamic DNS services, sadly often used by malware
# https://mirror1.malwaredomains.com/files/dynamic_dns.txt

# Block pornography
# https://raw.githubusercontent.com/Clefspeare13/pornhosts/master/0.0.0.0/hosts
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/pornography-hosts
# http://securemecca.com/Downloads/hosts.txt

# Block gambling sites
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/gambling-hosts

# Block social media sites
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/social-hosts

 

Share this post


Link to post
Share on other sites
~ # cat get-dnscrypt-files.sh 
#!/opt/bin/sh

DIR="/opt/etc/dnscrypt"
FILE="generate-domains-blacklist.py"
URL="https://raw.githubusercontent.com/jedisct1/dnscrypt-proxy/master/utils/generate-domains-blacklists"

# check curl
if [ ! -f "/opt/bin/curl" ]; then
	opkg install curl --force-reinstall
fi

# check dir
if [ ! -d "$DIR" ]; then
	mkdir -p $DIR
fi

cd $DIR

# download files
curl -O $URL/domains-blacklist-all.conf \
	-O $URL/domains-blacklist-local-additions.txt \
	-O $URL/domains-blacklist.conf \
	-O $URL/domains-time-restricted.txt \
	-O $URL/domains-whitelist.txt \
	-O $URL/$FILE

# fix shebang & make executable
sed -i -e 's,#!.*,#!/opt/bin/python,' $FILE && chmod +x $FILE

# create blacklist
./$FILE -i > domains-blacklist.txt

для "облегчения страданий" в получении контента... )))

  • Thanks 3

Share this post


Link to post
Share on other sites
36 минут назад, TheBB сказал:

для "облегчения страданий" в получении контента

Добавил ссылку на ваше сообщение в "шапку" темы.

Спасибо за скрипт!

  • Thanks 1

Share this post


Link to post
Share on other sites
В 05.06.2018 в 19:33, ankar84 сказал:

... конструктивная критика крайне приветствуется...

"Заметьте, не я это предложил!" (х/ф "Покровские ворота")

 

Не совсем очевидно, что файлы для генерации списка должны быть в наличии.

Как имена файлов, так и пути различаются.

В 05.06.2018 в 19:33, ankar84 сказал:

blacklist_file = '/opt/etc/dnscrypt/blacklist-domains.txt'

 

В 05.06.2018 в 19:33, ankar84 сказал:

blacklist_file = '/opt/etc/dnscrypt/dnscrypt-blacklist-domains.txt'

 

В 05.06.2018 в 19:33, ankar84 сказал:

whitelist_file = '/opt/etc/dnscrypt/domains-whitelist.txt'

 

В 05.06.2018 в 19:33, ankar84 сказал:

 whitelist_file = '/opt/etc/dnscrypt-proxy/generate-domains-blacklists/domains-whitelist.txt'

При генерации списка с ключом "-i" можно обойтись без промежуточного файла. В случае ошибки, файл с неполным списком всё равно будет создан.

костыль нумер два (расположить в любом удобном месте и сделать исполняемым) ))):

/opt/etc # cat ./generate.sh 
#!/opt/bin/sh

DIR="/opt/etc/dnscrypt"
SCRIPT="/opt/etc/init.d/S09dnscrypt-proxy2"
num=5

#cd /opt/etc/dnscrypt
cd $DIR

while [ $num -gt 0 ]; do
    ./generate-domains-blacklist.py > blacklist.txt;
    if [ $? -eq 0 ]; then
        mv blacklist.txt domains-blacklist.txt
	logger -t dnscrypt-proxy "blacklist  updated successfully"
#	echo "OK!"
	$SCRIPT restart
        exit 0;
    fi
    logger -t dnscrypt-proxy "try again"
#    echo "Failed! Try again..."
    sleep 10
    let num=$num-1
done
exit 1;

до 5 попыток (меняем на нужное самостоятельно) генерации списка, с интервалом перезапуска в 10 сек (взято "с потолка", можно выставить своё значение); после первой удачной попытки генерации, промежуточный файл переносится взамен старого и dnscrypt-proxy перезапускается; если все попытки окажутся неудачными, скрипт завершается до следующего запуска (вручную или по заданию cron`a), файл списка остаётся нетронутым.

Скрытый текст

запуск вручную с моделированием падения


/opt/etc # ./generate.sh 
Loading data from [file:domains-blacklist-local-additions.txt]
Loading data from [https://osint.bambenekconsulting.com/feeds/c2-dommasterlist.txt]
Loading data from [https://hosts-file.net/.%5Cad_servers.txt]
Loading data from [https://mirror1.malwaredomains.com/files/justdomains]
Loading data from [https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt]
Loading data from [http://www.malwaredomainlist.com/mdlcsv.php?inactive=off]
Loading data from [https://easylist-downloads.adblockplus.org/antiadblockfilters.txt]
Loading data from [https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt]
Loading data from [https://easylist-downloads.adblockplus.org/easylistchina.txt]
Loading data from [https://easylist-downloads.adblockplus.org/fanboy-social.txt]
Loading data from [https://pgl.yoyo.org/adservers/serverlist.php]
[https://pgl.yoyo.org/adservers/serverlist.php] could not be loaded: <urlopen error ('_ssl.c:710: The handshake operation timed out',)>
Failed. Try againe
Loading data from [file:domains-blacklist-local-additions.txt]
Loading data from [https://osint.bambenekconsulting.com/feeds/c2-dommasterlist.txt]
Loading data from [https://hosts-file.net/.%5Cad_servers.txt]
Loading data from [https://mirror1.malwaredomains.com/files/justdomains]
Loading data from [https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt]
Loading data from [http://www.malwaredomainlist.com/mdlcsv.php?inactive=off]
Loading data from [https://easylist-downloads.adblockplus.org/antiadblockfilters.txt]
Loading data from [https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt]
Loading data from [https://easylist-downloads.adblockplus.org/easylistchina.txt]
Loading data from [https://easylist-downloads.adblockplus.org/fanboy-social.txt]
Loading data from [https://pgl.yoyo.org/adservers/serverlist.php]
Loading data from [https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt]
Loading data from [https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt]
Loading data from [https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt]
Loading data from [https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt]
Loading data from [https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt]
Loading data from [https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt]
Loading data from [http://sysctl.org/cameleon/hosts]
Loading data from [https://raw.githubusercontent.com/azet12/KADhosts/master/KADhosts.txt]
Loading data from [https://ssl.bblck.me/blacklists/domain-list.txt]
Loading data from [https://someonewhocares.org/hosts/hosts]
Loading data from [https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt]
Loading data from [file:domains-time-restricted.txt]
Loading data from [file:domains-whitelist.txt]
OK
 Shutting down dnscrypt-proxy...              done. 
 Starting dnscrypt-proxy...              done. 
/opt/etc # 

вид из журнала


...
[I] Jan  8 17:00:00 crond[2801]: USER root pid 11442 cmd /opt/etc/generate.sh 2>&1 
[I] Jan  8 17:04:28 dnscrypt-proxy: blacklist  updated successfully
[I] Jan  8 17:04:30 root: Started dnscrypt-proxy from .
[I] Jan  8 17:05:00 crond[2801]: USER root pid 11969 cmd /opt/etc/generate.sh 2>&1 
[I] Jan  8 17:10:00 crond[2801]: user root: process already running: /opt/etc/generate.sh 2>&1 
[I] Jan  8 17:10:18 dnscrypt-proxy: blacklist  updated successfully
[I] Jan  8 17:10:19 root: Started dnscrypt-proxy from .
[I] Jan  8 17:15:00 crond[2801]: USER root pid 13053 cmd /opt/etc/generate.sh 2>&1 
[I] Jan  8 17:15:21 dnscrypt-proxy: try again
[I] Jan  8 17:19:25 dnscrypt-proxy: blacklist  updated successfully
[I] Jan  8 17:19:27 root: Started dnscrypt-proxy from .
...

 

 

  • Thanks 2

Share this post


Link to post
Share on other sites
15 часов назад, TheBB сказал:

Заметьте, не я это предложил!

я от своих слов не отказываюсь, инструкция далека от идеала, и конструктивная критика безусловно необходима и приветствуется!

15 часов назад, TheBB сказал:

Как имена файлов, так и пути различаются.

Здесь да. Инструкция создавалась и позже редактировалась в течении определенного времени, где я для своего удобства менял имена файлов и их расположение. Имена менял в основном для того, чтобы они начинались не одинаково, чтобы можно было с помощью табуляции удобно ими оперировать. Именно поэтому удалил у большинства файлов начало в виде "dnscrypt-". Так же перестал собирать файлы, необходимые для генерации блеклиста в отдельной папке, а разместил их рядом с файлом конфигурации dnscrypt в /opt/etc/dnscrypt/

15 часов назад, TheBB сказал:

При генерации списка с ключом "-i" можно обойтись без промежуточного файла. В случае ошибки, файл с неполным списком всё равно будет создан.

Вот этого не знал, спасибо!

Итого - постараюсь привести первый пост темы в порядок, может что-то оптимизировать.

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×