
Популярная серия бюджетных маршрутизаторов из Латвии на базе RouterOS предоставляет пользователям широкие возможности по настройке. Сегодня я подробно рассмотрю возможности mikrotik по блокировке сайтов, рекламы, социальных сетей, по созданию списка запретов на доступ. Все эти средства присутствуют в роутерах из коробки и не требуют специальных знаний для настройки, кроме стандартных средств управления.
Данная статья является частью единого цикла статьей про Mikrotik.
Содержание
- Как быстро закрыть доступ к сайту
- Черный список сайтов для фильтрации
- Запретить социальные сети в mikrotik
- Блокировка рекламы средствами mikrotik
- Заключение
- Блокирование сайтов по имени
- Блокирование сайтов по IP-адресу
- Блокирование HTTPS сайтов
- Блокирование сайтов с помощью статических DNS записей
- Блокирование сайтов с помощью Proxy-сервера
Как быстро закрыть доступ к сайту
Начнем с самого простого. У нас есть роутер Mikrotik, утилита winbox и желание конкретному пользователю установить запрет на посещение определенного сайта. Подключаемся к роутеру и идем в раздел IP -> Firewall , открываем закладку Filter Rules :

Нажимаем на + и добавляем новое правило блокировки сайта:

На первой вкладке General заполняем:
- Указываем цепочку Forward.
- Указываем адрес пользователя, которому будет закрыт доступ к сайту.
- Выбираем протокол TCP.
Дальше переходим на вкладку Advanced :

В поле Content указываем адрес сайта, который нужно заблокировать, например vk.com. Переходим на вкладку Action :

Здесь выполняем следующие действия:
- В поле Action выбираем reject.
- В пункте Reject With указываем tcp reset.
- Нажимаем OK.
На этом основная настройка закончена. В данный момент правило по фильтрации сайта уже работает. Мы с помощью стандартных средств mikrotik смогли заблокировать vk.com. Это нетрудно проверить на клиенте. При попытке открыть адрес сайта популярной соц. сети он получит следующее сообщение в браузере chrome:

В данном случае мы в ручном режиме сделали блокировку сайта конкретному пользователю. Если у вас таких сайтов и пользователей много, процесс надо по-возможности автоматизировать.
Черный список сайтов для фильтрации
Давайте создадим отдельно список сайтов и укажем его в правиле, чтобы не создавать запрет для каждого имени отдельно. Сделать это не сложно. Для этого опять идем в раздел IP -> Firewall , открываем вкладку Layer7 Protocols и нажимаем «+» для добавления списка:

В поле regexp необходимо ввести регулярное выражение для организации списка сайтов. Я сам лично не умею составлять правильно регулярные выражения, поэтому приходится их искать в интернете. Подавляющее большинство регулярок, которые я нашел, у меня не заработали. Привожу вам список видеохостинга для блокировки в виде регулярного выражения, которое заработало лично у меня:
Список можно расширить, добавляя значения в скобках через знак вертикальной палки, что означает логическое «или».
После составления списка, включаем его в правило. Как создать правило я уже рассказал в первой части статьи. В данном случае отличие будет только в одном пункте:

Вместо поля Content выбираем название нашего списка для блокировки video в поле Layer7 Protocol.
Если у вас настроен firewall на микротике и в нем присутствуют какие-то правила, то текущее правило блокировки нужно правильно разместить в списке, чтобы оно работало. Например, у меня есть материал на тему настройки firewall. Там есть правила:
Текущее правило блокировки списка сайта на основе Layer7 Protocol должно стоять выше этого правила, иначе оно не будет работать. Я не до конца понял, почему, но я провел достаточно много тестов, чтобы убедиться, что его реально надо ставить выше. Ну и, разумеется, оно должно стоять выше правила, разрешающего соединения forward из локальной сети.
В этом правиле блокировки в поле Src.Address вы можете указать конкретный ip пользователя, можете указать всю подсеть, либо вообще оставить поле пустым для запрета выхода на закрытые сайты всему транзитному трафику маршрутизатора, в независимости от его источника.
Вот как у меня выглядит список моих правил на фаерволе с учетом добавленного правила блокировки:

Тут я блокирую доступ c тестового ip адреса. Все остальные правила похожи на те, что я описывал в своей статье по настройке простого фаервола на микротике, ссылку на которую я приводил выше.
Вы можете включить логирование заблокированных соединений с сайтами из списка на вкладке Action самого правила:

Mikrotik будет генерировать подобные логи:

Эти записи вы можете перенаправить на удаленный сервер для логов, чтобы потом анализировать статистику срабатывания правила. Для удобства, эти правила можно разделить по сайтам, по пользователям и т.д. В общем, поле для контроля работы правила обширное.
Запретить социальные сети в mikrotik
Так как мы научились составлять списки для блокировки сайтов, на основе этой информации легко закрыть доступ в социальные сети одним правилом. Для этого как и ранее добавляем регулярное выражение со списком соц сетей:

Дальше создаем правило, как мы это делали выше и выбираем список, который только что добавили:

Выбираем как и ранее адреса источников для блокировки и добавляем правило. Все, этого достаточно для того, чтобы заблокировать социальные сети у пользователей. А включив логи, сможете еще и следить за тем, кто время от времени пытается в них зайти.
Блокировка рекламы средствами mikrotik
С помощью изученного средства по ограничению доступа к сайтам достаточно просто блокировать рекламу. Для примера рассмотрим вариант по блокировке рекламы в Skype. Так как я знаю адреса серверов, куда скайп лезет за рекламой, я могу его заблокировать в mikrotik. У меня есть список:
Это адреса, откуда загружается реклама. Списки эти могут меняться время от времени, нужно периодически проверять и обновлять. Самому подготовить список рекламных адресов для конкретного сервиса можно, к примеру, с помощью настройки собственного dns сервера и включения логирования запросов.
Дальше как обычно создаем regexp выражение для списка адресов:
Добавляем новое правило, подключаем к нему список, созданный ранее и наслаждаемся работой скайпа без рекламы.
Заключение
Материала в интернете по Микротику много. Я сам пока разбирался в данном вопросе перечитал кучу статей. И все они какие-то недоделанные. Либо вопрос слабо раскрыт, либо что-то вообще не работает. Не знаю, в чем причина такой ситуации. Возможно что-то меняется в настройках и информация становится неактуальной. Сходу у меня не заработала фильтрация на основе Layer7 Protocols, пришлось повозиться, покопаться в regexp, в правилах, в их расположениях. Надеюсь мой материал немного исправит данную ситуацию.
Буду рад любым замечаниям к статье, так как сам учусь в процессе написания. В своей работе лично я не использую какие либо ограничения доступа к сайтам, так как считаю это бесполезным занятием. Но многие пользуются, поэтому разбираться в этом вопросе считаю полезным делом.
Напоминаю, что данная статья является частью единого цикла статьей про Mikrotik.
Помогла статья? Есть возможность отблагодарить автора
Рекомендую полезные материалы по схожей тематике:
В этой инструкции вы узнаете, как заблокировать любой сайт в роутере MikroTik, социальную сеть одноклассники, вконтакте и т.п.
Блокирование сайтов по имени
В MikroTik RouterOS, начиная с версии 6.36, появилась возможность указывать DNS-имена сайтов в адрес-листах, а роутер сам определяет их IP-адреса или диапазоны IP-адресов. Поэтому процесс блокировки сайтов с помощью фаервола существенно упростился.
В RouterOS 6.36 и выше откройте меню NewTerminal и выполните следующие команды для блокировки сайтов:
# Добавляем список запрещенных сайтов с названием BlockedSites
/ip firewall address-list add list=BlockedSites address=youtube.com disabled=no
/ip firewall address-list add list=BlockedSites address=vk.com disabled=no
/ip firewall address-list add list=BlockedSites address=ok.ru disabled=no
# Добавляем в фаервол правило блокировки сайтов из списка BlockedSites
/ip firewall filter add chain=forward src-address-list=BlockedSites protocol=tcp action=reject reject-with=tcp-reset comment="BlockedSites" disabled=no
# Перемещаем в фаерволе правило BlockedSites вверх выше остальных правил
/ip firewall filter move [find comment="BlockedSites"] 1
# Перемещаем в фаерволе правило BlockedSites вверх выше остальных правил
/ip firewall filter move [find comment="BlockedSites"] 1
Cписок запрещенных сайтов можно редактировать в меню IP — Firewall на вкладке Address Lists.
Правило блокировки находится в меню IP — Firewall на вкладке Filter Rules.
RouterOS по имени сайта неплохо определяет диапазоны IP-адресов, но не идеально. Мне не удалось с помощью данного способа заблокировать сайты facebook.com и instagram.com, поскольку MikroTik нашел не все необходимые диапазоны IP-адресов. Пришлось вручную найти необходимые IP-адреса и добавить их. Как это сделать, написано ниже.
Блокирование сайтов по IP-адресу
Фаервол позволяет заблокировать сайт по его IP-адресу. Узнать IP-адрес сайта можно в Windows, набрав в консоли команду nslookup имя сайта, например nslookup vk.com.

Чтобы выполнить команду nslookup в маршрутизаторе MikroTik, откройте меню New Terminal и выполните команду-аналог put [:resolve vk.com]

Сайты социальных сетей имеют много серверов с разными IP-адресами и вышеуказанные команды могут не показать адреса всех серверов. Поэтому лучше всего с помощью онлайн сервисов whois узнать, какие сети принадлежат данной социальной сети. Например, Vkontakte Ltd принадлежит сеть 87.240.128.0/18 и 93.186.224.0/22.

В поиске IP-адресов также поможет сервис bgp.he.net

После того, как мы узнали нужные нам IP-адреса, выполните в терминале MikroTik следующие команды:
# Добавляем список запрещенных IP-адресов с названием BlockedSites
/ip firewall address-list add list=BlockedSites address=87.240.143.244 disabled=no
/ip firewall address-list add list=BlockedSites address=87.240.128.0/18 disabled=no
/ip firewall address-list add list=BlockedSites address=93.186.224.0/22 disabled=no
# Добавляем в фаервол правило блокировки IP-адресов из списка BlockedSites
/ip firewall filter add chain=forward src-address-list=BlockedSites protocol=tcp action=reject reject-with=tcp-reset comment="BlockedSites" disabled=no
# Перемещаем в фаерволе правило BlockedSites вверх выше остальных правил
/ip firewall filter move [find comment="BlockedSites"] 1
Блокирование социальных сетей довольно трудоемкий процесс, поскольку социальные сети открывают дубликаты своих сайтов с другими именами и IP адресами серверов. Продвинутые пользователи обходят ограничения еще с помощью сайтов анонимайзеров. Поэтому блокируя доступ к социальным сетям, вам также придется выискивать сайты анонимайзеры и тоже их блокировать.
Блокирование HTTPS сайтов
Сейчас в интернете много сайтов используют защищенный протокол https, который шифрует данные. Поэтому контент таких сайтов очень сложно фильтровать. В MikroTik RouterOS, начиная с версии 6.41.1, появилась возможность блокировать https-сайты (TLS трафик) с помощью расширения TLS SNI, называемого «TLS-HOST»
Например, чтобы заблокировать сайт youtube.com, выполните в терминале MikroTik следующие команды:
# Добавляем в фаервол правило блокировки HTTPS сайта
/ip firewall filter add chain=forward dst-port=443 protocol=tcp tls-host=*.youtube.com action=reject comment="BlockHttpsSite" disabled=no
# Перемещаем в фаерволе правило BlockHttpsSite вверх выше остальных правил
/ip firewall filter move [find comment="BlockHttpsSite"] 1
В параметре tls-host можно указывать имена сайтов, составленных с использованием синтаксиса GLOB. Этот синтаксис используют для создания подстановочных знаков в имени сайта.
Обратите внимание, что если фрейм TLS handshake будет фрагментирован на несколько TCP сегментов (пакетов), то невозможно будет сопоставить имя сайта и заблокировать его.
Блокирование сайтов с помощью статических 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 запросы будут идти через наш роутер.

Блокирование сайтов с помощью Proxy-сервера
Закрыть доступ к сайтам можно также с использованием прозрачного proxy-сервера MikroTik.
Разрешим использование прокси-сервера и настроим его. Для этого откройте New Terminal и выполните следующие команды:
Делаем proxy-сервер прозрачным:
Закрываем доступ к прокси-серверу со стороны интернета:
Настройка некоторых параметров оборудования Mikrotik. Если вы администратор какой либо сети, то вам рано или поздно, придется столкнуться с задачей, когда необходимо закрыть доступ к определенным сайтам. Если это корпоративная сеть, то это скорей всего будут сайты социальных сетей и разного рода развлекательные сайты. Да и дома, порой, возникает потребность защитить детей, от сайтов нежелательного содержания. Как это сделать в Mikrotik RouterOS? Существует несколько способов, самый простой из них, создать запрещающее правило в Firewall с соответствующим адресом сайта.
К примеру, нам нужно запретить доступ, к сайту odnoklassniki.ru.
Для этого, в утилите Winbox мы заходим в раздел Firewall, и на вкладке Filter Rules добавляем новое правило, нажатием кнопки “+”.
На вкладке General, в параметре Chain выбираем значение forward, в параметре Protocol выбираем значение 6(tcp), Dst. Port, мы пишем 80, а в In Interface ставим “!” возле значения и выбираем наш порт, к которому подключен кабель провайдера, например eather1.

Далее, переходим на вкладку Adwenced, где в поле Content, вписываем название нашего сайта (желательно без www).

Потом на вкладке Action в параметре Action, выбираем значение drop, чтобы запретить этот сайт.
Сохраняем наше правило кнопкой Ok

Теперь нам нужно только поднять это правило выше всех разрешающих правил. Поднимаем его на самый верх.

Если это правило включено, не один компьютер в вашей сети, не сможет посещать сайт Одноклассники.
Но ведь таких сайтов, может быть и 2 и даже 10, а то и 50! Как же быть в таком случае? Ведь 20-30 правил создавать не будешь. так как это создаст большую нагрузку на роутер, и может сказаться на качестве работы всей сети. Для этого мы воспользуемся более сложным, но не менее эффективным способом.
Сперва, мы должны узнать IP адрес или адреса сайта, который мы хотим запретить. Открываем на нашем компьютере консоль, и даем команду nslookup site.com, например для Одноклассников

Мы видим что IP адрес этого сайта 217.20.147.94.
Теперь открываем раздел Firewall, и заходим на вкладку Address List, где кнопкой “+”, добавляем новый адрес. В поле Name мы вписываем название нового списка, например, BlockedSites, а в поле адрес, вписываем адрес этого сайта. И сохраняем кнопкой Ok.

Теперь, таким же способом, определяем IP следующего сайта, скажем — Вконтакте

Но на этот раз, мы видим, что адресов, гораздо больше. И нам придется их всех по одному добавить в наш список.
Совет для продвинутых пользователей: не обязательно вводить все адреса по одному. легко выяснить с помощью whois сервиса, что компании Vkontakte Ltd принадлежит сеть 87.240.128.0/18 и забанить ее всю, как и сеть 93.186.224.0/22.
Таким образом, мы имеем список всех адресов сайтов, которые мы хотим запретить. И список этот у нас называется BlockedSites.

Теперь мы просто создаем правило в котором мы запрещаем весь этот список.
Для этого, как и в первом случае, в разделе Firewall, переходим на вкладку Filter Rules и добавляем новое правило, нажатием кнопки “+”.
На вкладке General, в параметре Chain выбираем значение forward, в параметре Protocol выбираем значение 6(tcp), Dst. Port, мы пишем 80, а в In Interface ставим “!” возле значения и выбираем наш порт, к которому подключен кабель провайдера, например eather1.

Переходим на вкладку Adwenced, где в поле Dst. Address List, выбираем в качестве параметра, созданный нами список BlockedSites.

И по аналогии с первым вариантом, на вкладке Action в параметре Action, выбираем значение drop, чтобы запретить эти сайты.
Сохраняем наше правило кнопкой Ok.

И поднимаем наше правило в самый верх списка.

Теперь, чтобы запретить любой другой сайт, нам достаточно просто добавить его адрес или адреса, в список BlockedSites на вкладке Address List.




