cp.lv — VPS, выделенные и облачные серверы

cp.lv (LANGMARKET LLP) — хостинг-провайдер: VPS, выделенные и облачные серверы на NVMe с выбором ОС, полным root-доступом и поддержкой 24/7. Тест-период до оплаты: выделенные серверы — 5 дней, VPS и облако — 5 часов.

Contact Info
LANGMARKET LLP
Rīga, Latvija

+371 00 000 000

Follow Us

Личный кабинет

Язык

Защита от брутфорса с fail2ban: установка и jail для SSH

Защита от брутфорса с fail2ban: установка и jail для SSH

Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):

curl -sSL https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bash

…или через wget:

wget -qO- https://cp.lv/scripts/nastrojka-fail2ban.sh | sudo bash

Содержимое скрипта nastrojka-fail2ban.sh:

#!/usr/bin/env bash
# Установка fail2ban и jail для SSH (Ubuntu/Debian)
set -euo pipefail

# 1. Установка
sudo apt update && sudo apt install -y fail2ban

# 2. Локальная конфигурация (кавычки 'EOF' — секции пишутся дословно)
sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 1w

[sshd]
enabled  = true
port     = ssh
backend  = systemd
maxretry = 4
bantime  = 2h
EOF

# 3. Применение и проверка
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
echo "Готово: fail2ban защищает SSH от брутфорса."

fail2ban защищает сервер от перебора паролей: он читает логи, находит повторяющиеся неудачные входы и блокирует IP через firewall. Настройка сводится к установке пакета и созданию файла jail.local с включённым jail для SSH. Ниже — рабочая конфигурация.

Как это работает

fail2ban мониторит лог-файлы (например, попытки входа по SSH), сопоставляет строки с фильтрами (regex) и при превышении лимита неудач добавляет правило в iptables/nftables, блокируя нарушителя на заданное время.

Шаг 1. Установка

apt update
apt install -y fail2ban
systemctl enable --now fail2ban

На CentOS/AlmaLinux: dnf install -y fail2ban.

Шаг 2. Локальная конфигурация

Никогда не редактируйте jail.conf напрямую — он перезаписывается при обновлениях. Откройте /etc/fail2ban/jail.local в редакторе (sudo nano /etc/fail2ban/jail.local) и вставьте содержимое:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled  = true
port     = ssh
maxretry = 4
bantime  = 2h

Либо создайте файл целиком одной командой — скопируйте и вставьте в консоль (кавычки 'EOF' записывают секции дословно):

sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled  = true
port     = ssh
maxretry = 4
bantime  = 2h
EOF

Разбор параметров:

  • maxretry — сколько неудач до бана;
  • findtime — окно времени, в котором считаются неудачи;
  • bantime — как долго держать бан (-1 — навсегда);
  • ignoreip — белый список (добавьте свой домашний IP, чтобы не заблокировать себя).

Если SSH работает на нестандартном порту, укажите его номер вместо ssh:

[sshd]
enabled = true
port    = 2222

Шаг 3. Применение

systemctl restart fail2ban
fail2ban-client status

Вывод покажет список активных jail. Детали по SSH:

fail2ban-client status sshd

Здесь видно число найденных попыток и текущие забаненные IP.

Прогрессивный бан за повторные атаки

Чтобы упорные нарушители банились всё дольше, включите рекурсивный режим в [DEFAULT]:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 1w

Каждый повторный бан того же IP увеличивается вдвое, но не дольше недели.

Управление банами

Разбанить конкретный IP:

fail2ban-client set sshd unbanip 203.0.113.10

Забанить вручную:

fail2ban-client set sshd banip 203.0.113.10

Посмотреть журнал работы самого fail2ban:

tail -f /var/log/fail2ban.log

Проверка на systemd-логах

На современных дистрибутивах SSH пишет в journald, а не в /var/log/auth.log. Убедитесь, что backend читает journald — добавьте в [sshd]:

backend = systemd

Проверьте, что фильтр находит записи:

fail2ban-regex "systemd-journal[sshd]" /etc/fail2ban/filter.d/sshd.conf

Jail recidive: бан для рецидивистов

Отдельный jail recidive следит за самим логом fail2ban и надолго банит IP, которые попадаются снова и снова. Добавьте в jail.local:

[recidive]
enabled  = true
logpath  = /var/log/fail2ban.log
bantime  = 1w
findtime = 1d
maxretry = 5

Теперь адрес, забаненный 5 раз за сутки, отправляется в бан на неделю.

Оповещения на почту

fail2ban может присылать письмо при каждом бане. В [DEFAULT] укажите:

destemail = [email protected]
sender    = [email protected]
action    = %(action_mwl)s

action_mwl отправляет письмо с логами и whois нарушителя. Для отправки почты на сервере должен быть настроен MTA (например, postfix).

Защита веб-сервера

Помимо SSH, fail2ban защищает nginx. Пример jail против перебора на аутентификации:

[nginx-http-auth]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 5

Готовые фильтры лежат в /etc/fail2ban/filter.d/ — их можно подключать так же через jail.local.

Проверка эффективности

Сколько всего адресов забанено за всё время:

grep "Ban" /var/log/fail2ban.log | wc -l

Топ забаненных IP:

grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head

Такой отчёт наглядно показывает, что защита реально отбивает атаки.

Частые вопросы

Не заблокирую ли я сам себя? Добавьте свой постоянный IP в ignoreip. Если бана не избежать, разбаньте через консоль VPS (KVM), а не по SSH.

Работает ли fail2ban с nftables? Да, укажите banaction = nftables-multiport в [DEFAULT], если сервер использует nftables.

Можно ли защитить не только SSH? Да, есть готовые jail для nginx, postfix, dovecot и других — включаются так же в jail.local.

Как проверить, что jail реально работает? Посмотрите fail2ban-client status sshd и /var/log/fail2ban.log — там видны найденные и забаненные адреса.

Сколько ресурсов потребляет? Минимум — это лёгкий демон на Python, читающий логи. Заметной нагрузки на VPS нет.


fail2ban — базовая защита любого сервера. Для проектов, где безопасность критична, берите VPS для VPN и безопасности или аренду VPS. Настройку доверьте Администрированию серверов.

Ольга Наумова

Ольга Наумова

Ведущий DevOps-инженер. Автоматизирует развёртывание серверов и настраивает KVM-доступ, чтобы клиенты запускались за минуты.