Содержание
В эпоху постоянных кибератак и автоматизированных сканеров уязвимостей защита сервера — не роскошь, а необходимость. Даже если вы уверены, что всё настроено «как надо», на деле уязвимые точки могут скрываться в самых неожиданных местах. В этой статье мы подробно разберём три ключевых уровня обороны сервера с Ubuntu 24.04: защита от взлома путём перебора паролей, фильтрация сетевого трафика на уровне ядра и минимизация поверхности атаки за счёт отключения ненужных служб.
Это не просто «чек-лист» — это стратегия, проверенная в реальных инфраструктурах. Если вы системный администратор, DevOps-инженер или просто владелец VPS, эта инструкция поможет вам не только укрепить безопасность, но и оптимизировать ресурсы сервера.
Почему даже SSH-ключи не делают вас неуязвимым: зачем нужен fail2ban
Многие считают: если вход по SSH защищён ключами, а пароли отключены, то угроза перебора паролей исчезает. Это опасное заблуждение. Даже если SSH недоступен по паролю, злоумышленники всё равно будут пытаться подключаться — засоряя логи, нагружая систему и иногда находя уязвимые сервисы, которые работают рядом: веб-панели (например, Webmin), почтовые серверы (Postfix, Dovecot), FTP-демоны (vsftpd) или даже ваше собственное API.
Fail2ban — это «сторожевой пёс» вашей системы. Он постоянно сканирует системные логи в поисках подозрительной активности: повторяющихся ошибок аутентификации, аномального поведения клиентов, необычных запросов. Как только количество попыток превышает заданный порог, fail2ban автоматически блокирует IP-адрес нарушителя на сетевом уровне — с помощью nftables (в Ubuntu 24.04) или iptables.
Установка и первоначальная настройка fail2ban на Ubuntu 24.04
Установка предельно проста:
sudo apt update sudo apt install fail2ban -y
После установки сервис запускается автоматически и начинает мониторить логи, но по умолчанию он ничего не блокирует. Чтобы активировать защиту, нужно настроить так называемые jails («тюрьмы») — правила для конкретных сервисов.
Важно! Никогда не редактируйте основной файл /etc/fail2ban/jail.conf — он может быть перезаписан при обновлении пакета. Вместо этого создайте локальный конфигурационный файл:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local Теперь редактируем jail.local: sudo nano /etc/fail2ban/jail.local
Настройка защиты SSH
Найдите секцию [sshd] и убедитесь, что она выглядит так:
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600 ignoreip = 127.0.0.1/8 ::1 YOUR_TRUSTED_IP
Разберём параметры:
enabled = true— активирует мониторинг SSH.port = ssh— имя или номер порта. Если вы сменили SSH-порт, укажите его явно:port = 2222.filter = sshd— указывает, какой шаблон (файл в/etc/fail2ban/filter.d/sshd.conf) использовать для поиска ошибок в логах.logpath— путь к логу аутентификации. В Ubuntu 24.04 это/var/log/auth.log.maxretry = 5— после 5 неудачных попыток входа — бан.findtime = 600— окно времени (в секундах), в котором учитываются попытки. То есть 5 ошибок за 10 минут.bantime = 600— длительность блокировки (10 минут). Вы можете увеличить до86400(24 часа) или использовать-1для вечного бана (осторожно!).ignoreip— список IP-адресов, которые никогда не блокируются. Обязательно добавьте адрес своей сети или статический IP, чтобы не заблокировать себя!
После сохранения перезапустите службу:
sudo systemctl restart fail2ban
Проверка работы и мониторинг
Убедитесь, что всё работает:
sudo fail2ban-client status sudo fail2ban-client status sshd
Вы увидите список активных jail’ов и, при наличии, заблокированные IP-адреса. Пример вывода:
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 12 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 3 `- Banned IP list: 203.0.113.45
Защита других сервисов
Fail2ban поддерживает десятки сервисов «из коробки». Чтобы защитить, например, веб-сервер Nginx от подбора паролей в админке, активируйте секцию [nginx-http-auth]:
[nginx-http-auth] enabled = true filter = nginx-http-auth port = http,https logpath = /var/log/nginx/error.log maxretry = 3 bantime = 3600
Аналогично можно настроить защиту для:
- Postfix / Dovecot — почтовые серверы
- Apache2 — веб-сервер
- ProFTPD / vsftpd — FTP-серверы
- MySQL — базы данных
Готовые фильтры находятся в /etc/fail2ban/filter.d/. Если вам нужно защитить кастомное приложение — напишите свой фильтр с регулярными выражениями под ваш лог-формат.
Гибкая и мощная альтернатива UFW: настройка nftables в Ubuntu 24.04
UFW (Uncomplicated Firewall) — отличный инструмент для базовой фильтрации. Но если вы хотите максимальный контроль над сетевым трафиком, вам нужен nftables. В Ubuntu 24.04 именно он стал стандартом замены устаревшему iptables.
Почему nftables лучше?
- Единый фреймворк для IPv4 и IPv6.
- Более читаемый и структурированный синтаксис.
- Поддержка сложной логики: условия, цепочки, пользовательские таблицы.
- Встроенные механизмы rate-limiting и защиты от DDoS.
- Высокая производительность за счёт единой таблицы правил в ядре.
UFW работает поверх nftables, но скрывает его мощь. Если вы отключите UFW и настроите nftables вручную — вы получите полную власть над трафиком.

Создание базового правила nftables
Отредактируйте основной конфигурационный файл:
sudo nano /etc/nftables.conf
Пример безопасной конфигурации:
#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; # Разрешить loopback iif "lo" accept # Разрешить установленные и связанные соединения ct state established,related accept # Защита от спуфинга ip saddr { 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } drop ip6 saddr { ::1/128, fe80::/10 } drop # Разрешить ICMP (ping и другие диагностические пакеты) ip protocol icmp icmp type { echo-request, echo-reply, destination-unreachable, time-exceeded } accept ip6 nexthdr icmpv6 icmpv6 type { echo-request, echo-reply, nd-neighbor-solicit, nd-neighbor-advert } accept # Разрешить SSH (замените 22 на ваш порт, если меняли) tcp dport 22 accept # Разрешить HTTP/HTTPS (если у вас веб-сервер) tcp dport { 80, 443 } accept # Всё остальное — блокировать reject with icmp type port-unreachable } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } }
Эта конфигурация:
- Блокирует весь входящий трафик по умолчанию.
- Разрешает только необходимые сервисы (SSH, веб-сервер).
- Защищает от IP-спуфинга (запрещает локальные адреса извне).
- Разрешает ICMP для диагностики сетей.
- Отклоняет, а не просто отбрасывает, соединения — это помогает избежать «зависаний» клиентов.
Активация nftables
Прежде чем применять правила, убедитесь, что UFW отключён, чтобы избежать конфликтов:
sudo ufw disable
Теперь включите и запустите nftables:
sudo systemctl enable nftables --now
Проверьте активные правила:
sudo nft list ruleset
Дополнительные возможности
С nftables вы можете:
- Ограничить частоту подключений (rate-limiting):
tcp dport 22 limit rate 3/minute accept - Блокировать целые страны (через GeoIP и скрипты обновления).
- Логировать подозрительные попытки:
ip saddr @blacklist log prefix "BLOCKED: " drop - Создавать временные правила для отладки без перезагрузки.
Минимизация поверхности атаки: как отключить ненужные службы в Ubuntu 24.04
Каждый запущенный процесс — это потенциальная дыра в безопасности. В стандартной установке Ubuntu 24.04 на сервере могут работать службы, которые вам абсолютно не нужны: от Bluetooth до службы печати. Они открывают порты, потребляют память и CPU, а иногда даже имеют известные уязвимости.
Правило простое: если служба не нужна — отключите её.
Шаг 1: выявите, что слушает сеть
Используйте команду:
sudo ss -tulpn
Флаги:
-t— TCP-u— UDP-l— только слушающие (listening) сокеты-p— показать PID и имя процесса-n— не разрешать имён (только порты и IP)
Пример вывода:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 10 0.0.0.0:631 0.0.0.0:* users:(("cupsd",pid=1234,fd=7)) tcp LISTEN 0 5 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolved",pid=890,fd=13)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1122,fd=3))
Здесь видно:
cupsd— служба печати (порт 631). На сервере она почти всегда не нужна.systemd-resolved— DNS-резолвер. Может быть нужен, но иногда его заменяют на dnsmasq или отключают вовсе.sshd— SSH. Это необходимо.
Шаг 2: посмотрите все запущенные службы
systemctl list-units --type=service --state=running
Вы увидите полный список. Особенно подозрительны:
bluetooth.servicecups.serviceavahi-daemon.service— сервис обнаружения устройств в локальной сети (mDNS)ModemManager.servicewhoopsie.service— отправка отчётов об ошибках в Canonical
Шаг 3: отключите ненужное
Для отключения с немедленной остановкой используйте:
sudo systemctl disable --now bluetooth.service sudo systemctl disable --now cups.service sudo systemctl disable --now avahi-daemon.service sudo systemctl disable --now ModemManager.service sudo systemctl disable --now whoopsie.service
Команда disable --now делает две вещи:
- Останавливает службу сейчас (как
systemctl stop). - Отключает автозапуск при загрузке (как
systemctl disable).
Важно: не отключайте критические службы!
Ни в коем случае не трогайте:
sshd— иначе потеряете доступnetworkingилиsystemd-networkdsystemd-resolved(если не знаете, как заменить DNS)rsyslogилиsyslog-ng— логированиеcronилиsystemd-timersdbus— шина системных сообщений
Если сомневаетесь — сначала остановите службу без отключения:
sudo systemctl stop suspicious-service.service
Понаблюдайте за системой. Если всё работает — отключайте навсегда.

Заключение: безопасность — это процесс, а не состояние
Настройка fail2ban, переход на nftables и отключение лишних служб — это фундамент надёжной защиты сервера на Ubuntu 24.04. Однако это лишь начало. В следующих частях нашего гида по безопасности вы узнаете:
- Как настроить централизованное аудит-логирование с auditd.
- Как реализовать мониторинг в реальном времени (Prometheus + Grafana + Fail2ban).
- Как организовать автоматическое резервное копирование с шифрованием.
- Как применять SELinux или AppArmor для изоляции процессов.
Помните: не существует «абсолютно безопасного» сервера. Но есть серверы, которые слишком дороги для атаки. Ваша задача — сделать свой сервер именно таким. И начинать нужно с базовых, но мощных шагов, описанных в этой статье.
Укрепляйте инфраструктуру, тестируйте настройки и не забывайте регулярно обновлять систему. Безопасность — это не разовая задача, а непрерывная дисциплина.
