На написание данной статьи меня сподвиг тот факт, что старший ребенок стал по ночам вместо того чтобы укладываться спать, смотреть на своем смартфоне всякие ролики на youtube, до поздней ночи, а так же замена домашнего роутера с TP-Link TL-WR1043ND на MikroTik RB951G-2HnD.
Поизучав интернеты, наткнулся на презентацию от 2017 года на канале микротика в ютубе. Там описывалось, как не надо делать и как делать правильно. Возможно, для многих продвинутых пользователей MikroTik и RouterOS это не будет открытием, но надеюсь что поможет начинающим пользователям, как я, не заблудиться в дебрях вариантов, предлагаемых в интернете.
Начнем с часто предлагаемого варианта в интернете (так не надо делать!!!):
● /ip firewall layer7-protocol
add name=youtube regexp="^.+(youtube).*$"
add name=facebook regexp="^.+(facebook).*$"
● /ip firewall filter
add action=drop chain=forward layer7-protocol=facebook
add action=drop chain=forward layer7-protocol=youtube
У данного решения следующие минусы: высокая нагрузка на cpu, увеличенная latency, потеря пакетов, youtube и facebook не блокируются.
Почему так происходит? Каждое соединение проверяется снова и снова, Layer7 проверяется не в том месте, что приводит к проверке всего трафика.
Правильное решение
Создаем правило с регулярным выражением для Layer7:
● /ip firewall layer7-protocol
add name=youtube regexp="^.+(youtube).*$"
Я блочил только ютуб, если нужен фейсбук или что-то иное, создает отдельные правила
add name=facebook regexp="^.+(facebook).*$"
Можно создавать правила и для других сервисов стримминга видео, вот один из вариантов:
regexp=”^.*youtube.com|youtu.be|netflix.com|vimeo.com|screen.yahoo.com|dailyMotion.com|hulu.com|twitch.tv|liveleak.com|vine.co|break.com|tv.com|metacafe.com|viewster.com).*$”
Далее создаем правила для маркировки соединений и пакетов:
● /ip firewall mangle
add action=mark-connection chain=prerouting protocol=udp
dst-port=53 connection-mark=no-mark layer7-protocol=youtube new-connection-mark=youtube_conn passthrough=yes
add action=mark-packet chain=prerouting connection-mark=youtube_conn new-packet-mark=youtube_packet
и правила для фильтра файрвола:
● /ip firewall filter
add action=drop chain=forward packet-mark=youtube_packet
add action=drop chain=input packet-mark=youtube_packet
Далее идем меню IP>Firewall>Mangle выбираем наши mark_connection и mark_packet и в поле Src. Address вбиваем блокируемый ip либо группу.
Все, девайс остался без ютуба, жестко, но в воспитательных целях нужно.
Так же можно применять эти правила по расписанию.
Буду рад комментариями и поправкам, если вы заметите какие то неточности, т.к. это моя первая статья на Хабре. По материалам канала MikroTik на Youtube. Внимание, эта статья не о том как ограничить доступ ребенку в интернет, ограничение доступа в ютуб — это просто пример. Статья об одном из способов ограничения доступа к нежелательным ресурсам.
Updt1, блок по mac:
● /ip firewall filter
add chain=input src-mac-address=aa:bb:cc:dd:ee:ff action=drop
add chain=forward src-mac-address=aa:bb:cc:dd:ee:ff action=drop
можно заблочить и в dhcp — сделать lease и жмякнуть block access