- Home »

Защита SSH с помощью Fail2Ban на Ubuntu 24.04
В этой статье разберёмся, как защитить SSH на свежей Ubuntu 24.04 с помощью Fail2Ban — инструмента, который автоматически блокирует подозрительные попытки входа. Если ты когда-нибудь смотрел логи своего сервера и видел там десятки (или сотни) попыток подобрать пароль к SSH, то ты знаешь, насколько это раздражает и опасно. Fail2Ban — это не серебряная пуля, но это must-have для любого, кто хочет спать спокойно, не переживая за безопасность своего хоста. Здесь будет всё: как работает Fail2Ban, как его быстро и правильно настроить, реальные примеры, грабли и лайфхаки, а также сравнение с альтернативами. В конце — рекомендации, как это использовать в автоматизации и скриптах. Поехали!
Как работает Fail2Ban: простыми словами, но по делу
Fail2Ban — это такой сторожевой пес для твоего сервера. Он следит за логами (например, /var/log/auth.log
), и если кто-то слишком часто ошибается при попытке войти по SSH (или другим сервисам), он автоматически добавляет IP-адрес нарушителя в бан-лист (обычно через iptables
или nftables
). Через заданное время бан снимается, но если атака продолжается — IP снова улетает в бан.
Вся магия — в фильтрах (регулярки для логов) и действиях (что делать с нарушителем). Fail2Ban гибко настраивается: можно банить на часы, дни, или навсегда, можно отправлять уведомления, запускать свои скрипты, и даже интегрировать с внешними системами.
- Плюсы: автоматизация, гибкость, простота интеграции, поддержка множества сервисов.
- Минусы: не защищает от 0-day уязвимостей, не спасает от атак с ботнетов с тысячами IP.
Быстрая и правильная установка Fail2Ban на Ubuntu 24.04
Ubuntu 24.04 уже поставляется с актуальными пакетами Fail2Ban, так что всё делается буквально за пару минут. Вот пошаговый гайд:
sudo apt update
sudo apt install fail2ban
После установки сервис уже работает, но по умолчанию он не блокирует SSH — нужно чуть-чуть настроить.
Базовая настройка для SSH
Создаём локальный конфиг, чтобы не трогать оригинальные файлы (это важно — при обновлениях твои настройки не слетят):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Открываем /etc/fail2ban/jail.local
в любимом редакторе (например, nano
или vim
), ищем секцию [sshd]
и приводим её к такому виду:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 1h
findtime = 10m
- maxretry — сколько раз можно ошибиться перед баном (по умолчанию 5).
- bantime — на сколько банить IP (например, 1 час).
- findtime — за какой период считать ошибки (например, 10 минут).
Сохраняем, перезапускаем сервис:
sudo systemctl restart fail2ban
Проверяем статус:
sudo fail2ban-client status sshd
Если всё ок, увидишь список забаненных IP (пока, скорее всего, пусто).
Практические советы, схемы и кейсы
Положительные кейсы
Сценарий | Результат | Рекомендации |
---|---|---|
Обычный VPS с публичным SSH | Fail2Ban блокирует десятки попыток подбора пароля в сутки, нагрузка на sshd падает | Используй нестандартный порт SSH + Fail2Ban для максимального эффекта |
Сервер с несколькими пользователями | Fail2Ban предотвращает перебор паролей, не мешая легитимным пользователям | Настрой whitelist для своих IP, чтобы не забанить себя случайно |
Отрицательные кейсы
Сценарий | Проблема | Решение |
---|---|---|
Много пользователей с одного IP (например, NAT, офис) | Один ошибся — забанили всех | Увеличить maxretry , добавить IP в ignoreip |
Атака с ботнета (тысячи IP) | Fail2Ban не справляется, нагрузка на iptables | Использовать fail2ban совместно с Cloudflare, GeoIP, или внешними firewall |
Схема работы Fail2Ban
- Fail2Ban следит за логами (например,
/var/log/auth.log
). - Находит подозрительные записи (неудачные попытки входа).
- Если превышен лимит — добавляет IP в бан через
iptables
илиnftables
. - Через заданное время бан снимается автоматически.
Полезные команды для работы с Fail2Ban
# Проверить статус всех jail
sudo fail2ban-client status
# Проверить статус конкретного jail (например, sshd)
sudo fail2ban-client status sshd
# Разбанить IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Забанить IP вручную
sudo fail2ban-client set sshd banip 1.2.3.4
# Перезапустить fail2ban
sudo systemctl restart fail2ban
# Посмотреть логи fail2ban
sudo journalctl -u fail2ban
Альтернативы и похожие решения
- DenysHosts — старый, но до сих пор рабочий инструмент, блокирует IP на основе логов, но менее гибкий и не так активно развивается. GitHub
- SSHGuard — лёгкий и быстрый, написан на C, но менее гибкий, чем Fail2Ban. Официальный сайт
- CrowdSec — современный, с поддержкой коллективной защиты (sharing ban-листов между пользователями). Официальный сайт
- UFW (Uncomplicated Firewall) — не альтернатива, а дополнение: можно использовать вместе с Fail2Ban для более жёсткой фильтрации.
Сравнение Fail2Ban с альтернативами
Инструмент | Гибкость | Лёгкость настройки | Поддержка сервисов | Совместимость |
---|---|---|---|---|
Fail2Ban | Высокая | Средняя | Много (SSH, Apache, Nginx, Postfix и др.) | Linux, Unix |
DenysHosts | Низкая | Высокая | Только SSH | Linux, Unix |
SSHGuard | Средняя | Высокая | SSH, Exim, Sendmail и др. | Linux, BSD |
CrowdSec | Очень высокая | Средняя | Много + коллективная защита | Linux, Windows |
Интересные факты и нестандартные сценарии использования
- Fail2Ban можно использовать не только для SSH, но и для защиты веб-приложений (WordPress, phpMyAdmin, Nextcloud) — достаточно написать свой фильтр.
- Можно интегрировать Fail2Ban с Telegram-ботом или Slack — получать уведомления о банах в реальном времени.
- Fail2Ban поддерживает кастомные действия: можно не только банить IP, но и отправлять abuse-репорты, запускать свои скрипты (например, автоматически добавлять IP в Cloudflare Access Rules).
- Можно использовать Fail2Ban для защиты от DoS-атак на веб-серверы (например, по количеству 404-ошибок или попыток авторизации).
- В связке с Fail2Ban Community можно обмениваться фильтрами и best practices.
Статистика и эффективность Fail2Ban
- На среднестатистическом VPS Fail2Ban блокирует от 10 до 100+ IP в сутки (зависит от популярности IP и страны).
- Снижает нагрузку на sshd и лог-файлы, предотвращает перебор паролей и brute-force атаки.
- В 90% случаев достаточно для защиты от массовых сканеров и скрипт-кидди.
- В связке с двухфакторной аутентификацией и ключами — практически непробиваемое решение для SSH.
Автоматизация и скрипты: новые возможности
- Fail2Ban легко интегрируется с Ansible, SaltStack, Puppet — можно автоматизировать установку и настройку на десятках серверов.
- Можно писать свои actions: например, при бане IP отправлять его в централизованный blacklist, или автоматически обновлять правила на внешнем firewall.
- Fail2Ban поддерживает REST API (через fail2rest) — можно строить свои панели мониторинга и управления банами.
- В связке с cron можно делать регулярные отчёты по банам, статистику атак, и даже строить графики.
Выводы и рекомендации
Fail2Ban — это простой, но мощный инструмент для защиты SSH (и не только) на Ubuntu 24.04. Его легко установить, быстро настроить, и он реально работает — блокирует большинство массовых атак и сканеров. Для максимальной безопасности используй Fail2Ban вместе с ключами SSH, нестандартным портом, и whitelist для своих IP. Если у тебя большой проект — посмотри в сторону CrowdSec или интеграции с внешними firewall. Для автоматизации — используй Ansible или свои скрипты, Fail2Ban отлично вписывается в CI/CD и DevOps-процессы.
Если ты только начинаешь — ставь Fail2Ban на каждый сервер, где есть SSH. Это must-have, как sudo или ufw. Если нужен VPS для тестов или продакшена — заказать VPS. Для серьёзных задач — выделенный сервер. Не забывай: безопасность — это не опция, а необходимость.
Официальная документация Fail2Ban: https://www.fail2ban.org/wiki/index.php/Main_Page
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.