Эта статья — часть серии Linux administration, посвящённой самостоятельному администрированию Linux, Self-Hosting и DevOps. Безопасность — не опция. Это основа любого сервера, особенно если он в интернете. Одна ошибка в настройке SSH может привести к полному компрометированию системы.
📌 О чём эта статья?
Каждый сервер в сети — мишень. Боты сканируют IP-адреса, подбирают пароли, ищут уязвимости. В этой статье вы узнаете, как защитить Linux-сервер с помощью:
Безопасной настройки SSH
Блокировки атак с fail2ban
Управления доступом через ufw и firewalld
Аудита событий с auditd
Мы покажем практические шаги, основанные на лучших практиках и рекомендациях NIST, CIS и других авторитетных источников.
🔐 1. Безопасная настройка SSH
SSH является протоколом, который шифрует все передаваемые данные, делая их недоступными для злоумышленников, даже если трафик будет перехвачен. Это особенно важно для удаленного администрирования.
SSH — основной способ доступа к серверу. Но по умолчанию он уязвим к брутфорсу.
Файл конфигурации: /etc/ssh/sshd_config
🔹 Ключевые настройки
# Запретить вход под rootPermitRootLogin no# Отключить аутентификацию по паролю (использовать ключи)PasswordAuthentication no# Разрешить только определённых пользователейAllowUsers alice bob# Изменить порт (необязательно, но снижает шум в логах)Port 2222# Уменьшить время на подключениеLoginGraceTime 30MaxAuthTries 3# Включить аутентификацию по ключуPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys# Отключить ненужные опцииX11Forwarding noPrintMotd no
🔹 Перезагрузка SSH
sudo systemctl restart sshd
WARNING
Не закрывайте текущее SSH-подключение, пока не проверите новое!
Используйте второй терминал для теста.
Fail2ban – это инструмент для защиты сервера от атак методом перебора паролей (брутфорса), анализируя системные журналы. Он блокирует IP-адреса, с которых происходят подозрительные действия.
firewall-cmd поддерживает зоны (public, trusted, internal).
Источник: firewalld.org
📝 4. auditd — аудит системы
Системный демон аудита (auditd) предназначен для мониторинга системных событий и создания отчетов. Он регистрирует действия в системе, помогая выявлять потенциальные нарушения безопасности. Он записывает критически важные события:
sudo auditctl -w /bin/su -p x -k privileged_cmdsudo auditctl -w /usr/bin/sudo -p x -k privileged_cmd
Мониторинг изменения ключевых файлов:
sudo auditctl -w /etc/passwd -p wa -k identitysudo auditctl -w /etc/shadow -p wa -k identitysudo 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 --summarysudo aureport -f --failed # Неудачные доступы к файлам
# 1. Настроить SSH с ключами и портом 2222# 2. Установить и настроить fail2ban# 3. Включить ufw с разрешением только нужных портов# 4. Настроить auditd на мониторинг /etc/passwd и SSH# 5. Регулярно проверять: journalctl, ausearch, fail2ban-client status
Пример 2: Обнаружение подозрительного входа
# Найти все входыsudo ausearch -m USER_LOGIN# Найти входы с определённого IPsudo ausearch -m USER_LOGIN | grep 192.168.1.666# Проверить, кто менял shadowsudo ausearch -w /etc/shadow
⚠️ Лучшие практики безопасности
WARNING
Следуйте этим правилам, чтобы минимизировать риски.
Никогда не используйте root напрямую — только через sudo.
Отключите вход по паролю в SSH — только ключи.
Используйте fail2ban — даже на локальных серверах.
Включите брандмауэр — закрывайте всё, что не нужно.
Настройте auditd — особенно на критичных серверах.
Регулярно обновляйте систему — sudo apt upgrade должен быть в привычке.
Ограничьте пользователей — AllowUsers в SSH.
Используйте unattended-upgrades для автоматических обновлений безопасности.
📊 Полезные команды диагностики
# Кто сейчас в системе?wholast# Неудачные входыsudo grep "Failed password" /var/log/auth.log# Статус fail2bansudo fail2ban-client status sshd# Правила брандмауэраsudo ufw status # Ubuntufirewall-cmd --list-all # RHEL# События аудитаsudo ausearch -k ssh_config
✅ Заключение
Теперь вы можете:
Настроить безопасный SSH с аутентификацией по ключу