[Из песочницы] MikroTik и блокировка нежелательных сайтов (на примере youtube и facebook)

kp33tesmmhj-ac_l0r5e89h3maw.jpeg

На написание данной статьи меня сподвиг тот факт, что старший ребенок стал по ночам вместо того чтобы укладываться спать, смотреть на своем смартфоне всякие ролики на 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).*\$"


wsocqi2uofaxdzpyzopaljhlsxo.png

Я блочил только ютуб, если нужен фейсбук или что-то иное, создает отдельные правила

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


dr6taoteeod_glxk856fzz3kxgq.png

mmic_is7mesjcb6m-d32rknjmjo.png

и правила для фильтра файрвола:

● /ip firewall filter
add action=drop chain=forward packet-mark=youtube_packet
add action=drop chain=input packet-mark=youtube_packet


kcev_1fvonj161k8ril5xz8hmf8.png

crgynsgkswduttbf2vrp9pk62ac.png

У меня в домашней сети по dhcp раздаются статические ip-адреса, поэтому фильтр я применял к ip-адресу смартфона ребенка, можно создать группу адресов и применить к ней. Идем в меню IP>Firewall>AddressList нажимаем кнопку Add, вводим название группы и не забываем заполнить список адресов для блокировки.

Далее идем меню IP>Firewall>Mangle выбираем наши mark_connection и mark_packet и в поле Src. Address вбиваем блокируемый ip либо группу.

qgcrxx6tzlwxknramhoh6kfbxf4.png

Все, девайс остался без ютуба, жестко, но в воспитательных целях нужно.

Так же можно применять эти правила по расписанию.

Буду рад комментариями и поправкам, если вы заметите какие то неточности, т.к. это моя первая статья на Хабре. По материалам канала MikroTik на Youtube.

© Habrahabr.ru