|
|
@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
# Fail2ban для SSH
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ЛЮбой сервер переодически становится целью для попытки взлома. Чаще всего, это происходит ботом и носит случайный характер. Бот ищет в сети доступные для подключения по SSH сервера и пробует подключиться к ним методом перебора логина и пароля.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для защиты от атак можно использовать программу **Fail2ban**. Она отслеживает логи подключения к серверу и в случае превышения определенного количества попыток, блокирует IP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Далее будет инструкция, как установить, настроить и запустить **Fail2ban** на своем сервере.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Устонавливать будем на Debian 12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Установка
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для начала обновим список пакетов apt:
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
sudo apt update
|
|
|
|
|
|
|
|
sudo apt upgrade
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
После устанавливаем **Fail2ban**:
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
sudo apt install fail2ban
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Теперь активируем 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
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Этот набор условий означает, что 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
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
!!! warning title="Обрати внимание"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Некоторые современные программы для брутфорса могут «обходить» заданные по умолчанию значения fail2ban. Например, делать 4 попытки подключения в течение 1 часа, ждать оставшееся время и пробовать подключиться заново. Поэтому мы рекомендуем установить собственные значения для всех условий.
|