Безопасность сервера с Ubuntu 24.04: fail2ban, nftables и управление службами

Безопасность сервера с Ubuntu 24.04: fail2ban, nftables и управление службами

Это вторая часть чек-листа безопасности сервера на Ubuntu 24.04. Рассказываем, как защитить сервер от брутфорса с fail2ban, когда нужно использовать nftables вместо UFW и как его настроить, почему нужно отключать ненужные службы.

Введение

В этой статье мы рассмотрим защиту от перебора паролей с помощью fail2ban, углублённую настройку файрвола и отключение ненужных служб.

Настройте fail2ban для защиты от перебора паролей

Защита от перебора паролей нужна, даже если вы отключили вход по паролю и используете SSH-ключи — особенно если сервер доступен по публичному IP-адресу. Некоторые сервисы могут оставаться уязвимы к попыткам входа с неправильными учётными данными (например, веб-интерфейсы, почтовые или FTP-серверы). Для таких случаев и нужен fail2ban — утилита, анализирующая журналы и блокирующая IP-адреса, с которых исходит подозрительная активность.

Fail2ban сканирует журналы (auth.log, secure.log и т. д.) и ищет в них повторяющиеся сообщения об ошибке входа. При превышении допустимого количества попыток за заданный период он добавляет IP-адрес нарушителя в блокировочный список iptables или nftables, отсекая доступ на сетевом уровне.

Аренда VPS/VDS — от ₽219/месяц

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

Установите fail2ban:

sudo apt install fail2ban

После установки сервис запускается автоматически и сразу начинает мониторить системные логи. Однако по умолчанию он работает в пассивном режиме и не блокирует ничего: для активации нужно включить фильтры — jails, или джейлы.

Сначала создайте локальный файл конфигурации jail.local — это нужно, чтобы не менять системный jail.conf, который может быть перезаписан при обновлении:

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

Откройте jail.local:

sudo nano /etc/fail2ban/jail.local

Для примера настроим fail2ban для SSH. Найдите секцию [sshd] и установите следующие параметры:

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

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

  • enabled = true — включает мониторинг SSH;
  • port = ssh — указывает порт для отслеживания (если вы сменили порт SSH, укажите его номер);
  • filter = sshd — определяет шаблон для поиска подозрительных записей в журнале;
  • logpath = /var/log/auth.log — путь к журналу авторизации;
  • maxretry = 5 — количество неудачных попыток входа до бана;
  • bantime = 600 — длительность бана, по умолчанию 10 минут в секундах;
  • findtime = 600 — временной интервал, в течение которого считаются попытки входа.

С такой конфигурацией если кто-то 5 раз за 10 минут неправильно введёт пароль при подключении по SSH, его IP будет забанен на 10 минут.

После перезапустите сервис:

sudo systemctl restart fail2ban

Проверить статус и активные правила можно так:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Если fail2ban работает корректно, вы увидите все заблокированные IP-адреса (если они есть) и настройки фильтра.

Функции Fail2ban можно расширять: вы можете создавать кастомные фильтры, защищать не только SSH, но и веб-сервисы (например, nginx, apache2, postfix, dovecot) — для этого достаточно активировать соответствующие секции в jail.local.

Даже при использовании аутентификации по ключам fail2ban полезен: он не даёт злоумышленникам бесконечно штурмовать ваш SSH-сервер, засорять журналы и потреблять ресурсы.

Установите и настройте firewall на уровне ядра (опционально)

UFW отлично справляется с базовой задачей ограничения доступа — особенно в типовых конфигурациях, где нужно просто открыть или закрыть конкретные порты. Но в ряде ситуаций бывает полезно использовать более низкоуровневые инструменты, такие как iptables или nftables.

Ubuntu 24.04 по умолчанию использует nftables как основной механизм фильтрации сетевого трафика. UFW работает поверх nftables, скрывая детали реализации — это удобно для новичков, но ограничивает гибкость настройки. В свою очередь, nftables (как и iptables ранее) позволяет реализовать:

  • сложные правила фильтрации по IP, портам, интерфейсам, протоколам;
  • логирование трафика;
  • динамическую фильтрацию;
  • создание собственных таблиц и цепочек;
  • защиту от спуфинга, сканирования портов, SYN-флудов и других атак.

Дополнительный уровень контроля может понадобиться, если вы:

  • публикуете API, особенно если он открыт в Интернет;
  • разворачиваете микросервисную архитектуру с множеством внутренних взаимодействий;
  • хотите чётко разграничить доступ по IP-адресам или подсетям (например, разрешить доступ к административной панели только с корпоративных адресов), блокировать по странам или геолокации, выполнять условную фильтрацию (например, блокировать доступ в зависимости от времени суток);
  • применяете rate-limiting или другие методы защиты от DDoS;
  • разворачиваете VPN, proxy, балансировщики нагрузки — и вам нужно контролировать внутренний трафик между компонентами;
  • работаете с нестандартными протоколами (не TCP/UDP, а, например, ICMP, GRE и другие);
  • реализуете собственную систему безопасности, интегрированную с другими инструментами.

Настройте базовый конфигурационный файл nftables:

sudo nano /etc/nftables.conf

Пример минимальной конфигурации:

#!/usr/sbin/nft -f
table inet filter {
  chain input {
    type filter hook input priority 0;
    # Разрешаем loopback
    iif «lo« accept
    # Разрешаем уже установленные соединения
    ct state established,related accept
    # Разрешаем SSH
    tcp dport 22 accept
    # Блокируем всё остальное
    drop
  }
}

После сохранения включите и запустите службу:

sudo systemctl enable nftables
sudo systemctl start nftables

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

sudo nft list ruleset

Если вы хотите использовать nftables вместо UFW, отключите последний, чтобы избежать конфликтов:

sudo ufw disable

Отключите ненужные службы

После установки Ubuntu 24.04 на сервере могут работать службы, которые вам не нужны. Каждая лишняя служба увеличивает площадь атаки и может использовать ресурсы — в том числе открывать порты в сеть, а это потенциальные точки входа для злоумышленников. Поэтому просмотрите активные службы и отключите всё лишнее.

Для начала проверьте, какие сетевые порты открыты и какими службами они используются:

sudo ss -tulpn

Пояснение:

  • -t — показывает TCP-соединения;
  • -u — показывает UDP-соединения;
  • -l — только прослушивающие сокеты (то есть службы, ожидающие подключения);
  • -p — показывает имя процесса и его PID;
  • -n — не разрешает имена хостов и служб (выводит IP и порты в числовом виде).

Результат покажет, какие службы прослушивают сеть, по каким портам, и какие процессы за это отвечают. Например, там могут быть cupsd (служба печати) или avahi-daemon (служба автоматического обнаружения в локальной сети), которые точно не нужны на сервере.

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

systemctl list-units --type=service --state=running

Вы увидите список активных служб. Если вы знаете, что какая-либо из них вам не нужна — например, bluetooth.service, cups.service, avahi-daemon.service, ModemManager.service — её можно отключить:

sudo systemctl disable --now <имя_службы>.service

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

Например, чтобы отключить службу Bluetooth:

sudo systemctl disable --now bluetooth.service

Отключайте только те службы, назначение которых вам понятно. Не отключайте networking, systemd-resolved, sshd, dbus, cron, rsyslog и другие базовые системные службы, если вы не уверены, что они вам действительно не нужны. Если сомневаетесь, лучше сначала загуглить назначение службы или временно её остановить (без disable), чтобы посмотреть на поведение системы:

sudo systemctl stop <имя_службы>.service

Если вы хотите получить список всех служб, включая неактивные:

systemctl list-unit-files --type=service

Заключение

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

Все три части чек-листа по безопасности сервера с Ubuntu 24.04 доступны по ссылкам:

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях