Описание
Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.
Программа умеет бороться с различными атаками на все популярные *NIX–сервисы, такие как Apache, Nginx, ProFTPD, vsftpd, Exim, Postfix, named, и т.д.
Но в первую очередь Fail2ban известен благодаря готовности «из коробки» к защите SSH–сервера от атак типа «bruteforce», то есть к защите SSH от перебора паролей.
Файлы конфигов
/etc/fail2ban/jail.local
Настройки Fail2Ban. Определяет фильтр nginx-limit-req для блокировки IP, превышающих лимит запросов, и отключает sshd jail.
Комментарий: Автоматически банит злоумышленников, снижая риск атак.
Пример
# Отключение фильтра для SSH (sshd), чтобы Fail2Ban не пытался искать логи SSH
[sshd]
enabled = false
# Фильтр для Nginx, отслеживающий превышение лимита запросов
[nginx-limit-req]
# Включение фильтра (true = активно)
enabled = true
# Название фильтра, определённого в /etc/fail2ban/filter.d/nginx-limit-req.conf
filter = nginx-limit-req
# Путь к лог-файлу, который анализируется (ошибки Nginx)
logpath = /var/log/nginx/error.log
# Максимальное количество попыток (ошибок) за findtime секунд, после которых IP блокируется
maxretry = 50
# Временное окно (в секундах) для подсчёта попыток (600 секунд = 10 минут)
findtime = 600
# Время блокировки IP (в секундах, 3600 = 1 час)
bantime = 3600
# Действие при превышении: блокировка портов http и https через iptables
action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
/etc/fail2ban/filter.d/nginx-limit-req.conf
Фильтр Fail2Ban для анализа /var/log/nginx/error.log на ошибки limiting requests.
Комментарий: Определяет, какие записи логов считаются попытками атаки.
Пример
[Definition]
failregex = limiting requests, excess:.*client: <HOST>,
ignoreregex =
Команды
Проверка заблокированных ip
sudo fail2ban-client status nginx-limit-req
Status for the jail: nginx-limit-req
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/nginx/error.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list: 79.100.100.100
В данном премере заблокирован на 1 час 79.100.100.100
Для разблокировки
sudo fail2ban-client unban 79.100.100.100