# Настройка Fail2ban для защиты SSH-соединения

Любой сервер рано или поздно подвергается попытке взлома. Это не значит, что кто-то хочет взломать конкретно ваш сервер — в подавляющем большинстве случаев подобные атаки носят случайный характер и производятся ботами. Программа-взломщик ищет в сети доступный для SSH-подключения сервер и пытается подключиться к нему, перебирая имена пользователей и пароли.

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

В этой инструкции мы расскажем, как установить и настроить Fail2ban на вашем сервере.

Установку будем производить на сервер под управлением Ubuntu 20.04. Перед началом установки рекомендуем ознакомиться с инструкцией о его первичной настройке.

# Установка

Если до этого вы не обновляли базы данных apt, то установку можно начать с этого:

sudo apt update
sudo apt upgrade

После обновления apt можно переходить к установке Fail2ban:

sudo apt install fail2ban

Теперь активируем Fail2ban, чтобы она автоматически запускалась после перезагрузки сервера:

sudo systemctl enable fail2ban

Перед запуском Fail2ban в работу осталось настроить параметры фильтрации, по которым будет происходить блокировка IP.

# Настройка

По умолчанию Fail2ban использует правила блокировки, указанные в файле jail.conf. Это системный файл, который обновляется вместе с программой, поэтому использовать его в качестве основного файла с параметрами блокировки не рекомендуется.

Мы создадим собственный конфигурационный файл jail.local. Система приоритетов в Fail2ban настроена таким образом, что в качестве основных применяются правила, указанные в jail.local.

# Структура конфигурационного файла

Конфигурационный файл Fail2ban состоит из так называемых jail-ов — отдельных блоков правил для разных служб. В одном файле jail.local можно не только указать все правила для всех сетевых служб сервера, но и управлять их включением и выключением.

Структура всех jail-ов одинакова:

  1. В первой строке в квадратных скобках указывают название службы, к которой будет применяться следующий ниже набор правил. В нашем случае это [sshd].

  2. Далее определяют параметр enabled, отвечающий за включение или отключение данного jail-а. Мы установим его true, чтобы наш jail был активен.

  3. После этого указывают условия блокировки: максимальное количество попыток подключения (maxretry), время, за которое эти попытки были произведены (findtime), и время, на которое нужно запретить доступ с этого IP (bantime).

  4. В последней части jail-а указывают IP-адреса, которые считаются надёжными (ignoreip), например, IP-адрес вашего домашнего компьютера.

Мы рекомендуем добавить в строку ignoreip домашний адрес вашего компьютера, чтобы в случае особо жёстких настроек фильтрации программа не заблокировала вам доступ к серверу — например, после нескольких неудачных попыток ввода пароля.

Создадим конфигурационный файл:

sudo vim /etc/fail2ban/jail.local

Текст конфигурационного файла будет примерно таким:

[sshd]
enabled   = true
maxretry  = 6
findtime  = 1h
bantime   = 1d
ignoreip  = 127.0.0.1/8 23.34.45.56

Этот набор условий означает, что IP-адрес, с которого было произведено 6 неудачных попыток SSH-подключения за последний час (3600 секунд), будет заблокирован на одни сутки (86400 секунд). Не будут блокироваться IP-адреса в диапазоне от 127.0.0.1 до 127.0.0.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:

Здесь приведены сведения о попытках подключения к серверу и о заблокированных IP-адресах.

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

sudo systemctl restart fail2ban

Обратите внимание

Некоторые современные программы для брутфорса могут «обходить» заданные по умолчанию значения fail2ban. Например, делать 4 попытки подключения в течение 1 часа, ждать оставшееся время и пробовать подключиться заново. Поэтому мы рекомендуем установить собственные значения для всех условий.