Безопасность Linux: SSH, fail2ban, ufw, auditd

TIP

Эта статья — часть серии Linux administration, посвящённой самостоятельному администрированию Linux, Self-Hosting и DevOps. Безопасность — не опция. Это основа любого сервера, особенно если он в интернете. Одна ошибка в настройке SSH может привести к полному компрометированию системы.

📌 О чём эта статья?

Каждый сервер в сети — мишень. Боты сканируют IP-адреса, подбирают пароли, ищут уязвимости. В этой статье вы узнаете, как защитить Linux-сервер с помощью:

  • Безопасной настройки SSH
  • Блокировки атак с fail2ban
  • Управления доступом через ufw и firewalld
  • Аудита событий с auditd

Мы покажем практические шаги, основанные на лучших практиках и рекомендациях NIST, CIS и других авторитетных источников.


🔐 1. Безопасная настройка SSH

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

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

Файл конфигурации: /etc/ssh/sshd_config

🔹 Ключевые настройки

# Запретить вход под root
PermitRootLogin no
 
# Отключить аутентификацию по паролю (использовать ключи)
PasswordAuthentication no
 
# Разрешить только определённых пользователей
AllowUsers alice bob
 
# Изменить порт (необязательно, но снижает шум в логах)
Port 2222
 
# Уменьшить время на подключение
LoginGraceTime 30
MaxAuthTries 3
 
# Включить аутентификацию по ключу
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
 
# Отключить ненужные опции
X11Forwarding no
PrintMotd no

🔹 Перезагрузка SSH

sudo systemctl restart sshd

WARNING

Не закрывайте текущее SSH-подключение, пока не проверите новое!
Используйте второй терминал для теста.


🔹 Работа с SSH-ключами

Генерация ключа (на клиенте):

ssh-keygen -t ed25519 -C "alice@selfops.dev"

Копирование ключа на сервер:

ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@server -p 2222

Подключение:

ssh alice@server -p 2222

INFO

Используйте ed25519 — современный, безопасный алгоритм.
Источник: OpenSSH 8.2 Release Notes


🛡️ 2. fail2ban — защита от брутфорса

Fail2ban – это инструмент для защиты сервера от атак методом перебора паролей (брутфорса), анализируя системные журналы. Он блокирует IP-адреса, с которых происходят подозрительные действия.

🔹 Установка

# Debian/Ubuntu
sudo apt install fail2ban
 
# RHEL/Fedora
sudo dnf install fail2ban

🔹 Настройка: /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 3600

🔹 Объяснение параметров

ПараметрЗначение
maxretryМаксимум попыток перед баном
bantimeДлительность бана (в секундах)
findtimeЗа какое время учитывать попытки
portПорт SSH (если изменён)

🔹 Управление

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
 
# Проверить статус
sudo fail2ban-client status sshd
 
# Разбанить IP
sudo fail2ban-client set sshd unbanip 192.168.1.666

INFO

fail2ban работает с iptables или nftables.
Источник: fail2ban — Official Documentation


🔥 3. Брандмауэр: ufw и firewall-cmd

🔹 ufw — Uncomplicated Firewall (Ubuntu, Debian)

Установка и настройка

sudo apt install ufw

Базовые правила

sudo ufw default deny incoming
sudo ufw default allow outgoing
 
sudo ufw allow 2222/tcp     # SSH
sudo ufw allow 80/tcp       # HTTP
sudo ufw allow 443/tcp      # HTTPS
 
sudo ufw enable
sudo ufw status verbose

TIP

Используйте sudo ufw app list для просмотра профилей (Nginx Full, OpenSSH).


🔹 firewall-cmd — FirewallD (RHEL, Fedora, CentOS)

Включение и настройка

sudo systemctl enable firewalld
sudo systemctl start firewalld

Разрешение сервисов

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Проверка

firewall-cmd --list-all

INFO

firewall-cmd поддерживает зоны (public, trusted, internal).
Источник: firewalld.org


📝 4. auditd — аудит системы

Системный демон аудита (auditd) предназначен для мониторинга системных событий и создания отчетов. Он регистрирует действия в системе, помогая выявлять потенциальные нарушения безопасности. Он записывает критически важные события:

  • Кто и когда вошёл в систему
  • Какие файлы были изменены
  • Какие процессы были запущены
  • Изменения прав доступа

🔹 Установка

# Debian/Ubuntu
sudo apt install auditd audispd-plugins
 
# RHEL/Fedora
sudo dnf install audit audit-libs

🔹 Примеры правил аудита

Следить за входами в систему:

sudo auditctl -w /bin/su -p x -k privileged_cmd
sudo auditctl -w /usr/bin/sudo -p x -k privileged_cmd

Мониторинг изменения ключевых файлов:

sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/shadow -p wa -k identity
sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config

Правило через конфиг: /etc/audit/rules.d/audit.rules

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k ssh_config
-a always,exit -F arch=b64 -S execve -k execution

WARNING

Перезагрузите auditd после изменений:

sudo systemctl restart auditd

🔹 Просмотр логов аудита

# Все события с меткой "ssh_config"
sudo ausearch -k ssh_config
 
# Кто запускал sudo?
sudo ausearch -x /usr/bin/sudo
 
# Неудачные попытки входа
sudo ausearch -m USER_LOGIN -sv no
 
# Последние события
sudo aureport --summary
sudo aureport -f --failed    # Неудачные доступы к файлам

INFO

Логи хранятся в /var/log/audit/audit.log.
Источник: Linux Audit — Official Docs


🧪 Практические примеры

Пример 1: Защита домашнего сервера

# 1. Настроить SSH с ключами и портом 2222
# 2. Установить и настроить fail2ban
# 3. Включить ufw с разрешением только нужных портов
# 4. Настроить auditd на мониторинг /etc/passwd и SSH
# 5. Регулярно проверять: journalctl, ausearch, fail2ban-client status

Пример 2: Обнаружение подозрительного входа

# Найти все входы
sudo ausearch -m USER_LOGIN
 
# Найти входы с определённого IP
sudo ausearch -m USER_LOGIN | grep 192.168.1.666
 
# Проверить, кто менял shadow
sudo ausearch -w /etc/shadow

⚠️ Лучшие практики безопасности

WARNING

Следуйте этим правилам, чтобы минимизировать риски.

  1. Никогда не используйте root напрямую — только через sudo.
  2. Отключите вход по паролю в SSH — только ключи.
  3. Используйте fail2ban — даже на локальных серверах.
  4. Включите брандмауэр — закрывайте всё, что не нужно.
  5. Настройте auditd — особенно на критичных серверах.
  6. Регулярно обновляйте системуsudo apt upgrade должен быть в привычке.
  7. Ограничьте пользователейAllowUsers в SSH.
  8. Используйте unattended-upgrades для автоматических обновлений безопасности.

📊 Полезные команды диагностики

# Кто сейчас в системе?
who
last
 
# Неудачные входы
sudo grep "Failed password" /var/log/auth.log
 
# Статус fail2ban
sudo fail2ban-client status sshd
 
# Правила брандмауэра
sudo ufw status          # Ubuntu
firewall-cmd --list-all  # RHEL
 
# События аудита
sudo ausearch -k ssh_config

✅ Заключение

Теперь вы можете:

  • Настроить безопасный SSH с аутентификацией по ключу
  • Защитить сервер от брутфорса с fail2ban
  • Управлять доступом через ufw или firewall-cmd
  • Вести аудит критических событий с auditd
  • Быстро диагностировать подозрительную активность

QUOTE

“Безопасность — это не состояние. Это процесс.”