Блокировка сайтов через TLS SNI и DNS Filtering на фаерволе MikroTik/Linux
- Необходимость блокировки доступа к запрещенным веб-ресурсам и социальным сетям без подмены сертификатов (SSL Interception/MITM).
- Обход стандартных IP-блокировок пользователями через Cloudflare CDN и динамические Anycast IP-адреса.
- Утечки DNS-трафика через сторонние публичные резолверы и DoH (DNS over HTTPS).
- Повышенная нагрузка на CPU шлюза при использовании неоптимизированных регулярных выражений L7-фильтрации.
1. Блокировка HTTPS через TLS Host (SNI) в MikroTik RouterOS
Метод анализирует незашифрованное поле Server Name Indication в пакете Client Hello на этапе TLS-рукопожатия:
/ip firewall filter
add chain=forward action=drop protocol=tcp dst-port=443 tls-host="*facebook.com*" comment="Block Facebook via SNI"
add chain=forward action=drop protocol=tcp dst-port=443 tls-host="*.tiktok.com" comment="Block TikTok via SNI"
add chain=forward action=drop protocol=tcp dst-port=443 tls-host="*torrent*" comment="Block Torrent trackers"2. Перехват и перенаправление DNS (DNS Hijacking)
Принудительно заворачивайте все клиентские DNS-запросы на локальный доверенный резолвер шлюза:
/ip firewall nat
add chain=dstnat action=redirect to-ports=53 protocol=udp dst-port=53 in-interface-list=LAN comment="Redirect UDP DNS"
add chain=dstnat action=redirect to-ports=53 protocol=tcp dst-port=53 in-interface-list=LAN comment="Redirect TCP DNS"3. Блокировка протоколов обхода DoH (DNS over HTTPS) и DoT
/ip firewall filter
add chain=forward action=drop protocol=tcp dst-port=853 comment="Drop DNS over TLS (DoT)"
add chain=forward action=drop protocol=udp dst-port=853 comment="Drop DoT UDP"
# Блокировка публичных DoH-серверов по спискам IP
add chain=forward action=drop protocol=tcp dst-port=443 dst-address-list=DoH_Servers comment="Drop DoH access"4. Фильтрация на уровне Linux nftables (альтернатива)
table inet filter {
chain forward {
type filter hook forward priority 0; policy accept;
# Дроп пакетов по паттерну SNI в расширении payload
tcp dport 443 @th,160,256 0x00000000 drop
}
} Частые вопросы (FAQ)
Работает ли фильтрация по TLS SNI, если клиент использует ECH (Encrypted Client Hello)?
При включенном ECH поле SNI шифруется публичным ключом сервера, полученным через DNS HTTPS-запись (Type 65). Для нейтрализации ECH необходимо блокировать DNS-запросы типа HTTPS/SVCB на локальном DNS-сервере или блокировать DoH-трафик, вынуждая браузер откатываться к классическому открытому SNI.
Почему правило с tls-host не блокирует сайты, открытые по протоколу HTTP (порт 80)?
Параметр tls-host анализирует исключительно структуры TLS-хэндшейка на порту 443. Для порта 80 необходимо использовать стандартные правила фильтрации HTTP Host Header или строчные DNS-блокировки.
Сильно ли SNI-фильтрация нагружает процессор маршрутизатора?
Проверка выполняется только для пакетов со статусом connection-state=new при открытии TCP/TLS-сессии. Последующие пакеты пропускаются через FastTrack или Established/Related, поэтому нагрузка на CPU минимальна.
Как заблокировать доступ к домену сразу на всех мобильных приложениях?
Рекомендуется комбинировать три уровня: блокировку DNS-запросов (статическая запись 127.0.0.1 в DNS), сброс пакетов по TLS SNI в фаерволе и добавление автономных систем (ASN) сервиса в адресные списки блокировки IP.