- Home »

Как защитить SSH с помощью Fail2ban на Ubuntu 24
Если вы управляете серверами, то наверняка знаете: SSH-атаки — это не киберугрозы из фильмов, а повседневная реальность. Каждый день боты и злоумышленники пытаются взломать SSH-подключения методом brute-force, перебирая пароли и пытаясь найти слабые места. Fail2ban — это ваш верный телохранитель, который автоматически блокирует подозрительные IP-адреса и защищает сервер от атак. В этой статье мы разберём, как настроить Fail2ban на Ubuntu 24, чтобы ваш SSH был надёжно защищён от назойливых злоумышленников.
Как работает Fail2ban?
Fail2ban работает как умный фильтр, который анализирует лог-файлы в реальном времени. Принцип простой: программа следит за попытками неудачных подключений и, если их становится слишком много с одного IP, временно блокирует этот адрес через iptables или другие firewall-системы.
Основные компоненты Fail2ban:
- Filters (фильтры) — регулярные выражения для поиска подозрительных записей в логах
- Actions (действия) — что делать с нарушителем (обычно блокировка через iptables)
- Jails (тюрьмы) — конфигурации, объединяющие фильтры и действия для конкретных сервисов
Когда кто-то пытается подключиться к SSH с неверными данными, запись попадает в /var/log/auth.log. Fail2ban читает этот файл, считает неудачные попытки и при превышении лимита добавляет правило в iptables для блокировки IP.
Установка и базовая настройка Fail2ban
Начнём с установки. На Ubuntu 24 это делается стандартно через apt:
sudo apt update
sudo apt install fail2ban
После установки запускаем сервис и добавляем в автозагрузку:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Проверяем статус:
sudo systemctl status fail2ban
Теперь создаём конфигурационный файл. Важно: никогда не редактируйте файл jail.conf напрямую — он перезаписывается при обновлениях. Вместо этого создайте jail.local:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Настройка SSH-защиты
В файле jail.local найдите секцию [sshd] и настройте её следующим образом:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
Разберём параметры:
- enabled — включает jail для SSH
- port — порт SSH (по умолчанию 22, можно указать кастомный)
- filter — использует фильтр sshd
- logpath — путь к лог-файлу
- maxretry — количество неудачных попыток до блокировки
- bantime — время блокировки в секундах (3600 = 1 час)
- findtime — период времени для подсчёта попыток (600 = 10 минут)
- ignoreip — IP-адреса, которые никогда не блокируются
Перезапускаем Fail2ban:
sudo systemctl restart fail2ban
Проверка и мониторинг
Проверяем, что jail активен:
sudo fail2ban-client status
sudo fail2ban-client status sshd
Смотрим текущие заблокированные IP:
sudo fail2ban-client get sshd banned
Для мониторинга логов Fail2ban:
sudo tail -f /var/log/fail2ban.log
Продвинутая настройка и кастомизация
Для серверов с высокой нагрузкой или специфичными требованиями можно настроить более гибкие правила:
[sshd-aggressive]
enabled = true
filter = sshd
logpath = /var/log/auth.log
maxretry = 1
bantime = 86400
findtime = 300
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]
sendmail-whois[name=sshd, dest=admin@example.com]
Создание кастомного фильтра для более точного обнаружения атак:
sudo nano /etc/fail2ban/filter.d/sshd-custom.conf
[Definition]
failregex = ^.*sshd.*: Failed password for .* from port.*$
^.*sshd.*: Invalid user .* from .*$
^.*sshd.*: User .* from not allowed because not listed in AllowUsers$
ignoreregex =
Практические примеры и кейсы
Сценарий | Настройка | Плюсы | Минусы |
---|---|---|---|
Базовая защита | maxretry=5, bantime=3600 | Не блокирует случайные ошибки | Может пропустить медленные атаки |
Агрессивная защита | maxretry=1, bantime=86400 | Максимальная безопасность | Может заблокировать легитимных пользователей |
Сбалансированная | maxretry=3, bantime=7200 | Оптимальный баланс | Требует мониторинга |
Интеграция с другими инструментами
Fail2ban отлично работает в связке с другими инструментами безопасности:
С UFW (Uncomplicated Firewall):
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
С Logwatch для отчётности:
sudo apt install logwatch
sudo nano /etc/logwatch/conf/logwatch.conf
С Telegram для уведомлений:
sudo nano /etc/fail2ban/action.d/telegram.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -s -X POST https://api.telegram.org/bot/sendMessage -d chat_id= -d text="Fail2ban: has been banned on "
actionunban =
Альтернативные решения
Хотя Fail2ban — популярный выбор, существуют и другие решения:
- DenyHosts — специализируется только на SSH, проще в настройке
- SSHGuard — легковесная альтернатива с поддержкой множества firewall
- CrowdSec — современное решение с коллективной базой угроз
- ConfigServer Security & Firewall (CSF) — комплексное решение для cPanel серверов
Автоматизация и скрипты
Для автоматизации управления можно создать простые скрипты:
#!/bin/bash
# check_fail2ban.sh
echo "=== Fail2ban Status ==="
fail2ban-client status
echo "=== SSH Jail Status ==="
fail2ban-client status sshd
echo "=== Recently Banned IPs ==="
fail2ban-client get sshd banned
echo "=== Fail2ban Log (last 10 lines) ==="
tail -10 /var/log/fail2ban.log
Скрипт для массового разблокирования IP:
#!/bin/bash
# unban_all.sh
for ip in $(fail2ban-client get sshd banned); do
fail2ban-client set sshd unbanip $ip
echo "Unbanned: $ip"
done
Мониторинг и оптимизация производительности
Для мониторинга эффективности Fail2ban используйте:
sudo fail2ban-client get sshd actions
sudo fail2ban-client get sshd currently-banned
sudo fail2ban-client get sshd total-banned
Интересный факт: Fail2ban может интегрироваться с базами данных для хранения статистики блокировок. Это особенно полезно для серверов с высокой нагрузкой.
Отладка и решение проблем
Если Fail2ban не работает, проверьте:
sudo fail2ban-client -d # debug mode
sudo journalctl -u fail2ban -f # systemd logs
Типичные проблемы:
- Неправильный путь к лог-файлу
- Отсутствие прав на чтение логов
- Конфликты с другими firewall-правилами
- Неправильные регулярные выражения в фильтрах
Заключение и рекомендации
Fail2ban — это must-have инструмент для любого сервера с SSH-доступом. Он эффективно блокирует 99% автоматических атак и значительно повышает безопасность вашего сервера. Рекомендую:
- Начинать с умеренных настроек (maxretry=3, bantime=3600)
- Регулярно мониторить логи и статистику
- Настроить уведомления о блокировках
- Использовать вместе с другими мерами безопасности (ключи SSH, смена портов)
- Периодически обновлять фильтры и правила
Если вам нужен надёжный сервер для экспериментов с Fail2ban, рекомендую VPS-хостинг или выделенный сервер — там можно безопасно тестировать различные конфигурации безопасности.
Помните: безопасность — это не одноразовая настройка, а постоянный процесс. Fail2ban — отличный инструмент, но он эффективен только в комплексе с другими мерами защиты.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.