Для базового понимания работы файрвола, необходимо ознакомиться с понятиями цепочки (chain), состояния соединения (connection state), условия и действия (action).
Цепочки (chain)
При фильтрации трафик, в зависимости от своего предназначения попадает в одну из цепочек (chain) обработки трафика. В фильтре предопределены три основные цепочки:
- input входящий трафик предназначенный для маршрутизатора. Например, когда вы подключаетесь к маршрутизатору при помощи приложения winbox, трафик как раз попадает в эту цепочку.
- output Исходящий трафик. Трафик, создаваемый самим маршрутизатором. Например, если вы выполните команду ping непосредственно с самого маршрутизатора, трафик попадет в эту цепочку.
- forward Трафик, идущий через маршрутизатор. Например, если компьютер из локальной сети, установил соединение с внешним сайтом, данный трафик попадает в цепочку forward.
Таким образом мы видим, что для защиты самого маршрутизатора необходимо использовать цепочку input, а для защиты и фильтрации трафика между сетями необходимо использовать цепочку forward.
Кроме того, администратор имеет возможность создавать свои собственные цепочки обработки трафика, к которым можно обращаться из основных цепочек. Данная возможность будет рассмотрена в дальнейшем.
Состояние соединения (connection state)
Каждое из сетевых соединений MikroTik относит к одному из 4 состояний:
- New – Новое соединение. Пакет, открывающий новое соединение, никак не связанное с уже имеющимися сетевыми соединениями, обрабатываемыми в данный момент маршрутизатором.
- Established – Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
- Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
- Invalid – Маршрутизатор не может соотнести пакет ни с одним из вышеперечисленных состояний соединения.
Исходя из вышеизложенного, мы видим, что хорошим вариантом настройки фильтрации пакетов будет следующий набор условий:
- Обрабатывать новые соединения (connection state = new), принимая решение об пропуске или блокировке трафика.
- Всегда пропускать соединения в состоянии established и related, так как решение о пропуске этого трафика было принято на этапе обработки нового соединения.
- Всегда блокировать трафик, для которого состояние соединения равно invalid, потому что этот трафик не относится ни к одному из соединений и фактически является паразитным.
Условие
При прохождении пакета через фильтр, маршрутизатор последовательно проверяет соответствие пакета заданным условиям, начиная от правила, расположенного первым. и последовательно проверяя пакет на соответствие правилам номер два, три и так далее, пока не произойдет одно из двух событий:
- Пакет будет соответствовать заданному условию. При этом сработает соответствующее правило, в котором это условие было задано, после чего обработка пакета будет завершена.
- Закончатся все условия и пакет не будет признан соответствующим ни одному из них. При этом, по умолчанию он будет пропущен дальше.
Исходя из п.2, нельзя не отметить, что есть две стратегии построения фильтра пакетов:
- Нормально открытый файрвол. Данный тип настройки можно определить как «Все разрешено, что не запрещено». При этом мы запрещаем прохождение только некоторых типов трафика. Если пакет не соответствует этим типам – он будет пропущен. Обычно данный тип файрвола характерен для мест, где не предъявляется высоких требований к безопасности пользователей, а трафик может быть самым разнообразным и не поддающимся жесткой квалификации. Такая настройка характерна для операторов связи (Интернет-провайдеров), открытых точек доступа, домашних маршрутизаторов.
- Нормально закрытый файрвол. Данный тип настройки можно определить как «Все запрещено, что не разрешено». При этом разрешается прохождение только определенных типов трафика, а последним правилом в файрволе стоит правило, запрещающее прохождение любого типа трафика. Такой тип настройки файрвола характерен для корпоративного использования, где существуют жесткие требования к безопасности.
Не могу сказать, что какая-то из стратегий является правильной, а какая-то неправильной. Обе стратегии имеют право на жизнь, но каждая — в определенных условиях.
Теперь подробнее распишем все варианты условий, на основании которых мы можем принимать решение о действии.
Закладка general
Наименование
|
Описание
|
Chain
|
Цепочка (см. выше). Варианты в списке: input, output, forward.
Если ввести свое название – получим свою цепочку.
|
Src. Address
|
Адрес источника пакета. Варианты заполнения поля:
Один адрес. Например, 192.168.0.5
Подсеть. Например, 192.168.0.0/24
Диапазон адресов. Например, 192.168.0.5-192.168.0.15
Обратите внимание: если вам надо задать несвязанный диапазон адресов, то это нельзя сделать в этом поле, но можно сделать через Src. Address List на закладке Advanced
|
Dst. Address
|
Адрес назначения пакета. Варианты заполнения поля см. выше
|
Protocol
|
Протокол соединения. TCP, UDP, ICMP и т.п.
|
Src. Port
|
Порт, с которого пришел пакет. Поле можно заполнить только если протокол соответствует TCP или UDP. Варианты заполнения поля:
Один порт. Например, 22.
Диапазон портов. Например, 10000-20000.
Несколько портов. Например ,22,23,25.
Несколько диапазонов портов. Например, 5060-5070,10000-20000 .
Диапазон и несколько портов. Например, 22,23,10000-20000.
|
Dst. Port
|
Порт, на который пришел пакет. Поле можно заполнить, только если протокол соответствует TCP или UDP. Варианты заполнения поля см. выше.
|
Any Port
|
Любой порт. Например, или Src. Port, или Dst. Port Варианты заполнения поля см. выше.
|
P2P
|
Peer-to-Peer протокол. Пакет относится к одному из P2P протоколов. Например, edonkey или BitTorrent. Обратите внимание, что шифрованные сессии не идентифицируются посредством данного поля.
|
In Interface
|
Интерфейс, с которого пришел проверяемый пакет. (Не работает, если chain=output, т.к. источник трафика - сам маршрутизатор)
|
Out Interface
|
Интерфейс, куда будет передан пакет. (Не работает, если chain=input, так как трафик предназначен для маршрутизатора и дальше передан быть не может).
|
Packet Mark
|
Пакет имеет определенную маркировку, полученную ранее через Mangle.
|
Connection Mark
|
Пакет имеет определенную маркировку, полученную ранее через Mangle.
|
Routing Mark
|
Пакет имеет определенную маркировку, полученную ранее через Mangle.
|
Connection Type
|
Пакет относится к определенному типу соединения, включенному на закладке Firewall/Service Ports
|
Connection State
|
Состояние соединения. Описывалось выше.
|
Обратите внимание, что перед частью полей можно поставить флаг восклицательного знака. Этот флаг будет обозначать отрицание. Например:
обозначает что адрес источника любой, кроме 192.168.0.0/24 . Также обратите внимание, что если поле не заполнено, оно должно быть серым. Если вы передумали заполнять поле, чтобы его исключить и сделать серым – нажмите стрелку «вверх», справа от поля.
Закладка Advanced
На этой закладке собраны расширенные опции выбора пакета.
Наименование
|
Описание
|
Src. Address List
|
Адрес источника пакета совпадает с одним из адресов в именованном списке адресов, заданном на закладке Firewall/Address Lists.
|
Dst. Address List
|
Адрес назначения пакета совпадает с одним из адресов в именованном списке адресов, заданном на закладке Firewall/Address Lists.
|
Layer 7 Protocol
|
При проверке пакета L7-фильтром, заданным на закладке Firewall/Layer 7 Protocols, он был отнесен к одному из определенных на этой закладке протоколов.
|
Content
|
Внутри пакета содержится определенная строка символов.
|
Connection Bytes
|
Количество байт, прошедших через соединение. При этом 0 обозначает бесконечность.
Например, 1000000-0 = более 1МБ.
|
Connection Rates
|
Скорость соединения. Например, 0-128000. Это правило сработает, если скорость подключения менее 128 килобит в секунду. (Поставив флаг [!] перед таким правилом, мы заставим срабатывать правило на соединение более 128kbps)
|
Per Connection Classifier
|
Используется при необходимости разделения трафика на несколько потоков. Позволяет держать пакеты с определенным набором опций в одном потоке. Подробнее: https://wiki.mikrotik.com/wiki/Manual:PCC
|
Src. MAC Address
|
MAC-адрес сетевой карты источника. Сработает, только если источник пакета находится в одном Ethernet-сегменте с маршрутизатором.
|
Out Bridge Port
|
Порт назначения интерфейса типа bridge, при активированной в Bridge опции Use IP Firewall.
|
In Bridge Port
|
Порт источника интерфейса типа bridge, при активированной в Bridge опции Use IP Firewall.
|
Ingress Priority
|
Приоритет пакета. Может быть получен из VLAN, WMM или MPLS ext. bit
|
DSCP (TOS)
|
Определяет DSCP, заданный в заголовке пакета.
|
TCP MSS
|
Размер MSS (Maximum segment size) TCP пакета.
|
Packet Size
|
Размер пакета.
|
Random
|
Случайное срабатывание правила. Число задается в диапазоне 1-99, что соответствует вероятности срабатывания правила от 1 до 99 процентов. Обычно используется при тестировании сервисов, когда надо изобразить случайную потерю пакетов на нестабильном канале.
|
TCP Flags
|
Флаги TCP соединения.
|
ICMP Options
|
Опции (типы сообщения) ICMP.
|
IPv4 Options
|
В заголовке пакета имеется заданная опция протокола Ipv4.
|
TTL
|
Time To Live – Время жизни пакета соответствует …
|
Закладка Extra
Эта закладка продолжает список расширенных опций, не поместившихся на закладку Advanced.
Итак:
Наименование
|
Описание
|
Connection Limit
|
Предел количества соединений для адреса или подсети. Адрес или подсеть задается полем netmask (для 1 адреса 32).
|
Limit
|
Предназначено для ограничения количества передаваемых пакетов:
Поля:
Rate – количество пакетов в секунду (минуту/час).
Burst – Количество неучитываемых пакетов (пакетов не входящих в packet rate).
|
Dst. Limit
|
Ограничение количества передаваемых пакетов по адресу источника/назначения. В отличии от limit, учитываются пакеты для каждого адреса или адреса/порта в зависимости от выбранных опций. Поля rate и burst соответствуют таковым в опции Limit.
Дополнительный поля:
Limit By – по какому критерию (src|dst address | address/port) учитывать пакеты.
Expire - через какой промежуток времени запомненный адрес/порт будут удалены.
|
Nth
|
Каждый из:
Every – из какого числа пакетов.
Packet – сколько.
Например Every=3, packet=2 Обозначает «Каждые 2 из 3 пакетов или проще 2/3 пакетов). Опцию часто используют при балансировке нагрузки между каналами.
|
Time
|
Время действия правила. Позволяет ограничить действие правила во времени и по дням недели. Так как у маршрутизатора нет аппаратно-независимых часов, для корректной работы опции требуется настроенный SNTP-клиент (System/SNTP-Client) и часовой пояс (System/Clock)
|
Src. Address Type
|
Тип IP-адреса источника (Local, Unicast, Broadcast, Multicast)
|
Dst. Address Type
|
Тип IP-адреса назначения (Local, Unicast, Broadcast, Multicast)
|
PSD
|
Port Scan Detect. Опция позволяющая настроить определение события сканирования портов. Поля:
Weight Threshold = При каком значении сработает.
Delay Threshold = Максимальная задержка между пакетами с разными портами назначения, пришедшими с одного адреса.
Low Port Weight = сколько при подсчете стоит каждый порт в диапазоне 0-1023.
High Port Weight = сколько при подсчете стоит каждый порт в диапазоне 1024-65535.
Например, на скриншоте правило сработает, если будет просканировано 7 и более портов в привилегированном диапазоне; Или 21 и более портов в непривилегированном диапазоне. При этом пауза между поступающими пакетами с одного источника, направленного на разные порты будет не более 3 секунд.
|
Hotspot
|
Опции, связанные с работой хотспот, если он настроен на маршрутизаторе.
|
IP Fragment
|
Пакет является фрагментом другого пакета.
|
Как мы видим, в маршрутизаторе существует достаточно большое количество правил выбора пакетов, которые позволяют очень гибко и тонко настраивать работы с трафиком.
Теперь, когда мы поняли, на основании каких правил мы можем найти интересующий нас пакет, давайте посмотрим, что можно сделать после срабатывания правила.