Столкнулся с проблемой перебора паролей на одном из обслуживаемых web ресурсов. Решение в лоб fail2ban.
Fail2ban — простой сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.
Решение конечно же не защитит от массированной децентрализованной атаки бот-сети, но по крайней мере сможет усложнить жизнь потенциальным взломщикам.
Настройка fail2ban производится в несколько строчек:
1. Настраиваем фильтр:
По регулярному выражению я буду смотреть строчки лога с 401 ошибкой, содержащий слово «login».
/etc/fail2ban/filter.d/wrongauth.conf:
[Definition] failregex = ^ - .*login.* 401 ignoreregex =
2. Настраиваем применение:
Применяем фильтр «wrongauth» на файл «/var/log/nginx/web.site.log», если 3 раза правило срабатывает, то блокируем ip на «bantime» секунд.
/etc/fail2ban/jail.conf:
[wrongauth] enabled = true filter = wrongauth port = http,https logpath = /var/log/nginx/web.site.log maxretry = 3 bantime = 600
Если «решение в лоб» не подходит, можно немного по импровизировать:
/etc/fail2ban/filter.d/f2b-loop.conf:
# Fail2Ban configuration file for subsequent bans # [INCLUDES] before = common.conf [Definition] failregex = \]\s+Ban\s+ignoreregex = \[f2b-loop.*\]\s+Ban\s+ # # Author: Walter Heitman Jr. http://blog.shanock.com
/etc/fail2ban/jail.local:
[DEFAULT] bantime = 10800 ;3 hours findtime = 86400 ;1 day maxretry = 5 [f2b-loop2] enabled = true filter = f2b-loop bantime = 86400 ;1 day findtime = 604800 ;1 week logpath = /var/log/fail2ban.log maxretry = 2 [f2b-loop3] enabled = true filter = f2b-loop bantime = 604800 ;1 week findtime = 2592000 ;1 month logpath = /var/log/fail2ban.log maxretry = 3 [f2b-loop4] enabled = true filter = f2b-loop bantime = 2592000 ;1 month findtime = 15552000 ;6 months logpath = /var/log/fail2ban.log maxretry = 6 [f2b-loop5] enabled = true filter = f2b-loop bantime = 15552000 ;6 months findtime = 31536000 ;1 year logpath = /var/log/fail2ban.log maxretry = 9