Fail2ban для SSH
ЛЮбой сервер переодически становится целью для попытки взлома. Чаще всего, это происходит ботом и носит случайный характер. Бот ищет в сети доступные для подключения по SSH сервера и пробует подключиться к ним методом перебора логина и пароля.
Для защиты от атак можно использовать программу Fail2ban. Она отслеживает логи подключения к серверу и в случае превышения определенного количества попыток, блокирует IP.
Далее будет инструкция, как установить, настроить и запустить Fail2ban на своем сервере.
Устонавливать будем на Debian 12
Установка
Для начала обновим список пакетов apt:
sudo apt update
sudo apt upgrade
sudo apt install fail2ban
sudo systemctl enable fail2ban
Осталось проверить и настроить параметры фильтрации, согласно которым будет происходить блокировка IP.
Настройка
По умолчанию Fail2ban использует правила блокировки, указанные в файле jail.conf. Это системный файл, который обновляется вместе с программой, поэтому использовать его в качестве основного файла с параметрами блокировки не рекомендуется.
Мы создадим собственный конфигурационный файл jail.local. Система приоритетов в Fail2ban настроена таким образом, что в качестве основных применяются правила, указанные в jail.local.
Структура конфигурационного файла
Конфигурационный файл Fail2ban состоит из так называемых jail-ов — отдельных блоков правил для разных служб. В одном файле jail.local можно не только указать все правила для всех сетевых служб сервера, но и управлять их включением и выключением.
Структура всех jail-ов одинакова:
В первой строке в квадратных скобках указывают название службы, к которой будет применяться следующий ниже набор правил. В нашем случае это [sshd].
Далее определяют параметр enabled, отвечающий за включение или отключение данного jail-а. Мы установим его true, чтобы наш jail был активен.
После этого указывают условия блокировки: максимальное количество попыток подключения (maxretry), время, за которое эти попытки были произведены (findtime), и время, на которое нужно запретить доступ с этого IP (bantime).
В последней части jail-а указывают IP-адреса, которые считаются надёжными (ignoreip), например, IP-адрес вашего домашнего компьютера.
Мы рекомендуем добавить в строку ignoreip домашний адрес вашего компьютера, чтобы в случае особо жёстких настроек фильтрации программа не заблокировала вам доступ к серверу — например, после нескольких неудачных попыток ввода пароля.
Создадим конфигурационный файл:
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 6
findtime = 1h
bantime = 1d
ignoreip = 127.0.0.1/8 23.34.45.56
Время для параметров findtime и bantime можно указывать не только в секундах, но и в минутах, часах, днях и даже неделях. Для этого необходимо сразу после численного значения параметра указать соответствующую букву (m, h, d, w).
Получение уведомлений
После строки с указанием надёжных IP можно добавить параметр, отвечающий за отправку на e-mail уведомлений о заблокированных IP.
Добавьте в конфигурационный файл строку:
destemail=admin@example.com Теперь на указанную здесь почту будут приходить уведомления о каждом заблокированном программой IP-адресе.
Чтобы получать более детальную информацию о заблокированных IP, на сервер можно установить службу whois:
sudo apt install whois В этом случае в письма о блокировке будут добавлены более подробные сведения, получаемые службой whois.
Будьте внимательны при настройке уведомлений!
Fail2ban отправляет отдельным письмом сведения о каждом заблокированном IP, а в случае брутфорс-атаки количество IP, с которых проводится подключение, может достигать нескольких сотен.
Начало работы
После создания конфигурационного файла, содержащего все необходимые правила, можно запускать Fail2ban и наблюдать за его работой.
Команда для запуска программы:
sudo systemctl start fail2ban Команда для вывода на экран сведений о работе jail-а, отвечающего за службу sshd:
sudo fail2ban-client status sshd Если в данный момент сервер не подвергается атаке, сразу после установки и запуска программы на экране будет следующая информация:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Если вы решите изменить настройки, указанные в конфигурационном файле jail.local,` не забудьте перезапустить Fail2ban, чтобы изменения вступили в силу:
sudo systemctl restart fail2ban
Некоторые современные программы для брутфорса могут «обходить» заданные по умолчанию значения fail2ban. Например, делать 4 попытки подключения в течение 1 часа, ждать оставшееся время и пробовать подключиться заново. Поэтому мы рекомендуем установить собственные значения для всех условий.