[Из песочницы] Безопасное шифрованное хранилище данных и особенности работы с ним
В какой-то момент мы столкнулись с необходимостью организовать шифрованное хранилище для удаленного размещения файлов. После недолгих поисков нашел легкое облачное решение, которое в итоге полностью устроило. Далее я вкратце опишу это решение и некоторые особенности работы с ним, возможно, кому-нибудь пригодится. На мой взгляд, вариант надежный и вместе с тем достаточно удобный.Архитектура За основу я решил взять систему облачного хранения данных ownCloud. Которая была установлена в OS Debian Linux v7.1 и развернута в виде виртуальной машины под гипервизором Proxmox Virtual Environment v3.1.Систему облачного хранения данных установил на зашифрованный диск ОС Linux, доступ к данным возможен только по протоколу HTTPS, для авторизации помимо стандартного пароля необходимо ввести также одноразовый пароль (OTP). Регулярно осуществляется резервное копирование. Предусмотрена возможность экстренного отключения и удаления всех данных ownCloud.
Гипервизор Proxmox Virtual Environment Гипервизор Proxmox Virtual Environment представляет собой специализированный дистрибутив OS Debian Linux v7.1, удаленный доступ к системе возможен по протоколу SSH на стандартном порту TCP 22. Однако основным рабочим инструментом для управления виртуальными машинами является Web-интерфейс.Раз в сутки происходит генерирование горячей копии (snapshot) виртуальной машины ownCloud с экспортом ее на серверы NFS, используя стандартные возможности Proxmox VE.
На скриншоте, виртуальная машина в Web-интерфейсе имеет идентификатор 100 (ownCloud). Доступ к ее консоли возможен через пункт контекстного меню «Console».
Например, вот так выглядит ввод пароля для шифрованного диска во время загрузки:
Облачное хранилище данных ownCloud Про установку ownCloud на хабре есть достаточно хорошая статья от пользователя BlackIce13 http://habrahabr.ru/post/208566/ там уже перечислены основные возможности и некоторые плюсы этой платформы.От себя могу лишь добавить, что, на мой взгляд, существует несколько более простой способ установки ownCloud для дистрибутива ОС Linux Debian и многих других, нежели предложенный автором статьи. Доступны готовые репозитории: http://software.opensuse.org/download/package? project=isv: ownCloud: community&package=owncloudВ этом случае все необходимые зависимости ставятся автоматически, а от вас будет лишь требоваться скорректировать настройки под свою специфику.
ownCloud развернул на базе ОС Debian Linux v7.1 внутри виртуального контейнера. Удаленный доступ к хранилищу возможен по протоколу SSH на стандартном порту TCP 22.Основная работа с ownCloud осуществляется через Web-интерфейс, возможно также подключение через протокол WebDAV и использование клиентов синхронизации (Sync).
Кстати, поскольку доступ к ownCloud осуществляется через HTTPS логи доступа и ошибок ведутся сервером Apache в файлах »/var/log/apache2/access.log» и »/var/log/apache2/error.log» соответственно. Также ownCloud имеет свой собственный лог »/var/www/owncloud/data/owncloud.log».
Одноразовые пароли OTP Для усиления безопасности доступ к ownCloud через Web-интерфейс возможен с использованием двухфакторной авторизации: традиционный пароль и одноразовый пароль OTP. Функционал OTP реализуется с помощью внешнего дополнения One Time Password Backend. Встроенной поддержки OTP у ownCloud нет.Настройка основных параметров OTP осуществляется в разделе «Admin» под административной учетной записью.
На скриншотах настройки двухфакторной авторизации и одноразовых паролей подобранные для обеспечения совместимости с аппаратными генераторами FEITIAN OTP c200.Алгоритм: Time-based One Time Password (TOTP)Количество цифр в пароле: 6Время жизни пароля: 60 секунд
Чтобы двухфакторная авторизация вступила в действие необходимо назначить пользователю Token Seed. До этого момента он может заходить в ownCloud, используя только лишь обычный пароль. Что собственно необходимо сделать сразу после создания пользователя, перейти в раздел «Personal» и ввести Token Seed в одноименное поле.
Генерировать Token Seed, используя встроенные возможности модуля OTP ownCloud, не рекомендуется, поскольку в алгоритме его работы наблюдаются проблемы. Формат ввода: Base32 (%32) UPPERCASE. Конвертировать Token Seed в разные форматы можно с помощью утилиты www.darkfader.net/toolbox/convert/
Конкретно для этого проекта использовался Token Seed вшитый в аппаратный Token FEITIAN OTP c200. В общем случае можно использовать любой генератор паролей, а затем приводить его к нужному формату, используя приведенный в тексте конвертер.
Примером такого приложения для ОС Android может служить Android Token: https://play.google.com/store/apps/details? id=uk.co.bitethebullet.android.token&hl=ru
Проинициализированный Token Seed выглядит следующим образом:
Для отключения OTP достаточно удалить Token Seed из настроек. Если это невозможно, например, по причине того, что генератор OTP утерян, поэтому доступа к личному кабинету пользователя нет, то отключение OTP возможно только путем прямой модификации данных в СУДБ MySQL. Для этого необходимо запустить из командной строки клиент MySQL:# mysql -uowncloud –p Enter password:
Затем выполнить запрос аналогичный следующему, изменив значение поля «user» на необходимое: mysql> delete from owncloud.oc_user_otp where `user` = 'test';
Из-за архитектурных ограничений OTP работает только при доступе к ownCloud через Web-интерфейс, но не через WebDAV. Данный недостаток компенсируется тем, что список IP-адресов, которые могут использовать WebDAV, строго ограничен. Отвечают за это директивы «Allow from» в файле настроек сервера Apache »/etc/apache2/conf.d/owncloud.conf». Обратите внимание, что директивы там указываются дважды.
IP-адреса перечисляются через пробел. Необходимо удостоверятся в том, что в списке обязательно присутствуют IP обратной петли 127.0.0.1, а также публичный IP сервера самого ownCloud. В противном случае в работе WebDAV возможны сбои. После изменения настроек Apache его необходимо перезапустить: service apache2 restart
Защита от брутфорса В свежих версиях ownCloud ведется лог неудачных попыток авторизации:»/var/log/owncloud/auth.log». Содержимое »/var/log/owncloud/auth.log» контролирует сервис Fail2ban. Если им в течение короткого времени фиксируется 5 или более неудачных попыток авторизации с одного IP-адреса, то он блокируется фильтром пакетов IPTables на 10 минут. Если после автоматической разблокировки, попытки продолжаются, то IP блокируется повторно навсегда. Следит за работой Fail2ban можно в логе »/var/log/fail2ban.log».Список IP-адресов, которые не должны блокироваться ни при каких обстоятельствах задается параметром «ignoreip» в файле настроек »/etc/fail2ban/jail.conf». IP перечисляются через пробел.
После изменения настроек Fail2ban его необходимо перезапустить: service fail2ban restart
В случае необходимости вручную разблокировать какой-либо IP, необходимо выполнить на сервере из CLI команду аналогичную следующей, скорректировав в ней адрес: iptables -D fail2ban-Owncloud -s 187.22.109.14/32 -j DROP