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

124 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)