# 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](07-proxy-ssl.md)). ## Проблемы высокого приоритета (🟠) ### 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 | 🟡 | По мере необходимости | | Настроить алерты на логи | 🟡 | По мере необходимости | --- **Связанные разделы:** - [Samba – файловые шары](05-samba.md) - [Проксирование и SSL (NPM)](07-proxy-ssl.md) - [Мониторинг и логирование](08-monitoring.md) - [Управление конфигурацией (Ansible)](09-ansible.md) - [Резервное копирование](11-backup.md)