Как быстро закрыть доступ к сайту
Начнем с самого простого. У нас есть роутер Mikrotik, утилита winbox и желание конкретному пользователю установить запрет на посещение определенного сайта. В моем примере это будет запрет на доступ к сайту одноклассники – ok.ru. Подключаемся к роутеру и идем в раздел IP -> Firewall, открываем вкладку Address List:
Нажимаем на + и создаем список для блокировки сайта:
Мы заполнили 2 поля:
- Name – имя списка. Может быть любым.
- Address – адрес сайта. Параметр может принимать значения как ip адреса, так и доменного имени.
После добавления списка с адресом в виде доменного имени, происходит автоматический резолв имени в ip адрес. После этого создаются динамические записи в списке уже из конкретных IP адресов. Эти IP адреса берутся из записей типа A в DNS.
У сайта может быть несколько разных доменных имен. Они могут резолвиться в разные IP адреса, так что имеет смысл добавить в список все домены, которые вам известны.
Я добавил на всякий случай адрес odnoklassniki.ru, но по факту в этом нет смысла, так как он резолвится в те же самые ip адреса, что и ok.ru. Новых динамических записей не добавилось.
Теперь настраиваем правило блокировки с использованием созданного ранее списка. Для этого идем на вкладку Filter Rules и добавляем новое правило.
- Chain – forward. Цепочка для транзитных пакетов, которые идут через роутер. В том числе все, что проходит из локальной сети.
- Src. Address – 192.168.13.16. IP ардес, для которого будет работать блокировка. Если хотите заблокировать сайт для всех, можно просто не заполнять это поле. Вместо ip адреса можно указать разом всю подсеть – 192.168.13.0/24.
- Protocol – tcp. Если не указывать протокол, то тоже будет работать блокировка, но чем более конкретно указано правило, тем лучше в общем случае.
Переходим на вкладку Advanced и указываем там список odnoklassniki, который создали ранее.
Далее открываем вкладку Action.
Тут все просто – отбрасываем указанные пакеты, отправляя в ответ ошибку icmp – icmp-network-unreachable. На время отладки можете поставить галочку log, чтобы в логе видеть все сработанные правила с блокировкой социальной сети.
Для того, чтобы правило блокировки работало, его необходимо разместить в списке выше правила, разрешающего трафик из локальной сети в интернет. У меня примерно так получилось.
На этом основная настройка закончена. В данный момент правило по фильтрации сайта уже работает. Мы с помощью стандартных средств mikrotik смогли заблокировать ok.ru. Это нетрудно проверить на клиенте. При попытке открыть адрес сайта популярной соц. сети он получит следующее сообщение в браузере.
В данном случае мы в ручном режиме сделали блокировку сайта конкретному пользователю. Если у вас таких сайтов и пользователей много, процесс надо по-возможности автоматизировать.
Черный список сайтов для фильтрации
Для того, чтобы не создавать отдельные правила для каждого сайта, можно просто создать общий список блокировки и добавлять туда домены. Покажу на примере популярных видеохостингов. Настроим блокировку одним правилом youtube.com, vimeo.com, rutube.ru, ivi.ru, video.mail.ru. Для этого идем в раздел IP -> Firewall -> Address List и добавляем их все туда. Получился такой статический список.
На основе этого списка сформировался набор динамических записей с ip адресами добавленных доменов.
Дальше точно так же создаем правило блокировки в firewall, как мы это сделали в предыдущем примере с одним сайтом, только указываем наш список видеохостингов. В данном случае принципиальной разницы нет, один у нас сайт или список.
Когда будете тестировать блокировку, обратите внимание, есть ли у вас выше в firewall правила для уже установленных соединений. Во время теста может так получиться, что правило блокировки не будет работать из-за того, что у вас соединения уже установлены и не доходят до блокирующего правила.
Запретить социальные сети в mikrotik
Сейчас на примере списка социальных сетей разберу еще один подход к блокировке сайтов в mikrotik. Он будет основываться не на резолве доменных имен в ip адреса, а на анализе содержимого пакетов с помощью Layer7 Protocol. Его преимущество именно в том, что он анализирует содержимое пакетов. Теоретически, это более надежный способ блокировки, так как ip адреса сайтов могут меняться. В случае статических правил с ip адресами это может приводить к тому, что в какой-то момент они станут не актуальны. С эти тоже можно бороться, обновляя списки, но это отдельная тема.
Я расскажу, как использовать Layer7 Protocol в микротике для блокировки социальных сетей просто для примера, чтобы вы знали, что есть такой механизм и его можно использовать.
Для этого создаем правило Layer7 Protocol в соответствующем разделе Winbox IP -> Firewall -> Layer7 Protocols для блокировки социальной сети facebook.
/ip firewall layer7-protocol add name=facebook regexp="^.+(facebook).*\$"
Теперь нам нужно промаркировать все соединения и пакеты в dns запросах, где будет совпадение с созданным ранее правилом. Идем во вкладку Mangle и добавляем правило маркировки соединений.
Чтобы не перепутать какие-то параметры, можете просто ввести в консоли команду и проверить созданное правило.
/ip firewall mangle add action=mark-connection chain=prerouting protocol=udp dst-port=53 connection-mark=no-mark layer7-protocol=facebook new-connection-mark=facebook_conn passthrough=yes
И еще одно правило для маркировки пакетов на основе промаркированного выше соединения.
add action=mark-packet chain=prerouting connection-mark=facebook_conn new-packet-mark=facebook_packet
Пакеты промаркировали. Теперь создаем 2 блокирующих правила для цепочек input и forward. Для этого идем во вкладку Filter Rules и добавляем 2 правила. Я не буду показывать картинки, их и так уже полно в статье. Правила простые, введите их в консоль сами.
add action=drop chain=forward packet-mark=facebook_packet add action=drop chain=input packet-mark=facebook_packet
Далее важно эти правила правильно расположить в списке правил. Они обязательно должны быть выше разрешающих правил для цепочек input и forward. Примерно так.
add action=drop chain=input comment="block facebook" log=yes packet-mark=facebook_packet add action=accept chain=input comment="Local Input" in-interface=!ether2-wan src-address=192.168.13.0/24 add action=drop chain=forward comment="block facebook" log=yes packet-mark=facebook_packet add action=accept chain=forward comment="accept forward from local to internet" in-interface=!ether2-wan
На время отладки я включаю логирование правил, обнуляю счетчики и начинаю тестировать. Если что-то пойдет не так, проверьте так же счетчики в разделе Mangle. Если там будет пусто, значит ошибка либо в правиле Layer7 Protocols, либо в самих правилах маркировки. Я, когда тестировал, неправильно расположил правила в Firewall. В итоге в правилах маркировки счетчики росли, пакеты маркировались, но блокировки не было. Это было видно по нулевым счетчикам в Firewall. После того, как правильно расположил правила, блокировка социальной сети facebook заработала как надо.
Объясняю логику работы данной блокировки. Мы маркируем все соединения к dns серверу, удовлетворяющие указанному regex в правиле Layer7. Далее маркируем все пакеты из этого соединения. Потом в фаерволе блокируем эти соединения. Если клиент использует DNS сервер на микротике, запросы блокируются правилом цепочки input, если используется сторонний, то в блок пакеты попадают по правилу цепочки forward. В итоге у клиента не работает резолвинг доменного имени в ip и он не может попасть на сайт через браузер. Конечно, при желании, эту блокировку соцсети можно обойти. Для наибольшей эффективности надо комбинировать оба предложенных в статье способа.
Для тех, кому интересно, почему я описал именно такой способ блокирования нежелательных сайтов, поясню. Подсмотрел его в недавно переведенной мной презентации от сотрудника Mikrotik, где он дает рекомендации по настройке. Я просто попробовал его реализовать и все получилось. Решил его добавить в эту статью. Все вопросы и претензии по реализации прошу отправлять автору метода, не мне 🙂 Мопед, как говорится, не мой.
Блокировка рекламы средствами mikrotik
С помощью изученного средства по ограничению доступа к сайтам достаточно просто блокировать любую рекламу. Для примера рассмотрим вариант по блокировке рекламы в Skype. Так как я знаю адреса серверов, куда скайп лезет за рекламой, я могу его заблокировать в mikrotik. У меня есть список:
rad.msn.com apps.skype.com vortex-win.data.microsoft.com settings-win.data.microsoft.com
Это адреса, откуда загружается реклама. Списки эти могут меняться время от времени, нужно периодически проверять и обновлять. Самому подготовить список рекламных адресов для конкретного сервиса можно, к примеру, с помощью настройки собственного dns сервера и включения логирования запросов.
Дальше как обычно создаем regexp выражение для списка адресов:
^.+(rad.msn.com|apps.skype.com|vortex-win.data.microsoft.com|settings-win.data.microsoft.com).*$
Либо делаете список с dns именами, как я показал в самом начале, если не хотите использовать Layer7 для этого. Добавляем новое правило блокировки в firewall, подключаем к нему список, созданный ранее и наслаждаемся работой скайпа без рекламы.
Свежие комментарии