Короткий ответ
Any-any — правило, у которого источник, назначение и часто порт не ограничены: accept с 0.0.0.0/0, пустые src/dst в RouterOS, pass in on wan from any to any. Его нельзя «просто удалить» в пятницу без съёма потоков: вы уроните почту, VPN и мониторинг. Сначала инвентаризация: counters, conntrack, логи, матрица. Затем замена на узкие 5-tuple. Firewall остаётся включённым всё время.
Ищите не только WAN inbound. Исходящий any-any с серверов — отдельная дыра, см. egress.
Плейсхолдеры: WAN 203.0.113.10, LAN 10.0.10.0/24, DMZ 10.0.30.0/24, mgmt 10.0.99.0/24.
Симптомы и как отличить
В выгрузке на видном месте:
add chain=forward action=accept comment="temp 2023"без src/dst/port — это any-any. В nft: ip saddr 0.0.0.0/0 ip daddr 0.0.0.0/0 accept или просто accept без матчей в цепи с policy accept.
| Вид | Риск | Не путать с |
|---|---|---|
| accept established,related без адресов | норма stateful | any-any new |
| accept iif LAN без порта | LAN→anywhere new | почти any |
| accept WAN tcp 443 к VIP | публикация | узкое, ок в матрице |
| accept WAN без порта | катастрофа | эта статья |
Скан своего 203.0.113.10 показывает кучу open — следствие, не определение. Определение — текст правила.
Возможные причины
- Временный доступ подрядчику, заявку закрыли, правило нет.
- Миграция с «роутера из коробки» (accept forward).
- «Чтобы VPN заработал» вместо разбора AllowedIPs.
- Копипаст с стенда, где policy accept.
- Shadow: думали, что нижний drop закрывает, верхний any съедает всё — порядок.
- Интерфейсный pass any на LAN в pf «как в мастере», без разделения DMZ/mgmt.
Диагностика
1. Найти кандидатов
sudo nft list ruleset -a | grep -n -iE 'accept|drop|0.0.0.0'Ищите линии accept без dport/saddr/iifname в input/forward. Established — исключите из травли.
/ip firewall filter print where action=acceptПустые src-address, dst-address, dst-port, in-interface на new — кандидат. Цепь output шлюза тоже просмотрите.
2. Что реально ходит через правило
Не гадайте. Снимите:
sudo conntrack -L -o extended | awk '{print $1,$3,$4,$5}' | sort | uniq -c | sort -nr | head/ip firewall connection print without-paging
/ip firewall filter print statsВключите временный log только на этом правиле (prefix ANYANY), на час рабочего дня. Соберите уникальные dst-port и dst-address. Это черновик новой матрицы.
3. Разделите направления
- inbound WAN → LAN/DMZ
- LAN → WAN (пользователи в интернет часто широкие — это не то же, что WAN→LAN)
- LAN → DMZ
- DMZ → LAN (должно быть почти пусто)
- mgmt → rest
WAN→LAN any-any снимают в первую очередь. LAN→WAN «весь интернет» для пользователей — отдельное продуктовое решение, не маскируйте его тем же правилом, что открывает RDP с улицы.
4. Концептуальный периметр
В GUI: правило WAN с source any, dest any, port any, action pass — удалять после списка реально занятых портов. Floating any pass выше интерфейсных — тоже.
Решение
Сценарий A. WAN inbound any-any
- Backup:
nft listв файл, RouterOSbackup+export. - По log/conntrack составьте список нужных публикаций (обычно 443 на VIP, UDP VPN).
- Добавьте узкие allow выше any-any.
- Проверьте бизнесом.
- Disable any-any (не delete) на 24–72 часа.
- Если тихо — delete, обновите матрицу портов.
nft-идея (WAN nic ens18):
sudo cp /etc/nftables.conf /root/nftables.conf.bak.anyany
# выше leftover: только 443 на опубликованный VIP и WG
# leftover затем disable: закомментировать accept без матчей
sudo nft -c -f /etc/nftables.confRouterOS:
/system backup save name=before-anyany
/ip firewall filter add chain=input action=accept connection-state=established,related place-before=0
/ip firewall filter add chain=input in-interface-list=WAN protocol=udp dst-port=51820 action=accept comment="WG from matrix"
/ip firewall filter add chain=forward in-interface-list=WAN dst-address=10.0.30.10 protocol=tcp dst-port=443 action=accept comment="web DMZ"Затем disable на any-any. Не action=drop всей цепи без established — убьёте сессии.
Сценарий B. LAN→DMZ any
Замените на списки: 443 к 10.0.30.10, 25 к почтовому, DNS к резолверу. Остальное drop. Пользователи не должны ходить на SMB/RDP серверов «потому что any».
Сценарий C. DMZ→LAN any
Считайте инцидентом. Разрешите только явно нужное (например SQL с 10.0.30.10 на 10.0.10.20:5432 если так задумано — лучше не так, см. DMZ). Остальное запретите.
Сценарий D. Mgmt any
Админы любят any из 10.0.99.0/24. Сузьте до протоколов админки (22, 443, WinBox 8291, гипервизор) и до целевых сетей. Не оставляйте mgmt→WAN any без учёта утечек.
После замены прогоните ревизию и внешний скан своего IP.
Как проверить, что проблема устранена
- В filter нет accept без адреса/порта для new в input/forward с WAN.
- С LTE: лишние порты на
203.0.113.10закрыты. - Бизнес-потоки из чеклиста (VPN, сайт, почта, RDP из LAN/VPN) живы.
- Counter бывшего any-any после disable = 0 (если правило ещё висит disabled — ок).
- Conntrack не показывает новые WAN→LAN 3389/445.
Если не помогло
- Упал «неизвестный» интеграционный хост — верните disable→enable любого leftover только на этот 5-tuple, не весь any. Допишите в матрицу.
- Сломался IPv6: отдельный any в ip6.
- NAT hide: смотрите dstnat плюс forward, не только filter.
- Скрипт каждую ночь возвращает any — убейте источник.
- Пользователи ждут «весь интернет с серверов» — это уже egress policy, не откат any inbound.
Профилактика
- Политика: любое
0.0.0.0/0на new с WAN — запрещено без CISO/владельца периметра. - Срок жизни temp-правил в комментарии, календарь снятия.
- CI/выгрузка: grep any-any в export.
- Разделение цепей LAN-in / WAN-in / DMZ-in, чтобы any не «прилип» не туда.
- Квартальный отчёт counters топ-правил: одно правило 90% трафика new — подозрительно.
FAQ
Established any — это any-any?
Нет. Это state. Травите new/invalid без адресов.
Пользователям в интернет тоже any?
Исход 10.0.10.0/24 → WAN часто широк по портам. Это не WAN inbound any. Всё равно лучше не 25/445 исходящие с клиентского VLAN без нужды.
Можно ли заменить any-any на GeoIP allow своей страны?
Слабая замена, не эквивалент матрицы. См. GeoIP. Сначала 5-tuple.
Disable vs drop на leftover
Disable безопаснее на переход: видно в конфиге. После окна — delete, чтобы не включили обратно.
Что писать в заявке на снятие?
Снимок правила, топ dst из log, список новых allow, план отката (enable leftover), кто тестировал VPN и 443.