Для аудиторской компании, работающей с финансовыми данными, безопасность — не опция, а обязательное требование. Мы реализовали многоуровневую защиту.
Мы включили обязательную двухфакторную аутентификацию через TOTP (Time-based One-Time Password):
# Установка приложения TOTP
docker exec -u www-data nextcloud-app-1 php occ app:enable twofactor_totp
# Принудительное включение 2FA для всех пользователей
docker exec -u www-data nextcloud-app-1 php occ twofactorauth:enforce --on
# Установка приложения для генерации резервных кодов
docker exec -u www-data nextcloud-app-1 php occ app:enable twofactor_backupcodes
Каждый сотрудник при первом входе получал инструкцию по настройке TOTP через приложения Google Authenticator или Microsoft Authenticator. IT-отдел выдавал резервные коды лично — через защищённый канал, а не по email.
Дополнительно мы настроили ограничение сессий:
# config.php: автоматический выход через 12 часов неактивности
'session_lifetime' => 43200,
'session_keepalive' => false,
'remember_login_cookie_lifetime' => 0, # Отключаем "Запомнить меня"
Nextcloud имеет встроенную защиту от подбора паролей, но мы усилили её дополнительными мерами:
# config.php: настройка brute force protection
'auth.bruteforce.protection.enabled' => true,
# Белый список внутренних IP (чтобы не блокировать офис при опечатках)
'auth.bruteforce.protection.whitelist' => [
'10.0.1.0/24',
'10.0.2.0/24',
],
На уровне Nginx мы добавили rate limiting:
# В секции http nginx.conf
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# В секции server
location /login {
limit_req zone=login burst=3 nodelay;
proxy_pass http://nextcloud;
}
Для аудита всех действий пользователей установили приложение Audit Log:
# Включение аудита
docker exec -u www-data nextcloud-app-1 php occ app:enable admin_audit
# Настройка логирования в отдельный файл
# config.php
'log_type' => 'file',
'logfile' => '/var/www/html/data/audit.log',
'log.condition' => [
'apps' => ['admin_audit'],
],
Лог фиксировал каждое действие: вход, выход, скачивание файла, расшаривание, удаление. Это было принципиально важно — в случае инцидента компания могла точно установить, кто, когда и что делал с файлами.
Для дополнительной защиты мы включили серверное шифрование — даже если злоумышленник получит физический доступ к диску, прочитать файлы он не сможет:
# Включение модуля шифрования
docker exec -u www-data nextcloud-app-1 php occ app:enable encryption
docker exec -u www-data nextcloud-app-1 php occ encryption:enable
# Шифрование всех существующих файлов (запускали в нерабочее время)
docker exec -u www-data nextcloud-app-1 php occ encryption:encrypt-all
# Проверка статуса
docker exec -u www-data nextcloud-app-1 php occ encryption:status
# - enabled: true
# - defaultModule: OC_DEFAULT_MODULE
Мы выбрали серверное шифрование (а не end-to-end), потому что оно совместимо с Collabora Online и не требует от пользователей дополнительных действий. Ключ шифрования хранится отдельно от данных и защищён мастер-паролем, который известен только IT-директору.