Mikrotik
September 7

MikroTik: разруливаем траффик с помощью Layer 7

В Интернете можно найти множество информации о том как с помощью Layer 7 Protocol на MikroTik заблокировать доступ к каким-либо ресурсам. Layer 7 Protocol в MikroTik прекрасный инструмент для сбора данных в потоках с заданными шаблонами на основе регулярных выражений. Блокировка это один из процессов, но что если необходимо не блокировать, а например направить траффик через другой шлюз.

При использовании Layer 7 Protocol следует учитывать, что большое количество подключений значительно увеличивает нагрузку на память и процессор. Что касается производительности Layer 7 Protocol, то она самая минимальная.

Согласно документации MikroTik общий принцип работы Layer 7 Protocol следующий:

  • Layer 7 Protocol собирает первые 10 пакетов соединения или первые 2 Кб соединения и выполняет поиск шаблона в собранных данных. Если шаблон не найден в собранных данных, дальнейшая проверка сопоставления прекращается. Выделенная память освобождается и протокол считается неизвестным.

Раздел настройки Layer 7 находится в /ip firewall layer7-protocol. В этом разделе создаются шаблоны регулярных выражений. К примеру в случае если необходимо найти пакеты направляющиеся к видеохостингу Youtube, то добавляем следующее регулярное выражение:

/ip firewall layer7-protocol
add comment=Youtube name=Youtube regexp="^.+(youtube.com|youtu.be|googlevideo.com).*\quot;

Далее необходимо создать правило в Mangle, которое будет анализировать траффик на предмет запросов к ресурсам видеохостинга Youtube. Если такой траффик будет обнаружен, то в качестве действия укажем чтобы IP адреса назначения были добавлены в Address Lists.

/ip firewall mangle
add action=add-dst-to-address-list address-list=Youtube address-list-timeout=6h chain=prerouting comment=Youtube in-interface=bridge layer7-protocol=Youtube src-address=192.168.88.0/24

Это правило Mangle при совпадении траффика с регулярным выражением описанным в Youtube, исходящим с адресов 192.168.88.0/24 локальной сети и входящем на интерфейс bridge, добавляет IP адреса назначения в список Address Lists под названием Youtube. Так же следует обратить внимание, что если к этими IP адресам не будет запросов в течении 6-ти часов, то они из списка будут удалены, а иначе это время будет сбрасываться до 6-ти часов при новом запросе к IP адресу из этого списка. Для проверки, что правило Mangle срабатывает корректно необходимо ввести команду:

/ip/firewall/mangle/print stats where comment=Youtube

Счетчики BYTES и PACKETS должны увеличиваться. В Address Lists с названием Youtube должны появляться IP адреса с timeout меньше 6-ти часов. Команда для просмотра списка IP адресов, попавших в Address List следующая:

/ip/firewall/address-list/print where list=Youtube

Таким образом MikroTik уже может понимать, что траффик направляется до видеохостинга Youtube и добавлять IP адреса в список. Далее необходимо этот траффик направить по другому маршруту.

Прежде необходимо прописать маршрут на MikroTik, куда будет перенаправляться траффик до Youtube. В приведенной ниже команде прописан маршрут до сети 0.0.0.0/0 через интерфейс wg0 с дистанцией 10 и помещен в таблицу vpn. Т.е. это еще один маршрут по умолчанию, но с низким приоритетом который находится в таблице vpn. Сделано это так, потому что по этому маршруту будет ходить не весь траффик.

/ip route
add disabled=no distance=10 dst-address=0.0.0.0/0 gateway=wg0 routing-table=vpn scope=30 suppress-hw-offload=no target-scope=10

Помимо дополнительного маршрута так же еще надо создать правило для маршрутизации.

/routing rule
add action=lookup comment="VPN" disabled=no routing-mark=vpn src-address=192.168.88.0/24 table=vpn

Это правило выполняет следующее действие - все пакеты с маршрутной меткой vpn (routing-mark=vpn) исходящие с адресов 192.168.88.0/24 должны использовать таблицу маршрутизации vpn.

Теперь необходимо прописать правило, которое будет ставить маршрутную метку vpn к пакетам направляющимся к IP адресам из Address Lists с названием Youtube. Это правило должно быть в Mangle в цепочке prerouting. В правилах маркируется (action=mark-routing) маршрутной меткой vpn (new-routing-mark=vpn) траффик идущий с адресов 192.168.88.0/24 (src-address=192.168.88.0/24) на IP адреса из списка Youtube (dst-address-list=Youtube) на порты 80,443 (dst-port=80,443) входящий на интерфейс bridge (in-interface=bridge). Создать рекомендуется два правила - одно для протокола TCP, второе для UDP.

/ip firewall mangle
add action=mark-routing chain=prerouting comment=VPN dst-address-list=Youtube dst-port=80,443 in-interface=bridge new-routing-mark=vpn passthrough=yes protocol=tcp src-address=192.168.88.0/24
add action=mark-routing chain=prerouting comment=VPN dst-address-list=Youtube dst-port=80,443 in-interface=bridge new-routing-mark=vpn passthrough=yes protocol=udp src-address=192.168.88.0/24

И команда проверки срабатывания правила:

/ip/firewall/mangle/print stats where comment=VPN