12 KiB
12 KiB
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. Необновлённые системы
- Описание: На хосте
media49 пакетов требуют обновления, включая 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 | 🟡 | По мере необходимости |
| Настроить алерты на логи | 🟡 | По мере необходимости |
Связанные разделы: