====== Fail2Ban ======
Служба для отслеживания и блокирования брутфорса.\\
Для проверки анализирует журналы авторизации, обычно это- **/var/log/auth.log**, путь указывается в конфигах.\\
Для блокировки используется системный **firewall**. Правила поведения можно гибко настраивать скриптами.\\
===== Конфигурация =====
Стандартная конфигурация прописана в файле **/etc/fail2ban/jail.conf**, его менять не следует, для настройки нужно создавать собственные файлы (*.conf или *.local) и размещать их в каталоге **/etc/fail2ban/jail.d**, эти файлы будут иметь приоритет перед стандартной конфой.\\
Собственные правила можно создавать в отдельных файлах или в общем, правила все равно **разбиваются на секции**.\\
Общие для всех правил параметры, можно вынести в секцию **[DEFAULT]** (верхний регистр!).\\
Для работы нужно активировать как **минимум одну** секцию, не считая дефолтной.\\
В файле **/etc/fail2ban/fail2ban.conf** задается общая конфигурация службы.\\
Время и часовой пояс, на сервере, должны быть корректными, по крайней мере локальное время должно совпадать со временем в логах.\\
===== Управление =====
Если после бана вручную удалить IP-адрес из файервола, **fail2ban** не будет его банить повторно, только делать пометки в логе **"already-banned"**, но после перезапуска службы, IP снова попадет в бан сразу же, **без попыток** входа.\\
Для разблокировки хоста следующая команда:
# fail2ban-client set [name-jail] unbanip [ip-addr]
Посмотреть перечень установленных "name-jail" (т.е. заданных правил)
# fail2ban-client status
Результаты своей работы служба пишет в свой лог, обычно- **/var/log/fail2ban.log**
===== Пример конфигурации =====
Время указывается **в секундах**, вроде можно использовать идентификаторы типа **m**, **h** и т.д., стоит уточнять.\\
Для вечного бана нужно указать **-1**.
:!: Пример конфигурации ssh
[DEFAULT]
maxretry = 3
findtime = 480
bantime = -1
action = iptables-allports
# ignoreip = 127.0.0.1 # исключение, можно указать сегментом сети, типа 192.168.0.0/24
[sshd]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp, blocktype="DROP"]
logpath = /var/log/auth.log
:!: Еще пример, ssh+ apache
[DEFAULT]
maxretry = 3
findtime = 480
bantime = -1
action = iptables-allports
ignoreip = 92.124.136.88
[sshd]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp, blocktype="DROP"]
logpath = /var/log/auth.log
[apache]
enabled = true
port = http,https
filter = apache-auth
action = iptables[name=apache-auth, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
action = iptables[name=apache-overflows, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
action = iptables[name=apache-badbots, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log