MikroTik Firewall¶
Базова структура¶
MikroTik firewall складається з:
- Filter - фільтрація пакетів
- NAT - трансляція адрес
- Mangle - маркування пакетів
- 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| PC1Masquerade¶
/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¶
- Завжди використовуйте connection-state
- Логуйте дропнуті пакети для діагностики
- Використовуйте address-list для управління
- Регулярно перевіряйте правила
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.
Пов'язані статті¶
- Основи RouterOS — перед налаштуванням firewall
- DHCP/DNS на MikroTik — базові сервіси
- MikroTik troubleshooting — діагностика
- Linux firewall — порівняти з nftables/iptables
- mikrotik — що таке MikroTik
- nat — теорія NAT
- MikroTik backup — зробіть перед змінами
Шлях: networking/mikrotik/firewall.md