Атаки на SSH – пожалуй самый распространенный тип атак, стоит только выставить 22 порт наружу как начнутся попытки подбора пароля.
Хороший вариант – настроить аутентификацию по ключу и запретить вход с логином и паролем, но у RouterOS нет такой возможности.
Поэтому будем выкручиваться другими методами, а именно считать пакеты со статусом NEW в течении некоторого небольшого времени, скажем 5 минут.
Здесь мы исходим из того, что легальный пользователь пришлет всего один такой пакет. Далее соединение будет установлено и пакеты пойдут со статусом ESTABLISHED. Ну максимум два, если пользователь неверно указал логин или не переключил раскладку (вход с паролем).
Поэтому оставим три легальных попытки, а каждый, кто будет превышать это количество отправится в бан.
Ловить пакеты мы будем в mangle – PREROUTING и отправлять их в отдельную цепочку FB-SSH, где и будем выполнять все проверки.
Адрес источника каждого нового пакета на 22 порт мы помещаем в список FB-SSH-1 на пять минут. Если пришел повторный новый пакет, то отправляем адрес уже в список FB-SSH-2 на 15 минут.
Третий новый пакет отправится в список FB-SSH-3 уже на час и теперь если в течении часа последует еще одна попытка подключения – адрес источник улетит в бан на сутки.
Такая схема с увеличением таймаутов позволяет бороться с умными ботами, которые не долбятся сразу, а выдерживают некие паузы, чтобы не попасть в блокировку.
Все это в терминале:
firewall mangle
add action=jump chain=prerouting connection-state=new dst-port=22 in-interface=ether1 jump-target=FB-SSH protocol=tcp
add action=add-src-to-address-list address-list=FB-SSH-BAN address-list-timeout=1d chain=FB-SSH connection-state=new dst-port=22 protocol=tcp src-address-list=FB-SSH-3
add action=add-src-to-address-list address-list=FB-SSH-3 address-list-timeout=1h chain=FB-SSH connection-state=new dst-port=22 protocol=tcp src-address-list=FB-SSH-2
add action=add-src-to-address-list address-list=FB-SSH-2 address-list-timeout=15m chain=FB-SSH connection-state=new dst-port=22 protocol=tcp src-address-list=FB-SSH-1
add action=add-src-to-address-list address-list=FB-SSH-1 address-list-timeout=5m chain=FB-SSH connection-state=new dst-port=22 protocol=tcp
Банить будем в raw, на самом подлете:
firewall raw
add action=drop chain=prerouting src-address-list=FB-SSH-BAN
Данный способ не обладает изяществом, но позволяет эффективно блокировать попытки подбора паролей к SSH, это сразу становится видно по сообщениям лога, точнее по их отсутствию.
Но будьте осторожны, чтобы самому не попасть под собственный фильтр и оставляйте запасные пути, например, через VPN.
