Блокировка попыток перебора паролей ssh с помощью fail2ban

Материал из Wiki AlterOS
Перейти к: навигация, поиск

Fail2ban - это утилита для защиты серверов от атак, основанная на системе блокировки адресов IP. Она используется для автоматической блокировки IP-адресов, с которых были замечены атаки на ваш сервер.

Fail2ban анализирует логи, такие как /var/log/auth.log, и ищет подозрительную активность, такую как попытки входа в систему с неправильным паролем или превышение порога безуспешных попыток доступа. Когда Fail2ban обнаруживает такую активность, он использует IPTables, чтобы добавить блокировку в firewall, которая препятствует дальнейшим попыткам доступа с этого адреса.

Эта утилита может уменьшить количество попыток взлома и увеличить безопасность вашего сервера. Fail2ban является обязательным инструментом для всех администраторов, которые заботятся о безопасности своих серверов.

Для установки утилиты необходимо выполнить следующую команду:

sudo yum install fail2ban

Начальная настройка

Fail2ban хранит свои конфигурационные файлы в папке:

/etc/fail2ban

В ней вы можете найти файл jail.conf который содержит настройки по умолчанию. Обращаем внимание, что данный файл может перезаписываться при обновлении пакетов. Поэтому для хранения ваших собственных настроек надо создать файл jail.local .

Для этого выполните команду:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Отредактируйте /etc/fail2ban/jail.local, чтобы настроить правила, подходящие для вашего сервера. Некоторые наиболее важные параметры, которые необходимо настроить, приведены ниже:

* `ignoreip` - список IP-адресов, которые не будут заблокированы при нарушении правил fail2ban
* `bantime` - период блокировки IP-адреса в секундах
* `maxretry` - максимальное количество неудачных попыток доступа, после которых IP-адрес будет заблокирован

Запустите fail2ban и настройте автозапуск:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Также вы можете создавать файлы с индивидуальными настройками в папке /etc/fail2ban/jail.d/ . В ходе работы Fail2ban настройки из этих файлов будут заменять настройки, указанные в jail.conf.

Настройки из файлов применяются в следующем порядке:

1. /etc/fail2ban/jail.conf
2. /etc/fail2ban/jail.d/*.conf, - любые файлы с расширением conf. Применяются в алфавитном порядке.
3. /etc/fail2ban/jail.local
4. /etc/fail2ban/jail.d/*.local, - любые файлы с расширением local. Применяются в алфавитном порядке.

Пример настройки раздела sshd в /etc/fail2ban/jail.local :

[sshd]
enabled = true
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
filter = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Параметр filter определяет, содержит ли строка в логах информацию об ошибочной авторизации или нет. Это отсылка к регулярным выражениям regex, которые находятся в файлах .conf в папке /etc/fail2ban/filter.d. Для каждого сервиса создается свой фильтр. Например, sshd имеет три конфигурационных файла на выбор: sshd.conf, sshd-ddos.conf и sshd-agressive.conf. В нашем примере мы использовали sshd-agressive как более надежный вариант.

Тестирование настроек fail2ban

После каждого внесения изменений в конфигурационный файл jail.local желательно проверять его на работоспособность:

sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

Составление регулярных выражений для фильтра

Для того чтобы fail2ban мог парсить логи используются регулярные выражения regex, которые указываются в файлах каждого фильтра. Конфигурационные файлы фильтров лежат в папке /etc/fail2ban/filter.d

Регулярные выражения имеют следующий вид:

^%(__prefix_line_sl)s[aA]uthentication (?:failure|error|failed) for .* from <HOST>( via \S+)?\s*%(__suff)s$
^%(__prefix_line_sl)sUser not known to the underlying authentication module for .* from <HOST>\s*%(__suff)s$
^%(__prefix_line_sl)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*%(__suff)s$
^%(__prefix_line_sl)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*%(__suff)s$
^%(__prefix_line_sl)sUser .+ from <HOST> not allowed because not in any group\s*%(__suff)s$
...

Перед тем как включать фильтр вы можете его протестировать на реальных логах командой:

sudo fail2ban-regex /var/log/my.log /etc/fail2ban/filter.d/myservice.conf

Также можно проверить каждое регулярное выражение по отдельности:

sudo fail2ban-regex /var/log/my.log "регулярное выражение"