Как можно обезопасить Linux-сервер?

«Как можно обезопасить Linux-сервер?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Обеспечение безопасности сервера — это многослойный процесс (Defense in Depth). Вот ключевые меры, которые я применяю при настройке нового сервера:

  1. Минимизация поверхности атаки:

    • Обновления: Первым делом обновляю систему.
      # Для Debian/Ubuntu
      sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
    • Удаление ненужного ПО: Удаляю все неиспользуемые пакеты и службы (например, telnetd, rsh-server).
  2. Настройка SSH (основной вектор атаки):

    • Запрет входа под root: Редактирую /etc/ssh/sshd_config.
      PermitRootLogin no
    • Только аутентификация по ключу: Отключаю пароли.
      PasswordAuthentication no
      PubkeyAuthentication yes
    • Смена порта (security through obscurity): Меняю стандартный порт 22 на нестандартный (не панацея, но убирает 99% брутфорс-сканеров).
      Port 5922
    • Использование Fail2ban: Автоматически блокирует IP после неудачных попыток входа.
      sudo apt install fail2ban
      sudo systemctl enable --now fail2ban
  3. Настройка фаервола: Использую ufw для простоты.

    sudo ufw default deny incoming  # Запретить всё входящее по умолчанию
    sudo ufw default allow outgoing # Разрешить исходящее
    sudo ufw allow 5922/tcp comment 'SSH Custom Port' # Разрешить SSH
    sudo ufw allow 80/tcp comment 'HTTP'
    sudo ufw allow 443/tcp comment 'HTTPS'
    sudo ufw enable
  4. Включение Mandatory Access Control (MAC): Активирую и настраиваю AppArmor или SELinux (в зависимости от дистрибутива) для ограничения возможностей процессов, даже если они скомпрометированы.

    # Для SELinux (RHEL/CentOS)
    sudo setenforce 1
    sudo sed -i 's/SELINUX=permissive/SELINUX=enforcing/g' /etc/selinux/config
  5. Разделение привилегий и мониторинг:

    • Работаю от непривилегированного пользователя, использую sudo для админских задач.
    • Настраиваю централизованный сбор логов (например, в ELK-стек или Grafana Loki) для аудита и оперативного реагирования.
    • Использую инструменты для регулярного аудита безопасности, такие как lynis.
      sudo lynis audit system
  6. Защита на уровне приложения и сети: Это включает настройку reverse proxy (Nginx/Apache) с HTTPS (Let's Encrypt), WAF (ModSecurity), сегментацию сети (VLANs) и регулярное сканирование уязвимостей в зависимостях приложения (SAST/DAST).

Безопасность — это не разовая настройка, а непрерывный процесс обновлений, мониторинга и адаптации к новым угрозам.