Блокировка ресурсов
Методы блокировки
RouterOS 7 предоставляет несколько методов блокировки нежелательных интернет-ресурсов. Каждый из них имеет свои преимущества и ограничения. Выбор метода зависит от конкретной задачи, типа трафика и требуемого уровня контроля.
| Метод | Преимущества | Недостатки | HTTPS |
|---|---|---|---|
| DNS static | Простота, нулевая нагрузка на CPU | Обходится сменой DNS на клиенте | Работает |
| Address List + Firewall | Надёжная блокировка по IP | Один IP может обслуживать много доменов | Работает |
| Layer 7 regexp | Гибкость паттернов | Высокая нагрузка CPU, не работает с HTTPS | Не работает |
| TLS Host (SNI) | Работает с HTTPS, низкая нагрузка | Не работает с ECH/ESNI | Работает |
Блокировка через 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
Блокировка по 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
Layer 7 фильтрация
Layer 7 protocol позволяет фильтровать трафик по содержимому пакетов с помощью регулярных выражений. Этот метод анализирует первые пакеты каждого соединения и ищет совпадения с заданным паттерном.
Создание 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
TLS Host блокировка
Рекомендуемый метод для RouterOS 7 — использование параметра tls-host в правилах файрвола. Он анализирует поле SNI (Server Name Indication) в ClientHello при установке TLS/HTTPS-соединения, что позволяет определить доменное имя без расшифровки трафика.
Правила с 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
/ip/firewall/filter/add chain=forward protocol=tcp dst-port=443 \
action=accept place-before=[find action=fasttrack-connection]Расписание блокировок
Часто требуется блокировать ресурсы только в определённое время — например, социальные сети в рабочие часы. Для этого используется связка планировщика (/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
Исключения (белый список)
Часто требуется исключить определённых пользователей или устройства из правил блокировки — например, администраторов, руководство или определённые серверы. Для этого используются 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