September 7, 2024

Установка приватного менеджера паролей  

В этой статье рассмотрим преимущества приватного менеджера паролей, а также установим его на свой собственный сервер по шагам.

На текущее время, абсолютный лидер среди существующих решений нашей задачи утилита под названием Vaultwarden. Это менеджер паролей с открытым исходным кодом, который позволяет безопасно хранить и управлять паролями, логинами и другими конфиденциальными данными на собственном сервере.

Ниже перечислены его явные преимущества:

  • Все данные хранятся на вашем собственном сервере, что исключает доступ третьих лиц
  • Шанс утечек минимизирован благодаря: шифрованию, двухфакторной аутентификации, нестандартному подходу решения задачи
  • Решение полностью бесплатное, без ограничений функционала
  • Достаточно простая установка
  • Гибкий и широкий функционал
  • Минимизирован риск блокировок
  • Сервером могут пользоваться ваши друзья/знакомые/команда (но пароли всё ещё будут надёжно защищены от друг друга)
  • Есть возможность безопасно делиться паролями с другими
  • Можем хранить не только пароли, но и защищенные заметки, данные карт, личную информацию

На этом плюсы не заканчиваются, но уже понятно, что решение маст-хев для любого криптана. Поэтому перейдём к выбору сервера...

Выбор сервера

При большом желании, Vaultwarden Server можно конечно же установить и на домашний компьютер под Windows, но при таком раскладе мы сталкнёмся с множеством нюансов, если мы хотим, чтобы наши пароли могли синхронизироваться вне зависимости от местоположения, и того, включен ли наш ПК. Поэтому рекомендуется арендовать VPS(виртуальный приватный сервер, который хостинг-провайдер предоставляет в аренду пользователям). Да, в этом случае, наше решения получается не на 100% бесплатное, но за приватность приходится платить...

Я рекомендую для покупки VPS следующие варианты, оптимальные по соотношению цена/качество по моему мнению:

  1. Cloud.ru
  • Надежное облако от Сбера
  • Дают VPS бесплатно. 2 ядра,4 ОЗУ, 30 гб диск NVME (нам этих характеристик хватит с избытком)
  • Заплатить будет необходимо только за ip адрес ~ 150 рублей в месяц
  • Также дают бонусные рубли, так что вероятнее всего получится даже дешевле.

2. Timeweb

  • Бесплатных VPS нет, минимальная VPS + ip адрес будет стоить ~300 рублей в месяц
  • Но VPS помощнее(если вдруг захотите поставить на неё что-нибудь ещё), будет минимум в 2 раза дешевле чем сбер

3. Pq.hosting

  • Бесплатных VPS нет, минимальная VPS + ip адрес будет стоить ~500 рублей в месяц
  • Есть возможность установить
  • Оплата рублями имется

4. Melbicom

  • Та же самая история, что с Pq.hosting, но скорость соединения немного быстрее
  • Оплата рублями имеется

Домен

Домен покупать не обязательно. Но с ним будет удобнее делиться ссылкой на сервер с вашими знакомыми, да и браузер не будет ругаться при открытии админки. Домен стоит 100-200 рублей в год. Купить можно у timeweb или reg.ru, необходимо будет создать запись типа A, указав имя вашего домена и ip адрес сервера.

Инструкции:

reg.ru

timeweb

Создание сервера

Создание сервера на всех хостингах примерно одинаковое, но мы выберем самый бюджетный вариант от cloud.ru. Регистрируемся, переходим по ссылке:
https://console.cloud.ru/projects/0/spa/svp/virtual-machines/create?free-tier=true

При создании сервера, задайте:

  1. Название своей виртуальной машины (у меня vm-freetier)
  2. Выберите образ. (Публичные -> Ubuntu 22.04)
  3. "Подключить публичный IP" должно стоять

4. В секции "Авторизация пользователя", задаём свой логин

5. Далее нам необходимо создать ssh ключ для доступа к серверу, или просто указать открытый ключ, если он у вас уже есть. SSH ключ можно создать командой:

Я создал у себя на рабочем столе папку 'cloud' и открыл терминал в ней

Открытие терминала
C:\Users\Ilya\Desktop\cloud> ssh-keygen -t rsa -f cloud -C 'fleed@cloud'
Generating public/private rsa key pair.

ssh-keygen - команда для генерации ssh ключей

-t rsa способ шифрования ключа

-f cloud название создаваемых файлов

-С 'fleed@cloud' комментарий, для того, чтобы различать наши ключи

Далее нажимаем два раза Enter, чтобы не задавать пароль для ключа

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in cloud
Your public key has been saved in cloud.pub
The key fingerprint is:
SHA256:RCgIBxq9WR/GW54lnv0beky4aSFL7lZzNsgoGKpNHr8 fleed@cloud
The key's randomart image is:
+---[RSA 3072]----+
|++.. . ..        |
|.oo o =.o .      |
|.  + + *.*       |
|  o . o.= .      |
|   . o  So +     |
|  + . . + B B    |
| = o   + + @ +   |
|. o .   + = +    |
|    E. o.. .     |
+----[SHA256]-----+

В папке, в которой мы открывали терминал, должны появиться два файла (cloud и cloud.pub)

5. Открываем файл cloud.pub и копируем содержимое

6. Нажимаем "Добавить публичный ключ"

7. Вставляем содержимое из нашего файла в поле, называем и жмём "Создать"

8. Возвращаемся на вкладку создания ВМ (Виртуальная машина), выбираем созданный публичный ключ

9. Также ставим чекпоинт на "Пароль" и задаём свой пароль

10. Жмём "Создать"

11. Дожидаемся, когда ВМ перейдёт в статус "Запущено"

12. Далее необходимо открыть 80 и 443 порт нашего сервера. Для этого в левом верхнем углу нажимаем на Evolution

Выбираем "Группы безопасности", кликаем по группе безопасности, которая у нас есть в списке. Переходим во вкладку правила

Создаём "Правила входящего трафика" для 443 и 80 портов.

Настройка сервера

  1. Подключаемся к ВМ. Переходим к открытой консоли. Вводим команду


ssh fleed@213.171.25.57 -i .\cloud

fleed - наш логин

213.171.25.57 - адрес указанный в столбце "Публичный IP" в информации о ВМ

-i .\cloud - ссылка на приватный ключ

PS C:\Users\Ilya\Desktop\cloud> ssh fleed@213.171.25.57 -i .\cloud
The authenticity of host '213.171.25.57 (213.171.25.57)' can't be established.
ED25519 key fingerprint is SHA256:TmKNkgGM9662VMXkFsH7NSqLg+47ATLkKrAdQPA2+kM.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Подтверждаем подключение, на вопрос отвечаем Yes и нажимаем Enter

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '213.171.25.57' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-69-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Sep  7 10:40:27 UTC 2024

  System load:  0.12353515625     Processes:               143
  Usage of /:   4.9% of 28.89GB   Users logged in:         0
  Memory usage: 6%                IPv4 address for enp3s0: 213.171.25.57
  Swap usage:   0%nt permitted by
applicable law.

Если мы видим такой вывод, мы успешно подключены к серверу.

2. Переходим в оболочку bash

bash

3. Обновляем пакеты

sudo apt update && sudo apt upgrade -y

дожидаемся пока все пакеты обновятся, на все появляющиеся окна нажимаем Enter

4. Установим докер:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

5. Переходим под пользователя root:

 sudo su

6. Создаём рабочую директорию и переходим в неё

mkdir /opt/vaultwarden && cd /opt/vaultwarden

Vaultwarden с доменом

1. Задаём в переменных свой домен, пароль администратора, почту и разрешаем регистрацию без приглашения. Если хотим запретить остальным пользователям регистрироваться самостоятельно, вместо trueпишем false

export domain="https://example.com"
export email="mail@example.com"
export SIGNUPS_ALLOWED="true"
export ADMIN_TOKEN="adminpassword"

2. Создаём файл docker compose:

cat > docker-compose.yml <<EOL
version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      WEBSOCKET_ENABLED: "true"
      SIGNUPS_ALLOWED: "${SIGNUPS_ALLOWED}"
      DISABLE_ADMIN_TOKEN: "false"
      ADMIN_TOKEN: "${ADMIN_TOKEN}"
    volumes:
      - ./data:/data
  caddy:
    image: caddy:2
    container_name: caddy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-config:/config
      - ./caddy-data:/data
    environment:
      DOMAIN: "${domain}"
      EMAIL: "${email}"
      LOG_FILE: "/data/access.log"
EOL

3. Создаём Caddyfile

cat > Caddyfile <<'EOL'
{$DOMAIN}:443 {
  log {
    level INFO
    output file {$LOG_FILE} {
      roll_size 10MB
      roll_keep 10
    }
  }
  tls {$EMAIL}
  encode gzip
  header {
  Strict-Transport-Security "max-age=31536000;"
  X-XSS-Protection "1; mode=block"
  X-Frame-Options "DENY"
  X-Robots-Tag "none"
  -Server
  }
  reverse_proxy /notifications/hub vaultwarden:3012
  reverse_proxy vaultwarden:80 {
       header_up X-Real-IP {remote_host}
  }
}
EOL

4. Запускаем docker и завершаем установку:

docker compose up -d

Сервер Vaultwarden будет доступен по адресу

https://<имя-домена>

Админ панель по адресу

https://<имя-домена>/admin

Vaultwarden без домена

1. Если домен не покупали, то задаём

export SIGNUPS_ALLOWED="true"
export ADMIN_TOKEN="adminpassword"

2. Создаём файл docker compose:

cat > docker-compose.yml <<EOL
version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      WEBSOCKET_ENABLED: "true"
      SIGNUPS_ALLOWED: "${SIGNUPS_ALLOWED}"
      DISABLE_ADMIN_TOKEN: "false"
      ADMIN_TOKEN: "${ADMIN_TOKEN}"
    ports:
      - 80:80
    volumes:
      - ./data:/data
EOL

3. Запускаем docker и завершаем установку:

docker compose up -d

Сервер Vaultwarden будет доступен по адресу

http://<ip-адрес сервера>

Админ панель по адресу

http://<ip-адрес сервера>/admin

Создаём пользователя

Нажимаем кнопку "Создать аккаунт"

Заполняем все необходимые данные

Проходим авторизацию, в настройках не забываем включить двухфакторку. Настройки -> Безопасность -> Двухэтапная аутентификация

После создания учетной записи на нашем сервере, можем отключить регистрацию для других пользователей. Необходимо перейти в админ панель и ввести наш админ-токен.

Allow new signups, убираем галочку, нажимаем "Save"

Подключение клиента к серверу

Для vaultwarden полностью подходят клиенты bitwarden.

Ссылка на скачивание: https://bitwarden.com/download/

Можем установить как расширение в браузер или приложение для ПК и мобилы.

После установки необходимо, открыть расширение/приложение

И кликнуть по "Войти на bitwarden.com"

Появится окно выбора, выбираем "собственный хостинг" и вписываем адрес своего сервера:

Сохраняем, логинимся. Пользуемся!)