Блокировка сайтов на MikroTik — DNS, TLS Host, Layer7
Блокировка нежелательных сайтов — типичная задача для офисных и школьных сетей. Сотрудники сидят в социальных сетях, студенты смотрят YouTube вместо учёбы, торренты забивают канал. RouterOS предоставляет несколько методов блокировки: от простого DNS-перенаправления до анализа TLS-заголовков. В этом руководстве разберём все доступные методы, их ограничения и настроим блокировку с расписанием и исключениями на RouterOS 7.20+.
Описание
Обзор методов блокировки
| Метод | Эффективность | Сложность | HTTPS | Ресурсоёмкость |
|---|---|---|---|---|
| DNS static | Высокая для простых случаев | Низкая | Частично (если DNS не шифрованный) | Минимальная |
| TLS Host (firewall) | Высокая | Средняя | Да (SNI) | Средняя |
| Layer7 protocol | Низкая (устарело) | Высокая | Нет | Высокая |
| Address List + DNS resolve | Средняя | Средняя | Да (по IP) | Низкая |
Как работает каждый метод
DNS static — роутер отвечает на DNS-запрос ложным IP-адресом (0.0.0.0 или локальный сервер). Браузер получает неверный адрес и не может подключиться к сайту. Работает только если клиенты используют DNS-сервер роутера. Обходится при использовании DoH (DNS over HTTPS) или смене DNS-сервера вручную.
TLS Host — при установке HTTPS-соединения браузер отправляет имя сервера открытым текстом в поле SNI (Server Name Indication) TLS ClientHello. RouterOS может читать это поле и блокировать соединения по имени хоста. Работает для HTTPS без расшифровки трафика.
Layer7 protocol — анализ содержимого пакетов по регулярным выражениям. Работал для HTTP, но бесполезен для HTTPS (трафик зашифрован). Ресурсоёмкий — нагружает CPU. Устарел, но люди до сих пор ищут этот метод.
Address List + DNS resolve — RouterOS периодически резолвит доменные имена и добавляет IP-адреса в address-list. Firewall блокирует трафик к этим IP. Простой и надёжный, но CDN-сайты используют сотни IP-адресов.
Настройка
Метод 1: DNS Static — перенаправление DNS-запросов
Самый простой метод. Создаём статические DNS-записи, которые возвращают 0.0.0.0 (или IP вашего внутреннего веб-сервера с страницей "доступ запрещён") вместо реальных адресов.
Предварительное условие: клиенты должны использовать DNS-сервер роутера (обычно это так, если DHCP раздаёт адрес роутера как DNS).
[admin@MikroTik] ># Включить DNS-сервер на роутере /ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8 # === Блокировка отдельных сайтов === /ip/dns/static # Социальные сети add name="vk.com" address=0.0.0.0 comment="Block VK" add name="*.vk.com" address=0.0.0.0 comment="Block VK subdomains" add name="vkontakte.ru" address=0.0.0.0 comment="Block VK alt domain" add name="facebook.com" address=0.0.0.0 comment="Block Facebook" add name="*.facebook.com" address=0.0.0.0 comment="Block Facebook subdomains" add name="fbcdn.net" address=0.0.0.0 comment="Block Facebook CDN" add name="*.fbcdn.net" address=0.0.0.0 comment="Block Facebook CDN subdomains" add name="instagram.com" address=0.0.0.0 comment="Block Instagram" add name="*.instagram.com" address=0.0.0.0 comment="Block Instagram subdomains" add name="cdninstagram.com" address=0.0.0.0 comment="Block Instagram CDN" add name="*.cdninstagram.com" address=0.0.0.0 comment="Block Instagram CDN" # Видео add name="youtube.com" address=0.0.0.0 comment="Block YouTube" add name="*.youtube.com" address=0.0.0.0 comment="Block YouTube subdomains" add name="googlevideo.com" address=0.0.0.0 comment="Block YouTube video" add name="*.googlevideo.com" address=0.0.0.0 comment="Block YouTube video" add name="ytimg.com" address=0.0.0.0 comment="Block YouTube thumbnails" add name="*.ytimg.com" address=0.0.0.0 comment="Block YouTube thumbnails" # Торренты add name="rutracker.org" address=0.0.0.0 comment="Block RuTracker" add name="*.rutracker.org" address=0.0.0.0 comment="Block RuTracker" add name="rutor.info" address=0.0.0.0 comment="Block Rutor" add name="*.rutor.info" address=0.0.0.0 comment="Block Rutor"
Для перенаправления на страницу "Доступ запрещён" вместо 0.0.0.0 укажите IP вашего внутреннего веб-сервера:
[admin@MikroTik] ># Перенаправление на внутренний веб-сервер с уведомлением /ip/dns/static/add name="vk.com" address=192.168.88.100 \ comment="Redirect VK to block page"
Принудительное использование DNS роутера (защита от обхода через сторонние DNS):
[admin@MikroTik] ># Перенаправить все DNS-запросы на роутер (DNS hijacking) /ip/firewall/nat add chain=dstnat protocol=tcp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 comment="Force DNS to router (TCP)" add chain=dstnat protocol=udp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 comment="Force DNS to router (UDP)"
Метод 2: TLS Host — блокировка по SNI (для HTTPS)
Это наиболее эффективный метод для блокировки HTTPS-сайтов. RouterOS анализирует поле SNI в TLS ClientHello и может блокировать соединения по имени хоста без расшифровки трафика.
[admin@MikroTik] >/ip/firewall/filter # === Блокировка социальных сетей по TLS Host === add chain=forward protocol=tcp dst-port=443 \ tls-host="*.vk.com" action=drop \ comment="Block VK (HTTPS)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.facebook.com" action=drop \ comment="Block Facebook (HTTPS)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.instagram.com" action=drop \ comment="Block Instagram (HTTPS)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.tiktok.com" action=drop \ comment="Block TikTok (HTTPS)" # === Блокировка видеосервисов === add chain=forward protocol=tcp dst-port=443 \ tls-host="*.youtube.com" action=drop \ comment="Block YouTube (HTTPS)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.googlevideo.com" action=drop \ comment="Block YouTube video streams" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.ytimg.com" action=drop \ comment="Block YouTube thumbnails" # === Блокировка торрентов (трекеры) === add chain=forward protocol=tcp dst-port=443 \ tls-host="*.rutracker.org" action=drop \ comment="Block RuTracker (HTTPS)" # === Блокировка онлайн-игр === add chain=forward protocol=tcp dst-port=443 \ tls-host="*.steampowered.com" action=drop \ comment="Block Steam (HTTPS)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.steamcommunity.com" action=drop \ comment="Block Steam Community"
TLS Host поддерживает wildcard * в начале имени. Паттерн *.youtube.com соответствует www.youtube.com, m.youtube.com, accounts.youtube.com и т.д.
Важно: TLS Host работает ТОЛЬКО для начального TLS-рукопожатия (ClientHello). Правило нужно ставить в chain=forward, protocol=tcp, dst-port=443. Не работает для QUIC (UDP 443) — его нужно блокировать отдельно:
[admin@MikroTik] ># Блокировка QUIC (HTTP/3) — иначе YouTube/Google обойдут TLS Host блок /ip/firewall/filter/add chain=forward protocol=udp dst-port=443 \ action=drop comment="Block QUIC/HTTP3 — force HTTPS fallback"
После блокировки QUIC браузеры автоматически переключаются на HTTPS (TCP 443), где TLS Host-правила работают корректно.
Метод 3: Layer7 Protocol — устаревший, но часто ищут
Layer7 protocol анализирует содержимое первых пакетов соединения по регулярным выражениям. Этот метод работал в эпоху HTTP, но для HTTPS он бесполезен — содержимое зашифровано.
Не рекомендуется к использованию. Приводится для справки, так как этот метод часто упоминается в старых руководствах.
[admin@MikroTik] ># Layer7 — только для незашифрованного HTTP (порт 80) /ip/firewall/layer7-protocol add name="block-vk" regexp="^.+(vk\\.com|vkontakte\\.ru).*\quot; add name="block-youtube" regexp="^.+(youtube\\.com|googlevideo\\.com).*\quot; # Правила firewall с Layer7 /ip/firewall/filter add chain=forward layer7-protocol=block-vk protocol=tcp dst-port=80 \ action=drop comment="Block VK (HTTP only, L7)" add chain=forward layer7-protocol=block-youtube protocol=tcp dst-port=80 \ action=drop comment="Block YouTube (HTTP only, L7)"
Почему Layer7 — плохой выбор:
| Проблема | Описание |
|---|---|
| Не работает с HTTPS | 99% трафика — HTTPS, Layer7 бесполезен |
| Высокая нагрузка на CPU | Каждый пакет проверяется regex — это дорого |
| Ложные срабатывания | Regex может совпасть с легитимным трафиком |
| Не масштабируется | Каждый regex добавляет нагрузку |
Вместо Layer7 используйте TLS Host (Метод 2) — он работает с HTTPS, потребляет значительно меньше ресурсов и не имеет ложных срабатываний.
Метод 4: Address Lists + DNS Resolve
RouterOS может автоматически резолвить доменные имена и добавлять их IP-адреса в address-list. Затем firewall блокирует трафик к этим IP.
[admin@MikroTik] ># Создаём address-list с автоматическим DNS resolve /ip/firewall/address-list add list=blocked-sites address=vk.com comment="VK" add list=blocked-sites address=facebook.com comment="Facebook" add list=blocked-sites address=instagram.com comment="Instagram" add list=blocked-sites address=youtube.com comment="YouTube" add list=blocked-sites address=tiktok.com comment="TikTok" # Блокировка в firewall по address-list /ip/firewall/filter/add chain=forward dst-address-list=blocked-sites \ action=drop comment="Block sites by address list"
RouterOS автоматически резолвит имена и обновляет IP-адреса. Проблема: крупные сайты (YouTube, Facebook) используют CDN с тысячами IP-адресов. Address-list перехватит лишь часть из них.
Для повышения эффективности комбинируйте Address List с TLS Host:
[admin@MikroTik] ># Комбинированная блокировка: TLS Host + Address List /ip/firewall/filter add chain=forward dst-address-list=blocked-sites action=drop \ comment="Block by IP (address list)" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.youtube.com" action=drop \ comment="Block by TLS Host (SNI)"
Блокировка по категориям
Организуем правила по категориям для удобства управления:
[admin@MikroTik] ># === Категория: Социальные сети === /ip/firewall/address-list add list=cat-social address=vk.com add list=cat-social address=facebook.com add list=cat-social address=instagram.com add list=cat-social address=twitter.com add list=cat-social address=ok.ru add list=cat-social address=tiktok.com /ip/firewall/filter/add chain=forward dst-address-list=cat-social \ action=drop comment="Block category: social media" /ip/firewall/filter add chain=forward protocol=tcp dst-port=443 \ tls-host="*.vk.com" action=drop comment="SNI: VK" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.facebook.com" action=drop comment="SNI: Facebook" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.instagram.com" action=drop comment="SNI: Instagram" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.tiktok.com" action=drop comment="SNI: TikTok" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.twitter.com" action=drop comment="SNI: Twitter" # === Категория: Видео === /ip/firewall/address-list add list=cat-video address=youtube.com add list=cat-video address=rutube.ru add list=cat-video address=dzen.ru /ip/firewall/filter/add chain=forward dst-address-list=cat-video \ action=drop comment="Block category: video" /ip/firewall/filter add chain=forward protocol=tcp dst-port=443 \ tls-host="*.youtube.com" action=drop comment="SNI: YouTube" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.googlevideo.com" action=drop comment="SNI: YouTube CDN" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.rutube.ru" action=drop comment="SNI: Rutube" # === Категория: Торренты === /ip/firewall/address-list add list=cat-torrents address=rutracker.org add list=cat-torrents address=rutor.info add list=cat-torrents address=nnmclub.to /ip/firewall/filter/add chain=forward dst-address-list=cat-torrents \ action=drop comment="Block category: torrents"
Блокировка по расписанию (рабочее время)
Типичная задача: блокировать социальные сети в рабочее время (09:00-18:00, пн-пт), но разрешать в обед (13:00-14:00) и после работы.
[admin@MikroTik] ># Шаг 1: Создаём правила блокировки (изначально отключены) /ip/firewall/filter add chain=forward protocol=tcp dst-port=443 \ tls-host="*.vk.com" action=drop disabled=yes \ comment="Schedule: Block VK work hours" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.youtube.com" action=drop disabled=yes \ comment="Schedule: Block YouTube work hours" add chain=forward protocol=tcp dst-port=443 \ tls-host="*.instagram.com" action=drop disabled=yes \ comment="Schedule: Block Instagram work hours" add chain=forward dst-address-list=cat-social action=drop disabled=yes \ comment="Schedule: Block social IP work hours" # Шаг 2: Скрипты для включения и отключения /system/script add name=block-sites-enable source={ /ip/firewall/filter/enable [find where comment~"Schedule: Block"] :log info "Sites blocked (work hours)" } add name=block-sites-disable source={ /ip/firewall/filter/disable [find where comment~"Schedule: Block"] :log info "Sites unblocked" } # Шаг 3: Расписание /system/scheduler # Включить блокировку в 09:00 пн-пт add name=block-morning start-time=09:00:00 interval=1d \ on-event=block-sites-enable \ comment="Block sites at 09:00" # Отключить блокировку в обед 13:00 add name=unblock-lunch start-time=13:00:00 interval=1d \ on-event=block-sites-disable \ comment="Unblock sites at 13:00 (lunch)" # Включить блокировку после обеда 14:00 add name=block-afternoon start-time=14:00:00 interval=1d \ on-event=block-sites-enable \ comment="Block sites at 14:00" # Отключить блокировку в 18:00 add name=unblock-evening start-time=18:00:00 interval=1d \ on-event=block-sites-disable \ comment="Unblock sites at 18:00"
Для более точного контроля (только пн-пт) добавьте проверку дня недели в скрипт:
[admin@MikroTik] >/system/script/add name=block-sites-weekday source={ :local day [/system/clock/get date] :local weekday [:pick [/system/clock/get time] 0 0] # Используем встроенную переменную :if ([:pick [/system/scheduler/get [find name=block-morning] next-run] 0 3] != "sat" && \ [:pick [/system/scheduler/get [find name=block-morning] next-run] 0 3] != "sun") do={ /ip/firewall/filter/enable [find where comment~"Schedule: Block"] :log info "Sites blocked (weekday work hours)" } }
Более простой способ — использовать параметр start-date и interval у scheduler, или проверять день недели через скрипт.
Исключения для определённых IP
Руководство и IT-отдел не должны быть ограничены:
[admin@MikroTik] ># Address-list с исключениями /ip/firewall/address-list add list=no-block address=192.168.88.10 comment="Директор" add list=no-block address=192.168.88.11 comment="IT-admin" add list=no-block address=192.168.88.12 comment="HR (для соцсетей)" # Правило accept ДО правил блокировки /ip/firewall/filter/add chain=forward src-address-list=no-block \ action=accept comment="Bypass blocks for whitelist" \ place-before=[find where comment~"Block category"]
Важно: правило accept для исключений должно стоять перед правилами блокировки.
Проверка
Проверка DNS static
[admin@MikroTik] ># Просмотр всех статических DNS-записей /ip/dns/static/print # Проверка резолва с роутера :resolve vk.com # Должно вернуть 0.0.0.0 если блокировка работает # Просмотр DNS-кэша /ip/dns/cache/print where name~"vk" # Очистка DNS-кэша (после добавления правил) /ip/dns/cache/flush
Проверка TLS Host правил
[admin@MikroTik] ># Счётчики firewall — сколько раз сработало правило /ip/firewall/filter/print stats where comment~"Block" # Если счётчик растёт — правило работает # Если счётчик = 0 — проверьте порядок правил и dst-port # Логирование заблокированных соединений /ip/firewall/filter/set [find where comment~"Block VK"] \ log=yes log-prefix="BLOCKED-VK" /log/print where message~"BLOCKED"
Проверка с клиентского устройства
[admin@MikroTik] ># Проверка DNS (с компьютера в сети) nslookup vk.com 192.168.88.1 # Должно вернуть 0.0.0.0 # Проверка через curl curl -v https://vk.com # Должен вернуть ошибку подключения # Проверка TLS-блокировки openssl s_client -connect vk.com:443 -servername vk.com # Connection refused или timeout
Мониторинг address-list
[admin@MikroTik] ># Просмотр IP в address-list (динамические записи от DNS resolve) /ip/firewall/address-list/print where list=blocked-sites # Количество записей /ip/firewall/address-list/print count-only where list=cat-social
Типичные ошибки
1. Блокировка обходится сменой DNS
Если пользователь вручную укажет DNS 8.8.8.8 вместо роутера — DNS static блокировка перестанет работать.
Решение: перенаправлять все DNS-запросы на роутер:
[admin@MikroTik] >/ip/firewall/nat add chain=dstnat protocol=udp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 comment="Force DNS to router" add chain=dstnat protocol=tcp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 comment="Force DNS to router (TCP)"
2. Не заблокировали QUIC (HTTP/3)
Google Chrome, Firefox и другие браузеры используют QUIC (UDP 443) для YouTube, Google и других сервисов. TLS Host-правила работают только для TCP. Без блокировки QUIC сайты будут открываться через UDP.
[admin@MikroTik] ># Обязательно блокируйте QUIC /ip/firewall/filter/add chain=forward protocol=udp dst-port=443 \ action=drop comment="Block QUIC — force TCP HTTPS"
3. Забыли про мобильные приложения
Мобильные приложения (VK, Instagram, TikTok) могут использовать другие домены и CDN, не совпадающие с основным доменом. Например, VK может загружать контент с userapi.com, vk-cdn.net и десятков других доменов.
Решение: комбинируйте DNS static (для основных доменов) + TLS Host (для wildcard субдоменов) + Address List (для IP-блокировки):
[admin@MikroTik] ># VK: все известные домены /ip/dns/static add name="vk.com" address=0.0.0.0 add name="*.vk.com" address=0.0.0.0 add name="*.userapi.com" address=0.0.0.0 add name="*.vk-cdn.net" address=0.0.0.0 add name="vkontakte.ru" address=0.0.0.0 /ip/firewall/filter add chain=forward protocol=tcp dst-port=443 tls-host="*.vk.com" action=drop add chain=forward protocol=tcp dst-port=443 tls-host="*.userapi.com" action=drop add chain=forward protocol=tcp dst-port=443 tls-host="*.vk-cdn.net" action=drop
4. ESNI/ECH обходит TLS Host блокировку
Encrypted Client Hello (ECH, ранее ESNI) — технология, которая шифрует SNI в TLS ClientHello. Если клиент и сервер поддерживают ECH, RouterOS не сможет прочитать имя хоста и TLS Host-блокировка не сработает.
По состоянию на 2026 год ECH поддерживается в Firefox (за флагом) и Chrome (экспериментально) и используется Cloudflare. Полноценного обхода пока нет, но тенденция очевидна.
Частичные решения:
- Блокировка по IP (Address List) — работает независимо от ECH
- Блокировка DoH-серверов (dns.google, cloudflare-dns.com, dns.quad9.net)
- Использование корпоративного proxy с MITM-сертификатом (за пределами RouterOS)
[admin@MikroTik] ># Блокировка известных DoH-провайдеров /ip/firewall/filter add chain=forward protocol=tcp dst-port=443 \ tls-host="dns.google" action=drop comment="Block Google DoH" add chain=forward protocol=tcp dst-port=443 \ tls-host="cloudflare-dns.com" action=drop comment="Block Cloudflare DoH" add chain=forward protocol=tcp dst-port=443 \ tls-host="dns.quad9.net" action=drop comment="Block Quad9 DoH" add chain=forward protocol=tcp dst-port=443 \ tls-host="doh.opendns.com" action=drop comment="Block OpenDNS DoH"
5. Неправильный порядок правил
Правила firewall обрабатываются сверху вниз. Если правило accept (established, related) стоит перед правилом блокировки — уже установленные соединения не будут заблокированы.
Правильный порядок:
- Accept из whitelist (no-block)
- Accept established, related
- Drop invalid
- Правила блокировки (TLS Host, Address List)
- Accept из LAN в WAN
- Drop всё остальное
[admin@MikroTik] ># Проверка порядка правил /ip/firewall/filter/print where chain=forward
Если уже установленное TCP-соединение к заблокированному сайту продолжает работать после добавления правила — это нормально. Правило connection-state=established,related accept пропускает его. Новые соединения будут заблокированы. Для немедленного эффекта можно сбросить connection tracking:
[admin@MikroTik] ># Удалить существующие соединения к заблокированному IP /ip/firewall/connection/remove [find where dst-address~"87.240"] # 87.240.x.x — диапазон VK # Или сбросить все соединения (осторожно — кратковременный разрыв для всех) /ip/firewall/connection/tracking/set enabled=no /ip/firewall/connection/tracking/set enabled=yes
6. Чрезмерное использование Layer7
Layer7 анализирует каждый пакет каждого соединения. 10 Layer7-правил на роутере с 1000 активных соединений = значительная нагрузка на CPU. На бюджетных устройствах (hAP lite, hEX) это приведёт к заметному замедлению сети.
Решение: замените Layer7 на TLS Host. Он анализирует только первый пакет TLS-рукопожатия, а не весь трафик.
Полный пример: офисная блокировка с расписанием
[admin@MikroTik] ># === Предварительные требования === /ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8 # === Принудительный DNS через роутер === /ip/firewall/nat add chain=dstnat protocol=udp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 add chain=dstnat protocol=tcp dst-port=53 \ src-address=192.168.88.0/24 dst-address=!192.168.88.1 \ action=redirect to-ports=53 # === DNS Static блокировка === /ip/dns/static add name="vk.com" address=0.0.0.0 add name="*.vk.com" address=0.0.0.0 add name="*.userapi.com" address=0.0.0.0 add name="youtube.com" address=0.0.0.0 add name="*.youtube.com" address=0.0.0.0 add name="*.googlevideo.com" address=0.0.0.0 add name="instagram.com" address=0.0.0.0 add name="*.instagram.com" address=0.0.0.0 add name="tiktok.com" address=0.0.0.0 add name="*.tiktok.com" address=0.0.0.0 # === Whitelist (исключения) === /ip/firewall/address-list add list=no-block address=192.168.88.10 comment="Директор" add list=no-block address=192.168.88.11 comment="IT-отдел" # === Firewall правила === /ip/firewall/filter # Исключения — перед блокировкой add chain=forward src-address-list=no-block action=accept \ comment="Bypass: whitelist IPs" # Блокировка QUIC add chain=forward protocol=udp dst-port=443 \ src-address=192.168.88.0/24 action=drop \ comment="Schedule: Block QUIC" disabled=yes # TLS Host блокировка add chain=forward protocol=tcp dst-port=443 \ tls-host="*.vk.com" action=drop \ comment="Schedule: Block VK" disabled=yes add chain=forward protocol=tcp dst-port=443 \ tls-host="*.userapi.com" action=drop \ comment="Schedule: Block VK CDN" disabled=yes add chain=forward protocol=tcp dst-port=443 \ tls-host="*.youtube.com" action=drop \ comment="Schedule: Block YouTube" disabled=yes add chain=forward protocol=tcp dst-port=443 \ tls-host="*.googlevideo.com" action=drop \ comment="Schedule: Block YouTube CDN" disabled=yes add chain=forward protocol=tcp dst-port=443 \ tls-host="*.instagram.com" action=drop \ comment="Schedule: Block Instagram" disabled=yes add chain=forward protocol=tcp dst-port=443 \ tls-host="*.tiktok.com" action=drop \ comment="Schedule: Block TikTok" disabled=yes # Блокировка DoH add chain=forward protocol=tcp dst-port=443 \ tls-host="dns.google" action=drop \ comment="Block DoH: Google" add chain=forward protocol=tcp dst-port=443 \ tls-host="cloudflare-dns.com" action=drop \ comment="Block DoH: Cloudflare" # === Скрипты === /system/script add name=block-enable source={ /ip/firewall/filter/enable [find where comment~"Schedule: Block"] :log info "Site blocking enabled" } add name=block-disable source={ /ip/firewall/filter/disable [find where comment~"Schedule: Block"] :log info "Site blocking disabled" } # === Расписание: блокировка 09:00-13:00, 14:00-18:00 пн-пт === /system/scheduler add name=sched-block-0900 start-time=09:00:00 interval=1d \ on-event=block-enable add name=sched-unblock-1300 start-time=13:00:00 interval=1d \ on-event=block-disable add name=sched-block-1400 start-time=14:00:00 interval=1d \ on-event=block-enable add name=sched-unblock-1800 start-time=18:00:00 interval=1d \ on-event=block-disable # Очистить DNS-кэш для немедленного эффекта /ip/dns/cache/flush
Эта конфигурация обеспечивает многоуровневую блокировку: DNS static перехватывает запросы на уровне имён, TLS Host блокирует HTTPS по SNI, принудительный DNS предотвращает обход через сторонние DNS-серверы, блокировка QUIC заставляет браузеры использовать TCP, а расписание позволяет сотрудникам пользоваться сайтами в обед и после работы. Исключения для руководства и IT-отдела гарантируют, что важные пользователи не будут ограничены.
# Включить DNS-сервер на роутере
/ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8
# === Блокировка отдельных сайтов ===
/ip/dns/static
# Социальные сети
add name="vk.com" address=0.0.0.0 comment="Block VK"
add name="*.vk.com" address=0.0.0.0 comment="Block VK subdomains"
add name="vkontakte.ru" address=0.0.0.0 comment="Block VK alt domain"
add name="facebook.com" address=0.0.0.0 comment="Block Facebook"
add name="*.facebook.com" address=0.0.0.0 comment="Block Facebook subdomains"
add name="fbcdn.net" address=0.0.0.0 comment="Block Facebook CDN"
add name="*.fbcdn.net" address=0.0.0.0 comment="Block Facebook CDN subdomains"
add name="instagram.com" address=0.0.0.0 comment="Block Instagram"
add name="*.instagram.com" address=0.0.0.0 comment="Block Instagram subdomains"
add name="cdninstagram.com" address=0.0.0.0 comment="Block Instagram CDN"
add name="*.cdninstagram.com" address=0.0.0.0 comment="Block Instagram CDN"
# Видео
add name="youtube.com" address=0.0.0.0 comment="Block YouTube"
add name="*.youtube.com" address=0.0.0.0 comment="Block YouTube subdomains"
add name="googlevideo.com" address=0.0.0.0 comment="Block YouTube video"
add name="*.googlevideo.com" address=0.0.0.0 comment="Block YouTube video"
add name="ytimg.com" address=0.0.0.0 comment="Block YouTube thumbnails"
add name="*.ytimg.com" address=0.0.0.0 comment="Block YouTube thumbnails"
# Торренты
add name="rutracker.org" address=0.0.0.0 comment="Block RuTracker"
add name="*.rutracker.org" address=0.0.0.0 comment="Block RuTracker"
add name="rutor.info" address=0.0.0.0 comment="Block Rutor"
add name="*.rutor.info" address=0.0.0.0 comment="Block Rutor"
# Перенаправление на внутренний веб-сервер с уведомлением
/ip/dns/static/add name="vk.com" address=192.168.88.100 \
comment="Redirect VK to block page"
# Перенаправить все DNS-запросы на роутер (DNS hijacking)
/ip/firewall/nat
add chain=dstnat protocol=tcp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53 comment="Force DNS to router (TCP)"
add chain=dstnat protocol=udp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53 comment="Force DNS to router (UDP)"
/ip/firewall/filter
# === Блокировка социальных сетей по TLS Host ===
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.vk.com" action=drop \
comment="Block VK (HTTPS)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.facebook.com" action=drop \
comment="Block Facebook (HTTPS)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.instagram.com" action=drop \
comment="Block Instagram (HTTPS)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.tiktok.com" action=drop \
comment="Block TikTok (HTTPS)"
# === Блокировка видеосервисов ===
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.youtube.com" action=drop \
comment="Block YouTube (HTTPS)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.googlevideo.com" action=drop \
comment="Block YouTube video streams"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.ytimg.com" action=drop \
comment="Block YouTube thumbnails"
# === Блокировка торрентов (трекеры) ===
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.rutracker.org" action=drop \
comment="Block RuTracker (HTTPS)"
# === Блокировка онлайн-игр ===
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.steampowered.com" action=drop \
comment="Block Steam (HTTPS)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.steamcommunity.com" action=drop \
comment="Block Steam Community"
# Блокировка QUIC (HTTP/3) — иначе YouTube/Google обойдут TLS Host блок
/ip/firewall/filter/add chain=forward protocol=udp dst-port=443 \
action=drop comment="Block QUIC/HTTP3 — force HTTPS fallback"
# Layer7 — только для незашифрованного HTTP (порт 80)
/ip/firewall/layer7-protocol
add name="block-vk" regexp="^.+(vk\\.com|vkontakte\\.ru).*\quot;
add name="block-youtube" regexp="^.+(youtube\\.com|googlevideo\\.com).*\quot;
# Правила firewall с Layer7
/ip/firewall/filter
add chain=forward layer7-protocol=block-vk protocol=tcp dst-port=80 \
action=drop comment="Block VK (HTTP only, L7)"
add chain=forward layer7-protocol=block-youtube protocol=tcp dst-port=80 \
action=drop comment="Block YouTube (HTTP only, L7)"
# Создаём address-list с автоматическим DNS resolve
/ip/firewall/address-list
add list=blocked-sites address=vk.com comment="VK"
add list=blocked-sites address=facebook.com comment="Facebook"
add list=blocked-sites address=instagram.com comment="Instagram"
add list=blocked-sites address=youtube.com comment="YouTube"
add list=blocked-sites address=tiktok.com comment="TikTok"
# Блокировка в firewall по address-list
/ip/firewall/filter/add chain=forward dst-address-list=blocked-sites \
action=drop comment="Block sites by address list"
# Комбинированная блокировка: TLS Host + Address List
/ip/firewall/filter
add chain=forward dst-address-list=blocked-sites action=drop \
comment="Block by IP (address list)"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.youtube.com" action=drop \
comment="Block by TLS Host (SNI)"
# === Категория: Социальные сети ===
/ip/firewall/address-list
add list=cat-social address=vk.com
add list=cat-social address=facebook.com
add list=cat-social address=instagram.com
add list=cat-social address=twitter.com
add list=cat-social address=ok.ru
add list=cat-social address=tiktok.com
/ip/firewall/filter/add chain=forward dst-address-list=cat-social \
action=drop comment="Block category: social media"
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.vk.com" action=drop comment="SNI: VK"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.facebook.com" action=drop comment="SNI: Facebook"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.instagram.com" action=drop comment="SNI: Instagram"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.tiktok.com" action=drop comment="SNI: TikTok"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.twitter.com" action=drop comment="SNI: Twitter"
# === Категория: Видео ===
/ip/firewall/address-list
add list=cat-video address=youtube.com
add list=cat-video address=rutube.ru
add list=cat-video address=dzen.ru
/ip/firewall/filter/add chain=forward dst-address-list=cat-video \
action=drop comment="Block category: video"
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.youtube.com" action=drop comment="SNI: YouTube"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.googlevideo.com" action=drop comment="SNI: YouTube CDN"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.rutube.ru" action=drop comment="SNI: Rutube"
# === Категория: Торренты ===
/ip/firewall/address-list
add list=cat-torrents address=rutracker.org
add list=cat-torrents address=rutor.info
add list=cat-torrents address=nnmclub.to
/ip/firewall/filter/add chain=forward dst-address-list=cat-torrents \
action=drop comment="Block category: torrents"
# Шаг 1: Создаём правила блокировки (изначально отключены)
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.vk.com" action=drop disabled=yes \
comment="Schedule: Block VK work hours"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.youtube.com" action=drop disabled=yes \
comment="Schedule: Block YouTube work hours"
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.instagram.com" action=drop disabled=yes \
comment="Schedule: Block Instagram work hours"
add chain=forward dst-address-list=cat-social action=drop disabled=yes \
comment="Schedule: Block social IP work hours"
# Шаг 2: Скрипты для включения и отключения
/system/script
add name=block-sites-enable source={
/ip/firewall/filter/enable [find where comment~"Schedule: Block"]
:log info "Sites blocked (work hours)"
}
add name=block-sites-disable source={
/ip/firewall/filter/disable [find where comment~"Schedule: Block"]
:log info "Sites unblocked"
}
# Шаг 3: Расписание
/system/scheduler
# Включить блокировку в 09:00 пн-пт
add name=block-morning start-time=09:00:00 interval=1d \
on-event=block-sites-enable \
comment="Block sites at 09:00"
# Отключить блокировку в обед 13:00
add name=unblock-lunch start-time=13:00:00 interval=1d \
on-event=block-sites-disable \
comment="Unblock sites at 13:00 (lunch)"
# Включить блокировку после обеда 14:00
add name=block-afternoon start-time=14:00:00 interval=1d \
on-event=block-sites-enable \
comment="Block sites at 14:00"
# Отключить блокировку в 18:00
add name=unblock-evening start-time=18:00:00 interval=1d \
on-event=block-sites-disable \
comment="Unblock sites at 18:00"
/system/script/add name=block-sites-weekday source={
:local day [/system/clock/get date]
:local weekday [:pick [/system/clock/get time] 0 0]
# Используем встроенную переменную
:if ([:pick [/system/scheduler/get [find name=block-morning] next-run] 0 3] != "sat" && \
[:pick [/system/scheduler/get [find name=block-morning] next-run] 0 3] != "sun") do={
/ip/firewall/filter/enable [find where comment~"Schedule: Block"]
:log info "Sites blocked (weekday work hours)"
}
}
# Address-list с исключениями
/ip/firewall/address-list
add list=no-block address=192.168.88.10 comment="Директор"
add list=no-block address=192.168.88.11 comment="IT-admin"
add list=no-block address=192.168.88.12 comment="HR (для соцсетей)"
# Правило accept ДО правил блокировки
/ip/firewall/filter/add chain=forward src-address-list=no-block \
action=accept comment="Bypass blocks for whitelist" \
place-before=[find where comment~"Block category"]
# Просмотр всех статических DNS-записей
/ip/dns/static/print
# Проверка резолва с роутера
:resolve vk.com
# Должно вернуть 0.0.0.0 если блокировка работает
# Просмотр DNS-кэша
/ip/dns/cache/print where name~"vk"
# Очистка DNS-кэша (после добавления правил)
/ip/dns/cache/flush
# Счётчики firewall — сколько раз сработало правило
/ip/firewall/filter/print stats where comment~"Block"
# Если счётчик растёт — правило работает
# Если счётчик = 0 — проверьте порядок правил и dst-port
# Логирование заблокированных соединений
/ip/firewall/filter/set [find where comment~"Block VK"] \
log=yes log-prefix="BLOCKED-VK"
/log/print where message~"BLOCKED"
# Проверка DNS (с компьютера в сети)
nslookup vk.com 192.168.88.1
# Должно вернуть 0.0.0.0
# Проверка через curl
curl -v https://vk.com
# Должен вернуть ошибку подключения
# Проверка TLS-блокировки
openssl s_client -connect vk.com:443 -servername vk.com
# Connection refused или timeout
# Просмотр IP в address-list (динамические записи от DNS resolve)
/ip/firewall/address-list/print where list=blocked-sites
# Количество записей
/ip/firewall/address-list/print count-only where list=cat-social
/ip/firewall/nat
add chain=dstnat protocol=udp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53 comment="Force DNS to router"
add chain=dstnat protocol=tcp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53 comment="Force DNS to router (TCP)"
# Обязательно блокируйте QUIC
/ip/firewall/filter/add chain=forward protocol=udp dst-port=443 \
action=drop comment="Block QUIC — force TCP HTTPS"
# VK: все известные домены
/ip/dns/static
add name="vk.com" address=0.0.0.0
add name="*.vk.com" address=0.0.0.0
add name="*.userapi.com" address=0.0.0.0
add name="*.vk-cdn.net" address=0.0.0.0
add name="vkontakte.ru" address=0.0.0.0
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443 tls-host="*.vk.com" action=drop
add chain=forward protocol=tcp dst-port=443 tls-host="*.userapi.com" action=drop
add chain=forward protocol=tcp dst-port=443 tls-host="*.vk-cdn.net" action=drop
# Блокировка известных DoH-провайдеров
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443 \
tls-host="dns.google" action=drop comment="Block Google DoH"
add chain=forward protocol=tcp dst-port=443 \
tls-host="cloudflare-dns.com" action=drop comment="Block Cloudflare DoH"
add chain=forward protocol=tcp dst-port=443 \
tls-host="dns.quad9.net" action=drop comment="Block Quad9 DoH"
add chain=forward protocol=tcp dst-port=443 \
tls-host="doh.opendns.com" action=drop comment="Block OpenDNS DoH"
# Проверка порядка правил
/ip/firewall/filter/print where chain=forward
# Удалить существующие соединения к заблокированному IP
/ip/firewall/connection/remove [find where dst-address~"87.240"]
# 87.240.x.x — диапазон VK
# Или сбросить все соединения (осторожно — кратковременный разрыв для всех)
/ip/firewall/connection/tracking/set enabled=no
/ip/firewall/connection/tracking/set enabled=yes
# === Предварительные требования ===
/ip/dns/set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8
# === Принудительный DNS через роутер ===
/ip/firewall/nat
add chain=dstnat protocol=udp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53
add chain=dstnat protocol=tcp dst-port=53 \
src-address=192.168.88.0/24 dst-address=!192.168.88.1 \
action=redirect to-ports=53
# === DNS Static блокировка ===
/ip/dns/static
add name="vk.com" address=0.0.0.0
add name="*.vk.com" address=0.0.0.0
add name="*.userapi.com" address=0.0.0.0
add name="youtube.com" address=0.0.0.0
add name="*.youtube.com" address=0.0.0.0
add name="*.googlevideo.com" address=0.0.0.0
add name="instagram.com" address=0.0.0.0
add name="*.instagram.com" address=0.0.0.0
add name="tiktok.com" address=0.0.0.0
add name="*.tiktok.com" address=0.0.0.0
# === Whitelist (исключения) ===
/ip/firewall/address-list
add list=no-block address=192.168.88.10 comment="Директор"
add list=no-block address=192.168.88.11 comment="IT-отдел"
# === Firewall правила ===
/ip/firewall/filter
# Исключения — перед блокировкой
add chain=forward src-address-list=no-block action=accept \
comment="Bypass: whitelist IPs"
# Блокировка QUIC
add chain=forward protocol=udp dst-port=443 \
src-address=192.168.88.0/24 action=drop \
comment="Schedule: Block QUIC" disabled=yes
# TLS Host блокировка
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.vk.com" action=drop \
comment="Schedule: Block VK" disabled=yes
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.userapi.com" action=drop \
comment="Schedule: Block VK CDN" disabled=yes
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.youtube.com" action=drop \
comment="Schedule: Block YouTube" disabled=yes
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.googlevideo.com" action=drop \
comment="Schedule: Block YouTube CDN" disabled=yes
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.instagram.com" action=drop \
comment="Schedule: Block Instagram" disabled=yes
add chain=forward protocol=tcp dst-port=443 \
tls-host="*.tiktok.com" action=drop \
comment="Schedule: Block TikTok" disabled=yes
# Блокировка DoH
add chain=forward protocol=tcp dst-port=443 \
tls-host="dns.google" action=drop \
comment="Block DoH: Google"
add chain=forward protocol=tcp dst-port=443 \
tls-host="cloudflare-dns.com" action=drop \
comment="Block DoH: Cloudflare"
# === Скрипты ===
/system/script
add name=block-enable source={
/ip/firewall/filter/enable [find where comment~"Schedule: Block"]
:log info "Site blocking enabled"
}
add name=block-disable source={
/ip/firewall/filter/disable [find where comment~"Schedule: Block"]
:log info "Site blocking disabled"
}
# === Расписание: блокировка 09:00-13:00, 14:00-18:00 пн-пт ===
/system/scheduler
add name=sched-block-0900 start-time=09:00:00 interval=1d \
on-event=block-enable
add name=sched-unblock-1300 start-time=13:00:00 interval=1d \
on-event=block-disable
add name=sched-block-1400 start-time=14:00:00 interval=1d \
on-event=block-enable
add name=sched-unblock-1800 start-time=18:00:00 interval=1d \
on-event=block-disable
# Очистить DNS-кэш для немедленного эффекта
/ip/dns/cache/flush