# Настройка 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-ов одинакова:
В первой строке в квадратных скобках указывают название службы, к которой будет применяться следующий ниже набор правил. В нашем случае это [sshd].
Далее определяют параметр enabled, отвечающий за включение или отключение данного jail-а. Мы установим его true, чтобы наш jail был активен.
После этого указывают условия блокировки: максимальное количество попыток подключения (maxretry), время, за которое эти попытки были произведены (findtime), и время, на которое нужно запретить доступ с этого IP (bantime).
В последней части 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 часа, ждать оставшееся время и пробовать подключиться заново. Поэтому мы рекомендуем установить собственные значения для всех условий.