Настройка фильтрации трафика на MikroTik. Часть 3

Продолжение статьи. Использование собственных цепочек обработки трафика.

Комментариев: 3Просмотров: 48482
26мая 2014
все статьи

Использование собственных цепочек обработки трафика (Custom Chain)

В прошлых частях статьи мы ознакомились с базовыми настройками файрволла, из которых мы, в том числе, узнали, что межсетевой экран маршрутизатора последовательно проверяет пакет на соответствие правилам фильтрации сверху-вниз. Проверка прекращается в тот момент, когда пакет будет либо пропущен на следующий этап обработки трафика (Action=Accept), либо прохождение пакета будет запрещено (Action=reject,drop,tarpit).

Таким образом, если мы представим себе файрволл, состоящий из 25 правил, то выглядеть это будет следующим образом:

Файрвол из 25 правил

При этом, если пакет соответствует только правилу номер 25, он все равно будет проверен на соответствие правилам с номера 1 по номер 24, на что будут потрачены ресурсы маршрутизатора.

Ситуация осложняется тем, что есть «очень дорогие», с точки зрения процессорного времени, правила фильтрации. В этих случаях приходит на выручку возможность писать собственные цепочки (Chain) обработки правила.

Если вы когда-либо занимались программированием, то собственная цепочка очень похожа на процедуру, вызов которой осуществляется указанием в поле Action команды Jump с именем цепочки, возврат же происходит на следующее правило за вызовом цепочки, по окончании обработки трафика в цепочке, либо если в каком-либо правиле собственной цепочки было использовано Action=Return, что прервало дальнейшую обработку цепочки.

Графически это можно
отобразить так

Фильтрация трафика Микротик

При этом надо обратить внимание, что пакет попадет в цепочку Custom-Chain-1, только если он будет соответствовать условиям, обозначенным в правиле 3a, а в цепочку Custom-Chain-2, только если он соответствует правилу 15a.

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

Так же хочется обратить внимание что одну и ту же цепочку можно вызывать из разных цепочек (в том числе и своих) фильтрации трафика. Например, вы можете написать цепочку с защитой ssh-сервера от подбора пароля и обращаться к ней как из цепочки input (подбор пароля на маршрутизатор), так и из цепочки forward, защищая один или несколько внутренних серверов.

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

Создаем демилитаризо-
ванную зону (DMZ)

Теперь, после небольшого теоретического отступления про собственные цепочки, которые мы с вами будем использовать, мы переходим к обещанному созданию DMZ. Исходя из второй части статьи, у нас есть 3 интерфейса:

  • WAN (Выход в интернет);
  • DMZ (Демилитаризованная зона);
  • LAN (Локальная сеть).

Разделим их по уровню доверия.

LAN – самая доверенная сеть. Из нее можно ходить как в WAN, так и в DMZ без ограничений. Чтобы из других сетей попасть в LAN, требуется отдельное правило на файрволле.

DMZ – сеть с промежуточным уровнем доверия. Из нее можно ходить в WAN, однако в LAN без специального разрешения доступ закрыт.

WAN – самая небезопасная сеть. С нее по умолчанию закрыт доступ как в LAN, так и в DMZ.

Графически это можно представить так:

Создаем демилитаризованную зону (DMZ)

Так же предположим, что в DMZ у нас есть www-сервер с адресом 10.10.10.100, который должен быть доступен из WAN (Вопросы настройки NAT в этой статье не рассматриваются). Так же из DMZ разрешено обращение на порт 22(ssh) хоста 192.168.88.200 расположенного в LAN.

 

Настройка маршрутизатора

Так как в этой части статьи мы работаем с трафиком, идущим через маршрутизатор, основной цепочкой (Chain) для такого трафика является forward.

Сначала разрешим все соединения с состояниями соединения равными established и related, и запретим с состоянием соединения равным invalid, независимо от интерфейсов. Так как мы уже знаем, что фильтровать трафик логично только на новых соединениях (connection-state=new).

Кроме того, наибольшее количество пакетов как раз относятся к уже установленным соединениям, и указание этого правила в начале списка несколько увеличит производительность.

Вам помогла эта статья?

Приглашаем пройти обучение в нашем тренинг-центре и научиться настраивать оборудование MikroTik на профессиональном уровне! Узнайте расписание ближайших курсов и бронируйте место!

ip firewall filter
add action=accept chain=forward connection-state=established disabled=no
add action=accept chain=forward connection-state=related disabled=no
add action=drop chain=forward connection-state=invalid disabled=no
 

Теперь создадим необходимые нам цепочки правил.

LAN-WAN

В этой цепочке мы разрешаем любой трафик от LAN интерфейса к WAN-интерфейсу. При необходимости можно добавить запрещающие правила. (Обратите внимание, что мы не указываем интерфейсы. Они будут указаны в цепочке forward, при переходе на свои цепочки).

/ip firewall filter
add action=accept chain=LAN-WAN disabled=no

WAN-LAN

А здесь мы, наоборот, запрещаем весь трафик идущий из интерфейса WAN в локальную сеть. Ранее установленные соединения обрабатывается правилом, их разрешающим, заданным ранее.

/ip firewall filter
add action=drop chain=WAN-LAN disabled=no

LAN-DMZ

 
/ip firewall filter
add action=accept chain=LAN-DMZ disabled=no

DMZ-LAN

Здесь нужно пропустить 22 порт на хост 192.168.88.200

/ip firewall filter
add action=accept chain=DMZ-LAN disabled=no dst-address=192.168.88.200 dst-port=22 protocol=tcp
add action=drop chain=DMZ-LAN disabled=no

DMZ-WAN

 
/ip firewall filter
add action=accept chain=DMZ-WAN disabled=no

WAN-DMZ

Здесь нам нужно разрешить обращение на хост 10.10.10.100 на порт 80 (www).

/ip firewall filter
add action=accept chain=WAN-DMZ disabled=no dst-address=10.10.10.100 dst-port=80 protocol=tcp
add action=drop chain=WAN-DMZ disabled=no
 

На этом создание собственных цепочек закончено. Осталось к ним обратиться.

Создаем группу правил в основной цепочке forward. В ней мы, в зависимости от интерфейсов, будем отправлять пакет в подходящую цепочку:

/ip firewall filter
add action=jump chain=forward disabled=no in-interface=WAN jump-target=WAN-LAN out-interface=LAN
add action=jump chain=forward disabled=no in-interface=LAN jump-target=LAN-WAN out-interface=WAN
add action=jump chain=forward disabled=no in-interface=DMZ jump-target=DMZ-LAN out-interface=LAN
add action=jump chain=forward disabled=no in-interface=LAN jump-target=LAN-DMZ out-interface=DMZ
add action=jump chain=forward disabled=no in-interface=WAN jump-target=WAN-DMZ out-interface=DMZ
add action=jump chain=forward disabled=no in-interface=DMZ jump-target=DMZ-WAN out-interface=WAN
 

Для удобства, я поднял эти правила в файрволле повыше, сразу за первыми созданными правилами.

Должно получиться следующее:

Настройка фильтрации трафика на MikroTik

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

Обратите внимание, что фильтрацию трафика теперь логично проводить в соответствующей цепочке, что значительно упрощает конфигурирование, особенно в случае большого количества правил.

Общий код файрволла:

/ip firewall filter
add action=accept chain=forward connection-state=established disabled=no
add action=accept chain=forward connection-state=related disabled=no
add action=drop chain=forward connection-state=invalid disabled=no
add action=jump chain=forward disabled=no in-interface=WAN jump-target=WAN-LAN out-interface=LAN
add action=jump chain=forward disabled=no in-interface=LAN jump-target=LAN-WAN out-interface=WAN
add action=jump chain=forward disabled=no in-interface=DMZ jump-target=DMZ-LAN out-interface=LAN
add action=jump chain=forward disabled=no in-interface=LAN jump-target=LAN-DMZ out-interface=DMZ
add action=jump chain=forward disabled=no in-interface=WAN jump-target=WAN-DMZ out-interface=DMZ
add action=jump chain=forward disabled=no in-interface=DMZ jump-target=DMZ-WAN out-interface=WAN
add action=accept chain=LAN-WAN disabled=no
add action=drop chain=WAN-LAN disabled=no
add action=accept chain=LAN-DMZ disabled=no
add action=accept chain=DMZ-LAN disabled=no dst-address=192.168.88.200 dst-port=22 protocol=tcp
add action=drop chain=DMZ-LAN disabled=no
add action=accept chain=DMZ-WAN disabled=no
add action=accept chain=WAN-DMZ disabled=no dst-address=10.10.10.100 dst-port=80 protocol=tcp
add action=drop chain=WAN-DMZ disabled=no
 

Таким образом, мы выполнили базовую настройку Firewall MikroTik и научились работать с собственными цепочками фильтрации трафика.

Технический директор Илья Князев (MTCNA, MTCWE, MTCTCE, MTCRE, MTCINE)

поделиться материалом:

Читайте также

комментарии — 3
Георгий06 октября 2017 в 16:30
На практике оказывается более удобным еще чуть чуть оптимизировать.
Все три сети LAN-WAN-DMZ загоняются в адрес лист "LAN-WAN-DMZ Net" и в фильтре пишется ровно одно правило jump, в котором указано, что весь трафик с Src.Addr.list "LAN-WAN-DMZ Net" to Dst.Addr.List "LAN-WAN-DMZ Net" отправляются обрабатываться в другую цепочку, и на выходе у нас 1 правило, а не 6. И самое приятное, что такое правило так же остается ровно одним даже если сетей будет 10+.
Gocha02 марта 2021 в 08:53
На понимаю зачем создавать "LAN-WAN-DMZ Net" если вы все это все ровно собираетесь загонять в одно правило, суть перенаправления трафика в зависимости от направления в том и состоит чтобы обрабатывать меньше правил в одной цепочке
Aleksandr18 сентября 2018 в 10:38
А нельзя чуть подробнее расписать как работает ваш вариант? Я не очень понял как осуществлять разную фильтрация для разных пар входного и выходного интерфейсов.