mikrotik-wiki.ru
Главная
Загрузка...

Блокировка сайтов на MikroTik — DNS, TLS Host, Layer7

RouterOS 7.xIP14 мин230 мар. 2026 г.
TelegramVK

Блокировка нежелательных сайтов — типичная задача для офисных и школьных сетей. Сотрудники сидят в социальных сетях, студенты смотрят 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 — плохой выбор:

ПроблемаОписание
Не работает с HTTPS99% трафика — 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) стоит перед правилом блокировки — уже установленные соединения не будут заблокированы.

Правильный порядок:

  1. Accept из whitelist (no-block)
  2. Accept established, related
  3. Drop invalid
  4. Правила блокировки (TLS Host, Address List)
  5. Accept из LAN в WAN
  6. 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-отдела гарантируют, что важные пользователи не будут ограничены.

[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"
# Перенаправление на внутренний веб-сервер с уведомлением
/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
IP / Блокировка сайтов на MikroTik — DNS, TLS Host, Layer7