Good

MikroTik Firewall

Базова структура

MikroTik firewall складається з:

  1. Filter - фільтрація пакетів
  2. NAT - трансляція адрес
  3. Mangle - маркування пакетів
  4. Raw - обробка до conntrack
flowchart TB
    subgraph Firewall ["MikroTik Firewall Tables"]
        Raw[🔴 Raw<br/>Pre-conntrack]
        Mangle[🟠 Mangle<br/>Packet marking]
        NAT[🟢 NAT<br/>Address translation]
        Filter[🔵 Filter<br/>Accept/Drop]
    end

    Packet([📦 Packet]) --> Raw
    Raw --> Mangle
    Mangle --> NAT
    NAT --> Filter
    Filter --> Decision{Accept?}
    Decision -->|Yes| Forward([✅ Forward/Output])
    Decision -->|No| Drop([❌ Drop])

Packet Flow через Chains

flowchart LR
    subgraph Input ["INPUT Chain"]
        direction TB
        I1[Packet to router]
        I2[Filter rules]
        I3[Local process]
        I1 --> I2 --> I3
    end

    subgraph Forward ["FORWARD Chain"]
        direction TB
        F1[Transit packet]
        F2[Filter rules]
        F3[Route out]
        F1 --> F2 --> F3
    end

    subgraph Output ["OUTPUT Chain"]
        direction TB
        O1[Local process]
        O2[Filter rules]
        O3[Send out]
        O1 --> O2 --> O3
    end

    Internet((🌐)) -->|To router| Input
    Internet -->|Transit| Forward
    Output -->|From router| Internet

Базовий захист

Input Chain (вхідний трафік на роутер)

/ip firewall filter

# Дозволити established, related
add chain=input action=accept connection-state=established,related

# Дозволити ICMP
add chain=input action=accept protocol=icmp

# Дозволити SSH з довірених мереж
add chain=input action=accept protocol=tcp dst-port=22 \
    src-address-list=trusted

# Дозволити WireGuard
add chain=input action=accept protocol=udp dst-port=51820

# Дропнути все інше
add chain=input action=drop

Forward Chain

# Дозволити established, related
add chain=forward action=accept connection-state=established,related

# Дозволити LAN -> WAN
add chain=forward action=accept in-interface=bridge-lan \
    out-interface=ether1-wan

# Дропнути invalid
add chain=forward action=drop connection-state=invalid

# Дропнути все інше з WAN
add chain=forward action=drop in-interface=ether1-wan

Address Lists

/ip firewall address-list
add list=trusted address=10.0.0.0/8
add list=trusted address=192.168.0.0/16
add list=blacklist address=1.2.3.4 comment="scanner"

NAT

flowchart LR
    subgraph LAN ["LAN (192.168.1.0/24)"]
        PC1[💻 PC1<br/>192.168.1.10]
        PC2[💻 PC2<br/>192.168.1.11]
    end

    subgraph Router ["MikroTik Router"]
        SRCNAT[SRCNAT<br/>Masquerade]
        DSTNAT[DSTNAT<br/>Port Forward]
    end

    Internet((🌐<br/>1.2.3.4))

    PC1 -->|src: 192.168.1.10| SRCNAT
    PC2 -->|src: 192.168.1.11| SRCNAT
    SRCNAT -->|src: 1.2.3.4| Internet

    Internet -->|dst: 1.2.3.4:443| DSTNAT
    DSTNAT -->|dst: 192.168.1.10:443| PC1

Masquerade

/ip firewall nat
add chain=srcnat out-interface=ether1-wan action=masquerade

Port Forwarding

add chain=dstnat protocol=tcp dst-port=443 \
    action=dst-nat to-addresses=192.168.1.10 to-ports=443

Best Practices

  1. Завжди використовуйте connection-state
  2. Логуйте дропнуті пакети для діагностики
  3. Використовуйте address-list для управління
  4. Регулярно перевіряйте правила

Troubleshooting

Порядок правил — drop перед accept
- Симптом: Після додавання нового правила accept для SSH доступ все одно блокується.
- Причина: Firewall обробляє правила згори вниз. Якщо action=drop стоїть раніше ніж ваш новий accept, drop спрацює першим і пакет не дійде до потрібного правила.
- Рішення: Перевірити порядок: /ip firewall filter print. Перемістити нове правило вище: /ip firewall filter move [find comment="allow ssh"] destination=0. Використовуйте коментарі для читабельності.

Відсутнє правило established,related
- Симптом: Вихідні з'єднання (ping 8.8.8.8, browsing) працюють перший пакет, потім зависають. DNS запити не повертаються.
- Причина: Немає правила connection-state=established,related action=accept на початку input/forward chain, тому відповідні пакети дропаються загальним drop.
- Рішення: Додати першим правилом у кожному chain: /ip firewall filter add chain=input connection-state=established,related action=accept place-before=0. Те ж саме для forward chain. Також додати connection-state=invalid action=drop перед accept-ами.

Masquerade неправильний напрямок або дублювання
- Симптом: LAN клієнти не виходять в Інтернет, або source IP в логах ISP не той, що очікується. Іноді dst-nat не спрацьовує.
- Причина: out-interface вказано на LAN-інтерфейс замість WAN, або є кілька masquerade правил, які конфліктують. Також dst-nat має йти в chain=dstnat, а не srcnat.
- Рішення: Masquerade повинен бути в chain=srcnat з out-interface WAN: /ip firewall nat add chain=srcnat out-interface=ether1-wan action=masquerade. Port forwarding — chain=dstnat з in-interface=WAN. Перевірити лічильники: /ip firewall nat print stats — якщо counter нулі, правило не спрацьовує.

Логи відсутні — неможливо діагностувати drop
- Симптом: Правила дропають трафік, але в /log print нічого немає.
- Причина: За замовчуванням drop правила не логуються. Action=drop не пише в лог без явного вказання.
- Рішення: Додати додаткове правило log перед drop: /ip firewall filter add chain=input action=log log-prefix="DROP-INPUT:" place-before=[drop rule id], або використати action=log та action=drop послідовно. Подивитись: /log print where topics~"firewall". Для постійних проблем — див. MikroTik troubleshooting.

Пов'язані статті

Шлях: networking/mikrotik/firewall.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications