Найти тему

Универсальный способ что-либо заблокировать в организации (MikroTik)

Добрейшего, уважаемые! На моем канале уже было множество статей о том как что-нибудь заблокировать внутри организации или, наоборот, как что-то заблокированное "приоткрыть". Все они были, в основном, строго избирательные, например, TeamViewer или Tor с YouTube'ом... Но сейчас я бы хотел рассмотреть более универсальный метод, который с небольшими правками можно распространить на любую задачу, которая перед вами возникнет. Весь вопрос будет касаться лишь правильного определения источника и пункта назначения. Это не призыв к действию и я не утверждаю, что метод всем хорош и надо им пользоваться - это лишь мой взгляд на проблему настройки и мой личный опыт, узнав который, вы, возможно, найдете свой или поймете как действовать лично вам, не повторяя моих ошибок. В любом случае, надеюсь моя статья натолкнет вас на правильные мысли, а далее как у классика: я мыслю, следовательно, я существую! Приятного чтения!

Я сетевой инженер в большой компании, пишу статьи про сетевое оборудование, сетевые технологии и околоАЙТИшные темы. Рассматриваю возможности разного оборудования, вместе с вами продолжаю изучать разный функционал и привожу конкретные примеры того, что сделано и как сделал я. Это не призыв к действию и не точный мануал - в моих статьях бывают ошибки, которые я всегда готов обсудить в комментариях. Прошу следовать правилам платформы, не нарушать законодательство РФ, не оскорблять других людей и все будет норм!
Моя тележка - добро пожаловать!

Итак, не было бы счастья, да несчастье помогло, как говорится... Завелся у нас в компании некий человек-меломан, назовем его так. Занимался тем, что разбавлял гулким басом тишину мерного постукивания людей по их клавиатурам. И, в общем-то, кардинально не особенно всем и досаждал, если бы не одно но: страшно любил скакать по совершенно разным направлениям музыки. То он полдня слушал "блатняк" и "Лепса", потом откуда-то всплывали "Руки Вверх", а далее мог приправить каким-нибудь техно. И все это миксовалось со страшной силой... Что там творилось в его голове - не знаю. Но не взлюбили его абсолютно все: и "ваши", и "наши".

Не буду вдаваться в подробности того, как его вычисляли, потому что вся музыка прекращалась, как только руководство решало пройтись по "этажу трудяг". Короче, "писец - очень трусливый зверек, который чуть что, прячется в норку, чем очень раздражает норку, которая, издали завидев писца, сама пытается где-нибудь спрятаться"... Но в итоге выяснили, все-таки, айпи этого коллеги и сразу добавили в резервирование на дхцп, чтобы не сбежал внезапно посреди операции. Ну и далее по накатанному сценарию...

К сожалению для нас, обрубить инет ему полностью было невозможно - т.к. работа этой "творческой личности" была с ним связана чуть ли не напрямую. И колонки он выпросил в свое время ради конференций/показов/демонстраций и чего-то там еще из этих современных веяний альтернативно-одаренных... Ну и понеслось: выяснения и сбор статистики "откуда играет". Вначале это был ютуб.

  • /ip firewall filter add action=add-dst-to-address-list address-list=youtube address-list-timeout=none-dynamic chain=forward comment=block_youtube dst-port=443 protocol=tcp tls-host=*youtube*
  • /ip firewall filter add action=reject chain=forward dst-address-list=youtube reject-with=icmp-network-unreachable src-address=10.10.10.10

Тут мы создаем динамический список адресов в Address Lists по принципу: работает по 443 порту (HTTPS) и в TLS-заголовках встречается слово *youtube*. Данный список сбросится при перезагрузке роутера. И запрещаем внутреннему адресу, для примера, "10.10.10.10" доступ к этим сайтам (точнее к адресам, которые попали в этот список). Во многом этого будет достаточно и, если блочить простенькие ресурсы, то совсем достаточно, главное сдвинуть их в самый верх и сделать 1 и 2 в очереди выполнения. Но не для ютуб, фб и пр. "мега-живности", которые имеют сотни, если не тысячи внешних адресов. Как быть с ними далее.

  • /ip firewall layer7-protocol add name=youtube regexp="^.+(youtube).*\$"
  • /ip firewall mangle add action=mark-packet chain=prerouting layer7-protocol=youtube new-packet-mark=youtube_packet passthrough=yes src-address=10.10.10.10
  • /ip firewall filter add action=reject chain=forward packet-mark=youtube_packet reject-with=icmp-network-unreachable src-address=10.10.10.10

Здесь, по-порядку, мы создаем регулярное выражение для L7 (7ой уровень протоколов модели OSI), который будет отслеживать появление любого упоминания слова *youtube* в пакетах, которые проходят через наш роутер. Далее создаем "маркер", который будет маркировать пакеты от адреса 10.10.10.10, подпавшие под нашу регулярку. Ну и последнее - создаем правило фильтрующее промаркированный трафик. Это дополнительное правило фильтрации к первому и разместить его лучше под номером 3 в списке "Filter Rules". Регулярка и мангл неважно под каким номером идут.

Тут так же стоит оговориться, что на некоторых микротиках возникает проблема с проседанием скорости работы в интернет при использовании Mangle'ов - он начинает резать исходящую скорость. Замечено на моделях 2011 и 3011, на более старших и CCR - еще не сталкивался. Поэтому если заметите просадку в скорости - просто отключите правило в разделе Mangle меню IP -> Firewall.

Во-от... когда все правила были сделаны и список начал пополняться внешними адресами ютуба, музыка у нашего нарушителя спокойствия замолкла. Временно, как выяснилось.

-2

Далее он вспомнил о яндексе и его сервисах музыки... А мне пришлось добавить еще правил.

  • /ip firewall filter add action=add-dst-to-address-list address-list=block_music address-list-timeout=none-dynamic chain=forward comment=block_music dst-port=443 protocol=tcp tls-host=*music*
  • /ip firewall filter add action=reject chain=forward dst-address-list=block_music reject-with=icmp-network-unreachable src-address=10.10.10.10

Данные правила повторяют вышерассмотренные 1 и 2, но теперь вместо *youtube* мы будем искать в заголовках слово *music* и добавлять эти адреса в новый список block_music. Т.о. разместить эти 2 правила надо под номерами 4 и 5. Я, если честно, еще не понял зачем вынес эти правила в отдельные списки, но думается мне, в этом был какой-то смысл, который я забыл... Надо вечером не забыть витаминок купить для памяти...

-3

Так вот, достаточно быстро музыка закончилась для нашего героя и на сайте яндекс.музыки. А мы все погрузились в медитацию и созерцанию в себя под успокаивающее клацание по клавиатуре. И ничто уже из-вне не отвлекало нас от осознания себя в этом мире... Ну, кроме того, что я решил написать данную статью. Вот сейчас уже закончу и обратно в нирвану...

На всякий случай, выложу еще один набор строчек, который оставит любого пользователя без выхода в интернет, но при этом все внутренние ресурсы, включая подсети, которые приходят через этот же роутер впнами - будут работать. Его можно использовать не только во вред бедному пользователю, но и, например, ограничив какой-нибудь сервер, чтобы обновы не качал... Вот.

  • /ip firewall filter add action=reject chain=forward comment=Without_internet disabled=yes dst-address-list=!local_list reject-with=icmp-network-unreachable src-address=10.10.10.10
  • /ip firewall address-list add address=192.168.0.0/16 comment=Local_networks list=local_list
  • /ip firewall address-list add address=172.16.0.0/12 list=local_list
  • /ip firewall address-list add address=100.64.0.0/10 list=local_list
  • /ip firewall address-list add address=10.0.0.0/8 list=local_list

В данном примере мы создаем одно правило, которое запрещает все внешние адреса и диапазоны, кроме внутренних подсетей, которые мы запишем в список local_list. Если кому-то понадобится когда-либо - прошу.

-4

На этом, наверное, я закончу данную статью. Хотел сначала описать механизм редиректа, когда пользователь вводит один сайт, а попадает на другой - внутренний, где говорится, что данный ресурс заблокирован, но там настроек на роутере мало и дольше описывать, как заставить браузер не блокировать подменную страницу, потому что у них сертификаты не совпадают... Так что, когда-нибудь в другой раз, под другое настроение...

-5

Спасибо за прочтение, надеюсь, было интересно и познавательно. Как обычно: прошу Вас поддержать статью лайком, автора канала подпиской, а друг друга можно поддержать в комментариях, где можно выложить вашу забавную историю на работе. Спасибо и удачи!

PS Все описанные события в статье вымышленные, любые совпадения в реальности случайны, а автор вообще никогда и нигде не работал, только за лайки и живет...