Обновлено: 23.03.2026

Блокировка ресурсов

FirewallDNSБлокировкаБезопасность

Методы блокировки

RouterOS 7 предоставляет несколько методов блокировки нежелательных интернет-ресурсов. Каждый из них имеет свои преимущества и ограничения. Выбор метода зависит от конкретной задачи, типа трафика и требуемого уровня контроля.

МетодПреимуществаНедостаткиHTTPS
DNS staticПростота, нулевая нагрузка на CPUОбходится сменой DNS на клиентеРаботает
Address List + FirewallНадёжная блокировка по IPОдин IP может обслуживать много доменовРаботает
Layer 7 regexpГибкость паттерновВысокая нагрузка CPU, не работает с HTTPSНе работает
TLS Host (SNI)Работает с HTTPS, низкая нагрузкаНе работает с ECH/ESNIРаботает
💡
Рекомендация: Для RouterOS 7 оптимальным является комбинированный подход: DNS-блокировка для базовой фильтрации + TLS Host matcher для надёжной блокировки HTTPS-трафика.

Блокировка через DNS

Самый простой метод блокировки — перенаправление DNS-запросов для нежелательных доменов на адрес 0.0.0.0 или 127.0.0.1. Роутер должен выступать DNS-сервером для клиентов сети. При этом важно заблокировать обращение клиентов к сторонним DNS-серверам.

Принудительное использование DNS роутера

# Перехватываем DNS-запросы LAN-клиентов и направляем на роутер
# ВАЖНО: указываем src-address чтобы не перехватить свои же запросы!
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
    src-address=192.168.88.0/24 \
    action=redirect to-ports=53 \
    comment="force DNS to router (UDP)"
/ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=53 \
    src-address=192.168.88.0/24 \
    action=redirect to-ports=53 \
    comment="force DNS to router (TCP)"

# Блокируем DoH (DNS over HTTPS) на известных серверах
/ip/firewall/filter/add chain=forward protocol=tcp dst-port=443     dst-address-list=doh-servers action=drop     comment="block DoH"RouterOS CLI

Статические DNS-записи для блокировки

# Блокировка социальных сетей
/ip/dns/static
add name="facebook.com" address=0.0.0.0 comment="block facebook"
add name="*.facebook.com" address=0.0.0.0
add name="instagram.com" address=0.0.0.0 comment="block instagram"
add name="*.instagram.com" address=0.0.0.0
add name="tiktok.com" address=0.0.0.0 comment="block tiktok"
add name="*.tiktok.com" address=0.0.0.0

# Блокировка контента для взрослых
add name="pornhub.com" address=0.0.0.0 comment="block adult"
add name="*.pornhub.com" address=0.0.0.0
add name="xvideos.com" address=0.0.0.0
add name="*.xvideos.com" address=0.0.0.0

# Блокировка азартных игр
add name="1xbet.com" address=0.0.0.0 comment="block gambling"
add name="*.1xbet.com" address=0.0.0.0
add name="pokerstars.com" address=0.0.0.0
add name="*.pokerstars.com" address=0.0.0.0RouterOS CLI

Скрипт массового добавления доменов

# Скрипт: массовая блокировка из списка доменов
# Список доменов задаётся в переменной
:local domains {
    "facebook.com";
    "instagram.com";
    "tiktok.com";
    "twitter.com";
    "snapchat.com"
}

:foreach domain in=$domains do={
    /ip/dns/static
    :do {
        add name=$domain address=0.0.0.0 comment="blocked"
        add name=("*." . $domain) address=0.0.0.0 comment="blocked"
    } on-error={
        :log warning ("DNS block: already exists - " . $domain)
    }
}RouterOS Script
ℹ️
Важно: DNS-блокировка работает только если клиенты используют DNS роутера. Обязательно настройте перенаправление DNS (dstnat redirect) и заблокируйте DoH/DoT, иначе пользователи легко обойдут блокировку сменой DNS-сервера.

Блокировка по IP и Address Lists

Более надёжный метод — блокировка на уровне IP-адресов с помощью address-list. Даже если клиент использует сторонний DNS, трафик к заблокированным IP будет отброшен файрволом.

Скрипт резолвинга доменов в address-list

# Скрипт: резолвим домены и добавляем IP в address-list
:local domains {
    "facebook.com";
    "instagram.com";
    "tiktok.com"
}
:local listName "blocked-sites"

:foreach domain in=$domains do={
    :do {
        :local ip [:resolve $domain]
        /ip/firewall/address-list
        :do {
            add list=$listName address=$ip                 timeout=1d comment=$domain
        } on-error={}
    } on-error={
        :log warning ("Cannot resolve: " . $domain)
    }
}RouterOS Script

Использование DNS-кэша для заполнения address-list

# Посмотреть DNS-кэш роутера
/ip/dns/cache/print

# Скрипт: перенос записей из DNS-кэша в address-list
:local target "facebook.com"
:foreach entry in=[/ip/dns/cache/find where name~$target type="A"] do={
    :local addr [/ip/dns/cache/get $entry data]
    :do {
        /ip/firewall/address-list/add list="blocked-sites"             address=$addr timeout=1d comment=$target
    } on-error={}
}RouterOS Script

Правила файрвола для блокировки по address-list

# Блокируем forward-трафик к заблокированным IP
/ip/firewall/filter
add chain=forward dst-address-list=blocked-sites     action=drop comment="drop traffic to blocked sites"

# Размещаем правило перед accept established,related
# или используем reject для уведомления клиента
add chain=forward dst-address-list=blocked-sites     action=reject reject-with=icmp-network-unreachable     comment="reject blocked sites with ICMP"RouterOS CLI
💡
Автообновление: Добавьте скрипт резолвинга в планировщик (/system/scheduler) с интервалом 12 часов, чтобы address-list обновлялся автоматически при смене IP-адресов сайтов.

Layer 7 фильтрация

Layer 7 protocol позволяет фильтровать трафик по содержимому пакетов с помощью регулярных выражений. Этот метод анализирует первые пакеты каждого соединения и ищет совпадения с заданным паттерном.

🔴
Внимание: Layer 7 фильтрация создаёт значительную нагрузку на CPU, так как каждое новое соединение анализируется регулярным выражением. Не рекомендуется на загруженных роутерах и для больших списков паттернов. Кроме того, L7 не работает с HTTPS трафиком, так как содержимое зашифровано.

Создание L7-протоколов

# Определяем L7-паттерн для социальных сетей (HTTP)
/ip/firewall/layer7-protocol
add name=social-media     regexp="^.+(facebook|instagram|tiktok|twitter)\\.com.*\$"

# Паттерн для видеохостингов
add name=video-hosting     regexp="^.+(youtube|youtu\\.be|vimeo)\\.com.*\$"

# Паттерн для торрентов
add name=bittorrent     regexp="^(\\x13bittorrent protocol|azver\\x01\$|get /teleport/|get /announce\\?info_hash=|get /scrape\\?info_hash=)"RouterOS CLI

Применение L7 в правилах файрвола

# Блокируем HTTP-трафик, совпадающий с L7-паттерном
/ip/firewall/filter
add chain=forward layer7-protocol=social-media     action=drop comment="L7: block social media (HTTP only)"
add chain=forward layer7-protocol=bittorrent     action=drop comment="L7: block bittorrent"RouterOS CLI
⚠️
Ограничения L7: В современном интернете более 90% трафика передаётся по HTTPS. Layer 7 фильтрация эффективна только для незашифрованного HTTP-трафика и некоторых протоколов (BitTorrent, FTP). Для блокировки HTTPS-сайтов используйте TLS Host matcher (см. ниже).

TLS Host блокировка

Рекомендуемый метод для RouterOS 7 — использование параметра tls-host в правилах файрвола. Он анализирует поле SNI (Server Name Indication) в ClientHello при установке TLS/HTTPS-соединения, что позволяет определить доменное имя без расшифровки трафика.

ℹ️
Как это работает: При установке HTTPS-соединения клиент отправляет SNI в открытом виде. RouterOS анализирует этот заголовок и может заблокировать соединение по доменному имени. Это работает без необходимости расшифровывать трафик (no MITM).

Правила с tls-host

# Блокировка по точному доменному имени
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443     tls-host="facebook.com" action=drop     comment="TLS: block facebook.com"

# Блокировка с поддоменами (wildcard)
add chain=forward protocol=tcp dst-port=443     tls-host="*.facebook.com" action=drop     comment="TLS: block *.facebook.com"

# Блокировка нескольких ресурсов
add chain=forward protocol=tcp dst-port=443     tls-host="*.instagram.com" action=drop     comment="TLS: block instagram"
add chain=forward protocol=tcp dst-port=443     tls-host="*.tiktok.com" action=drop     comment="TLS: block tiktok"
add chain=forward protocol=tcp dst-port=443     tls-host="*.youtube.com" action=drop     comment="TLS: block youtube"

# Блокировка азартных игр
add chain=forward protocol=tcp dst-port=443     tls-host="*.1xbet.com" action=drop     comment="TLS: block gambling"
add chain=forward protocol=tcp dst-port=443     tls-host="*.pokerstars.com" action=drop     comment="TLS: block gambling"

# Блокировка контента для взрослых
add chain=forward protocol=tcp dst-port=443     tls-host="*.pornhub.com" action=drop     comment="TLS: block adult"RouterOS CLI
🚨
FastTrack + tls-host несовместимы! Если в firewall включён FastTrack (action=fasttrack-connection), то established-соединения обходят правила с tls-host. Для работы TLS-блокировки необходимо исключить HTTPS-трафик из FastTrack:
/ip/firewall/filter/add chain=forward protocol=tcp dst-port=443 \
    action=accept place-before=[find action=fasttrack-connection]
⚠️
ECH/ESNI: Технология Encrypted Client Hello (ECH) шифрует поле SNI, делая TLS Host matcher неэффективным. На данный момент ECH не получил широкого распространения, но в будущем его поддержка будет расти. Для противодействия можно блокировать ECH через блокировку DNS-типа HTTPS (Type65).
💡
Важно: Правила tls-host работают только в цепочке forward и только для protocol=tcp dst-port=443. Не забудьте также заблокировать порт 80 (HTTP) для этих же доменов через DNS или address-list, иначе сайт может быть доступен по HTTP.

Расписание блокировок

Часто требуется блокировать ресурсы только в определённое время — например, социальные сети в рабочие часы. Для этого используется связка планировщика (/system/scheduler) и включения/отключения правил файрвола.

Создание правил с отключённым состоянием

# Создаём правила блокировки (изначально отключены)
/ip/firewall/filter
add chain=forward protocol=tcp dst-port=443     tls-host="*.facebook.com" action=drop     comment="schedule: block social" disabled=yes
add chain=forward protocol=tcp dst-port=443     tls-host="*.instagram.com" action=drop     comment="schedule: block social" disabled=yes
add chain=forward protocol=tcp dst-port=443     tls-host="*.youtube.com" action=drop     comment="schedule: block social" disabled=yesRouterOS CLI

Скрипты включения и отключения

# Скрипт: включить блокировку (enable-block)
/ip/firewall/filter
:foreach rule in=[find where comment="schedule: block social"] do={
    set $rule disabled=no
}
:log info "Social media blocking ENABLED"

# Скрипт: отключить блокировку (disable-block)
/ip/firewall/filter
:foreach rule in=[find where comment="schedule: block social"] do={
    set $rule disabled=yes
}
:log info "Social media blocking DISABLED"RouterOS Script

Настройка планировщика

# Включать блокировку в 9:00 по будням (Пн-Пт)
/system/scheduler
add name=block-social-on start-time=09:00:00     interval=1d on-event="enable-block"

# Отключать блокировку в 18:00 по будням
add name=block-social-off start-time=18:00:00     interval=1d on-event="disable-block"

# Гарантированное отключение на выходные (Сб 00:00)
add name=block-social-weekend-off start-date=2026-03-28     start-time=00:00:00 interval=7d     on-event="disable-block"

# Включение в понедельник утром (Пн 09:00)
add name=block-social-monday-on start-date=2026-03-23     start-time=09:00:00 interval=7d     on-event="enable-block"RouterOS CLI
ℹ️
Подсказка: Для работы расписания по дням недели используйте start-date с конкретной датой нужного дня и interval=7d. RouterOS не поддерживает cron-синтаксис, поэтому для каждого дня недели создаётся отдельное задание.

Исключения (белый список)

Часто требуется исключить определённых пользователей или устройства из правил блокировки — например, администраторов, руководство или определённые серверы. Для этого используются address-list и параметр src-address-list.

Создание белого списка

# Добавляем IP-адреса, освобождённые от блокировки
/ip/firewall/address-list
add list=no-block address=192.168.88.10     comment="Admin PC"
add list=no-block address=192.168.88.11     comment="Director laptop"
add list=no-block address=192.168.88.200/30     comment="Server subnet"RouterOS CLI

Применение белого списка в правилах

# Правило-исключение ПЕРЕД правилами блокировки
/ip/firewall/filter
add chain=forward src-address-list=no-block     action=accept     comment="whitelist: bypass all blocks" place-before=0

# Или более точечно — пропускать whitelist только для blocked-sites
add chain=forward src-address-list=no-block     dst-address-list=blocked-sites action=accept     comment="whitelist: bypass blocked-sites"
add chain=forward src-address-list=no-block     protocol=tcp dst-port=443 action=accept     comment="whitelist: bypass TLS blocks"RouterOS CLI

Привязка к DHCP-клиентам

# Привязка статического IP для надёжности whitelist
/ip/dhcp-server/lease
add address=192.168.88.10 mac-address=AA:BB:CC:DD:EE:01     server=dhcp-lan comment="Admin PC - no-block"
add address=192.168.88.11 mac-address=AA:BB:CC:DD:EE:02     server=dhcp-lan comment="Director laptop - no-block"RouterOS CLI
🔴
Порядок правил: Правила белого списка (accept) должны располагаться выше правил блокировки (drop) в таблице файрвола. Файрвол обрабатывает правила сверху вниз — первое совпавшее правило завершает обработку пакета.
💡
Совет: Для привязки whitelist к конкретным MAC-адресам используйте статические DHCP-lease. Это предотвращает обход блокировки путём ручной смены IP-адреса на устройстве.