MikroTik firewall: лучшие практики и правила — АйТи Фреш
Москва, Щёлковское шоссе, д. 92, корп. 7 · Пн–Пт 9:00–19:00 · +7 903 729-62-41
· 17 мин чтения

MikroTik firewall: лучшие практики правил для корпоративного офиса

MikroTik firewall: лучшие практики правил для корпоративного офиса

Хороший firewall на MikroTik — это всегда поиск золотой середины между максимальной безопасностью и производительностью: не правило «allow all» с торчащими в интернет принтерами, и не сотни дублирующих друг друга правил. Комплект на RB4011 или CCR2004 в дата-центре МТС должен тянуть 1 Gbps NAT, 50+ правил и минимум 0,5 Gbps шифрования без просадок.

Цепочки firewall: input, forward, output

ЦепочкаЧто фильтруетПример правил
inputТрафик на само устройствоSSH, Winbox, SNMP из LAN
forwardТранзитный трафик через устройствоLAN-WAN, LAN-LAN
outputТрафик с устройства наружуОбычно не ограничивают

Когда мы работаем с фаерволом, основное внимание уделяем двум цепочкам: input, которая занимается защитой самого роутера, и forward – это уже про безопасность ваших сетей. А вот output-цепочку трогают гораздо реже. Зачем? Только если вдруг сам роутер начинает генерировать какой-то подозрительный трафик, или если нам позарез нужны специальные маркировки пакетов для последующей балансировки нагрузки.

Схема цепочек firewall MikroTik: input, forward, output
Основные цепочки firewall MikroTik и их функции.

Универсальный шаблон input

/ip firewall filter
# 1. Принимаем established и related
add chain=input action=accept connection-state=established,related \
  comment="accept est/rel"
# 2. Дропаем invalid
add chain=input action=drop connection-state=invalid comment="drop invalid"
# 3. ICMP с rate-limit
add chain=input protocol=icmp limit=50,50:packet action=accept \
  comment="accept ICMP limited"
# 4. Разрешаем из LAN всё
add chain=input in-interface-list=LAN action=accept comment="accept from LAN"
# 5. Whitelist управления (если нужен удалённый доступ)
add chain=input src-address-list=management action=accept \
  comment="accept management"
# 6. Port knocking / honeypot — переносим Winbox на нестандартный порт
add chain=input dst-port=22,8291 protocol=tcp action=add-src-to-address-list \
  address-list=knock-stage1 address-list-timeout=30s
# 7. Финальный drop
add chain=input action=drop comment="drop rest"

Запомните главное: «state first» — это наше всё. Почему? Всё просто: правило со статусом established/related должно стоять в списке самым первым, быть №1. Если его нет или оно не на первом месте, что происходит? Каждый ответный пакет вынужден пробегать по всему, абсолютно всему списку правил. А это, уж поверьте, катастрофически "убивает" производительность!

Минимизация открытых сервисов

Перед настройкой firewall обязательно проверьте, какие сервисы RouterOS открыты наружу. На новых устройствах по умолчанию работают FTP, Telnet, API, WWW и даже SMB — всё это лишние точки входа для атакующего. Отключайте всё, чем не пользуетесь.

/ip service print
/ip service disable telnet,ftp,api,api-ssl,www
/ip service set ssh port=2222 address=192.168.10.0/24,10.100.0.0/24
/ip service set winbox port=54321 address=192.168.10.0/24,10.100.0.0/24

Дополнительно ограничьте MAC-доступ и Neighbor Discovery только внутренними интерфейсами:

/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN
/tool mac-server ping set enabled=no
/ip neighbor discovery-settings set discover-interface-list=LAN

Отдельные пользователи и сильные пароли

Дефолтный аккаунт admin без пароля — первая цель любого сканера. Отключите его и создайте отдельного администратора с доступом только из доверённых подсетей. Для мониторинга заведите read-only пользователя.

/user set admin disabled=yes
/user add name=itfresh password="Complex!Pass&2026#9841" group=full \
  address=192.168.10.0/24,10.100.0.0/24 \
  comment="Главный админ, доступ только из офиса и VPN"
/user add name=monitoring password="ReadOnlyPass!2026" group=read \
  address=192.168.10.5

Включите требования к сложности паролей, чтобы исключить слабые комбинации:

/user settings set minimum-password-length=12 minimum-categories=3

Универсальный шаблон forward

# FastTrack для увеличения NAT-производительности
/ip firewall filter
add chain=forward action=fasttrack-connection connection-state=established,related \
  comment="fasttrack"
add chain=forward action=accept connection-state=established,related
add chain=forward action=drop connection-state=invalid
# Блок спуфинга
add chain=forward in-interface-list=WAN src-address-type=local action=drop \
  comment="drop spoofing"
# Защита от trashmasquerade
add chain=forward action=drop src-address-list=blacklist
# Разрешение пользовательских сетей наружу
add chain=forward src-address=192.168.10.0/24 out-interface-list=WAN \
  action=accept comment="office out"
# Запрет гостевой сети в корпоративные
add chain=forward src-address=192.168.20.0/24 dst-address=192.168.10.0/24 \
  action=drop comment="block guest→office"
add chain=forward src-address=192.168.20.0/24 dst-address=192.168.30.0/24 \
  action=drop comment="block guest→infra"
# DNAT для публичного веб-сервиса
add chain=forward dst-address=192.168.30.50 dst-port=443 protocol=tcp \
  action=accept comment="public HTTPS"
# Финальный drop
add chain=forward action=drop comment="drop rest"

Address-list: динамические списки IP

Address-list – это одна из тех фишек MikroTik, что действительно меняют игру. Это крайне мощный инструмент! Вы можете автоматически добавлять IP-адреса в такой список, как только сработает определённое правило. Например, если кто-то пять раз подряд неудачно пытался подключиться по SSH – бац, и его IP уже в "чёрном" списке! А дальше что? В других правилах вы просто проверяете, принадлежит ли адрес этому списку, и принимаете нужное решение. Удобно, правда?

# Каскадная защита от брутфорса SSH
/ip firewall filter
add chain=input protocol=tcp dst-port=22 src-address-list=ssh-banned \
  action=drop comment="drop banned SSH"
add chain=input protocol=tcp dst-port=22 connection-state=new \
  src-address-list=ssh-stage3 \
  action=add-src-to-address-list address-list=ssh-banned \
  address-list-timeout=1d comment="ban SSH"
add chain=input protocol=tcp dst-port=22 connection-state=new \
  src-address-list=ssh-stage2 \
  action=add-src-to-address-list address-list=ssh-stage3 \
  address-list-timeout=1m
add chain=input protocol=tcp dst-port=22 connection-state=new \
  src-address-list=ssh-stage1 \
  action=add-src-to-address-list address-list=ssh-stage2 \
  address-list-timeout=1m
add chain=input protocol=tcp dst-port=22 connection-state=new \
  action=add-src-to-address-list address-list=ssh-stage1 \
  address-list-timeout=1m

У нас есть железное правило: если с одного IP-адреса за минуту происходит четвёртая безуспешная попытка подключения, этот клиент немедленно отправляется в бан. Сразу на целые сутки! Такая простая, но эффективная мера надёжно отсекает до 99% всех автоматических сканеров и ботов, которые пытаются "прощупать" вашу систему.

Raw-цепочка: разгружаем conntrack

На WAN-интерфейс постоянно льётся мусор — сканеры, попытки ботнетов, всё что угодно. Стандартный механизм conntrack в такой ситуации занимается пустой работой, пытаясь отслеживать и обрабатывать весь этот ненужный трафик. Мы используем Raw-таблицу: она позволяет отбросить подозрительные пакеты ещё до того, как они попадут в conntrack, и значительно разгружает роутер.

/ip firewall raw
# Дропаем bogons (невалидные IP)
add chain=prerouting src-address-list=bogons action=drop \
  comment="drop bogons"
# Дропаем спуфинг
add chain=prerouting src-address=192.168.0.0/16 in-interface-list=WAN \
  action=drop comment="drop rfc1918 from WAN"
add chain=prerouting src-address=10.0.0.0/8 in-interface-list=WAN action=drop
add chain=prerouting src-address=172.16.0.0/12 in-interface-list=WAN action=drop

# Список bogons добавляется автоматически из RIPE
/ip firewall address-list
add list=bogons address=0.0.0.0/8
add list=bogons address=127.0.0.0/8
add list=bogons address=169.254.0.0/16
add list=bogons address=224.0.0.0/4
add list=bogons address=240.0.0.0/4

Защита от сканирования портов

/ip firewall filter
# PSD (port scan detector)
add chain=input protocol=tcp psd=21,3s,3,1 \
  action=add-src-to-address-list address-list=port-scanners \
  address-list-timeout=2w comment="detect port scan"
# Nmap NULL/FIN/XMAS
add chain=input protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg \
  action=add-src-to-address-list address-list=port-scanners \
  address-list-timeout=2w
add chain=input src-address-list=port-scanners action=drop \
  comment="drop port scanners"

SYN cookies и ограничение conntrack

Для защиты от SYN flood включите TCP SYN cookies — это помогает при лавине полуоткрытых соединений:

/ip settings set tcp-syncookies=yes

Ограничьте размер conntrack-таблицы, чтобы переполнение не положило роутер:

/ip firewall connection tracking set max-entries=100000

Эти меры дополняют raw-цепочку и address-list: raw отбрасывает мусор до conntrack, а лимит таблицы не даёт легитимному трафику вытеснить ресурсы при атаке.

Port knocking для скрытия Winbox

Если админский доступ нужен с непредсказуемых IP-адресов, используйте port knocking: Winbox открывается только после «стука» по двум портам в правильной последовательности. Это отсекает практически все автоматические сканеры.

/ip firewall filter
add chain=input protocol=tcp dst-port=7001 \
  action=add-src-to-address-list address-list=knock1 \
  address-list-timeout=10s
add chain=input protocol=tcp dst-port=7002 src-address-list=knock1 \
  action=add-src-to-address-list address-list=knock2 \
  address-list-timeout=10s
add chain=input protocol=tcp dst-port=54321 src-address-list=knock2 \
  action=accept
add chain=input protocol=tcp dst-port=54321 action=drop

Клиент подключается скриптом knock-script.sh IP 7001 7002, после чего запускает Winbox. Последовательность портов можно менять под свои задачи.

Кейс: укрепление firewall после взлома

В июне 2025 года к нам обратилась производственная компания из Подмосковья на 40 рабочих мест с критической ситуацией: на их MikroTik RB3011 взломали пароль администратора. Злоумышленник получил доступ и изменил настройки DNS на свой сервер с MITM (Man-in-the-Middle) — пользователи компании, сами того не подозревая, попадали на фишинговые страницы. Обнаружили это лишь спустя неделю, по странному трафику. Причина взлома была до банального проста: у аккаунта «mikrotik» в Winbox стоял пустой пароль, и порт 8291 был открыт в мир.

За один рабочий день мы:

За прошедшие полгода наши системы зарегистрировали 14 862 попытки брутфорса по SSH. Все до единой были заблокированы каскадным методом — ни одного успешного входа не произошло. Стоимость таких комплексных работ, включая расследование инцидента, составила 42 000 рублей — это заметно дешевле последствий взлома.

FastTrack и Connection Tracking

FastTrack – это, по сути, такой "скоростной проезд" для уже установленных соединений, он позволяет им обходить основные таблицы firewall. Знаете, насколько это эффективно? Производительность NAT может вырасти в 3–5 раз! Звучит здорово, правда? Но тут есть важный нюанс, такой скрытый камень: FastTrack делает пакеты абсолютно невидимыми для mangle и queue. Это значит, что если вы активно используете маркировку пакетов или занимаетесь шейпированием трафика (shaper), то вам придётся либо полностью отключить FastTrack, либо, как минимум, исключить из него те соединения, которые вы хотите контролировать. Иначе желаемого эффекта не будет.

# Проверить использование conntrack
/ip firewall connection print count-only
/ip firewall connection tracking print

NAT: маскарадинг и проброс портов

NAT содержит две цепочки: srcnat меняет адрес источника, dstnat — адрес назначения. Для динамического WAN IP используйте masquerade: он подставляет текущий IP интерфейса и корректно обрабатывает DHCP-переподключения. Если WAN IP статический — всегда выбирайте src-nat, он быстрее, так как использует фиксированный адрес.

/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade \
    comment="Masquerade to WAN"
add chain=srcnat out-interface=ether1 action=src-nat \
    to-addresses=203.0.113.1 comment="SNAT to static WAN IP"

Проброс портов для внешнего доступа к внутренним сервисам:

add chain=dstnat in-interface=ether1 protocol=tcp dst-port=443 \
    action=dst-nat to-addresses=10.0.1.10 to-ports=443 \
    comment="DNAT HTTPS to webserver"
add chain=dstnat in-interface=ether1 protocol=tcp dst-port=33389 \
    action=dst-nat to-addresses=10.0.1.20 to-ports=3389 \
    comment="DNAT RDP to terminal server"

Важно: проброшенные порты нужно разрешить и в цепочке forward. NAT меняет адрес назначения до фильтрации — иначе пакет дойдёт до сервера, но обратный путь упрётся в drop. Для доступа к проброшенным портам из LAN по внешнему IP добавьте hairpin NAT:

add chain=srcnat src-address=10.0.0.0/24 dst-address=10.0.1.10 \
    protocol=tcp dst-port=443 out-interface=bridge-servers \
    action=masquerade comment="Hairpin NAT for webserver"

Логирование и мониторинг

# Логируем дропы в отдельную тему
/system logging action
add name=fw-drops target=memory memory-lines=5000
/system logging
add topics=firewall action=fw-drops

# В правилах
add chain=input action=log log-prefix="drop-input" connection-state=new

# Экспорт на syslog-сервер
/system logging action
add name=remote target=remote remote=192.168.10.5 remote-port=514
/system logging add topics=firewall action=remote

Отладка трафика и бэкап правил

Для отладки конкретного трафика используйте временное правило action=log перед проблемным местом. Обязательно удалите его после диагностики: лишнее логирование поднимает нагрузку на CPU. Просмотр текущих правил со счётчиками срабатываний:

/ip firewall filter print stats
/ip firewall connection print where dst-address~":443"

Для бэкапа правил firewall используйте текстовый экспорт — его удобно хранить в git-репозитории для отслеживания изменений:

/ip firewall export file=fw-backup
/system backup save name=full-backup

Автоматизируйте через планировщик:

/system scheduler add name=fw-backup interval=1d \
    on-event="/ip firewall export file=fw-backup"

FAQ — правила firewall MikroTik

В каком порядке обрабатываются правила?
Сверху вниз до первого совпадения. Established+related всегда №1, final drop — последний.
Чем отличается filter от raw?
Raw работает до connection tracking и дешевле по ресурсам для мусорного трафика.
Стоит ли блокировать по странам?
Geo-blocking помогает, но не заменяет полноценную защиту. VPN и TOR обходят.
Как защититься от брутфорса?
Каскадный бан через address-list с timeout, перенос портов на нестандартные.
Нужен ли DDoS-protection на MikroTik?
Базовая защита встроена, но для серьёзных атак — облачные анти-DDoS сервисы.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды — полезно и руководителю IT-отдела, и сисадмину. Внутри — безопасность систем, тонкости работы с 1С, миграции, резервное копирование и лайфхаки из наших реальных, ежедневно выполняемых проектов. Это практика, а не теория.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.