Обновить
Комментарии 12
Это конечно все хорошо, но меня, как пользователя микротика, интересует один вопрос: какое количество filter-rules микротик может обработать без напряга? После какого числа он начнет напрягаться? 10 тысяч, 100 тысяч, 10 миллионов записей?
Ну и второй вопрос… Можно ли как-нибудь заставить микротик (желательно именно его) добавлять в блэклист (допустимо добавление даже на час), в случае если с определенного IP прилетает очень много коннектов (брутфорсят SSH) за короткий промежуток времени?
Это конечно все хорошо, но меня, как пользователя микротика, интересует один вопрос: какое количество filter-rules микротик может обработать без напряга? После какого числа он начнет напрягаться? 10 тысяч, 100 тысяч, 10 миллионов записей?

Это зависит от конфигурации Вашего роутера, объёма ОЗУ, ЦПУ, количества пропускаемого трафика, типов используемых фильтров, погоды за бортом, влажности, и т.д. и т.п.

Ну и второй вопрос… Можно ли как-нибудь заставить микротик (желательно именно его) добавлять в блэклист (допустимо добавление даже на час), в случае если с определенного IP прилетает очень много коннектов (брутфорсят SSH) за короткий промежуток времени?

Теоретически следующие правила должны это сделать, практически — надо тестировать.
Первое правило добавляет IP адреса в список BLACKLIST есть количество коннектов равно, либо превышает 100, второе правило блокирует коннекты для IP адресов находящихся в списке BLACKLIST. Повторюсь схема теоретическая, нужно тестирование.
add action=add-src-to-address-list address-list=BLACKLIST chain=forward connection-limit=100,32 dst-port=22 in-interface=Internet protocol=tcp address-list-timeout=1h comment="Limit SSH connections" tcp-flags=syn
add action=drop chain=forward comment="Drop SSH connections for blacklisted hosts" dst-port=22 in-interface=Internet protocol=tcp src-address-list=BLACKLIST
Я пользуюсь этим:

/ip firewall filter
add action=drop chain=input comment="drop ssh brute forcers" disabled=no \
    dst-port=22 protocol=tcp src-address-list=ssh_blacklist
add action=add-src-to-address-list address-list=ssh_blacklist \
    address-list-timeout=1w3d chain=input comment="" connection-state=new \
    disabled=no dst-port=22 protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_stage3 \
    address-list-timeout=1m chain=input comment="" connection-state=new \
    disabled=no dst-port=22 protocol=tcp src-address-list=ssh_stage2
add action=add-src-to-address-list address-list=ssh_stage2 \
    address-list-timeout=1m chain=input comment="" connection-state=new \
    disabled=no dst-port=22 protocol=tcp src-address-list=ssh_stage1
add action=add-src-to-address-list address-list=ssh_stage1 \
    address-list-timeout=1m chain=input comment="" connection-state=new \
    disabled=no dst-port=22 protocol=tcp

Данное решение не работает, если атакующий будет совершать 1 попытку в минуту, он не поднимется выше списка ssh_stage1.
Я больше скажу, данное решение вообще не смотрит, была попытка авторизации успешной или нет. Оно тупо не даёт логиниться чаще, чем три раза в минуту. Как показывают мои логи, левые попытки авторизации идут частыми сериями. «Медленных» переборов я в логах за несколько лет не встречал.
Спасибо! Работает отлично! Только пришлось заменить цепочку с input на forward, а то у меня есть dstnat правило для ssh.
Это зависит от конфигурации Вашего роутера, объёма ОЗУ, ЦПУ, количества пропускаемого трафика, типов используемых фильтров, погоды за бортом, влажности, и т.д. и т.п.

Роутер обычный, 951G-2HnD, RAM/HDD по 128Mb.
На текущий момент маршрутизируется в среднем 5mbit (в ближайшем будущем подумываю притянуть еще один аплинк, и там будет где-то +5mbit +udp multicast, итого, где-то около 20-40mbit в общей сложенности, в пиках), в общем, не так уж и много.
И да, на текущий момент фильтров почти нет (для определенных src addr/dst port прописаны дропы), влажность в пределах нормы, температура комнатная :D
Теоретически следующие правила должны это сделать, практически — надо тестировать.
Первое правило добавляет IP адреса в список BLACKLIST есть количество коннектов равно, либо превышает 100, второе правило блокирует коннекты для IP адресов находящихся в списке BLACKLIST. Повторюсь схема теоретическая, нужно тестирование.

Спасибо! Завтра-послезавтра попробую! :)
Имеется схожий по характеристикам микротик — RB2011UaS-2HnD. Настроено 35 различных фильтров, 15 правил для пометки соединений/пакетов (mangle) в зависимости от адреса/порта назначения, с большими (очень большими) списками адресов, для последующей приоритезации трафика (simple queue). Так же добавлено 18 правил в цепочку NAT.

В пиках роутер пропускает порядка 80Mbit, при этом загрузка ЦПУ поднимается до 80-90%, в штатном режиме — 20-30Mbit ЦПУ загружен на 30%. ОЗУ используется на 30% при любом количестве трафика.

Хотелось бы уточнить, допустим Вы добавили 100 тысяч фильтров и всё работает нормально. Как Вы потом будете это администрировать?
Обычно создаются какие-то общие правила, при необходимости добавляются списки адресов для разрешения/запрещения трафика.
для статистики: мой старенький MT RB450 (MIPS 24K V7.4 cpu @ 300MHz, 32M RAM) работал с 160+ правилами ip firewall (18 списков, много mangle) на стомегабитном торрент-трафике без каких-либо нареканий. Сейчас правил куда меньше. Но ip firewall в нём адски производительный, тормоза начинаются, если мутить бридж с фильтрами over EoIP over AES-encrypted VPN over PPPoE. Вот на такой задаче мой старичок выше 5 Мбит никогда не прыгал.
На текущий момент у меня мало правил, всего парочка дропов, а штук 10 правил в цепочке dstnat. Пока проблем в поддержке не возникает (ну, это, как вы понимаете, пока). Приоретизацию трафика хотел пощупать (есть игровой сервер, и надо бы для него помечать трафик как высокоприоритетный, но пока руки не дошли).
Пока-что нагрузка в среднем 1-5% на проц. Я не представляю как я буду разруливать не то что 100 тысяч, я не представляю как я буду разруливать 100-200 правил (я все-таки программист, а не админ).

Думаю что когда притяну второй аплинк займусь всем этим. И шейпингом, и лоадбалансингом, и роутингом трафика, и фильтрацией всякого говна конечно же :)

Правда пока-что даже не представляю как себя поведет микротик когда появится мультикаст в моей сети, и тем более не представляю как он себя поведет, когда я этот мультикаст заверну в VPN =))
На текущий момент у меня мало правил, всего парочка дропов, а штук 10 правил в цепочке dstnat.

То есть Вы открыты всему свету за исключением «избранных», чьи коннекты дропаются?

По хорошему у Вас должно быть как-то так:
# Дропаем невалидные форварды
chain=forward action=drop connection-state=invalid
# Аналогичные 10 правил, только в цепочке forward, например SSH
chain=forward action=accept protocol=tcp in-interface=Internet dst-port=22

# Разрешаем форвардинг и локальной сети в Интернет
chain=forward action=accept in-interface=bridge-local out-interface=Internet
# Дропаем все остальные форварды
chain=forward action=drop
# Закрываем наш микротик от внешнего мира
chain=input action=drop connection-state=invalid in-interface=Internet
# Разрешаем ICMP, если надо
chain=input action=accept protocol=icmp in-interface=Internet
chain=input action=accept connection-state=established in-interface=Internet
chain=input action=accept connection-state=related in-interface=Internet
# Остальное дропаем
chain=input action=drop in-interface=Internet

Пока-что нагрузка в среднем 1-5% на проц. Я не представляю как я буду разруливать не то что 100 тысяч, я не представляю как я буду разруливать 100-200 правил (я все-таки программист, а не админ).

Так Вы и подойдите к этому делу как программист :D
Напишите пару правил-функций и пуска в них попадают коннекты по определённому признаку, например из определённого списка.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.