---
title: "Защита SSH от подбора пароля. Fail2ban"
---

# Защита SSH от подбора пароля. Fail2ban

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Для защиты вашего сервера от брутфорс-атак (взломов путем перебора паролей) лучше всего настроить и использовать [авторизацию по ключу](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication) вместо авторизации по паролю.

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

В рамках этой статьи мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от подбора пароля.

Для установки Fail2ban на Ubuntu/Debian выполните:

```shell
sudo apt update
```

```shell
sudo apt install fail2ban -y
```

Если у вас не установлен файрвол, установите `iptables`:

```shell
sudo apt install iptables
```

Для установки на CentOS:

```shell
sudo yum update && yum install epel-release
```

```shell
sudo yum install fail2ban
```

Если у вас не установлен файрвол, установите `iptables`:

```shell
sudo yum install iptables-services
```

Добавьте Fail2ban в автозагрузку:

```shell
sudo systemctl enable fail2ban
```

На Ubuntu защита для SSH начнет работать сразу после установки. По умолчанию Fail2ban будет на 10 минут блокировать IP-адреса, с которых в течение 10 минут было выполнено 5 неудачных попыток авторизации.

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

## Конфигурационный файл Fail2ban

Настройки Fail2ban хранятся в конфигурационном файле `/etc/fail2ban/jail.conf`.

Настройки разделены по секциям. В `[DEFAULT]` указываются общие параметры, которые определяют работу Fail2ban в целом и применяются для большинства служб. Специфические настройки для той или иной службы прописываются внутри соответствующей секции (например, `[sshd]`, `[apache-auth]`, `[vsftpd]`). 

Менять какие-либо параметры напрямую в файле `jail.conf` не рекомендуется. Вместо этого необходимо создать новый файл `jail.local`, разместив его в той же директории:

```shell
sudo touch /etc/fail2ban/jail.local
```

В новом файле будет достаточно указать только те настройки, значения которых вы хотите изменить: для всех параметров, которые вы не пропишете отдельно, Fail2ban будет применять значения по умолчанию.

## Настройка защиты SSH

Откройте файл `jail.local` для редактирования:

```shell
sudo nano /etc/fail2ban/jail.local
```

Пример настроек, которые можно добавить в файл:

```shell
[DEFAULT]
ignoreip = 95.111.123.21
[sshd]  
enabled  = true  
findtime = 120  
maxretry = 3  
bantime = 43200
```

Такая настройка означает, что если с какого-либо IP-адреса, за исключением указанного в `ignoreip`, в течение 2 минут будут выполнены 3 неудачные попытки авторизоваться, Fail2ban заблокирует этот адрес на 12 часов.

В секции `DEFAULT` могут быть указаны такие параметры, как период блокировки (`bantime`), количество попыток (`maxretry`) и пр., но в рамках данной инструкции мы пропишем большинство настроек в отдельной секции для SSH, а в раздел `DEFAULT` включим только параметр `ignoreip`:

-   `ignoreip` — это «белый список» IP-адресов, то есть те адреса, которые не будут заблокированы при неудачных попытках подключения. Здесь можно прописать ваш собственный IP (если он статический, а не динамический), с которого вы подключаетесь к серверу. Можно указать несколько адресов через пробел или маску подсети. 

Если вам не требуется белый список, строку можно просто закомментировать, указав перед ней `#`.

В секции `[sshd]` указываются настройки для работы Fail2ban с конкретной службой — SSH. В зависимости от системы, секция может называться `[sshd]`, `[ssh]` или `[ssh-iptables]` (можно проверить в файле `jail.conf`).

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

Здесь мы прописали параметры:

-   `enabled` — обязательный параметр, определяющий включение или отключение секции. Для включения должно быть установлено значение true, оно указано по умолчанию. Обратите внимание, что в CentOS этот параметр по умолчанию закомментирован. Если вы работаете с копией основного файла `jail.conf`, не забудьте раскомментировать эту строку (убрать `#`), чтобы активировать секцию;
-   `bantime` — продолжительность бана в секундах, то есть период, на который подозрительный IP-адрес будет заблокирован;
-   `maxretry` — количество неудачных попыток в течение периода `findtime`, после которых будет выполнена блокировка; 
-   `findtime` — период в секундах, в течение которого действие (в данном случае — неудачная попытка подключения) должно повториться определенное количество раз (`maxretry`), после чего будет выполнена блокировка. 

Дополнительно могут быть настроены и другие параметры, например:

-   `port` — порт, используемый службой, в данном случае SSH. Если SSH у вас работает на нестандартном порту (то есть не 22), пропишите его здесь. Если порт стандартный, указывать эту настройку необязательно.
-   `logpath` — путь к файлу лога, который анализирует Fail2ban. По умолчанию это стандартный путь к логу `sshd`. 
-   `action` — выполняемое действие при блокировке IP. По умолчанию выполняется блок подозрительного IP путем изменения правил `iptables`.  
    Чтобы заблокировать все порты для этого IP, можно использовать: `action = iptables-allports`.  
    Если на сервере настроен `firewalld` или `ufw`, то для фильтрации с их помощью нужно указать соответствующее значение для `action:` `firewallcmd-ipset` и `ufw`, соответственно.  
    Полный список действий доступен в `/etc/fail2ban/action.d`.

После сохранения изменений перезапустите Fail2ban:

```shell
sudo systemctl restart fail2ban.service
```

## Проверка

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

Просмотреть заблокированные IP-адреса можно в `iptables`:

```shell
sudo iptables -L
```

![Ipt](https://content.timeweb.com/assets/1a364790-7564-4e2a-ab28-39223309eb57?width=774&height=302)

Также, можно вывести логи работы Fail2ban:

```shell
sudo tail /var/log/fail2ban.log
```

![Fb Log](https://content.timeweb.com/assets/145f66fa-6960-432e-b356-321d9c5da7f2?width=931&height=176)

Информацию можно получить и из интерфейса Fail2ban:  

```shell
sudo fail2ban-client status sshd
```

![Fb Status](https://content.timeweb.com/assets/a54dcccf-e07e-4944-9f2c-baafb7931613?width=1025&height=161)
