Fail2Ban — защита Linux-сервера от брутфорса и атак

Fail2Ban — защита Linux-сервера от брутфорса и атак

При подключении сервера к интернету почти сразу начинаются автоматические попытки взлома: подбор SSH-паролей, сканирование портов и атаки на веб-сервисы. Даже новый VPS через несколько минут может получить десятки подозрительных подключений.

Одним из самых популярных инструментов защиты Linux-серверов является Fail2Ban — система автоматической блокировки IP-адресов при подозрительной активности.


Что такое Fail2Ban

Fail2Ban — это сервис, который анализирует логи системы и автоматически блокирует IP-адреса при повторяющихся ошибках авторизации или подозрительных запросах.

Например:

  • несколько неверных SSH-паролей;
  • попытки входа в панель управления;
  • массовые запросы к веб-серверу;
  • атаки на почтовые сервисы.

После срабатывания Fail2Ban добавляет IP в firewall и временно запрещает подключение.


Установка Fail2Ban

Для Ubuntu и Debian установка выполняется одной командой:

sudo apt update
sudo apt install fail2ban

Проверка работы сервиса

Статус Fail2Ban

sudo systemctl status fail2ban

Если всё работает нормально, появится статус:

active (running)

Запуск сервиса

sudo systemctl start fail2ban

Автозапуск при загрузке

sudo systemctl enable fail2ban

Основной конфигурационный файл

Главная ошибка новичков — редактирование файла:

/etc/fail2ban/jail.conf

Делать этого не рекомендуется.

Правильный вариант — создать:

/etc/fail2ban/jail.local

Именно этот файл обычно используется для пользовательских настроек.


Базовая настройка SSH-защиты

Откройте конфиг:

sudo nano /etc/fail2ban/jail.local

Добавьте:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
findtime = 10m
bantime = 1h

Что означают параметры

ПараметрЗначение
enabledвключение защиты
portпорт SSH
maxretryчисло ошибок до бана
findtimeвремя отслеживания
bantimeдлительность блокировки

Перезапуск Fail2Ban

После изменения конфигурации:

sudo systemctl restart fail2ban

Проверка активных правил

Общий статус

sudo fail2ban-client status

Пример:

Status
|- Number of jail: 1
`- Jail list: sshd

Статус SSH-защиты

sudo fail2ban-client status sshd

Можно увидеть:

  • заблокированные IP;
  • количество попыток;
  • активные правила.

Разбан IP-адреса

Если случайно заблокировали себя:

sudo fail2ban-client set sshd unbanip 1.2.3.4

Просмотр логов Fail2Ban

Основной лог:

sudo tail -f /var/log/fail2ban.log

В реальном времени можно видеть:

  • блокировки IP;
  • разбаны;
  • срабатывания правил.

Полезная команда с GeoIP

Для просмотра заблокированных IP и стран:

watch -n 2 'sudo grep "Ban" /var/log/fail2ban.log | tail -n 20 | awk "{print \$1, \$2, \$3, \$NF}" | while read date time ip; do country=$(geoiplookup $ip | cut -d: -f2); printf "%-12s %-8s %-15s %s\n" "$date" "$time" "$ip" "$country"; done'

Команда обновляет список каждые 2 секунды и показывает:

  • дату;
  • время;
  • IP-адрес;
  • страну источника.

Где Fail2Ban особенно полезен

Fail2Ban отлично подходит для защиты:

  • SSH-сервера;
  • Nginx;
  • Apache;
  • VPN-сервисов;
  • почтовых серверов;
  • панелей управления;
  • 3X-UI и Xray-сервисов.

Полезные рекомендации

Измените SSH-порт

Стандартный порт 22 постоянно сканируется ботами.

Например:

Port 2222

в файле:

/etc/ssh/sshd_config

После изменения:

sudo systemctl restart ssh

Используйте SSH-ключи

Авторизация по ключу значительно безопаснее пароля.


Не отключайте себя случайно

Перед экспериментами с Fail2Ban желательно:

  • открыть вторую SSH-сессию;
  • проверить firewall;
  • добавить свой IP в whitelist.

Исключение IP из блокировки

Пример:

ignoreip = 127.0.0.1/8 YOUR_IP

Полное отключение Fail2Ban

sudo systemctl stop fail2ban

Отключить автозапуск:

sudo systemctl disable fail2ban

Заключение

Fail2Ban — один из самых полезных инструментов для защиты Linux-сервера. Он практически обязателен для VPS, открытого в интернет.

Даже минимальная настройка значительно снижает количество автоматических атак и защищает сервер от простого брутфорса.

Leave a Reply