Короткий ответ
Без логов firewall вы лечите вслепую. Включите log на критичных правилах: drop new с WAN 203.0.113.10, drop DMZ→LAN, accept публикаций (443, VPN UDP), reject админки с WAN. Не логируйте established всего офиса. Ставьте limit/limit rate. Пишите на syslog-узел в 10.0.99.0/24. Не debug навсегда, не отключайте фильтр, чтобы «tcpdump вместо логов».
Хранение — следующая статья: логи не хранятся. Здесь — чтобы событие появилось.
Симптомы и как отличить
Инцидент: «с улицы кто-то стучал» — на FW пусто. nft list без log на drop. RouterOS filter без action=log / log=yes. tcpdump в момент работает, ретроспективы нет.
| Нужно в логе | Не нужно |
|---|---|
| WAN new drop 22/8291/3389 | каждый ACK LAN |
| DMZ→LAN deny | DNS установленные |
| accept new VPN/443 (sample или каждый new) | FastTrack весь NAT |
| invalid drop sample | payload HTTP |
Отличие от IDS: firewall log — вердикт filter. IDS — сигнатура. Нужны оба, без дублирования без лимита.
Возможные причины
- Боялись CPU/диска — выключили всё.
- Логировали all, диск кончился, выключили снова.
logна правиле, но syslog не слушает,/logmemory 100.- FastTrack: пакет не доходит до log-правила.
- journald volatile.
- Prefix есть, grep не тот.
Диагностика
sudo nft list ruleset -a | grep -n log
journalctl -k -n 50 --no-pager | grep -iE 'nft|fw-|DROP'/ip firewall filter print where log=yes
/system logging print
/log print where topics~"firewall"Если log=yes нет нигде — журналирования нет. Если есть, а /log пуст: topics, prefix, memory-limit, remote syslog.
Концепция pf: log на block WAN. pflog интерфейс. Не выключайте pf.
Проверьте, что время NTP верное, иначе корреляция с приложением мертва.
Решение
Минимальный набор prefix:
WAN-DROP— new с WAN, не совпавший с allowWAN-OK-443/WAN-OK-WG— new accept публикацийDMZ-LAN-DENYADMIN-WAN-DROP— 22/8291 с WAN
Сценарий A. nftables Ubuntu
sudo cp /etc/nftables.conf /root/nftables.conf.bak.logНа drop WAN (цепь input или forward в зависимости от DNAT):
# идея в inet filter:
# iifname "ens18" ct state new limit rate 20/second burst 40 packets \
# log prefix "WAN-DROP " flags skuid,ether counter droplimit обязателен. flags — по необходимости, не payload.
На accept публикации:
# iifname "ens18" udp dport 51820 ct state new log prefix "WAN-OK-WG " counter acceptsudo nft -c -f /etc/nftables.conf
sudo systemctl reload nftables
sudo dmesg -T | tailkernel ring короткая: сразу rsyslog/journal remote.
Сценарий B. RouterOS 7
Не action=log вместо drop (тогда пакет пойдёт дальше). Либо log=yes на drop, либо отдельное log-правило с тем же match выше drop — аккуратно, чтобы не принять.
/ip firewall filter add chain=input in-interface-list=WAN connection-state=new \
action=drop log=yes log-prefix="WAN-DROP"
/ip firewall filter add chain=input in-interface-list=WAN protocol=udp dst-port=51820 \
action=accept log=yes log-prefix="WAN-OK-WG"
/system logging action add name=remote target=remote remote=10.0.99.20 remote-port=514
/system logging add topics=firewall,!info action=remoteПодберите topics так, чтобы не улетело всё info. Сверьте документацию вашей 7.x: не включайте debug глобально.
FastTrack: для логируемых new WAN не fasttrack'айте их до log, либо log на правиле accept до FastTrack.
Сценарий C. Только counters, log по запросу
Для отладки сервиса — временный log 5-tuple как в статье про блок сервиса. Для WAN drop — постоянно с лимитом.
Сценарий D. pfSense/OPNsense концепт
На block WAN включить log. На pass WAN 443 — log new если политика IR требует. Не «log all packets». Смотрите System logs / firewall, не выдумывая CLI.
Связь с NAT: логируйте original src, см. NAT скрывает источник.
Минимальный набор prefix, который SOC реально грепает
Договоритесь о словаре: WAN-DROP, WAN-OK-WG, WAN-OK-443, DMZ-LAN-DENY, ADMIN-WAN-DROP, EGRESS-DENY. Один prefix — один смысл. Не log prefix "test " на проде. В rsyslog/journald фильтр по строке, на log01 файл по prefix.
Проверка канала: с LTE свой SYN на закрытый 8291 203.0.113.10, через минуту grep WAN-DROP на 10.0.99.20. Если dmesg есть, а remote нет — чините forward syslog, не добавляйте второй log на то же правило. Limit на log: если при своём скане prefix исчез из-за rate, поднимите чуть, не снимайте limit.
На RouterOS не заменяйте action=drop log=yes на action=log: пакет уйдёт дальше в accept leftover. FastTrack: new WAN, который хотите видеть в /log, не должен исчезать в fasttrack до log-правила. Снимок print stats + несколько строк log — достаточный пакет для тикета «фильтр молчал».
Как проверить, что проблема устранена
С LTE свой SYN на закрытый порт своего 203.0.113.10 (например 8291, если закрыт):
nc -zv -w 2 203.0.113.10 8291 || trueНа FW появляется WAN-DROP с вашим LTE-адресом. С mgmt успешный WG — WAN-OK-WG. Диск не растёт мегабайтами в секунду. journalctl/log print показывают prefix.
Не сканируйте чужие хосты для генерации логов.
Если не помогло
- Логи в kern, rsyslog не забирает
kern.*. - Container/journalt rate-limit drop.
- Не тот интерфейс WAN.
- Правило log ниже FastTrack/queue.
- Удалённый syslog недоступен из
10.0.99.0/24— сначала локально.
Профилактика
- Чеклист нового правила: counter есть; log есть если WAN или deny межзона.
- Алерт: 0 firewall logs за час при ненулевом WAN traffic — сломан syslog.
- Ревизия: лишние log без limit удалить.
- NTP.
- Документ prefix в runbook SOC.
FAQ
Логировать accept all LAN→WAN?
Нет. Volume убьёт смысл. Sample или только серверный egress.
log vs nflog vs ulogd
nft log в kernel syslog проще. ulogd — если уже стандарт. Не ставьте оба на тот же match без нужды.
Можно ли логировать в файл на самом FW?
Кратко да, постоянно лучше remote. Иначе компрометация FW = потеря улик.
RouterOS memory 1000 строк
Это не хранение. Remote syslog обязателен.
Не раздует ли это IDS?
Разные каналы. Можно коррелировать по времени, не копировать каждый firewall log в Suricata.