Docs/docs/10-security.md
Administrator 6733688c69 Update 3 files
- /docs/10-security.md
- /docs/11-backup.md
- /docs/12-troubleshooting.md
2026-03-20 16:29:00 +05:00

12 KiB
Raw Blame History

10. Безопасность

Обзор

В этом разделе собраны текущие проблемы безопасности инфраструктуры и план их устранения. Документ основан на результатах аудита, проведённого в марте 2026 года.

Текущее состояние

Область Статус Комментарий
SSH (парольная аутентификация) Отключена на всех хостах
SSH (вход root) 🔴 Разрешён на всех хостах
SSH-ключи 🟡 Управляются через Ansible, но требуется проверка на наличие лишних ключей
Samba (шифрование) 🟡 На media desired, на games required
Samba (протокол) 🔴 На media используется NT1 (SMB1), что небезопасно
UFW / фаервол 🔴 Отключён на всех LXC и ВМ
Хранение паролей в Ansible 🔴 Часть паролей в открытом виде в all.yml
Заголовки безопасности в NPM 🔴 Отсутствуют для большинства прокси
Docker-образы 🟡 Используется тег latest, неконтролируемые обновления
Обновления систем 🟡 Много пакетов требуют обновления (49 на media, аналогично на других)
Мониторинг 🟢 Настроен, но нет алертов на логи и некоторые метрики
Резервное копирование 🔴 Не настроено (будет описано в отдельном разделе)

Критические проблемы (🔴)

1. Вход root по SSH

  • Описание: На всех хостах разрешён вход под пользователем root через SSH. При компрометации ключа злоумышленник получает полный контроль над системой.
  • Решение: Создать обычного пользователя (например, ansible), добавить его в группу sudo, настроить ключи и запретить вход root в /etc/ssh/sshd_config (PermitRootLogin no). Перезапустить SSH.

2. Samba на media использует SMB1

  • Описание: В конфигурации Samba на хосте media установлен server min protocol = NT1, что соответствует SMB1. Этот протокол уязвим (EternalBlue и другие атаки).
  • Решение: Изменить на server min protocol = SMB2 (или SMB3). После изменения проверить работу клиентов (Windows, Android, Docker). Если Android не поддерживает SMB2/3, использовать VPN для доступа к шарам.

3. Отсутствие фаервола на всех LXC

  • Описание: UFW отключён на всех LXC-контейнерах. Сервисы доступны из всей локальной сети без ограничений.
  • Решение: Включить UFW на каждом хосте, разрешив только необходимые порты:
    • SSH (только из подсетей 192.168.1.0/24 и 192.168.45.0/24)
    • Samba (139, 445) только из локальной и VPN-подсетей
    • Порты Docker-сервисов (например, 45131, 45132 и т.д.) если они должны быть доступны только через NPM, то разрешить только для gateway или для всей локальной сети
    • HTTP/HTTPS (80, 443) если сервис слушает напрямую, а не через NPM

4. Пароли в открытом виде в Ansible

  • Описание: В файле group_vars/all.yml присутствуют пароли в открытом виде (например, grafana_admin_password, пароли Samba, PostgreSQL и др.).
  • Решение: Немедленно перенести все секреты в group_vars/vault.yml и зашифровать с помощью Ansible Vault. Удалить открытые пароли из all.yml.

5. Отсутствие заголовков безопасности в NPM

  • Описание: Для большинства проксируемых доменов не настроены заголовки HSTS, X-Content-Type-Options, X-Frame-Options и другие.
  • Решение: Через веб-интерфейс NPM для каждого публичного прокси добавить заголовки (см. раздел Проксирование и SSL).

Проблемы высокого приоритета (🟠)

1. Использование Docker-образов с тегом latest

  • Описание: Образы, такие как jc21/nginx-proxy-manager:latest, обновляются неконтролируемо, что может привести к несовместимости или неожиданным изменениям.
  • Решение: Зафиксировать версии образов в docker-compose.yml (например, jc21/nginx-proxy-manager:2.12.3).

2. Необновлённые системы

  • Описание: На хосте media 49 пакетов требуют обновления, включая Docker и системные библиотеки. Аналогичная ситуация на других хостах.
  • Решение: Выполнить apt update && apt upgrade на всех хостах. Настроить автоматические обновления безопасности (unattended-upgrades).

3. Прокси с Offline статусом

  • Описание: qb.zailon.ru недоступен. Возможно, qBittorrent не запущен или не слушает порт 8080.
  • Решение: Проверить контейнер qBittorrent на torrent, убедиться, что порт 8080 открыт, и правило прокси в NPM корректно.

Проблемы среднего приоритета (🟡)

1. Шифрование Samba на media

  • Описание: Установлено smb encrypt = desired вместо required. Это снижает безопасность передачи данных.
  • Решение: После включения VPN для доступа к шарам извне изменить на required. Если Android-клиенты не поддерживают шифрование, использовать VPN.

2. Управление SSH-ключами

  • Описание: В all.yml указаны три публичных ключа. Необходимо убедиться, что на всех хостах нет лишних ключей, а также что ключи актуальны.
  • Решение: Проверить содержимое ~/.ssh/authorized_keys на каждом хосте, удалить ненужные. Использовать Ansible для централизованного управления ключами.

3. cAdvisor не включён на всех хостах

  • Описание: В плейбуке роль cadvisor закомментирована, поэтому метрики Docker-контейнеров собираются не везде.
  • Решение: Если нужен полный мониторинг, раскомментировать роль в olimp-deploy.yml и применить её для хостов с Docker.

4. Отсутствие алертов на логи

  • Описание: Настроены только алерты на метрики. Нет алертов на появление в логах ошибок, попыток взлома и т.п.
  • Решение: Настроить правила алертов в Grafana на основе Loki (например, при появлении error в логах NPM или SSH).

Рекомендации по улучшению (🟢)

1. Включить автоматические обновления безопасности

  • На всех хостах установить unattended-upgrades и настроить его на автоматическую установку обновлений безопасности.

2. Сегментация сети

  • Выделить VLAN для умных устройств (IoT) и гостевой сети, чтобы ограничить распространение атаки.

3. Мониторинг роутера

  • Настроить сбор SNMP-метрик с роутера TP-Link (если поддерживается) для мониторинга нагрузки, ошибок и подозрительного трафика.

4. Резервное копирование

  • Организовать регулярное резервное копирование конфигураций, баз данных и пользовательских данных. Хранить копии в зашифрованном виде вне основной сети.

5. Двухфакторная аутентификация

  • Для критических сервисов (Grafana, GitLab, Bitwarden) включить 2FA, если это поддерживается.

6. Регулярный аудит

  • Проводить периодический аудит безопасности (например, раз в 3 месяца) с использованием специализированных инструментов (Lynis, OpenVAS).

План действий

Задача Приоритет Срок
Перенести пароли в Ansible Vault 🔴 Немедленно
Запретить вход root по SSH 🔴 Немедленно
Включить UFW на всех хостах 🔴 В течение недели
Обновить Samba (протокол и шифрование) 🔴 В течение недели
Добавить заголовки безопасности в NPM 🔴 В течение недели
Зафиксировать версии Docker-образов 🟠 В течение месяца
Обновить все системы 🟠 В течение месяца
Настроить автоматические обновления 🟢 В течение месяца
Включить cAdvisor 🟡 По мере необходимости
Настроить алерты на логи 🟡 По мере необходимости

Связанные разделы: