# Установка и настройка Fail2ban

{% hint style="info" %}
**Fail2Ban** – это сервис для блокировки хостов, вызывающих множественные ошибки при попытках аутентификации.

*Fail2Ban* работает путем мониторинга файлов журналов (например, **/var/log/auth.log**, **/var/log/apache/access.log** и др.) для выбранных записей и запуска сценариев на их основе. Чаще всего это используется для блокировки выбранных IP-адресов, которые могут принадлежать хостам, пытающимся нарушить безопасность системы. Он может запретить любой IP-адрес хоста, который делает слишком много попыток входа в систему или выполняет любые другие нежелательные действия в течение периода времени, определенного администратором. Включает поддержку как **IPv4**, так и **IPv6**. Опционально более длительные запреты могут быть настроены специально для нарушителей, которые продолжают возвращаться.
{% endhint %}

Для установите Fail2Ban, необходимо открыть терминал.

{% content-ref url="/pages/vnxh4CdTILQ5G7Sfyf0d" %}
[Как открыть терминал?](/9.2.x/menyu/voprosy-i-otvety/kak-otkryt-terminal.md)
{% endcontent-ref %}

выполните команды:

```sh
sudo apt update
sudo apt install fail2ban
sudo apt install python3-systemd
```

После успешной установки плагина, выполните команду чтобы открыть конфигурационный файл

```sh
nano /etc/fail2ban/jail.local
```

Далее, добавьте конфигурацию с вашими данными

```ini
[DEFAULT]
ignoreip = ip_addresses
bantime  = 36000
banaction = iptables-multiport
mta = sendmail
sender = sender_email
destemail = recipient_email
action = %(action_mwl)s

[sshd]
enabled = true
bantime  = 36000

[ssh]
enabled  = true
port = ssh
filter   = sshd
bantime  = 36000
findtime = 120  
maxretry = 3  
backend = systemd
logpath  = /var/log/auth.log
```

{% hint style="info" %}
**ip\_addresses** — замените на белый список ip адресов на которых не будет действовать правило

Например: 127.0.0.1 (Если хотите добавить несколько 127.0.0.1 127.0.0.2)

**sender\_email —** укажите email с которого будет отправляться сообщение

**recipient\_email —** укажите e-mail, куда будет получение сообщение
{% endhint %}

Для включение выполните команды

```sh
systemctl start fail2ban
systemctl enable fail2ban
systemctl restart fail2ban
```

## Структура файлов Fail2ban

Все конфигурационные файлы Fail2ban хранятся в директории */etc/fail2ban.* Структура файлов всегда одинаковая:

* action.d — директория, в которой содержатся файлы для настройки исполняемых действий (actions);
* fail2ban.conf — файл с настройками сервиса fail2ban;
* fail2ban.d — директория, в которой хранятся файлы с пользовательскими настройками fail2ban, по умолчанию пустая;
* filter.d — директория с шаблонами, которые предназначены для анализа лог-файлов;
* jail.conf — файл с настройками по умолчанию для защиты сервисов (Apache, Nginx, SSH и т. д.);
* jail.d — директория для файлов с пользовательскими настройками для защиты сервисов (Apache, Nginx, SSH и т. д.);
* paths-arch.conf, paths-debian.conf, paths-opensuse.conf, paths-common.conf — файлы для различных операционных систем (Arch Linux, Debian, openSUSE и других), содержащие настройки путей для операционной системы, например пути расположения лог-файлов.

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

Переходим к настройке Fail2ban для защиты SSH.

1\. Открываем файл на редактирование при помощи любого текстового редактора:

```sh
nano /etc/fail2ban/jail.local
```

Нам необходимо отредактировать следующие параметры:

```ini
[DEFAULT]
ignoreip = 127.0.0.1
[sshd]  
enabled  = true  
findtime = 180  
maxretry = 2  
bantime = 50400
filter   = sshd
logpath  = /var/log/auth.log
```

Значение и смысл параметров:

* \[DEFAULT] — секция по умолчанию. Параметры из нее применяются ко всем остальным секциям, если не будут переопределены заранее;
* ignoreip — список IP-адресов, подсетей или DNS-имен, для которых *не будут* действовать правила Fail2ban. Эти адреса не будут блокироваться даже при неудачных попытках подключения. Список адресов указывается через пробел;
* \[sshd] — указывается секция с наименованием сервиса, для которого будут созданы параметры блокировки адресов. Для каждого сервиса необходимо создавать свою секцию. В этом примере мы настраиваем параметры для демона sshd;
* enabled — параметр, предназначенный для включения или отключения секции с сервисом. Для включения секции необходимо задать значение true, для отключения — false;
* findtime — время в секундах, в течение которого определенное действие (неудачная попытка подключения) должно повториться определенное количество раз (параметр maxretry), после чего адрес будет заблокирован;
* maxretry — количество неудачных попыток в течение периода findtime, после которых адреса нужно заблокировать;
* bantime — продолжительность блокировки хоста в секундах;
* filter — название фильтра, содержащее регулярные выражения для поиска подозрительных действий в лог-файлах сервиса. Фильтры для различных сервисов хранятся в директории */etc/fail2ban/filter.d/*;
* logpath — полный путь до лог-файла, который Fail2ban будет использовать для поиска сетевых адресов. По умолчанию SSH записывает все попытки входа в файл */var/log/auth.log*.

Теперь сохраняем изменения в файле и выходим из редактора.

3\. Перезапускаем сервис fail2ban и добавляем его в автозагрузку:

```sh
systemctl restart fail2ban
systemctl enable fail2ban
```

4\. Проверяем статус Fail2ban:

```sh
systemctl status fail2ban
```

## Проверка работоспособности Fail2ban

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

Для начала проверим, какие зоны присутствуют в нашей системе. Для этого выполняем команду:

```sh
fail2ban-client status
```

Чтобы получить более подробную информацию о конкретной зоне, а также отобразить количество заблокированных IP-адресов, необходимо выполнить команду:

```sh
fail2ban-client status sshd
```

В разделе Filter отображено общее количество срабатываний фильтра: каждая неудачная попытка подключения увеличивает параметр Total failed на один. В примере фильтр сработал три раза и после этого был заблокирован (Currently banned) один IP-адрес 192.168.126.1 (Banned IP list).

Fail2ban ведет свой лог-файл — *fail2ban.log*, в котором также записывается информация о заблокированных IP-адресах. Посмотреть ход работы Fail2ban можно, воспользовавшись командой:

```sh
tail -f /var/log/fail2ban.log
```

IP-адрес будет заблокирован столько времени, сколько было указано в параметре bantime конфигурационного файла jail.local, но адрес можно разбанить раньше срока вручную. Для этого надо выполнить команду:

```sh
fail2ban-client set sshd unbanip 192.168.126.1
```

Sshd — это имя зоны, которая заблокировала адрес, а 192.168.126.1 — это IP-адрес, который необходимо разблокировать.

Чтобы узнать, какая зона заблокировала необходимый IP-адрес, надо выполнить команду:

```sh
iptables -L -n
```

В выводе команды необходимо найти цепочку. В имени цепочки указана ранее созданная зона, например sshd. В этом примере цепочка называется f2b-sshd, в ней есть адрес 192.168.126.1.

Заблокировать IP-адрес тоже можно в ручном режиме. Для этого надо задать зону и IP-адрес. Команда для блокировки IP-адреса 192.168.126.1 для зоны sshd будет выглядеть следующим образом:

```sh
fail2ban-client set sshd banip 192.168.126.1
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://iexexchanger.gitbook.io/9.2.x/nachalo-raboty/osnovy-bezopasnosti/ustanovka-i-nastroika-fail2ban.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
