Киберзащита за малкия бизнес (част 6): филтриращ DNS с AdGuard Home

Това е шеста част към ръководството ни за киберзащита на малкия и среден бизнес. В петте основни части изградихме защитен рутер, защитен сървър, частен облак, SIEM (Wazuh) и мониторинг (LibreNMS). Серията беше „завършена“ — но има още един слой защита, който е евтин, лесен и удивително ефективен:
Да спираме зловредните домейни още на ниво DNS — за цялата мрежа наведнъж.
Всяко устройство, преди да се свърже някъде, първо пита DNS „какъв е адресът на този домейн?“. Ако на този въпрос отговаря филтриращ DNS, можем да блокираме malware, phishing, проследяващи и рекламни домейни за всички устройства в офиса — без да пипаме нито едно от тях. Като бонус — кешираме отговорите и сърфирането става по-бързо. За това ще ползваме AdGuard Home. Както винаги, адресите в примерите са генерализирани.
Защо филтриращ DNS (и защо вграденият не стига)
Linux сървърите идват с локален DNS — systemd-resolved. Той обаче е само „телефонен секретар“ за самия хост: слуша на loopback адрес (127.0.0.53), кешира леко и препраща нагоре. Той не филтрира зловредни домейни и не обслужва другите устройства в мрежата.
Затова слагаме истински мрежов DNS със следните роли:
- Филтриране — блокира домейни от списъци с malware/phishing/реклами/тракери.
- Защита в реално време — проверка на домейни срещу база за злонамереност (safebrowsing).
- Кеширане — по-бързи отговори, по-малко външни заявки.
- Шифрован upstream — заявките ни нагоре вървят по DNS-over-HTTPS (никой по пътя не вижда какво питаме).
- Видимост — кой какво пита, какво е блокирано, топ домейни.
Защо AdGuard Home
AdGuard Home е безплатен, отворен и — важно за нас — е един-единствен Go бинар без PHP. (В предишните части неведнъж се борихме с версии на PHP; тук този проблем просто не съществува.) Прави всичко изброено по-горе, има приятен уеб интерфейс със статистики и е лек — спокойно живее на същия сървър.
Инсталация
Инсталаторът е една команда:
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sudo sh -s -- -v
След това AdGuard стартира съветник за първоначална настройка на порт 3000.
Важна подробност — порт 53: на сървъра вграденият systemd-resolved вече държи порт 53, но само на 127.0.0.53. За да съжителстват без конфликт, казваме на AdGuard да слуша DNS конкретно на LAN адреса на сървъра (192.168.1.100:53), а не на „всички адреси“. Така resolved (на loopback) и AdGuard (на LAN адреса) не си пречат.
Завършваме настройката — тук задаваме DNS адреса, порта за интерфейса и администраторската парола (примерът е през API-то, може и през браузъра):
curl -X POST http://127.0.0.1:3000/control/install/configure \
-H "Content-Type: application/json" \
-d '{"web":{"ip":"0.0.0.0","port":3000},
"dns":{"ip":"192.168.1.100","port":53},
"username":"admin","password":"СИЛНА_ПАРОЛА"}'
Конфигурация: филтри, кеш, шифрован upstream
В AdGuardHome.yaml (или през интерфейса) включваме същината:
| Настройка | Какво прави |
|---|---|
| Blocklists | Списъци с домейни за блокиране (AdGuard DNS filter и др.) |
| Safebrowsing | Блокиране на познати malware/phishing домейни в реално време |
| Кеш | Запомня отговорите → по-бързо сърфиране |
| Upstream (DoH) | Заявките нагоре по DNS-over-HTTPS към Quad9 (който и сам блокира malware) |
Бърз тест, че филтърът работи — нормален домейн резолвва, а рекламен/проследяващ се блокира (връща 0.0.0.0):
dig +short @192.168.1.100 github.com # → реален адрес dig +short @192.168.1.100 doubleclick.net # → 0.0.0.0 (блокиран)
Насочваме сървъра и цялата мрежа
Първо самият сървър да ползва AdGuard — чрез drop-in за resolved:
# /etc/systemd/resolved.conf.d/adguard.conf [Resolve] DNS=192.168.1.100 Domains=~.
А сега магията за цялата мрежа — казваме на DHCP сървъра (на рутера) да раздава AdGuard като DNS на всички устройства:
/ip dhcp-server network set [find] dns-server=192.168.1.100
Толкова. Всяко устройство, което вземе (или поднови) адрес от рутера, автоматично започва да минава през филтъра — без инсталация на самите устройства.
Достъп до интерфейса (отново урокът за HSTS)
Като при предишните услуги, не отваряме интерфейса към целия интернет — правим port-forward, ограничен само до администраторската ни мрежа. И понеже домейнът ни има HSTS, интерфейсът трябва да е по HTTPS с валиден сертификат. AdGuard поддържа TLS вградено — посочваме му същия Let’s Encrypt сертификат:
# AdGuardHome.yaml (секция tls) tls: enabled: true server_name: oblak.firma.bg port_https: 3443 certificate_path: /etc/letsencrypt/live/oblak.firma.bg/fullchain.pem private_key_path: /etc/letsencrypt/live/oblak.firma.bg/privkey.pem
/ip firewall nat add chain=dstnat action=dst-nat protocol=tcp dst-port=3000 \
in-interface=ether1 src-address=198.51.100.0/24 \
to-addresses=192.168.1.100 to-ports=3443 \
comment="adguard UI (само mgmt)"
Не забравяйте и deploy hook на certbot, който рестартира AdGuard при подновяване на сертификата, за да го зареди.
Какво виждаме накрая
Таблото на AdGuard показва в реално време колко заявки минават, колко са блокирани (обикновено 10–25% от целия DNS трафик в един офис!), кои са топ заявяваните и топ блокираните домейни. Това е и приятна изненада колко „шум“ генерират устройствата във фонов режим.
Заключение
С няколко команди добавихме защитен слой, който пази всяко устройство в офиса — компютри, телефони, дори IoT джаджи, които не можем да пипаме поотделно. Зловреден сайт, изпратен по имейл? Блокиран още преди да се отвори. Проследяващи и реклами? Спрени за цялата мрежа. И всичко това — на сървър, който вече имаме.
С това киберзащитата на нашия малък бизнес е наистина многослойна: защитен рутер, защитен сървър, частен облак, откриване на атаки (Wazuh), мониторинг (LibreNMS) и вече филтриращ DNS (AdGuard). Шест части, изцяло на собствено оборудване и с отворен софтуер — без месечни абонаменти и без външен да държи ключа към данните ви.
Тази серия е част от усилията ни сериозната киберзащита да стане достъпна за българския малък и среден бизнес.
