Fail2ban: Перебор паролей web приложения


Столкнулся с проблемой перебора паролей на одном из обслуживаемых 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

Если «решение в лоб» не подходит, можно немного по импровизировать:

  • На хабре есть реализация Fail2ban [incremental], которая запоминает плохие IP адреса, каждый раз динамически (экспоненциально) увеличивает время блокировки (banTime) в зависимости от количества предыдущих запретов (banCount).
  • Если нет желания пересобирать пакеты и ставить кастомные решения, то можно анализировать логи самого Fail2ban. Тем самым можно увеличить время блокировки ранее заблокированного ip, при повторной попытке перебора паролей: Fail2Ban How To: Increased Ban Times for Repeat Offenders
  • /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
    
    Вы можете оставить комментарий ниже.