4

Как защитить сервер с помощью Fail2Ban

Вы запустили свой первый сервер — сайт работает, всё настроено. Но однажды вы открываете терминал и видите сотни попыток входа в SSH. Это атака, и ваш сервер под угрозой.

К счастью, есть Fail2Ban — программа, которая автоматически блокирует злоумышленников. Эта статья поможет установить и настроить Fail2Ban для защиты SSH, веб-серверов и контейнеров, даже если вы новичок или используете Windows.

Все шаги объяснены подробно, с примерами, чтобы вы могли защитить сервер быстро и без ошибок.

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

Программа работает на Linux (Ubuntu, Debian, CentOS, RHEL), а на Windows — через подсистему WSL2 или виртуальную машину. Давайте разберёмся, как настроить защиту шаг за шагом.

<!--noindex--><a href="https://pikabu.ru/story/kak_zashchitit_server_s_pomoshchyu_fail2ban_12641254?u=https%3A%2F%2Ft.me%2Fscontrols&t=https%3A%2F%2Ft.me%2Fscontrols&h=bb933f90001308d324a38a5f4b2c04bb14ef3e6e" title="https://t.me/scontrols" target="_blank" rel="nofollow noopener">https://t.me/scontrols</a><!--/noindex-->

https://t.me/scontrols

Хотите разбирать реальные случаи взломов и разбираться в киберугрозах?

В своём Telegram-канале Security Controls я делюсь историями атак, методами защиты и разбором уязвимостей. Подписывайтесь, если тема безопасности вам интересна.

Установка Fail2Ban

Атака на сервер началась, и нужно быстро установить защиту. Fail2Ban устанавливается за несколько минут. Откройте терминал и выполните команду для вашей операционной системы. На Ubuntu или Debian:

sudo apt update && sudo apt install fail2ban

На CentOS 7 активируйте EPEL-репозиторий — это хранилище дополнительных пакетов, включая Fail2Ban:

sudo yum install epel-release sudo yum install fail2ban

На CentOS 8, RHEL 8 или новее используйте dnf — современный менеджер пакетов:

sudo dnf install epel-release

sudo dnf install fail2ban

Если вы работаете на Windows, установите WSL2 — подсистему, которая позволяет запускать Linux внутри Windows. Скачайте WSL2 через Microsoft Store, выберите Ubuntu и выполните команду для Ubuntu. После установки в папке /etc/fail2ban появится файл jail.conf — это шаблон настроек Fail2Ban.

Чтобы ваши изменения не удалились при обновлениях программы, создайте копию файла:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Теперь Fail2Ban установлен и готов к настройке. Вы сделали первый шаг к защите сервера. Какую систему вы используете — Linux или Windows с WSL2?

Настройка логов и параметров

Ваш сайт на WordPress стал медленно загружаться. Вы проверяете логи и видите тысячи запросов к странице /wp-login.php — это попытка взлома. Fail2Ban может остановить атаку, но нужно указать, где искать такие угрозы.

Логи — это файлы, в которых сервер записывает все действия, например, кто пытался войти или какие страницы запрашивали.

Откройте файл jail.local в текстовом редакторе, например, nano (это простой редактор для терминала):

sudo nano /etc/fail2ban/jail.local

Укажите пути к логам для сервисов, которые хотите защитить:

  • SSH (удалённый доступ к серверу): /var/log/auth.log на Ubuntu/Debian или /var/log/secure на CentOS/RHEL.

  • Nginx (веб-сервер): /var/log/nginx/access.log для анализа запросов или /var/log/nginx/error.log для ошибок.

  • Apache (другой веб-сервер): /var/log/apache2/error.log на Ubuntu/Debian или /var/log/httpd/error_log на CentOS/RHEL.

Настройте основные параметры в секции [DEFAULT]:

  • bantime = 600 — блокировать IP на 10 минут (600 секунд).

  • maxretry = 5 — разрешить 5 неудачных попыток входа перед блокировкой.

  • findtime = 600 — проверять попытки за последние 10 минут.

Иногда вы сами можете ошибиться, вводя пароль, и случайно заблокировать себя. Чтобы этого избежать, добавьте свой IP-адрес в список исключений. Узнайте ваш публичный IP (адрес, который сервер видит в интернете):

curl ifconfig.me

Добавьте его в jail.local:

ignoreip = 127.0.0.1 93.184.216.34 # Замените 93.184.216.34 на ваш IP

Это говорит Fail2Ban игнорировать ваши действия, даже если вы ошибётесь с паролем. Вот пример настройки для SSH:

[sshd] enabled = true port = 22 logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600

Сохраните файл в nano (нажмите Ctrl+O, Enter, затем Ctrl+X) и перезапустите Fail2Ban, чтобы применить настройки:

sudo systemctl restart fail2ban

Проверьте, что защита активна:

sudo fail2ban-client status sshd

Теперь ваш WordPress-сайт защищён — Fail2Ban блокирует атакующие IP, и страницы снова загружаются быстро. Какой сервис вы хотите защитить первым?

Проверка фильтров

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

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-http-auth.conf

Эта команда проверяет, сколько записей в логе соответствуют правилу, и помогает избежать блокировки легитимных пользователей.

Для Nginx создайте фильтр /etc/fail2ban/filter.d/nginx-auth.conf, чтобы ловить попытки входа с ошибками:

[Definition] failregex = ^<HOST>.*"POST /login.* (401|403)

Для Apache создайте /etc/fail2ban/filter.d/apache-auth.conf:

[Definition] failregex = ^<HOST>.*"POST /login.* (401|403)

Для WordPress настройте фильтр /etc/fail2ban/filter.d/wordpress.conf, чтобы защитить страницу /wp-login.php:

[Definition] failregex = ^<HOST>.*"POST /wp-login.php.* (200|403|404)

Этот фильтр ловит запросы к странице входа, даже если сервер отвечает кодами 200 (успех), 403 (доступ запрещён) или 404 (страница не найдена). Активируйте фильтры в jail.local:

[nginx-auth] enabled = true logpath = /var/log/nginx/access.log maxretry = 5 bantime = 600 findtime = 600 [apache-auth] enabled = true logpath = /var/log/apache2/error.log maxretry = 5 bantime = 600 findtime = 600 [wordpress] enabled = true logpath = /var/log/nginx/access.log maxretry = 5 bantime = 600 findtime = 600

Будьте осторожны с кодом 403, чтобы не заблокировать обычных посетителей, например, тех, кто ошибся в URL. Теперь ваш блог защищён от атак на страницу входа, и вы можете сосредоточиться на создании контента. Какие фильтры вы хотите настроить?

Настройка уведомлений

Сколько времени вы готовы тратить на проверку логов вручную — полчаса в день или больше? Fail2Ban может автоматически сообщать вам о заблокированных IP, чтобы вы всегда знали, что происходит. Для отправки уведомлений на почту настройте действие action_mwl в jail.local. Сначала установите почтовую программу:

sudo apt install postfix

Postfix — это сервер для отправки писем, который Fail2Ban использует, чтобы слать вам отчёты. Если вы предпочитаете Telegram, настройте уведомления так:

  1. Откройте Telegram, найдите @botfather (это сервис для создания ботов) и напишите /start. Следуйте инструкциям, чтобы создать бота, и сохраните токен (это строка вроде 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).

  2. Узнайте ID вашего чата через @userinfobot. Напишите ему любое сообщение, и он ответит номером, например, 123456789.

  3. Создайте файл /etc/fail2ban/action.d/telegram.conf:

[Definition] actionban = curl -s -X POST "https://api.telegram.org/bot<ТОКЕН>/sendMessage" -d "chat_id=<ID_чата>&text=Заблокирован IP: <IP>"

Замените <ТОКЕН> и <ID_чата> на ваши значения. Добавьте действие в jail.local, например, для SSH:

[sshd] enabled = true port = 22 logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600 action = %(action_)s telegram

Перезапустите Fail2Ban:

sudo systemctl restart fail2ban

Теперь ваш телефон получает сообщение: «Заблокирован IP: 203.0.113.1». Вы сразу знаете об атаке, не заходя в терминал. Какие уведомления вам удобнее — почта или Telegram?

Геофильтрация для защиты

Вы видите в логах, что атаки идут из определённой страны, и хотите их ограничить. Геофильтрация блокирует IP из выбранных регионов, уменьшая количество угроз. Установите инструменты:

sudo apt install jq geoip-bin

jq — это утилита для работы с данными, а geoip-bin — инструмент для определения страны по IP. Зарегистрируйтесь на сайте MaxMind, чтобы получить базы GeoIP — они содержат информацию о географии IP-адресов.

Регулярно обновляйте базы:

sudo geoipupdate -v

Создайте скрипт /usr/local/bin/geoip-check для блокировки IP, например, из Китая:

#!/bin/bash country=$(geoiplookup $1 | awk -F ', ' '{print $2}') [[ "$country" == "CN" ]] && exit 0 || exit 1

Сделайте скрипт исполняемым:

chmod +x /usr/local/bin/geoip-check

В jail.local настройте действие, например, для SSH:

[sshd] enabled = true port = 22 logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600 actionban = /usr/local/bin/geoip-check <ip> && iptables -A INPUT -s <ip> -j DROP

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

Защита контейнеров

Вы запустили приложение в Docker, но заметили подозрительные запросы. Fail2Ban может защитить контейнеры, такие как Docker или Kubernetes. Контейнеры — это изолированные среды для приложений, которые часто используются для веб-серверов или баз данных. Если Docker пишет логи в syslog (системный журнал хоста), укажите в jail.local:

logpath = /var/log/syslog

syslog — это стандартный файл, куда сервер записывает системные события, включая действия контейнеров.

Если контейнер выводит логи в stdout (стандартный вывод, который можно перенаправить), настройте JSON-драйвер логов:

sudo mkdir /var/log/docker sudo docker run --log-driver=json-file --log-opt max-size=10m -v /var/log/docker:/var/log your-container

JSON-драйвер сохраняет логи в формате JSON, который Fail2Ban может читать. В jail.local укажите путь:

logpath = /var/log/docker/*.log

Для Kubernetes, где имена логов сложные, используйте шаблон:

logpath = /var/log/containers/*_namespace_app*.log

Убедитесь, что SELinux или AppArmor не блокируют доступ к логам. SELinux и AppArmor — это системы безопасности, которые ограничивают действия программ. Для тестирования временно отключите SELinux:

sudo setenforce 0

Предупреждение: Отключение SELinux снижает безопасность. Вместо этого настройте политики SELinux с помощью semanage (для управления правилами) или AppArmor с помощью aa-genprof (для создания профилей). Теперь ваш Docker-контейнер защищён, и приложение работает без сбоев.

Защита от атак и мониторинг

Атаки на серверы, особенно DDoS (массированные запросы, перегружающие сервер), становятся всё более частыми, затрагивая многие облачные сервисы. Fail2Ban эффективно останавливает брутфорс — попытки подбора пароля, но не справляется с DDoS, так как работает только на вашем сервере. Для защиты от брутфорса настройте в jail.local:

bantime = 600 bantime.increment = true bantime.multiplier = 2 # 10m -> 20m -> 40m при повторных атаках

Эти настройки увеличивают время блокировки для повторных атак: первая блокировка — 10 минут, вторая — 20 минут, третья — 40 минут. Если пользователь успешно входит, счётчик сбрасывается. Для атак с множеством IP используйте ipset — инструмент для хранения списков IP:

action = %(action_)s ipset

Для защиты от DDoS подключите WAF (например, ModSecurity) или CDN. WAF (Web Application Firewall) — это фильтр, который проверяет запросы к вашему сайту и блокирует вредоносные. CDN (Content Delivery Network) — это сеть серверов, распределяющая трафик, чтобы снизить нагрузку. Для примера, если вы используете Cloudflare, настройте интеграцию:

pip install cloudflare

Склонируйте скрипт:

git clone https://github.com/fail2ban/fail2ban-cloudflare

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

Следите за работой Fail2Ban, проверяя логи:

tail -f /var/log/fail2ban.log

Эта команда показывает логи в реальном времени. Узнайте, какие IP заблокированы:

sudo fail2ban-client status

Ваш сервер переживает атаку, но Fail2Ban останавливает брутфорс, а дополнительные инструменты, такие как WAF, помогают справиться с DDoS. Пользователи даже не заметили проблем. Какой тип атак вы хотите предотвратить?

Вы защитили свой сервер. Fail2Ban работает в фоновом режиме, блокируя угрозы, а вы получаете уведомления в Telegram о каждой попытке атаки. Теперь можно сосредоточиться на развитии проекта, не беспокоясь о хакерах. Какие шаги вы применили первыми? Делитесь своим опытом в комментариях — расскажите, как Fail2Ban помог вашему серверу! 🚀

#Fail2Ban #SysAdmin #Cybersecurity #Linux #DevOps #ServerSecurity #NetworkSecurity #CloudSecurity #Docker #Kubernetes

2
Автор поста оценил этот комментарий

Я для домашнего сервера использую Traefik + CrowdSec для защиты web-ресурсов в контейнерах (+ Authelia для аутентификации). Но к серверу есть доступ по ssh и ftp, для которых использую fail2ban. Никогда с ним проблем не было, работу свою выполняет, все VPS сервера у меня имеют панельку с fail2ban, настраивал так же баны по частым запросам с 404 ошибкой и от ддоса путём отправки больших POST через форму.
Да, староверы конечно могут закрыться от внешнего мира )))) но другим нужно защитить свои веб-сервисы для открытого доступа.
Fail2ban как по мне хорош тем, что он может читать лог, считать кол-во повторений в нём вхождения по регулярке и производить действие при достижения нужного кол-ва в отведенное время. А тут ты уже можешь это применять как душе угодно!
Простому пользователю линукса это не нужно, там или на уровне провайдера, или роутера за него позаботятся.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества