Установка приватного менеджера паролей
В этой статье рассмотрим преимущества приватного менеджера паролей, а также установим его на свой собственный сервер по шагам.
На текущее время, абсолютный лидер среди существующих решений нашей задачи утилита под названием Vaultwarden. Это менеджер паролей с открытым исходным кодом, который позволяет безопасно хранить и управлять паролями, логинами и другими конфиденциальными данными на собственном сервере.
Ниже перечислены его явные преимущества:
- Все данные хранятся на вашем собственном сервере, что исключает доступ третьих лиц
- Шанс утечек минимизирован благодаря: шифрованию, двухфакторной аутентификации, нестандартному подходу решения задачи
- Решение полностью бесплатное, без ограничений функционала
- Достаточно простая установка
- Гибкий и широкий функционал
- Минимизирован риск блокировок
- Сервером могут пользоваться ваши друзья/знакомые/команда (но пароли всё ещё будут надёжно защищены от друг друга)
- Есть возможность безопасно делиться паролями с другими
- Можем хранить не только пароли, но и защищенные заметки, данные карт, личную информацию
На этом плюсы не заканчиваются, но уже понятно, что решение маст-хев для любого криптана. Поэтому перейдём к выбору сервера...
Выбор сервера
При большом желании, Vaultwarden Server можно конечно же установить и на домашний компьютер под Windows, но при таком раскладе мы сталкнёмся с множеством нюансов, если мы хотим, чтобы наши пароли могли синхронизироваться вне зависимости от местоположения, и того, включен ли наш ПК. Поэтому рекомендуется арендовать VPS(виртуальный приватный сервер, который хостинг-провайдер предоставляет в аренду пользователям). Да, в этом случае, наше решения получается не на 100% бесплатное, но за приватность приходится платить...
Я рекомендую для покупки VPS следующие варианты, оптимальные по соотношению цена/качество по моему мнению:
- Надежное облако от Сбера
- Дают VPS бесплатно. 2 ядра,4 ОЗУ, 30 гб диск NVME (нам этих характеристик хватит с избытком)
- Заплатить будет необходимо только за ip адрес ~ 150 рублей в месяц
- Также дают бонусные рубли, так что вероятнее всего получится даже дешевле.
2. Timeweb
- Бесплатных VPS нет, минимальная VPS + ip адрес будет стоить ~300 рублей в месяц
- Но VPS помощнее(если вдруг захотите поставить на неё что-нибудь ещё), будет минимум в 2 раза дешевле чем сбер
3. Pq.hosting
- Бесплатных VPS нет, минимальная VPS + ip адрес будет стоить ~500 рублей в месяц
- Есть возможность установить
- Оплата рублями имется
4. Melbicom
Домен
Домен покупать не обязательно. Но с ним будет удобнее делиться ссылкой на сервер с вашими знакомыми, да и браузер не будет ругаться при открытии админки. Домен стоит 100-200 рублей в год. Купить можно у timeweb или reg.ru, необходимо будет создать запись типа A, указав имя вашего домена и ip адрес сервера.
Создание сервера
Создание сервера на всех хостингах примерно одинаковое, но мы выберем самый бюджетный вариант от cloud.ru. Регистрируемся, переходим по ссылке:
https://console.cloud.ru/projects/0/spa/svp/virtual-machines/create?free-tier=true
При создании сервера, задайте:
- Название своей виртуальной машины (у меня vm-freetier)
- Выберите образ. (Публичные -> Ubuntu 22.04)
- "Подключить публичный 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. Также ставим чекпоинт на "Пароль" и задаём свой пароль
11. Дожидаемся, когда ВМ перейдёт в статус "Запущено"
12. Далее необходимо открыть 80 и 443 порт нашего сервера. Для этого в левом верхнем углу нажимаем на Evolution
Выбираем "Группы безопасности", кликаем по группе безопасности, которая у нас есть в списке. Переходим во вкладку правила
Создаём "Правила входящего трафика" для 443 и 80 портов.
Настройка сервера
ssh fleed@213.171.25.57 -i .\cloud
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.
Если мы видим такой вывод, мы успешно подключены к серверу.
bash
sudo apt update && sudo apt upgrade -y
дожидаемся пока все пакеты обновятся, на все появляющиеся окна нажимаем Enter
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"
EOLcat > 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}
}
}
EOL4. Запускаем docker и завершаем установку:
docker compose up -d
Сервер Vaultwarden будет доступен по адресу
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
EOL3. Запускаем docker и завершаем установку:
docker compose up -d
Сервер Vaultwarden будет доступен по адресу
http://<ip-адрес сервера>/admin
Создаём пользователя
Нажимаем кнопку "Создать аккаунт"
Заполняем все необходимые данные
Проходим авторизацию, в настройках не забываем включить двухфакторку. Настройки -> Безопасность -> Двухэтапная аутентификация
После создания учетной записи на нашем сервере, можем отключить регистрацию для других пользователей. Необходимо перейти в админ панель и ввести наш админ-токен.
Allow new signups, убираем галочку, нажимаем "Save"
Подключение клиента к серверу
Для vaultwarden полностью подходят клиенты bitwarden.
Ссылка на скачивание: https://bitwarden.com/download/
Можем установить как расширение в браузер или приложение для ПК и мобилы.
После установки необходимо, открыть расширение/приложение
И кликнуть по "Войти на bitwarden.com"
Появится окно выбора, выбираем "собственный хостинг" и вписываем адрес своего сервера: