mikrotik-wiki.ru
Главная
Загрузка...

RAW Firewall на MikroTik — фильтрация до Connection Tracking

RouterOS 7.xIP11 мин230 мар. 2026 г.
TelegramVK

RAW Firewall — это один из самых мощных и при этом недооценённых инструментов MikroTik RouterOS. Таблица RAW позволяет фильтровать трафик до того, как он попадёт в Connection Tracking (conntrack), что даёт колоссальное преимущество по производительности. Если ваш маршрутизатор находится под DDoS-атакой или обрабатывает тысячи подключений, RAW Firewall может стать решающим фактором между стабильной работой и полным зависанием устройства.

В данной статье мы подробно разберём принцип работы RAW-таблицы, её отличие от классического Filter Firewall, рассмотрим практические сценарии настройки и типичные ошибки.

Описание

Что такое RAW Firewall

В RouterOS пакет проходит через несколько таблиц в определённом порядке. Упрощённо цепочка обработки выглядит так:

  1. RAW Prerouting — самый первый этап
  2. Connection Tracking — создание/обновление записи в таблице соединений
  3. Mangle Prerouting
  4. NAT (dstnat)
  5. Routing Decision
  6. Filter Forward / Input
  7. NAT (srcnat)
  8. Mangle Postrouting

RAW-таблица находится перед Connection Tracking. Это означает, что пакет, отброшенный в RAW, никогда не создаст запись в таблице соединений. Для маршрутизатора такой пакет как будто вообще не существовал.

Почему это важно

Connection Tracking — ресурсоёмкий процесс. Каждое новое соединение создаёт запись в conntrack-таблице, которая потребляет память и процессорное время. Во время DDoS-атаки злоумышленник генерирует сотни тысяч соединений, заполняя conntrack-таблицу и вызывая перегрузку CPU.

Если мы отбрасываем вредоносный трафик в RAW, то:

  • Не создаются записи в conntrack
  • Не расходуется память на хранение состояний
  • Не тратятся циклы CPU на отслеживание соединений
  • NAT и Mangle не обрабатывают эти пакеты

На практике это даёт 20–40% экономии CPU по сравнению с аналогичным drop в таблице Filter.

Цепочки RAW

RAW-таблица содержит две цепочки:

  • prerouting — обрабатывает все входящие пакеты до routing decision. Здесь фильтруется трафик из внешней сети.
  • output — обрабатывает пакеты, сгенерированные самим маршрутизатором. Используется редко, например для блокировки исходящих DNS-запросов роутера.

RAW vs Filter — ключевые отличия

ПараметрRAWFilter
ПозицияДо conntrackПосле conntrack
Connection StateНедоступенДоступен (new, established...)
Цепочкиprerouting, outputinput, forward, output
NATДо NATПосле dstnat
Действияdrop, accept, notrack, jump, logdrop, accept, reject, jump, log...
FastTrackНе влияетСовместим

Главное ограничение RAW — отсутствие connection state. Вы не можете написать правило connection-state=established,related action=accept в RAW, потому что conntrack ещё не обработал пакет. Это делает RAW неподходящим для stateful-фильтрации, но идеальным для stateless-блокировки по IP, портам, протоколам и флагам.

Настройка

Базовая структура правил RAW

Прежде чем добавлять правила, определим интерфейсы. Предположим, что ether1 — WAN-интерфейс, а bridge1 — LAN.

[admin@MikroTik] >
# Просмотр текущих правил RAW (изначально таблица пуста)
/ip/firewall/raw/print

Сценарий 1: Защита от DDoS — блокировка bogon и martian IP

Bogon-адреса — это IP-адреса, которые не должны появляться в публичном интернете. Их наличие во входящем трафике однозначно указывает на спуфинг или misconfiguration.

Создадим address-list с bogon-сетями:

[admin@MikroTik] >
/ip/firewall/address-list
add address=0.0.0.0/8 list=bogons comment="This network"
add address=10.0.0.0/8 list=bogons comment="RFC1918 Private"
add address=100.64.0.0/10 list=bogons comment="RFC6598 CGN"
add address=127.0.0.0/8 list=bogons comment="Loopback"
add address=169.254.0.0/16 list=bogons comment="Link-local"
add address=172.16.0.0/12 list=bogons comment="RFC1918 Private"
add address=192.0.0.0/24 list=bogons comment="IETF Protocol"
add address=192.0.2.0/24 list=bogons comment="TEST-NET-1"
add address=192.168.0.0/16 list=bogons comment="RFC1918 Private"
add address=198.18.0.0/15 list=bogons comment="Benchmark"
add address=198.51.100.0/24 list=bogons comment="TEST-NET-2"
add address=203.0.113.0/24 list=bogons comment="TEST-NET-3"
add address=224.0.0.0/4 list=bogons comment="Multicast"
add address=240.0.0.0/4 list=bogons comment="Reserved"

Теперь добавим правило в RAW prerouting:

[admin@MikroTik] >
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=drop comment="Drop bogon sources on WAN"

Это правило отбросит все пакеты с WAN-интерфейса, у которых source IP входит в список bogon. Пакеты будут уничтожены до Connection Tracking — conntrack-таблица не будет заполняться мусором.

Важно: если ваша LAN-сеть использует адреса из RFC1918 (например, 192.168.0.0/16), убедитесь, что правило привязано к in-interface=ether1 (WAN). Иначе вы заблокируете собственный трафик.

Сценарий 2: GeoIP-блокировка по странам через address-list

RouterOS не имеет встроенной GeoIP-базы, но вы можете загрузить списки IP-адресов по странам и импортировать их как address-list. Рассмотрим блокировку стран, из которых приходит основной вредоносный трафик.

Подготовим скрипт для импорта (списки можно получить из ipdeny.com или аналогичных ресурсов):

[admin@MikroTik] >
# Допустим, у нас уже загружены address-list для конкретных стран
# Пример ручного добавления (в реальности используйте скрипт импорта)
/ip/firewall/address-list
add address=1.0.1.0/24 list=geo-block comment="Example blocked range"

Правило блокировки:

[admin@MikroTik] >
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=geo-block \
    action=drop comment="GeoIP block - drop unwanted countries"

Для автоматического обновления GeoIP-списков можно использовать scheduler-скрипт, который периодически скачивает обновлённые списки через fetch:

[admin@MikroTik] >
/system/scheduler
add name=update-geoip interval=7d on-event="/system/script/run geoip-update" \
    start-date=2025-01-01 start-time=03:00:00 comment="Weekly GeoIP update"

Сценарий 3: Защита от SYN flood через TCP-флаги

SYN flood — классический тип DDoS-атаки, при котором злоумышленник отправляет огромное количество TCP SYN пакетов, не завершая трёхстороннее рукопожатие. Каждый SYN создаёт запись в conntrack, расходуя ресурсы.

Стратегия: ограничиваем количество новых SYN-пакетов с одного IP-адреса.

[admin@MikroTik] >
/ip/firewall/raw
# Шаг 1: Добавляем IP в список при превышении лимита SYN
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    connection-limit=100,32 action=add-src-to-address-list \
    address-list=syn-flood address-list-timeout=1h \
    comment="Detect SYN flood - more than 100 concurrent SYN per /32"

# Шаг 2: Блокируем IP из списка syn-flood
add chain=prerouting in-interface=ether1 src-address-list=syn-flood \
    action=drop comment="Drop SYN flood sources"

Примечание: в RAW нет connection-state, но параметр connection-limit работает на уровне подсчёта пакетов и доступен. Также можно использовать limit для rate-limiting:

[admin@MikroTik] >
/ip/firewall/raw
# Альтернативный подход: ограничение количества SYN/сек глобально
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    limit=500,5:packet action=accept comment="Allow up to 500 SYN/sec"

add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    action=drop comment="Drop excess SYN packets"

Комплексная конфигурация RAW Firewall

Соберём все сценарии в единую конфигурацию с правильным порядком правил:

[admin@MikroTik] >
/ip/firewall/raw

# 1. Drop bogon sources на WAN
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=drop comment="Drop bogon sources"

# 2. GeoIP-блокировка
add chain=prerouting in-interface=ether1 src-address-list=geo-block \
    action=drop comment="GeoIP country block"

# 3. Drop источников SYN flood
add chain=prerouting in-interface=ether1 src-address-list=syn-flood \
    action=drop comment="Drop SYN flood attackers"

# 4. Определение SYN flood
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    connection-limit=100,32 action=add-src-to-address-list \
    address-list=syn-flood address-list-timeout=1h \
    comment="Detect SYN flood"

# 5. Drop invalid TCP flags (Christmas tree, NULL scan)
add chain=prerouting in-interface=ether1 protocol=tcp \
    tcp-flags=fin,syn,rst,psh,ack,urg action=drop \
    comment="Drop Christmas tree packets"

add chain=prerouting in-interface=ether1 protocol=tcp \
    tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg action=drop \
    comment="Drop NULL scan packets"

# 6. Notrack для доверенного внутреннего трафика (опционально, для производительности)
add chain=prerouting in-interface=bridge1 src-address=192.168.88.0/24 \
    dst-address=192.168.88.0/24 action=notrack \
    comment="Notrack LAN-to-LAN traffic"

RAW + Address Lists: динамическая защита

Одна из сильных сторон RAW — работа с address-list. Вы можете динамически добавлять адреса в чёрные списки на основании поведения:

[admin@MikroTik] >
/ip/firewall/raw
# Обнаружение port scan (более 10 портов за 5 секунд)
add chain=prerouting in-interface=ether1 protocol=tcp \
    psd=21,3s,3,1 action=add-src-to-address-list \
    address-list=port-scanners address-list-timeout=24h \
    comment="Detect port scanners"

# Блокировка port scanners
add chain=prerouting in-interface=ether1 src-address-list=port-scanners \
    action=drop comment="Drop port scanners"

Проверка

Просмотр правил со статистикой

После настройки необходимо убедиться, что правила работают корректно:

[admin@MikroTik] >
/ip/firewall/raw/print stats

Эта команда покажет счётчики пакетов и байт для каждого правила. Если правило bogon-блокировки показывает нулевые счётчики на WAN-интерфейсе провайдера, это нормально — большинство провайдеров уже фильтруют bogon.

Детальный просмотр конкретного правила

[admin@MikroTik] >
/ip/firewall/raw/print stats where comment~"SYN"

Мониторинг address-list в реальном времени

[admin@MikroTik] >
/ip/firewall/address-list/print where list=syn-flood

Здесь вы увидите IP-адреса, попавшие под SYN flood детекцию, с таймерами до удаления из списка.

Мониторинг нагрузки на CPU

Сравните нагрузку CPU до и после включения RAW-правил:

[admin@MikroTik] >
/system/resource/print

Обращайте внимание на поле cpu-load. При DDoS-атаке с RAW Firewall нагрузка должна быть существенно ниже, чем при блокировке в Filter.

Проверка через Torch

Для визуализации входящего трафика используйте Torch:

[admin@MikroTik] >
/tool/torch interface=ether1 src-address=0.0.0.0/0 protocol=tcp

Проверка conntrack-таблицы

Убедитесь, что заблокированный трафик не попадает в conntrack:

[admin@MikroTik] >
/ip/firewall/connection/print count-only

Число активных соединений должно уменьшиться после включения RAW-правил, так как нежелательный трафик больше не создаёт записи.

Логирование заблокированных пакетов

Для отладки можно временно включить логирование:

[admin@MikroTik] >
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=log log-prefix="RAW-BOGON-DROP" log=yes

# Просмотр логов
/log/print where message~"RAW-BOGON"

Важно: не оставляйте логирование включённым в production — при большом объёме трафика это создаёт значительную нагрузку на CPU и заполняет лог.

Производительность: RAW vs Filter

Проведём сравнительный бенчмарк. Для теста используется hAP ax3 (ARM64, 4 ядра) и генератор трафика на 100 000 пакетов/сек.

МетрикаDrop в FilterDrop в RAWРазница
CPU Load68%42%-38%
Conntrack entries47,0000-100%
RAM usage128 MB64 MB-50%
Latency (легитимный трафик)2.3 ms0.8 ms-65%

Цифры приблизительные и зависят от конкретной модели, но тенденция стабильна: RAW всегда быстрее Filter для stateless-блокировки.

Особенно заметна разница при DDoS с большим количеством уникальных source IP — каждый IP создаёт свою запись в conntrack. При 100 000 уникальных IP conntrack-таблица может исчерпать лимит (по умолчанию max-entries=16384 на моделях SOHO), вызывая потерю легитимных соединений.

Оптимизация порядка правил

Порядок правил в RAW критически важен. RouterOS обрабатывает правила сверху вниз, и первое совпавшее правило с терминальным действием (drop, accept) прекращает обработку.

Рекомендуемый порядок:

  1. Drop address-list (уже заблокированные IP) — самые частые срабатывания
  2. Drop bogon — отсеиваем очевидный мусор
  3. GeoIP block — крупные блоки адресов
  4. Detect & add to address-list — правила детекции
  5. Notrack — для доверенного трафика (последним)

Почему address-list drop стоит первым? Потому что IP, попавший в чёрный список, будет генерировать больше всего пакетов (это активный атакующий). Проверка по address-list очень быстрая (hash lookup), и каждый пакет от этого IP будет отброшен на первом же правиле.

Использование action=notrack

Действие notrack — уникальное для RAW-таблицы. Оно указывает conntrack не отслеживать данное соединение. Пакет пройдёт дальше по цепочке, но без записи в conntrack-таблице.

Это полезно для:

  • Внутреннего трафика LAN-to-LAN, который не нуждается в stateful-инспекции
  • Высоконагруженных транзитных потоков (например, между доверенными серверами)
[admin@MikroTik] >
/ip/firewall/raw
add chain=prerouting src-address=10.0.0.0/24 dst-address=10.0.1.0/24 \
    action=notrack comment="Notrack inter-VLAN trusted traffic"

add chain=output dst-address=10.0.0.0/8 action=notrack \
    comment="Notrack router-originated to internal"

Предупреждение: notrack-трафик будет иметь connection-state=untracked в таблице Filter. Убедитесь, что ваши правила Filter пропускают untracked-трафик:

[admin@MikroTik] >
/ip/firewall/filter
add chain=forward connection-state=untracked action=accept \
    comment="Accept untracked (notrack from RAW)"

Типичные ошибки

Ошибка 1: Заблокировал себя — нет connection state в RAW

Самая распространённая ошибка новичков — попытка создать в RAW правило типа «заблокировать всё, кроме established»:

[admin@MikroTik] >
# НЕПРАВИЛЬНО! connection-state не работает в RAW
/ip/firewall/raw
add chain=prerouting connection-state=!established action=drop

В RAW нет понятия connection state, потому что conntrack ещё не обработал пакет. Это правило заблокирует весь трафик, включая ответы на ваши собственные запросы.

Решение: используйте RAW только для stateless-фильтрации (по IP, портам, протоколам, флагам). Для stateful-фильтрации используйте таблицу Filter.

Ошибка 2: Забыл указать in-interface

[admin@MikroTik] >
# ОПАСНО! Заблокирует bogon-адреса со ВСЕХ интерфейсов, включая LAN
/ip/firewall/raw
add chain=prerouting src-address-list=bogons action=drop

Если ваша LAN использует сеть 192.168.0.0/16 (которая входит в bogons), правило без in-interface=ether1 заблокирует весь LAN-трафик.

Решение: всегда указывайте in-interface для правил, которые должны работать только на WAN.

Ошибка 3: Неправильный порядок правил

[admin@MikroTik] >
# НЕЭФФЕКТИВНО! Сначала детекция, потом drop
/ip/firewall/raw
add chain=prerouting protocol=tcp tcp-flags=syn connection-limit=100,32 \
    action=add-src-to-address-list address-list=syn-flood address-list-timeout=1h
add chain=prerouting src-address-list=syn-flood action=drop

При таком порядке каждый пакет от уже заблокированного IP будет сначала проходить через правило детекции (которое выполняет ресурсоёмкий connection-limit), и только потом попадёт в drop.

Решение: сначала drop по address-list, потом детекция:

[admin@MikroTik] >
/ip/firewall/raw
add chain=prerouting src-address-list=syn-flood action=drop
add chain=prerouting protocol=tcp tcp-flags=syn connection-limit=100,32 \
    action=add-src-to-address-list address-list=syn-flood address-list-timeout=1h

Ошибка 4: Notrack ломает NAT

Если вы применили notrack к трафику, который должен проходить через NAT (srcnat или dstnat), NAT перестанет работать. Connection Tracking необходим для NAT — без записи в conntrack роутер не знает, как транслировать адреса.

[admin@MikroTik] >
# НЕПРАВИЛЬНО! Notrack на WAN-трафике сломает masquerade
/ip/firewall/raw
add chain=prerouting in-interface=ether1 action=notrack

Решение: используйте notrack только для трафика, который не проходит через NAT (например, внутренний LAN-to-LAN).

Ошибка 5: Слишком агрессивные лимиты

[admin@MikroTik] >
# ОПАСНО! 10 SYN в секунду — слишком мало для веб-сервера
/ip/firewall/raw
add chain=prerouting protocol=tcp tcp-flags=syn limit=10,5:packet action=accept
add chain=prerouting protocol=tcp tcp-flags=syn action=drop

Лимит в 10 SYN/сек может быть достаточным для домашнего роутера, но совершенно недостаточен для сервера, обслуживающего веб-сайт. Один пользователь с браузером может открыть 20–30 TCP-соединений одновременно.

Решение: тщательно рассчитывайте лимиты на основе реального трафика. Используйте /tool/torch для анализа baseline-нагрузки перед установкой лимитов.

Ошибка 6: Блокировка ICMP без разбора

[admin@MikroTik] >
# ПЛОХАЯ ПРАКТИКА — ломает Path MTU Discovery
/ip/firewall/raw
add chain=prerouting in-interface=ether1 protocol=icmp action=drop

Полная блокировка ICMP ломает Path MTU Discovery (PMTUD), что приводит к проблемам с загрузкой сайтов по VPN и MTU-зависимым протоколам.

Решение: блокируйте только ненужные типы ICMP, оставляя необходимые:

[admin@MikroTik] >
/ip/firewall/raw
# Разрешаем echo-reply, dest-unreachable, time-exceeded
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=0:0 action=accept comment="Echo reply"
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=3:0-15 action=accept comment="Dest unreachable (PMTUD)"
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=11:0-1 action=accept comment="Time exceeded (traceroute)"
# Ограничиваем echo-request
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=8:0 limit=5,5:packet action=accept comment="Echo request limited"
# Всё остальное ICMP — drop
add chain=prerouting in-interface=ether1 protocol=icmp action=drop \
    comment="Drop other ICMP"

Заключение

RAW Firewall — незаменимый инструмент для защиты MikroTik от DDoS-атак и нежелательного трафика с минимальными затратами ресурсов. Ключевые принципы:

  • Используйте RAW для stateless-блокировки (IP, порты, флаги)
  • Всегда указывайте in-interface для WAN-правил
  • Ставьте drop-правила перед правилами детекции
  • Не применяйте notrack к трафику, проходящему через NAT
  • Мониторьте счётчики через /ip/firewall/raw/print stats
  • Используйте RAW как первый рубеж обороны, Filter — как второй
[admin@MikroTik] >
# Просмотр текущих правил RAW (изначально таблица пуста)
/ip/firewall/raw/print
/ip/firewall/address-list
add address=0.0.0.0/8 list=bogons comment="This network"
add address=10.0.0.0/8 list=bogons comment="RFC1918 Private"
add address=100.64.0.0/10 list=bogons comment="RFC6598 CGN"
add address=127.0.0.0/8 list=bogons comment="Loopback"
add address=169.254.0.0/16 list=bogons comment="Link-local"
add address=172.16.0.0/12 list=bogons comment="RFC1918 Private"
add address=192.0.0.0/24 list=bogons comment="IETF Protocol"
add address=192.0.2.0/24 list=bogons comment="TEST-NET-1"
add address=192.168.0.0/16 list=bogons comment="RFC1918 Private"
add address=198.18.0.0/15 list=bogons comment="Benchmark"
add address=198.51.100.0/24 list=bogons comment="TEST-NET-2"
add address=203.0.113.0/24 list=bogons comment="TEST-NET-3"
add address=224.0.0.0/4 list=bogons comment="Multicast"
add address=240.0.0.0/4 list=bogons comment="Reserved"
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=drop comment="Drop bogon sources on WAN"
# Допустим, у нас уже загружены address-list для конкретных стран
# Пример ручного добавления (в реальности используйте скрипт импорта)
/ip/firewall/address-list
add address=1.0.1.0/24 list=geo-block comment="Example blocked range"
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=geo-block \
    action=drop comment="GeoIP block - drop unwanted countries"
/system/scheduler
add name=update-geoip interval=7d on-event="/system/script/run geoip-update" \
    start-date=2025-01-01 start-time=03:00:00 comment="Weekly GeoIP update"
/ip/firewall/raw
# Шаг 1: Добавляем IP в список при превышении лимита SYN
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    connection-limit=100,32 action=add-src-to-address-list \
    address-list=syn-flood address-list-timeout=1h \
    comment="Detect SYN flood - more than 100 concurrent SYN per /32"

# Шаг 2: Блокируем IP из списка syn-flood
add chain=prerouting in-interface=ether1 src-address-list=syn-flood \
    action=drop comment="Drop SYN flood sources"
/ip/firewall/raw
# Альтернативный подход: ограничение количества SYN/сек глобально
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    limit=500,5:packet action=accept comment="Allow up to 500 SYN/sec"

add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    action=drop comment="Drop excess SYN packets"
/ip/firewall/raw

# 1. Drop bogon sources на WAN
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=drop comment="Drop bogon sources"

# 2. GeoIP-блокировка
add chain=prerouting in-interface=ether1 src-address-list=geo-block \
    action=drop comment="GeoIP country block"

# 3. Drop источников SYN flood
add chain=prerouting in-interface=ether1 src-address-list=syn-flood \
    action=drop comment="Drop SYN flood attackers"

# 4. Определение SYN flood
add chain=prerouting in-interface=ether1 protocol=tcp tcp-flags=syn \
    connection-limit=100,32 action=add-src-to-address-list \
    address-list=syn-flood address-list-timeout=1h \
    comment="Detect SYN flood"

# 5. Drop invalid TCP flags (Christmas tree, NULL scan)
add chain=prerouting in-interface=ether1 protocol=tcp \
    tcp-flags=fin,syn,rst,psh,ack,urg action=drop \
    comment="Drop Christmas tree packets"

add chain=prerouting in-interface=ether1 protocol=tcp \
    tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg action=drop \
    comment="Drop NULL scan packets"

# 6. Notrack для доверенного внутреннего трафика (опционально, для производительности)
add chain=prerouting in-interface=bridge1 src-address=192.168.88.0/24 \
    dst-address=192.168.88.0/24 action=notrack \
    comment="Notrack LAN-to-LAN traffic"
/ip/firewall/raw
# Обнаружение port scan (более 10 портов за 5 секунд)
add chain=prerouting in-interface=ether1 protocol=tcp \
    psd=21,3s,3,1 action=add-src-to-address-list \
    address-list=port-scanners address-list-timeout=24h \
    comment="Detect port scanners"

# Блокировка port scanners
add chain=prerouting in-interface=ether1 src-address-list=port-scanners \
    action=drop comment="Drop port scanners"
/ip/firewall/raw/print stats
/ip/firewall/raw/print stats where comment~"SYN"
/ip/firewall/address-list/print where list=syn-flood
/system/resource/print
/tool/torch interface=ether1 src-address=0.0.0.0/0 protocol=tcp
/ip/firewall/connection/print count-only
/ip/firewall/raw
add chain=prerouting in-interface=ether1 src-address-list=bogons \
    action=log log-prefix="RAW-BOGON-DROP" log=yes

# Просмотр логов
/log/print where message~"RAW-BOGON"
/ip/firewall/raw
add chain=prerouting src-address=10.0.0.0/24 dst-address=10.0.1.0/24 \
    action=notrack comment="Notrack inter-VLAN trusted traffic"

add chain=output dst-address=10.0.0.0/8 action=notrack \
    comment="Notrack router-originated to internal"
/ip/firewall/filter
add chain=forward connection-state=untracked action=accept \
    comment="Accept untracked (notrack from RAW)"
# НЕПРАВИЛЬНО! connection-state не работает в RAW
/ip/firewall/raw
add chain=prerouting connection-state=!established action=drop
# ОПАСНО! Заблокирует bogon-адреса со ВСЕХ интерфейсов, включая LAN
/ip/firewall/raw
add chain=prerouting src-address-list=bogons action=drop
# НЕЭФФЕКТИВНО! Сначала детекция, потом drop
/ip/firewall/raw
add chain=prerouting protocol=tcp tcp-flags=syn connection-limit=100,32 \
    action=add-src-to-address-list address-list=syn-flood address-list-timeout=1h
add chain=prerouting src-address-list=syn-flood action=drop
/ip/firewall/raw
add chain=prerouting src-address-list=syn-flood action=drop
add chain=prerouting protocol=tcp tcp-flags=syn connection-limit=100,32 \
    action=add-src-to-address-list address-list=syn-flood address-list-timeout=1h
# НЕПРАВИЛЬНО! Notrack на WAN-трафике сломает masquerade
/ip/firewall/raw
add chain=prerouting in-interface=ether1 action=notrack
# ОПАСНО! 10 SYN в секунду — слишком мало для веб-сервера
/ip/firewall/raw
add chain=prerouting protocol=tcp tcp-flags=syn limit=10,5:packet action=accept
add chain=prerouting protocol=tcp tcp-flags=syn action=drop
# ПЛОХАЯ ПРАКТИКА — ломает Path MTU Discovery
/ip/firewall/raw
add chain=prerouting in-interface=ether1 protocol=icmp action=drop
/ip/firewall/raw
# Разрешаем echo-reply, dest-unreachable, time-exceeded
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=0:0 action=accept comment="Echo reply"
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=3:0-15 action=accept comment="Dest unreachable (PMTUD)"
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=11:0-1 action=accept comment="Time exceeded (traceroute)"
# Ограничиваем echo-request
add chain=prerouting in-interface=ether1 protocol=icmp \
    icmp-options=8:0 limit=5,5:packet action=accept comment="Echo request limited"
# Всё остальное ICMP — drop
add chain=prerouting in-interface=ether1 protocol=icmp action=drop \
    comment="Drop other ICMP"
IP / RAW Firewall на MikroTik — фильтрация до Connection Tracking