software:blocky:blocky-install

Blocky: Установка и настройка

Blocky - это DNS-прокси с функцией вырезания рекламы, аналог знаменитого Pi-Hole: https://wiki.rtzra.ru/software/pihole/pihole-install. Работает следующим образом: проксирует все DNS-запросы и вырезает все домены занесенные в черный список. Что это дает: экономится траффик, освобождается интернет-канал от избыточных запросов, на устройствах не нужно устанавливать блокировщики рекламы. Периодически обновляет списки блокировки (время меняется в настройках).

Домашняя страничка: https://0xerr0r.github.io/blocky/

Готовые скрипты можно взять тут: https://github.com/rtzra/docker/tree/master/blocky

План установки:

  • Настройка конфигурации
  • Запуск в Docker
  • Настройка Prometheus для сбора метрик
  • Настройка Grafana Dashboard для получения красивых отчетов

Подробно все опции описаны тут: https://0xerr0r.github.io/blocky/configuration/

Список публичных DNS-серверов с описанием и возможностями можно найти тут: https://dnsprivacy.org/public_resolvers/, я предпочитаю использовать DNS-over-TLS (DoT).

Списки для блокировки можно взять тут: https://firebog.net/ и для русскоязычного сегмента тут: https://github.com/AdguardTeam/AdguardFilters

Пример готового файла конфигурации blocky.conf:

# Configuration file blocky.conf for Blocky # https://0xerr0r.github.io/blocky/

upstream:
  # List of public DNS servers: https://0xerr0r.github.io/blocky/additional_information/#list-of-public-dns-servers
  default:
  #  - tcp-tls:172.16.1.2 # You own secure upstream DNS server
    - tcp-tls:1.1.1.1 # one.one.one.one
    - tcp-tls:1.0.0.1 # one.one.one.one
    - tcp-tls:8.8.8.8 # Google
    - tcp-tls:8.8.4.4 # Google
    - tcp-tls:9.9.9.9 # quad9.net
    #- 149.112.112.112 # quad9.net
  # Restrict DNS for some network
  #192.168.100.0/24:
  #  - 1.1.1.1
  #  - 9.9.9.9
conditional:
  rewrite:
    example.com: YOU-OWN-DOMAIN.COM
  mapping:
    YOU-OWN-DOMAIN.COM: udp:10.10.20.1,udp:10.10.21.1
    # for reverse DNS lookups of local devices
    20.10.10.in-addr.arpa: udp:10.10.20.1
    21.10.10.in-addr.arpa: udp:10.10.21.1
blocking:
  refreshPeriod: 30 # Reload blocklist Every 30 minutes, default 60
  blockType: zeroIp
  blackLists:
    default:
      - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
    suspicious:
      - https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts.txt
      - https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts
      - https://v.firebog.net/hosts/static/w3kbl.txt
    advertising:
      - https://easylist.to/easylist/easylist.txt
      - https://secure.fanboy.co.nz/fanboy-cookiemonster.txt
      - https://adaway.org/hosts.txt
      - https://v.firebog.net/hosts/AdguardDNS.txt
      - https://v.firebog.net/hosts/Admiral.txt
      - https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt
      - https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
      - https://v.firebog.net/hosts/Easylist.txt
      - https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
      - https://raw.githubusercontent.com/FadeMind/hosts.extras/master/UncheckyAds/hosts
      - https://raw.githubusercontent.com/bigdargon/hostsVN/master/hosts
    tracking-telemetry:
      - https://easylist.to/easylist/easyprivacy.txt
      - https://v.firebog.net/hosts/Easyprivacy.txt
      - https://v.firebog.net/hosts/Prigent-Ads.txt
      - https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.2o7Net/hosts
      - https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt
      - https://hostfiles.frogeye.fr/firstparty-trackers-hosts.txt
    malicious:
      - https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareHosts.txt
      - https://osint.digitalside.it/Threat-Intel/lists/latestdomains.txt
      - https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt
      - https://v.firebog.net/hosts/Prigent-Crypto.txt
      - https://bitbucket.org/ethanr/dns-blacklists/raw/8575c9f96e5b4a1308f2f12394abd86d0927a4a0/bad_lists/Mandiant_APT1_Report_Appendix_D.txt
      - https://phishing.army/download/phishing_army_blocklist_extended.txt
      - https://gitlab.com/quidsup/notrack-blocklists/raw/master/notrack-malware.txt
      - https://raw.githubusercontent.com/Spam404/lists/master/main-blacklist.txt
      - https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Risk/hosts
      - https://urlhaus.abuse.ch/downloads/hostfile/
    other:
      - https://zerodot1.gitlab.io/CoinBlockerLists/hosts_browser
  clientGroupsBlock:
    default:
      - default
      - suspicious
      - advertising
      - tracking-telemetry
      - malicious
      - other
# optional: use this DNS server to resolve blacklist urls and upstream DNS servers (DOH). Useful if no DNS resolver is configured an
bootstrapDns: tcp:1.1.1.1
# Define ports
port: 53
httpPort: 4000
# Prometheus Statistic
prometheus:
  enable: true
  path: /metrics
# optional: Drop all AAAA query if set to true. Default: false
disableIPv6: true
# Log Settings
logLevel: info
logFormat: text
logTimestamp: true
# Log Query
queryLog:
    dir: /logs
    perClient: true
    logRetentionDays: 7

Небольшой скрипт для запуска:

#!/bin/sh

# see https://github.com/0xERR0R/blocky
# https://0xerr0r.github.io/blocky/

docker ps -a --no-trunc  | grep "blocky" | awk '{print $1}' | xargs docker container stop

docker pull spx01/blocky

echo y | docker system prune --volumes

sudo cp blocky.yml /opt/blocky.yml

sudo docker volume create blocky_logs
sudo docker volume create block_blacklist

docker run -d --restart unless-stopped \
    -v blocky_blacklist:/app/blacklists/ \
    -v blocky_logs:/logs \
    --name blocky -v /opt/blocky.yml:/app/config.yml \
    -p 4000:4000 -p 53:53/udp \
    spx01/blocky

Логика работы:

  • Останавливает и удаляет все запущенные контейнеры с blocky
  • Тянет из интернета последнюю версию
  • Удаляет все неиспользуемые Volumes (очистка логов)
  • Копирует файл конфигурации
  • Создает Volumes с именами blocky_logs (здесь хранятся логи запросов) и block_blacklist (сюда можно подкладывать новые списки для блокировки)
  • Запускает контейнер с blocky

Добавляем в настройки Prometheus новый job:

scrape_configs:
...
  - job_name: 'blocky'
    static_configs:
      - targets: ['10.10.10.2:4000']

где 10.10.10.2 - IP сервера с запущенным blocky в Docker

Перезапускаем Prometheus, убеждаемся что метрики появились.

Импортируем в Grafana новый Dashboard: https://grafana.com/grafana/dashboards/13768

Источником данных выбираем наш Prometheus.

Готово, можно проверять.

  • software/blocky/blocky-install.txt
  • Последнее изменение: 2021/11/02 19:33
  • 127.0.0.1