Сетевые брандмауэры защищают от внешних угроз для конфиденциальных данных, доступных внутри сети. Всякий раз, когда различные сети соединяются вместе, всегда существует угроза того, что кто-то из вне вашей сети взломает вашу локальную сеть. Такие взломы могут привести к краже и распространению личных данных, изменению или уничтожению ценных данных или удалению данных с жестких дисков. Брандмауэры используются как средство предотвращения или минимизации рисков безопасности, присущих при подключении к другим сетям. Правильно настроенный брандмауэр играет ключевую роль в эффективном и безопасном развертывании сетевой инфраструктуры.
MikroTik RouterOS имеет очень мощную реализацию брандмауэра с такими функциями, как:
- проверка пакетов с сохранением состояния
- Обнаружение протокола уровня 7
- фильтрация одноранговых протоколов
- классификация трафика по:
- исходный MAC-адрес
- IP-адреса (сетевые или список) и типы адресов (широковещательные, локальные, многоадресные, одноадресные)
- порт или диапазон портов
- протокол IP
- параметры протокола (поля типа ICMP и кода, флаги TCP, параметры IP и MSS)
- интерфейс пакет прибыл из или ушел через него
- внутренний поток и метки соединения
- Байт DSCP
- содержимое пакета
- скорость, с которой поступают пакеты, и порядковые номера
- размер пакета
- время прибытия пакета
- и многое другое!
Цепи (Chains)
Брандмауэр работает с помощью правил. Каждое правило состоит из двух частей - матчера, который сопоставляет поток трафика с заданными условиями, и действия, которое определяет, что делать с соответствующим пакетом.
Правила фильтрации брандмауэра сгруппированы в цепочки. Это позволяет сопоставить пакет с одним общим критерием в одной цепочке, а затем передать для обработки по некоторым другим общим критериям в другую цепочку. Например, пакет должен быть сопоставлен с парой IP-адрес:порт. Конечно, это может быть достигнуто путем добавления в прямую цепочку как можно большего количества правил с IP-адресом:port match, но лучшим способом может быть добавление одного правила, которое соответствует трафику с определенного IP-адреса, например: /ip firewall filter add src-address=1.1.1.2/32 jump-target="mychain" и в случае успешного совпадения передает контроль над IP-пакетом в какую-то другую цепочку, id est mychain в этом примере. Затем правила, которые выполняют сопоставление с отдельными портами, могут быть добавлены в цепочку mychain без указания IP-адресов.
Есть три предопределенные цепочки, которые нельзя удалить:
- input - используется для обработки пакетов, поступающих на маршрутизатор через один из интерфейсов с IP-адресом назначения, который является одним из адресов маршрутизатора. Пакеты, проходящие через маршрутизатор, не обрабатываются в соответствии с правилами входной цепочки
- forward - используется для обработки пакетов, проходящих через маршрутизатор
- output - используется для обработки пакетов, исходящих от маршрутизатора и выходящих из него через один из интерфейсов. Пакеты, проходящие через маршрутизатор, не обрабатываются в соответствии с правилами выходной цепочки
Диаграммы потока пакетов иллюстрируют, как пакеты обрабатываются в RouterOS.
При обработке цепочки правила берутся из цепочки в том порядке, в котором они перечислены там сверху вниз. Если пакет соответствует критериям правила, то указанное действие выполняется над ним, и больше никакие правила не обрабатываются в этой цепочке (исключение составляет действие passthrough). Если пакет не соответствует какому-либо правилу в пределах встроенной цепочки, то он принимается.
Чтобы попасть в подменю из консоли следует ввести:
/ip firewall filter
Таблица свойств:
Характеристика | Описание |
action (имя действия; по умолчанию: принять) | Действие, которое необходимо предпринять, если пакет соответствует правилу:
|
address-list (строка; по умолчанию: ) | Имя используемого списка адресов. Применимо, если действие является add-dst-to-address-list или add-src-to-address-list |
address-list-timeout (время; по умолчанию: 00: 00: 00) | Интервал времени, по истечении которого адрес будет удален из списка адресов, указанного address-list параметром. Используется в сочетании с add-dst-to-address-listadd-src-to-address-list действиями или Значение 00:00:00 оставит адрес в списке адресов навсегда |
chain (имя; по умолчанию: ) | Указывает, к какому правилу цепочки будет добавлено правило. Если входные данные не совпадают с именем уже определенной цепочки, будет создана новая цепочка. |
comment (строка; по умолчанию: ) | Описательный комментарий к правилу. |
connection-bytes (integer-целое число; по умолчанию: ) | Сопоставляет пакеты только в том случае, если заданное количество байтов было передано через конкретное соединение. 0 - означает бесконечность, например connection-bytes=2000000-0 означает, что правило совпадает, если через соответствующее соединение было передано более 2 МБ |
connection-limit (целое число, маскасети ; по умолчанию: ) | Сопоставляет соединения по адресу или блоку адресов после достижения заданного значения. Следует использовать вместе с connection-state=new и / или с tcp-flags=syn, так как matcher очень ресурсоемкий. |
connection-mark (no-mark / string; по умолчанию:) | Соответствует пакетам, помеченным через средство mangle, с определенной меткой соединения. Если параметр no-mark не установлен, правило будет соответствовать любому немаркированному соединению. |
connection-nat-state (srcnat | dstnat; по умолчанию: ) | Может соответствовать соединениям, которые являются srcnatted, dstnatted или обоими. Обратите внимание, что connection-state=related connections connection-nat-state определяется направлением первого пакета. и если отслеживание соединений должно использовать dst-nat для доставки этого соединения тем же хостам, что и основное соединение, то оно будет находиться в connection-nat-state=dstnat, даже если правил dst-nat вообще нет. |
connection-rate (Целое число 0..4294967295; по умолчанию: ) | Скорость соединения - это сопоставитель брандмауэра, который позволяет захватывать трафик на основе текущей скорости соединения. |
connection-state (estabilished / invalid | new / related | untracked; по умолчанию: ) | Интерпретирует данные анализа отслеживания соединений для конкретного пакета:
|
connection-type (ftp | h323 / irc | pptp / quake3 / sip | tftp; по умолчанию: ) | Сопоставляет пакеты от связанных соединений на основе информации от их помощников по отслеживанию соединений. Соответствующий помощник подключения должен быть включен в разделе / ip firewall service-port |
content (строка; по умолчанию: ) | Сопоставьте пакеты, содержащие указанный текст |
dscp (целое число: 0..63; по умолчанию: ) | Соответствует полю заголовка IP-адреса DSCP. |
dst-address (Диапазон IP / netmask / IP; по умолчанию: ) | Сопоставляет пакеты, назначение которых равно указанному IP-адресу или попадает в указанный диапазон IP-адресов. |
dst-address-list (имя; по умолчанию: ) | Сопоставляет адрес назначения пакета с определяемым пользователем списком адресов |
dst-address-type (одноадресная / локальная / широковещательная / многоадреснаяпередача ; по умолчанию: ) | Соответствует типу адреса назначения:
|
dst-limit (integer [/time], integer, dst-address | dst-port | src-address [/time]; по умолчанию: ) | Сопоставляет пакеты до тех пор, пока не будет превышена заданная скорость. Скорость определяется как количество пакетов за интервал времени. В отличие от limit матчера, у каждого потока есть свой предел. Поток определяется параметром mode. Параметры записываются в следующем формате: count [/time], burst, mode [/expire].
|
dst-port (целое число [- integer]: 0..65535; по умолчанию: ) | Список номеров портов назначения или диапазонов номеров портов |
fragment (да / нет; по умолчанию: ) | Соответствует фрагментированным пакетам. Первый (стартовый) фрагмент не считается. Если отслеживание соединений включено то фрагментов не будет так как система автоматически собирает каждый пакет |
hotspot (auth | from-client / http / local-dst | to-client; по умолчанию: ) | Сопоставляет пакеты, полученные от клиентов HotSpot, с различными Сопоставителями HotSpot.
|
icmp-options (integer:целое число; по умолчанию: ) | Соответствует типу ICMP: кодовые поля |
in-bridge-port (имя; по умолчанию: ) | Фактический интерфейс с которого пакет вошел в маршрутизатор, если входящий интерфейс является мостом. Работает только в том случае, если use-ip-firewall включен в настройках моста. |
in-bridge-port-list (имя; по умолчанию: ) | Набор интерфейсов, определенных в списке интерфейсов. Работает так же, как и in-bridge-port |
in-interface (имя; по умолчанию: ) | Интерфейс пакет вошел в маршрутизатор |
in-interface-list (имя; по умолчанию: ) | Набор интерфейсов, определенных в списке интерфейсов. Работает так же, как и in-interface |
ingress-priority (целое число: 0..63; по умолчанию: ) | Соответствует приоритету входного пакета. Приоритет может быть получен из VLAN, WMM, DSCP или MPLS EXP bit. |
ipsec-policy (вход | выход, ipsec / нет; по умолчанию: ) | Соответствует политике, используемой IpSec. Значение записывается в следующем формате: direction, policy. Направление используется для выбора соответствия политике, используемой для декапсуляции, или политике, которая будет использоваться для инкапсуляции.
Например, если маршрутизатор получает инкапсулированный Ipsec пакет Gre, то правило ipsec-policy=in,ipsec будет соответствовать пакету Gre, но правило ipsec-policy=in, none будет соответствовать пакету ESP. |
ipv4-options (any / loose-source-routing | no-record-route | no-router-alert | no-source-routing | no-timestamp | none / record-route / router-alert | strict-source-routing | timestamp; по умолчанию: ) | Соответствует параметрам заголовка IPv4.
|
jump-target (имя; по умолчанию: ) | Имя целевой цепочки, к которой нужно перейти. Применимо только в том случае, если action=jump |
layer7-protocol (имя; по умолчанию: ) | Имя фильтра Layer7 определяется в меню протокола layer7. |
limit (integer, time, integer; по умолчанию: ) | Сопоставляет пакеты с ограниченной скоростью (скорость передачи пакетов или скорость передачи битов). Правило, использующее этот сопоставитель, будет совпадать до тех пор, пока этот предел не будет достигнут. Параметры записываются в следующем формате: count [/time], burst:mode.
|
log-prefix (строка; по умолчанию: ) | Добавляет указанный текст в начало каждого сообщения журнала. Применимо, если action=log |
nth (целое число, integer; по умолчанию: ) | Соответствует каждому N-му пакету. |
out-bridge-port (имя; по умолчанию: ) | Фактический интерфейс пакет покидает маршрутизатор, если исходящий интерфейс является мостом. Работает только в том случае, если use-ip-firewall включен в настройках моста. |
out-bridge-port-list (имя; по умолчанию: ) | Набор интерфейсов, определенных в списке интерфейсов. Работает так же, как и out-bridge-port |
out-interface (; По умолчанию: ) | Интерфейс пакет покидает маршрутизатор |
out-interface-list (имя; по умолчанию: ) | Набор интерфейсов, определенных в списке интерфейсов. Работает так же, как и out-interface |
packet-mark (no-mark / string; по умолчанию: ) | Соответствует пакетам, помеченным через средство mangle, с определенной меткой пакета. Если не установлен знак, правило будет соответствовать любому немаркированному пакету. |
packet-size (целое число [- integer]: 0..65535; по умолчанию: ) | Соответствует пакетам указанного размера или диапазона размеров в байтах. |
per-connection-classifier (ValuesToHash: Знаменатель / Остаток; По Умолчанию: ) | PCC matcher позволяет разделить трафик на равные потоки с возможностью сохранения пакетов с определенным набором опций в одном конкретном потоке. |
port (целое число [- integer]: 0..65535; по умолчанию: ) | Соответствует, если какой-либо порт (исходный или конечный) соответствует указанному списку портов или диапазонам портов. Применимо только в том случае, если protocol это TCP или UDP |
priority (целое число: 0..63; по умолчанию:) | Соответствует приоритету пакета после установки нового приоритета. Приоритет может быть получен из VLAN, WMM, DSCP, MPLS EXP bit или из приоритета, который был установлен с помощью set-priority действия. |
protocol (имя или идентификатор протокола; по умолчанию: tcp) | Соответствует определенному IP-протоколу, определяемому именем или номером протокола |
psd (integer, time, integer, integer; по умолчанию: ) | Попытки обнаружить сканирование TCP и UDP. Параметры представлены в следующем формате WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight
|
random (целое число: 1..99; по умолчанию: ) | Сопоставляет пакеты случайным образом с заданной вероятностью. |
reject-with (icmp-admin-Forbidden | icmp-net-Forbidden | icmp-protocol-unreachable | icmp-host-Forbidden | icmp-network-unreachable / tcp-reset | icmp-host-unreachable | icmp-port-unreachable; по умолчанию: icmp-network-unreachable) | Указывает ошибку ICMP, которая будет отправлена обратно, если пакет будет отклонен. Применимо, если action=reject |
routing-table (строка; по умолчанию: ) | Сопоставляет пакеты, адрес назначения которых разрешен в конкретной таблице маршрутизации. Более подробную информацию можно найти на странице сопоставления таблиц маршрутизации |
routing-mark (строка; по умолчанию: ) | Сопоставляет пакеты, помеченные средством mangle, с определенной меткой маршрутизации |
src-address (Ip / Netmaks, диапазон Ip; по умолчанию: ) | Сопоставляет пакеты, источник которых равен указанному IP-адресу или попадает в указанный диапазон IP-адресов. |
src-address-list (имя; по умолчанию: ) | Сопоставляет исходный адрес пакета с определяемым пользователем списком адресов |
src-address-type (unicast | local | broadcast | multicast;; по умолчанию: ) |
Соответствует типу адреса источника:
|
src-port (целое число [- integer]: 0..65535; по умолчанию: ) | Список исходных портов и диапазоны исходных портов. Применимо только в том случае, если протокол TCP или UDP. |
src-mac-address (MAC-адрес; по умолчанию: ) | Соответствует исходному MAC-адресу пакета |
tcp-flags (ack | cwr / ece | fin | psh | rst | syn | urg; по умолчанию: ) | Соответствует указанным флагам TCP
|
tcp-mss (целое число [- integer]: 0..65535; по умолчанию: ) | Соответствует значению TCP MSS IP пакета |
time (время-время, СБ / пт / чт | СР | Вт | Пн / Вс; по умолчанию: ) | Позволяет создать фильтр на основе времени и даты прибытия пакетов или, для локально генерируемых пакетов, времени и даты отправления |
tls-host (строка; по умолчанию: ) | Позволяет сопоставлять https-трафик на основе имени хоста TLS SNI. Принимает синтаксис глобуса для сопоставления подстановочных знаков. Обратите внимание, что matcher не сможет сопоставить имя хоста, если кадр рукопожатия TLS фрагментирован на несколько сегментов TCP (пакетов). |
ttl (целое число: 0..255; по умолчанию: ) | Соответствует значению TTL пакетов |
Перевод сделан для этих материалов: https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filter
Извините статья в разработке.....