MikroTik firewall: лучшие практики и правила — АйТи Фреш
· 17 мин чтения

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

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

Я, Семёнов Евгений Сергеевич, директор ITFresh. За свои 15+ лет глубокого погружения в настройку MikroTik, могу сказать, видел я всякое. Иногда поражаешься! Например, сталкиваешься с офисами, где на MikroTik стоит firewall с правилом «allow all» – и что дальше? Внутренние принтеры спокойно "торчат" прямо в интернет, да ещё и с открытым PJL. Представьте себе! Или же другая крайность: сотни правил, добрая половина которых просто дублирует друг друга. Зачем так усложнять? По нашему убеждению, хороший, действительно правильный firewall – это всегда про поиск той самой золотой середины. Это тонкий компромисс между максимальной безопасностью и, конечно же, производительностью системы. Возьмём конкретный пример: нормальный комплект на 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-цепочку трогают гораздо реже. Зачем? Только если вдруг сам роутер начинает генерировать какой-то подозрительный трафик, или если нам позарез нужны специальные маркировки пакетов для последующей балансировки нагрузки.

Универсальный шаблон 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 года? К нам тогда обратилась одна производственная компания из Подмосковья, у них 80 рабочих мест. Ситуация была критическая: на их 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 💬 MAX: +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 подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.