- Онлайн курcы по Mikrotik
- Помогла статья? Подписывайся на telegram канал автора
- Блокирование сайтов по имени
- MikroTik и блокировка нежелательных сайтов (на примере youtube и facebook)
- Правильное решение
- How Do You Know What Domains to Block?
- Developer Tools
- Someone Else’s List
- Создаем адрес лист
- Блокирование сайтов по IP-адресу
- Создание правил
- ���������� �������/���������� � ������� ������� Mikrotik �/��� ����-���������� Raspberry
- Блокировка Youtube на роутере
- Блокируем рекламу с помощью StopAD
- Курс «Настройка оборудования MikroTik»
- Внимание
- Блокировка рекламы средствами mikrotik
- Записки IT специалиста
- Блокирование сайтов с помощью статических DNS записей
- Properties
- Как блокируется Ютуб через роутер?
- Выдача кэшируется?
- MikroTik и блокировка нежелательных сайтов (на примере youtube и facebook)
- Правильное решение
- What Happens When You Browse to YouTube. com?
- Создаем правило Firewall
- Запускаю указанный выше скрипт и ничего не происходит. Что делать?
- Firewall и базовая настройка безопасности
- Порядок расположения правил в Firewall
- Примеры готовых правил
- Настройка черного и белого списков в роутерах Mikrotik
- Создаем списки
- Черный список
- Белые списки
- Layer 7 protocol
- Фильтрация по MAC-адресам
- Заключение
- Дополнительные материалы:
- Mikrotik
- The Dude
- Блокируем сайты в режиме белого и чёрного списков в MikroTik без Layer7 Protocols
- Прелюдия
- Суть проблемы
- Layer7 Protocols
- Статические записи в DNS
- WebProxy
- А конкретнее.
- Само решение
- Заключение
- Goal
Онлайн курcы по Mikrotik
Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курcы по программе, основанной на информации из официального курcа MikroTik Certified Network Associate. Помимо официальной программы, в курcах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте Курcы по ИТ.
Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курcов:
- Знания, ориентированные на практику;
- Реальные ситуации и задачи;
- Лучшее из международных программ.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Блокирование сайтов по имени
В RouterOS 6.36 и выше откройте меню NewTerminal и выполните следующие команды для блокировки сайтов:
Cписок запрещенных сайтов можно редактировать в меню IP — Firewall на вкладке Address Lists.
Правило блокировки находится в меню IP — Firewall на вкладке Filter Rules.
MikroTik и блокировка нежелательных сайтов (на примере youtube и facebook)

На написание данной статьи меня сподвиг тот факт, что старший ребенок стал по ночам вместо того чтобы укладываться спать, смотреть на своем смартфоне всякие ролики на youtube, до поздней ночи, а так же замена домашнего роутера с TP-Link TL-WR1043ND на MikroTik RB951G-2HnD.
Поизучав интернеты, наткнулся на презентацию от 2017 года на канале микротика в ютубе. Там описывалось, как не надо делать и как делать правильно. Возможно, для многих продвинутых пользователей MikroTik и RouterOS это не будет открытием, но надеюсь что поможет начинающим пользователям, как я, не заблудиться в дебрях вариантов, предлагаемых в интернете.
Начнем с часто предлагаемого варианта в интернете (так не надо делать. ):
Почему так происходит? Каждое соединение проверяется снова и снова, Layer7 проверяется не в том месте, что приводит к проверке всего трафика.
Правильное решение
Создаем правило с регулярным выражением для Layer7:

Я блочил только ютуб, если нужен фейсбук или что-то иное, создает отдельные правила
Можно создавать правила и для других сервисов стримминга видео, вот один из вариантов:
Далее создаем правила для маркировки соединений и пакетов:


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


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

Все, девайс остался без ютуба, жестко, но в воспитательных целях нужно.
Так же можно применять эти правила по расписанию.
Буду рад комментариями и поправкам, если вы заметите какие то неточности, т.к. это моя первая статья на Хабре. По материалам канала MikroTik на Youtube. Внимание, эта статья не о том как ограничить доступ ребенку в интернет, ограничение доступа в ютуб — это просто пример. Статья об одном из способов ограничения доступа к нежелательным ресурсам.
Updt1, от avelor, блок по mac:
How Do You Know What Domains to Block?
Developer Tools
You can use the Browser Developer Tools, often activated by F12.
All browsers have a set of tools for web developers (like me!), which let you poke around behind the scenes.
Of particular interest to us is the Network tab, which lists all the assets loaded on a page.
These are things like images, videos, styles, javascript and so on.

A few tips:
- Even though I typed in
youtube.cominto my browser, it redirected towww.youtube.com. So I’ll need to block both of them. - As a web developer, there are some “shared library” sites I recognise, eg:
fonts.googleapis.com. If you block these, it will probably break other sites, so leave them off. - I’m not sure about
ytimg.com, my guess is its another “shared library” site, so I won’t block it just yet. googlevideo.comlooks like where the raw video content comes from, but the crazy sub-domain means I’ll need a regex to block it — so I’ll use a TLS Host firewall rule.- Don’t forget to check for country specific domains like
youtube.com.au.
Someone Else’s List
Создаем адрес лист
Создадим адресный лист AdNetworks и добавим в него домены рекламных сетей.

Блокирование сайтов по IP-адресу




Блокирование социальных сетей довольно трудоемкий процесс, поскольку социальные сети открывают дубликаты своих сайтов с другими именами и IP адресами серверов. Продвинутые пользователи обходят ограничения еще с помощью сайтов анонимайзеров. Поэтому блокируя доступ к социальным сетям, вам также придется выискивать сайты анонимайзеры и тоже их блокировать.
Создание правил
Для продолжения нам необходимо настроить правила запрета. Для этого нажмите на Add New и откройте страницу для настройки параметров запрета. Вы увидите такие строчки:
MAC Address Child PC: здесь указываются уникальные идентификаторы устройств на которые будет распространены запреты. Для применения ко всем компьютерам, кроме материнского, не заполняйте это поле.
All MAC Address Current LAN позволяет выбрать правильный адрес из подсоединенных к распределителю устройств.
- Allowed Domain Name: здесь указываются домены в количестве до 8 URL. Не обязательно указывать целую ссылку – достаточно будет одного из компонентов, например для блокировки нужного нам видеохостинга потребуется всего одно слово youtube – роутер перестанет открывать все сайты, адрес которых содержит это слово;
- Website Description: здесь можно оставить описание блокируемого сайта;
- Effective Time: пункт для обозначения времени действия ограничений. До внесения изменений здесь включен режим Anytime – блокировка в течение всего времени. Вы можете изменять этот параметр для каждого запрета, вручную изменяя временные отрезки. Перейдите в Access Control, затем в раздел Schedule и кликните на Add New – так вы сможете добавить новые сроки. Также заполните информацию в строке Schedule Description – это название расписания, появляющееся в списке Effective Time.
Status: Здесь можно выбрать несколько вариантов: Disabled включает доступ ко всем ресурсам, кроме обозначенных, а Enabled наоборот – закрывает доступ ко всем сайтам, кроме обозначенных в списке. настройки будут действовать на всех устройствах, чьи уникальные идентификаторы находятся в списке.
После редактирования всех пунктов настроек нажмите “Сохранить” и сохраните все изменения – они моментально вступят в силу.
���������� �������/���������� � ������� ������� Mikrotik �/��� ����-���������� Raspberry








## For changing any parameters, please, use this link: https://stopad.kplus.pro/
:local scriptName «stop_ad.script»;
:local backupFileName «before_stopad»;
/tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=(«./».$scriptName);
/system backup save name=$backupFileName;
/file remove $scriptName;
Блокировка Youtube на роутере

Блокируем рекламу с помощью StopAD
Курс «Настройка оборудования MikroTik»
Живет эта полезная штука здесь: https://stopad.kplus.pro/
Списки для блокировки:
Убер-список на 1.4 млн:
Внимание
Скрипт для маршрутизатора — для генерации следует заполнить поля на сайте https://stopad.kplus.pro/ и получаете «все в одном».
Блокировка рекламы средствами mikrotik
С помощью изученного средства по ограничению доступа к сайтам достаточно просто блокировать любую рекламу. Для примера рассмотрим вариант по блокировке рекламы в Skype. Так как я знаю адреса серверов, куда скайп лезет за рекламой, я могу его заблокировать в mikrotik. У меня есть список:
rad.msn.com apps.skype.com vortex-win.data.microsoft.com settings-win.data.microsoft.com
Дальше как обычно создаем regexp выражение для списка адресов:
^.+(rad.msn.com|apps.skype.com|vortex-win.data.microsoft.com|settings-win.data.microsoft.com).*$
Либо делаете список с dns именами, как я показал в самом начале, если не хотите использовать Layer7 для этого. Добавляем новое правило блокировки в firewall, подключаем к нему список, созданный ранее и наслаждаемся работой скайпа без рекламы.
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Настройка черного и белого списков в роутерах Mikrotik
Блокирование сайтов с помощью статических DNS записей
Заблокировать доступ к сайту можно также, создав статическую DNS запись с названием сайта и несуществующим IP адресом для него, например 127.0.0.1. Перед именем сайта бывает автоматически приписывается www, поэтому нужно создавать две записи, например odnoklassniki.ru и www.odnoklassniki.ru
Откройте меню NewTerminal и выполните следующие команды для блокировки одноклассников:
У пользователей заблокированные сайты еще будут открываться некоторое время, потому что на компьютерах есть DNS кэш, в котором временно хранятся имена посещенных сайтов и их IP адреса. Для очистки DNS кэша на компьютере нужно запустить командную строку cmd и ввести команду ipconfig /flushdns.
Такой способ блокирования сайтов будет работать только в том случае, если пользователь использует DNS сервер центрального роутера MikroTik. Если пользователь настроит вручную другой адрес DNS сервера, то ограничение работать не будет. Поэтому все DNS запросы необходимо завернуть на наш роутер. Для этого откройте меню New Terminal и выполните следующие команды:
Далее перейдите в меню IP — Firewall и на вкладке NAT переместите созданные правила вверх. Теперь все DNS запросы будут идти через наш роутер.

Properties
Sub-menu: /ip firewall layer7-protocol
Как блокируется Ютуб через роутер?
Заблокировать сайт через маршрутизатор – самый надежный способ закрыть доступ к сайту внутри пользовательской домашней или корпоративной сети. Такая блокировка поможет избежать открытия определенных веб-адресов не только на компьютерах, но и на планшетах и мобильных телефонах, подключаемых к сети. Существует несколько способов – выберите самый простой для вас и перекройте доступ к сайту уже сейчас. Однако помните что опытный пользователь сможет обойти большинство из них, потому выбирайте по-возможности самый надежный их них.
Выдача кэшируется?
В данный момент каждый запрашиваемый (внешний) ресурс кэшируется на 7200 секунд. Всё остальное — обрабатывается в реалтайме.
MikroTik и блокировка нежелательных сайтов (на примере youtube и facebook)

На написание данной статьи меня сподвиг тот факт, что старший ребенок стал по ночам вместо того чтобы укладываться спать, смотреть на своем смартфоне всякие ролики на youtube, до поздней ночи, а так же замена домашнего роутера с TP-Link TL-WR1043ND на MikroTik RB951G-2HnD.
Поизучав интернеты, наткнулся на презентацию от 2017 года на канале микротика в ютубе. Там описывалось, как не надо делать и как делать правильно. Возможно, для многих продвинутых пользователей MikroTik и RouterOS это не будет открытием, но надеюсь что поможет начинающим пользователям, как я, не заблудиться в дебрях вариантов, предлагаемых в интернете.
Начнем с часто предлагаемого варианта в интернете (так не надо делать. ):
Почему так происходит? Каждое соединение проверяется снова и снова, Layer7 проверяется не в том месте, что приводит к проверке всего трафика.
Правильное решение
Создаем правило с регулярным выражением для Layer7:

Я блочил только ютуб, если нужен фейсбук или что-то иное, создает отдельные правила
Можно создавать правила и для других сервисов стримминга видео, вот один из вариантов:
Далее создаем правила для маркировки соединений и пакетов:


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


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

Все, девайс остался без ютуба, жестко, но в воспитательных целях нужно.
Так же можно применять эти правила по расписанию.
Буду рад комментариями и поправкам, если вы заметите какие то неточности, т.к. это моя первая статья на Хабре. По материалам канала MikroTik на Youtube. Внимание, эта статья не о том как ограничить доступ ребенку в интернет, ограничение доступа в ютуб — это просто пример. Статья об одном из способов ограничения доступа к нежелательным ресурсам.
Updt1, от avelor, блок по mac:
What Happens When You Browse to YouTube. com?
So, I punch youtube.com into my browser.
What happens to make cat videos come up on my screen?
(For people who like drilling down to absurd amounts of detail, I’m only thinking about networking. Sorry if you were hoping for an analysis of key presses.)
- My browser will do a DNS lookup of
youtube.com(and possiblywww.youtube.com). - My browser is told the IP address of
youtube.comis216.58.199.78(or maybe2404:6800:4006:808::200e). - My browser knows that
youtube.comhas enabled HSTS, so it makes an HTTPS connection (if it had never visitedyoutube.combefore, it might attempt an HTTP connection first, but that’s getting more and more unlikely these days). youtube.comresponds with a webpage, which contains links to other assets (like javascript, images, videos, etc) which might be on other domains (eg:soemthing.youtube.com).- Goto #1 for each asset.
An important part of this process is that my Mikrotik router sits between my browser and youtube.com.
That is, your router will listen in on the whole conversation.
Which means we have lots of options for how we might interrupt it!
Создаем правило Firewall
Создаем правило межсетевого экрана, которое при обнаружении трафика из рекламных сетей (список AdNetworks), помещает IP адрес рекламной сети в список блокировки — BlackList (из статьи «Защита MikroTik (базовая настройка безопасности устройств)«).

Запускаю указанный выше скрипт и ничего не происходит. Что делать?
Попробуйте выполнить в консоли /system script print from=%имя_скрипта% и проанализировать вывод. Работоспособность скрипта была протестирована на RouterOS v6.30.2.
Firewall и базовая настройка безопасности
Давайте теперь немного порассуждаем, зачем нужен файрвол и какие вопросы он решает. Причем не только в контексте микротика, а вообще. Сейчас каждый доморощенный админ рассказывает, как важно всегда настраивать firewall, иногда даже не понимая, для чего он нужен. Лично я не сторонник создания лишних сущностей, поэтому там где межсетевой экран не нужен, я его не настраиваю.
Сетевой экран позволяет настраивать доступ как к самому шлюзу, так и к ресурсам за ним. Допустим, у вас не запущено никаких сервисов на роутере, и нет никакого доступа извне в локальную сеть. У вас есть какая-то служба на шлюзе, с помощью которой к нему подключаются и управляют (ssh, winbox, http и т.д.), причем ограничение доступа к этой службе настраивать не планируется. Вопрос — зачем вам в таком случае настраивать фаервол? Что он будет ограничивать и какие правила туда писать? В таком случае вам будет достаточно отключить все сервисы на роутере, которые слушают подключения из вне и все.
На самом деле такой кейс очень популярный дома или в мелких организациях, где нет постоянного админа. Просто настроен какой-то роутер, поднят NAT и все. Я понимаю, что не правильно не настраивать ограничения на доступ к управлению, но я рассказываю, как часто бывает. То есть firewall должен решать конкретную задачу по ограничению доступа к ресурсам, а не существовать просто так, чтобы был.
Еще популярны случаи, когда настроена куча правил, а в конце все равно стоит accept для всех подключений. Такие ляпы я сам иногда делал, когда отлаживал где-то работу сервиса и забывал потом вернуть обратно ограничения. Фаервол вроде настроен, но реально его нет. Если отключить — ничего не изменится.
К чему я все это написал? К тому, что прежде чем настраивать firewall, надо определиться с тем, для чего мы это делаем. Какие разрешения или ограничения и для кого мы будем вводить. После этого можно переходить к настройке.
В своем примере я буду настраивать межсетевой экран на микротике, находясь в локальной сети. Вам всегда советую поступать так же. Есть старая админская примета — удаленная настройка файрвола к дальнему пути.
У Mikrotik есть интересное средство в виде Safe Mode, которое позволяет относительно безопасно настраивать Firewall удаленно. Суть его очень простая. Вы включаете этот режим через соответствующую настройку.

Далее, если вы некорректно выйдете из этого режима, то все созданные вами настройки будут отменены. Корректным выходом из режима является ручное его отключение через ту же настройку. Таким образом, если во время настройки фаервола у вас пропала связь из-за неверного правила или по какой-то другой причине, Микротик откатит обратно сделанные вами изменения и вы сможете снова подключиться к роутеру.
В терминале этот режим включается комбинацией клавиш CTRL+X. Время ожидания, перед откатом изменений максимум 9 минут (время TCP timeout). Подробнее об этом режиме можно почитать в официальной документации.
Порядок расположения правил в Firewall
Перед началом настройки firewall в mikrotik, отдельно остановлюсь на одном очень важном моменте — порядке расположения правил. Многие, да и я сам ранее, не придавал большого значения этому, так как не сталкивался с высокими нагрузками на сетевое оборудование. Если нагрузки нет, то разницу не замечаешь. Тем не менее, лучше ее понимать.
Пакеты проходят по списку правил по порядку, сверху вниз. Если пакет соответствует какому-то правилу, то он прекращает движение по цепочке. Из этого следует важный вывод — первыми в цепочке должны быть правила, которые охватывают максимальный объем трафика, чтобы он дальше не обрабатывался устройством. Примером такого правила является разрешение пакетов уже установленных (established) или связанных (related) соединений, которые ранее были разрешены каким-то правилом. Повторно проверять по всем правилам их не нужно. Сделаем такое правило для цепочки input — входящие соединения роутера.
/ip firewall filter add action=accept chain=input comment="accept establish & related" connection-state=established,related


В дефолтном правиле фаервола сюда же добавлены untracked подключения. Я не стал их добавлять, так как обычно не использую данную возможность. Untracked — это пакеты, не отслеживаемые connection tracker. То есть идущие мимо многих функций фаервола. В конце статьи я отдельно расскажу об этой возможности.
Первое правило фаервола для цепочки input мы уже написали, но при этом я забыл немного рассказать о существующих цепочках правил в микротиковском фаерволе. Они наследуются из линуксового фаервола iptables. По сути, в mikrotik работает именно он.
- Input — пакеты, отправленные на сам роутер. Если вы подключаетесь к нему по ssh или winbox, пакеты попадают как раз в эту цепочку.
- Forward — транзитные пакеты, идущие через маршрутизатор. Например, в локальную сеть за ним, или из нее. Все запросы в интернет через маршрутизатор микротик будут попадать в цепочку forward.
- Output — пакеты, отправленные с маршрутизатора. Например, микротик синхронизирует время с внешними ntp серверами. Эти запросы будут попадать в цепочку output.
При составлении правил firewall нет смысла пытаться как-то перемешивать правила из разных цепочек. Они все равно будут читаться по порядку в соответствии с той цепочкой, в которую попадает пакет. Поэтому я обычно сначала описываю все правила для input, потом для forward и в конце, в случае необходимости, для output.
Примеры готовых правил
Двигаемся дальше. Одно правило у нас есть, рисуем следующее. Отбрасываем все неверные (Invalid) пакеты. Это чистой воды паразитный трафик. Его пакеты не являются частью ни одного из отслеживаемых соединений. Поэтому чем раньше мы их отбросим, тем меньше они будут нагружать дальше фаервол проверками.
add action=drop chain=input comment="drop invalid" connection-state=invalid


Дальше не буду приводить скрины, очень хлопотно их под каждое правило делать, да и нет смысла. Просто вставляйте через консоль правила и изучайте их сами в winbox. Разрешаем icmp трафик, чтобы можно было пинговать роутер.
add action=accept chain=input comment="accept ICMP" protocol=icmp
Соответственно, если хотите его заблокировать, то вместо action=accept сделайте drop, или просто не пишите правило, если в конце у вас будет полная блокировка всего, что не разрешено явно.
Дальше я обычно разрешаю подключаться к портам, отвечающим за управление роутером (ssh, winbox, https) с доверенных ip адресов. Подробно этот вопрос я рассмотрю отдельно ниже, поэтому пока это правило пропустим.
Создаем заключительное правило для цепочки input, которое будет блокировать все запросы, пришедшие не из локальной сети. В моем примере у меня локальная сеть подключена к бриджу bridge1-lan. В него входят все порты, подключенные в локалку.
add action=drop chain=input comment="drop all not from lan" in-interface=!bridge1-lan
В этом правиле я использовал отрицание !bridge1-lan, то есть все, что не относится к указанному бриджу.

На текущий момент мы запретили все запросы из вне к роутеру, кроме пингов. При этом доступ из локальной сети полный. Настроим теперь правила для транзитного трафика цепочки forward. Здесь по аналогии с input первыми идут правила для established, related, invalid пакетов.
add action=accept chain=forward comment="accept established,related" connection-state=established,related add action=drop chain=forward comment="drop invalid" connection-state=invalid
Теперь запретим все запросы из внешней сети, связь с которой через интерфейс ether1-wan к локальной сети.
add action=drop chain=forward comment="drop all from WAN to LAN" connection-nat-state=!dstnat connection-state=new in-interface=ether1-wan
Что такое dstnat мы рассмотрим чуть позже, когда будем разбираться с NAT. На этом список базовых правил закончен. Дальше немного пояснений на тему того, что у нас получилось.
Важное замечание, о котором я забыл упомянуть. По умолчанию, в Mikrotik Firewall нормально открытый. Это значит, все, что не запрещено явно, разрешено.
На текущий момент у нас запрещены все входящие соединения, кроме пинга. При этом разрешены все запросы из локальной сети во внешнюю, так как мы не указали никаких блокирующих правил для этого, а значит, все открыто. Покажу для примера, что нужно сделать, чтобы запретить все запросы из локалки и разрешить, к примеру, только http и https трафик.
Для этого мы сначала создаем разрешающее правило для 80 и 443 портов. Если используете внешний DNS сервер для запросов из сети, не забудьте разрешить еще и 53 порт UDP, иначе dns запросы не будут проходить и страницы загружаться не будут, даже если разрешить http трафик.
add action=accept chain=forward comment="accept http & https from LAN" dst-port=80,443 in-interface=bridge1-lan out-interface=ether1-wan protocol=tcp add action=accept chain=forward comment="accept dns from lan" dst-port=53 in-interface=bridge1-lan out-interface=ether1-wan protocol=udp
Разрешил http и dns трафик, так как в моем тестовом окружении используется внешний dns сервер. Теперь блокируем все остальные запросы по цепочке forward из локальной сети.
add action=drop chain=forward comment="drop all from LAN to WAN" in-interface=bridge1-lan out-interface=ether1-wan
Когда я писал статью, завис минут на 10 и не мог понять, почему не работает разрешающее правило для http. Я его несколько раз проверил, все верно было. Тут и ошибиться негде, но страницы из интернета не грузились в браузере. Чтобы разобраться, я просто включил логирование для последнего запрещающего правила.

После того, как сделал это, увидел, что у меня блокируется dns трафик по 53-му порту. После этого сделал для него разрешение и все заработало как надо.

Забыл предупредить. Если вы с нуля настраиваете фаервол в микротик, то доступа в интернет из локальной сети у вас еще нет. Для этого нужно настроить NAT, чем мы займемся в следующем разделе. Так что пока отложите тестирование правил и вернитесь к ним, когда настроите NAT.
Когда у вас что-то не получается, смело включайте логирование запрещающих правил и вы быстро поймете в чем проблема. Это универсальный совет для настройки любого фаервола. Только не забудьте в конце отладки отключить логирование. Иногда я это забывал сделать. Если использовалось какое-то хранилище для логов, оно быстро забивалось, так как в блокирующие правила попадает очень много запросов.
Итак, мы настроили базовый нормально закрытый firewall в микротике. У нас запрещено все, что не разрешено явно, в том числе и для трафика из локальной сети. Скажу честно, я редко так делал, потому что хлопотно постоянно что-то открывать из локальной сети (skype, teamviewer и т.д.). В общем случае, если нет повышенных требований безопасности, в этом нет необходимости. Блокирование не разрешенного трафика можно включать в случае необходимости.
Итоговый список правил, которые получились:
/ip firewall filter add action=accept chain=input comment="accept establish & related" connection-state=established,related add action=drop chain=input comment="drop invalid" connection-state=invalid add action=accept chain=input comment="accept ICMP" protocol=icmp add action=drop chain=input comment="drop all not from lan" in-interface=!bridge1-lan add action=accept chain=forward comment="accept established,related" connection-state=established,related add action=drop chain=forward comment="drop invalid" connection-state=invalid add action=drop chain=forward comment="drop all from WAN to LAN" connection-nat-state=!dstnat connection-state=new in-interface=ether1-wan add action=accept chain=forward comment="accept http & https from LAN" dst-port=80,443 in-interface=bridge1-lan out-interface=ether1-wan protocol=tcp add action=accept chain=forward comment="accept dns from LAN" dst-port=53 in-interface=bridge1-lan out-interface=ether1-wan protocol=udp add action=drop chain=forward comment="drop all from LAN to WAN" in-interface=bridge1-lan out-interface=ether1-wan

Пока у нас еще не настроен выход в интернет для локальной сети. Сделаем это далее, настроив NAT.
Настройка черного и белого списков в роутерах Mikrotik
Ограничение доступа к тем или иным ресурсам сети интернет на основе списков достаточно популярный способ фильтрации, несмотря на его недостатки. Действительно, в большинстве случаев требуется заблокировать достаточно небольшой список ресурсов, скажем, соцсети, с чем данный метод вполне успешно справляется. В данной статье мы поговорим о том, как настроить фильтрацию по спискам на роутерах Mikrotik, тем более что RouterOS предоставляет нам для этого достаточно широкие возможности.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Прежде всего поговорим об особенностях фильтрации в условиях современного интернета. Основной тенденцией последних лет является массовый переход на протокол HTTPS. Что это означает? В отличие от HTTP, который передает данные открытым текстом, HTTPS использует SSL-шифрование и все, что мы можем увидеть для такого соединения — это домен назначения. Какие именно страницы посещает пользователь на указанном домене и какие данные оттуда передаются мы видеть не можем.
Также следует понимать, что блокировка посредством черных списков применима лишь к небольшому числу ресурсов, например, популярные соцсети, попытка таким образом фильтровать весь нежелательный трафик выливается в необходимость постоянной актуализации списков и может привести к высокой нагрузке на оборудование. Для таких целей лучше использовать специализированные сервисы.
Другой вариант — белые списки, при всей видимой простоте и надежности, сталкиваются с другой проблемой. Многие сайты активно используют внешние ресурсы, с которых подгружают скрипты, шрифты, стили и т.д. и т.п. и некоторые из них могут являться критичными для обеспечения полноценной работы. Также могут возникнуть проблемы с HTTPS, если браузер не сможет проверить статус SSL-сертификата. Все это потребует грамотного анализа и добавления в белый список всех тех узлов, которые необходимы для нормальной работы каждого из разрешенных сайтов.
Создаем списки
В командной строке это же действие можно выполнить так:
Таких списков мы можем создать сколько нам нужно, причем один и тот же адрес может входить сразу в несколько списков. Это удобно, если нужно обеспечить для разных групп пользователей доступ к разному набору сайтов. В итоге у вас должно получиться примерно следующее:
В данном примере реализовано два списка: WL — белый список и BL — черный список. Обычно в реальной жизни используется что-то одно, в нашем случае создание данных списков обусловлено сугубо учебными целями.
С доменами разобрались, остались пользователи. Существуют две политики применения правил: разрешено всем, кроме группы пользователей и запрещено всем, кроме группы пользователей. В любом случае у нас имеется группа пользователей, которая либо подвергается ограничениям, либо выводится из-под их действия. В грамотно спроектированной системе такая группа должна являться меньшинством, что обеспечит минимальную нагрузку на сетевое оборудование.


Либо через командную строку:
Таким образом мы получаем список пользователей, либо несколько списков, в которых указанные адреса будут находиться до тех пор, пока на сервере активно резервирование.
Черный список
И наконец на закладке Action указываем действие, обычно везде в интернете указывают drop, хорошо, укажем и мы.
![]()
Данное правило должно располагаться самым первым в цепочке FORWARD, выше FastTrack.
Страничка не грузится, однако браузер не понимает в чем дело и продолжает попытки ее грузить (т.е. в заголовке вкладки постоянно крутится колесико), это нагружает ресурсы ПК и не вносит ясности пользователю. Так происходит из-за того, что мы просто убиваем пакеты — действие drop, и отправитель не понимает почему нет ответа. Поэтому для внутренних ресурсов лучше использовать действие reject, которое отправляет назад пакет с сообщением что ресурс недоступен.
После замены действия при повторной попытке посетить ресурс мы сразу увидим сообщение о его недоступности:
Быстро добавить правило через командную строку можно так:
Или в командной строке:
Таким образом фильтрация по черным спискам не представляет особых сложностей. Все упирается в эти самые списки, которые нужно составлять и поддерживать в актуальном состоянии. Загрузить в роутер готовые списки из интернета также не очень хорошая идея, потому как каждый пакет будет проверяться на вхождение в список, что может вызвать серьезную нагрузку на роутер, при том, что подавляющее большинство адресов из этого списка ваши пользователи могут никогда не посещать. Поэтому следует трезво оценивать собственные ресурсы и возможности и применять списки там, где это действительно нужно.
Белые списки
Аналогичное действие через консоль:
Данное правило также следует располагать первым в цепочке FORWARD.
Добавим к разрешенным несколько адресов, в нашем случае yandex.ru и interface31.ru и попробуем открыть один их них. Яндекс открывается, но выглядит довольно непривычно.
Теперь попробуем открыть наш сайт. А вот тут первый неприятный сюрприз:
Что это значит? Браузер не может проверить подлинность сертификата, а так как наш сайт использует HSTS, то доступ к нему будет невозможен, потому как подобные действия могут указывать на атаку с понижением степени защиты, чему HSTS должен препятствовать.
Для того, чтобы браузер смог проверить сертификат нам нужно разрешить доступ к сведениям центра сертификации, адреса нужных узлов можно найти в самом сертификате сайта:
В нашем случае оказалось достаточно добавить узел ocsp.int-x3.letsencrypt.org, сайт загрузился, но без комментариев, так как они реализованы на стороннем ресурсе и разрешение доступа к нему не решило проблемы. В этом случае вам придется либо заниматься долгим и кропотливым выяснением необходимых для работы ресурсов и занесением их в белый список, либо отказываться от части функционала сайтов.
Либо в командной строке:
Как видим, технически организовать доступ по белым спискам не так уж сложно, гораздо сложнее обеспечить полноценную работу разрешенных сайтов, что требует достаточно долгой и кропотливой работы по выявлению и добавлению в список связанных ресурсов.
Layer 7 protocol
Layer 7 protocol — это методика поиска определенных вхождений в ICMP/TCP/UDP потоках при помощи регулярных выражений. На первый взгляд достаточно интересная возможность, существенно расширяющая степень контроля над проходящим трафиком, но есть один существенный недостаток. Как уже понятно из названия, данный вид фильтрации работает на прикладном (L7) уровне, т.е. полностью обрабатывается CPU и даже при небольшом количестве правил способен создать сильную нагрузку на оборудование, особенно старые (не ARM) модели.
Использовать L7 для блокировки сайтов не рекомендуют сами разработчики Mikrotik, справедливо замечая, что в большинстве случаев это не будет работать так, как задумано, но при этом вы будете впустую растрачивать вычислительные ресурсы роутера. На наш взгляд использовать L7 для задач, связанных с доступом к сайтам вообще бессмысленно. Современный трафик в подавляющем большинстве шифрованный и различного рода конструкции для анализа URL просто не будут работать, а управлять доступом на основе доменного имени вполне можно и на L3 (чем мы занимались выше).
По этой же самой причине не будут работать многие размещенные в интернете инструкции, где трафик фильтровался по содержимому, типам файлов или потоков, использовал параметры запросов и т.д. и т.п. Хотя мы до сих пор встречаем статьи, в которых по L7 пытаются блокировать соцсети или Youtube, мотивируя это большим числом адресов, использованием CDN, поддоменов и т.д. и т.п. Однако все это не выдерживает никакой критики, соцсети и видеохостинги прекрасно блокируются по доменному имени.
Мы не рекомендуем использовать L7 во всех тех случаях, когда задачу можно решить иным образом, применяя его только для решения специфичных задач. Например, выявления и блокировки какого-либо вида трафика.
Поставим для примера следующую задачу: заблокировать возможность установления SSH-соединений для клиентов сети. Решение в лоб — заблокировать исходящие соединения на 22 порт не принесет успеха, так как SSH-сервер может работать на произвольном порту. Поэтому нужно при помощи специальных паттернов определить наличие именно SSH-трафика и каким-то образом его блокировать.
Где брать паттерны? Опытные пользователи могут запустить сетевой сканер (tcpdump, Wireshark) и проанализировать доступное содержимое пакетов и на основании полученной информации составить регулярное выражение. Либо воспользоваться сайтом l7-filter.sourceforge.net, однако большая часть паттернов оттуда работать не будет. Во-первых, сайт достаточно старый, последний раз обновлялся в 2009 году, во-вторых, очень многие протоколы перестали использоваться в открытом виде, а используют SSL-шифрование. В этом случае вы просто увидите SSL-поток, блокировать который бессмысленно, так как вы заблокируете практически весь интернет.
Для решения нашей задачи сначала перейдем в IP — Firewall — Layer 7 protocol и создадим новый фильтр: в поле Name напишем произвольное имя, в нашем случае SSH, а в поле Regexp внесем регулярное выражение паттерна:
Также можно выполнить команду в терминале:
Что делать дальше? Самое очевидное решение — использовать данный фильтр в правилах брандмауэра является примером того, как делать не надо. В этом случае через L7 фильтр будет проходить каждый пакет, что вызовет сильную нагрузку на CPU роутера.
Поэтому мы пойдем другим путем и на основании L7 фильтра будем маркировать соединения, которых гораздо меньше, чем пакетов. Перейдем в IP — Firewall — Mangle и создадим новое правило: на закладке General выставляем Chain — prerouting, Protocol — tcp и Сonnection Mark — no mark:
![]()
На закладке Advanced указываем использование созданного нами фильтра Layer 7 Protocol — SSH:
В Action указываем действие mark-connection, задаем марку соединения New Connection Mark — SSH-CONN и обязательно ставим флаг Passthrough для прохождения пакета далее по цепочке:
Затем добавим еще одно правило: General — Chain — prerouting, Protocol — tcp и Connection Mark — SSH-CONN:
А в действиях добавим mark packet, New Packet Mark — SSH-PCK и снимем флаг Passthrough:
Все тоже самое быстро делается в командной строке:
Многие читатели не работают с брандмауэром дальше таблицы Filter, поэтому что, что мы сейчас сделали в Mangle может показаться им какой-то особой магией. Коротко поясним наши действия. Первое правило проверяет все немаркированные соединения и те из них, которые сосуществуют фильтру L7, т.е. SSH-соединения получают метку SSH-CONN и продолжают движение по цепочке. Следующее правило проверяет соединения и все пакеты соединений, промаркированных как SSH-CONN снабжает меткой SSH-PCK.
Таким образом мы пометили все пакеты, относящиеся к SSH-соединениям, но L7 фильтр мы используем только для соединений, не нагружая роутер проверкой каждого пакета. Теперь запретим транзит таких пакетов, для этого вернемся в IP — Firewall — Filter Rules и создадим правило, на закладке General которого укажем: Chain — forward, Рrotocol — tcp, In Interface — bridge1 и Packet Mark — SSH-PCK:
На закладке Action ставим действие drop. То же самое в консоли:
Ставим это правило также в начало цепочки FORWARD и если вы все сделали правильно, то установить SSH-соединение из вашей сети больше никому не удастся.
Следует понимать, что выше был лишь пример того, как можно использовать Layer 7 protocol на Mikrotik, в реальной ситуации следует несколько раз подумать и прибегать к возможностям L7 только тогда, когда все остальные варианты исчерпаны. Также старайтесь как можно более подробно описывать условия, для правил использующих L7 фильтры, чтобы максимально уменьшить нагрузку на процессор роутера.
Фильтрация по MAC-адресам
Среди условий в правилах брандмауэра есть опция MAC-адреса, но в одном правиле можно указать только один адрес, т.е. для каждого MAC вам придется создать свою копию правила, что увеличит нагрузку на устройство и сделает набор правил трудночитаемым.
Откроем IP — Firewall — Mangle и добавим правило, на закладке General укажем Chain — prerouting, In Interface — bridge1, на Advanced в поле Src. MAC Address укажем MAC-адрес нужного устройства.
Это же правило в командной строке:
Заключение
Как видим возможности RouterOS позволяют решать достаточно сложные задачи используя даже недорогие роутеры. Но следует понимать ограничения всех вышеперечисленных методов, осознавая их достоинства и недостатки. А также соотносить свои требования с возможностями оборудования. Если понимать и принимать во внимание эти факторы, то фильтрация по спискам на Mikrotik будет эффективным инструментом в руках администратора. В противном случае вы получите только разочарование и иные негативные последствия. Поэтому пожелаем вам благоразумия и напомним: хороший администратор выбирает для каждой задачи наиболее подходящий инструмент, что является признаком профессионализма. А фанатизм еще никого до добра не доводил.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Дополнительные материалы:
Mikrotik
The Dude
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Блокируем сайты в режиме белого и чёрного списков в MikroTik без Layer7 Protocols
Прелюдия
Это моя первая статья на Хабре (да и вообще первая подобная), поэтому прошу сильно сапогами не бить. Она ориентирована на таких же новичков, как и я, и не претендует на роль самой верной и правильной. Я просто делюсь своим решением проблемы, которого не мог найти нигде в интернете.
Суть проблемы
Года эдак два назад я решил обзавестись домашней точкой доступа (в простонародии роутер) и выбор пал на оборудование фирмы MikroTik. Я не был знаком с их интерфейсом и возможностями, поэтому, когда мне понадобилось выборочно заблокировать сайты, я полез в гугл, который мне выдал всего пару вариантов для реализации этой затеи. Выделю три основных:
- Фильтровать пакеты с помощью Layer7 Protocols
- Банально задать статические DNS записи для нужных доменов
- Использование WebProxy
Я не буду здесь расписывать, как они реализуются, т.к. этой информации в интернете предостаточно. Лишь кратко опишу, в чём их недостатки и почему я упорно продолжал поиски другого решения.
Layer7 Protocols
На первый взгляд идеальное решение. Однако, загружает CPU «микрота» и требует отключения fasttrack`а. В дополнение к этому, лично у меня так и не вышло настроить эту фичу нужным мне образом. Либо блокировалось всё, либо ничего.
Статические записи в DNS
Естественно, для этого сам микротик должен выступать в роли DNS-сервера в сети. Но основной недостаток этого метода — если нужно работать с сайтами в режиме «белого списка», т.е. блокировать всё, кроме нужных доменов — он бесполезен. Ну либо придётся добавить весь интернет в такие записи.
WebProxy
Тут даже говорить не о чем, он банально не работает с HTTPS.
Собственно, долго и упорно я гуглил другие методы, коих так и не смог найти нигде. Однако, пытаясь решить данную задачу другим путём, совершенно случайно набрёл на удобную фичу, что мне помогла решить эту проблему в полной мере — Addresses Lists.
А конкретнее.
Присутствует в микротике такая замечательная функция, как Firewall -> Addresses Lists.
Само решение
Проделывать я всё буду в Winbox, т.к. статья всё-таки для таких же новичков, как и я, и GUI здесь будет понятнее намного.
Идём в обозначенный выше пункт IP -> Firewall -> Addresses Lists.

Создаём новый список, обзываем как душе угодно, в поле Address прописываем домен нужного нам сайта и нажимаем «ОК».


Далее переходим в соседнюю вкладку «Filter Rules»

Добавляем новое правило со следующими параметрами:
- Вкладка General
- Chain: forward
- Вкладка Advanced
- Dst. Address List: Выбираем наш свежеиспечённый список, у меня он называется «VK»
- Вкладка Action
- Action: drop




На этом всё 🙂 Т.к. этот способ работает через обычные правила фаерволла, то можно настроить и список локальных адресов, на которые требуется распространить данное ограничение, но это уже будет выходить за рамки данной статьи.
Заключение
Надеюсь, я помог хотя бы одному новичку, столь же яро ищущего ответа на вопрос как же проще всего и без потерь блокировать нужные сайты.
Также приветствуется критика знающих людей: может, я где-то что-то упустил.
Goal
It would be nice if The Solution can be brought home so I can kick kids off video sites, but still let them do homework hosted on other domains.
I have IPv6 at home, so The Solution will need to apply to IPv6 as well.
And, the vast majority of my video traffic is HTTPS, so The Solution mustn’t be thwarted by encryption.

