Mikrotik SSH access with PIN-code & Fail2Ban
Илья Шумилкин @cgood.ru
Почему
В случае, когда к вашему маршрутизатору на SSH "стучится" большое количество IP адресов (bruteforce или SSH DDoS с IP spoofing'ом), защита одним Fail2Ban не помогает, address-lists набивается тысячами записей и CPU греется на 100%.
Варианты
- Можно ограничиться ACL с доверенными IP сетями - это удобно когда Вы постоянно в них работаете.
- Можно вешать VPN и ходить через него, НО, как показывает практика - это сразу несколько точек отказа (VPN клиент, Internet канал, VPN сервер).
- Port knocking ... см. далее.
- Прочие варианты
Port knocking
В данной заметке у нас TCP порты (бывает ICMP с заданным размером пакета). Принцип работы: чтобы открыть порт доступа (SSH TCP 22) необходимо в заданный интервал времени в правильной последовательности "пошупать" TCP порты.
Config
/ip firewall filter
# Отправляем на обработку в разные цепочки правил
add action=jump chain=input connection-state=new dst-port=22 jump-target=f2b protocol=tcp src-address-list=pincode_accept dst-address=10.20.3.15
add action=jump chain=input connection-state=new dst-port=22,1020,315 jump-target=pin protocol=tcp dst-address=10.20.3.15
# Fail2Ban Chain
add chain=f2b action=drop src-address-list=f2b_drop
add chain=f2b action=add-src-to-address-list address-list=f2b_drop address-list-timeout=10m src-address-list=f2b-3
add chain=f2b action=add-src-to-address-list address-list=f2b-3 address-list-timeout=1m src-address-list=f2b-2
add chain=f2b action=add-src-to-address-list address-list=f2b-2 address-list-timeout=1m src-address-list=f2b-1
add action=accept chain=f2b
#
add chain=pin action=add-src-to-address-list address-list=f2b-1 address-list-timeout=1m src-address-list=pincode_accept
add chain=pin action=add-src-to-address-list address-list=pincode_accept address-list-timeout=30s dst-port=315 protocol=tcp src-address-list=\
pincode-2
add chain=pin action=add-src-to-address-list address-list=pincode-2 address-list-timeout=30s dst-port=1020 protocol=tcp src-address-list=pincode-1
add chain=pin action=add-src-to-address-list address-list=pincode-1 address-list-timeout=30s dst-port=22 protocol=tcp
#
Nmap
nmap -sT -p22 -Pn 10.20.3.15
nmap -sT -p22,1020,315 -Pn --max-retries=0 10.20.3.15