В какой-то момент мы столкнулись с необходимостью организовать шифрованное хранилище для удаленного размещения файлов. После недолгих поисков нашел легкое облачное решение, которое в итоге полностью устроило. Далее я вкратце опишу это решение и некоторые особенности работы с ним, возможно, кому-нибудь пригодится. На мой взгляд, вариант надежный и вместе с тем достаточно удобный.
За основу я решил взять систему облачного хранения данных ownCloud. Которая была установлена в OS Debian Linux v7.1 и развернута в виде виртуальной машины под гипервизором Proxmox Virtual Environment v3.1.
Систему облачного хранения данных установил на зашифрованный диск ОС Linux, доступ к данным возможен только по протоколу HTTPS, для авторизации помимо стандартного пароля необходимо ввести также одноразовый пароль (OTP). Регулярно осуществляется резервное копирование. Предусмотрена возможность экстренного отключения и удаления всех данных ownCloud.
Гипервизор Proxmox Virtual Environment представляет собой специализированный дистрибутив OS Debian Linux v7.1, удаленный доступ к системе возможен по протоколу SSH на стандартном порту TCP 22. Однако основным рабочим инструментом для управления виртуальными машинами является Web-интерфейс.
Раз в сутки происходит генерирование горячей копии (snapshot) виртуальной машины ownCloud с экспортом ее на серверы NFS, используя стандартные возможности Proxmox VE.
На скриншоте, виртуальная машина в Web-интерфейсе имеет идентификатор 100 (ownCloud). Доступ к ее консоли возможен через пункт контекстного меню «Console».
Например, вот так выглядит ввод пароля для шифрованного диска во время загрузки:
Про установку 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".
Для усиления безопасности доступ к 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:
Затем выполнить запрос аналогичный следующему, изменив значение поля «user» на необходимое:
Из-за архитектурных ограничений 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 его необходимо перезапустить:
В свежих версиях 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 его необходимо перезапустить:
В случае необходимости вручную разблокировать какой-либо IP, необходимо выполнить на сервере из CLI команду аналогичную следующей, скорректировав в ней адрес:
P.S.
Live версию ownCloud можно посмотреть на официальном сайте http://demo.owncloud.org
Архитектура
За основу я решил взять систему облачного хранения данных 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
P.S.
Live версию ownCloud можно посмотреть на официальном сайте http://demo.owncloud.org