🔑 Установка и настройка менеджера паролей Bitwarden с помощью Docker контейнера

Мануал

Что такое Bitwarden?

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

У него есть две версии – бесплатная и платная, обе имеют множество удивительных функций.

Ранее мы уже рассматривали его:

Начало работы

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

## На RHEL/CentOS/RockyLinux 8
sudo yum update
sudo yum install curl vim

## На Debian/Ubuntu
sudo apt update && sudo apt upgrade
sudo apt install curl vim

## На Fedora
sudo dnf update
sudo dnf -y install curl vim

Шаг 1 – Установим Docker и Docker-Compose

В этом руководстве вам понадобится docker и docker-compose, установленные на вашей машине.

Установите последнюю версию Docker на вашу систему Linux, используя руководство на:

Проверьте версию установленного docker.

$ docker -v
Docker version 20.10.9, build c2ea9bc

Добавьте свою учетную запись пользователя в группу Docker:

sudo usermod -aG docker $USER
newgrp docker

После успешной установки Docker перейдите к установке последней версии Docker-Compose, также используя cURL.

curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url  | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -

Сделайте загруженный файл исполняемым.

chmod +x docker-compose-linux-x86_64

Переместите файл в свой PATH.

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

Теперь подтвердите свою установку, проверив установленную версию docker-compose.

$ docker-compose version
Docker Compose version v2.0.1

Запустите и включите docker.

sudo systemctl start docker && sudo systemctl enable docker

Шаг 2 – Создание сервера Bitwarden

Теперь мы создадим папку для сервера Bitwarden.

Я назову свою папку bitwarden

cd ~
mkdir bitwarden && cd bitwarden

Теперь в этой папке мы создадим файл docker-compose.yml.

Этот файл будет использоваться docker-compose для оркестрации контейнеров docker.

touch docker-compose.yml

Затем откройте файл для редактирования с помощью вашего любимого текстового редактора.

vim docker-compose.yml

Добавьте в файл приведенное ниже содержимое.

# docker-compose.yml
version: '3'

services:
  bitwarden:
    image: bitwardenrs/server
    restart: always
    ports:
      - 8000:80
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: 'true' # Required to use websockets
      SIGNUPS_ALLOWED: 'true'   # set to false to disable signups

В этом руководстве я буду использовать Docker-образ bitwarden_rs, написанный на языке Rust, который быстрее и надежнее, а также является полностью открытым исходным кодом и широко используется повсеместно.

Шаг 3 – Запуск Bitwarden с помощью Docker

Теперь, когда все готово для сервера Bitwarden, мы запустим его с помощью простой команды, приведенной ниже:

docker-compose up -d

Если приведенная выше команда не запускается, вам может потребоваться выполнить ее с правами пользователя root.

Команда, приведенная выше, запустит скачивание образов, как показано ниже:

[+] Running 8/8
 ⠿ bitwarden Pulled                                                        6.5s
   ⠿ 33847f680f63 Pull complete                                            1.9s
   ⠿ 64e13e5f1ad2 Pull complete                                            2.7s
   ⠿ 148922a88961 Pull complete                                            2.8s
   ⠿ cc66172bd48b Pull complete                                            3.2s
   ⠿ 2372942a3bb8 Pull complete                                            3.6s
   ⠿ 35b316a20d10 Pull complete                                            3.7s
   ⠿ 6b2893b1d24a Pull complete                                            3.9s
[+] Running 2/2
 ⠿ Network bitwarden_default        Created                                0.1s
 ⠿ Container bitwarden-bitwarden-1  Started                                0.9s                                                                                                                   

Просмотрите контейнеры с помощью команды:

$ docker ps

Пример вывода:

           PORTS                                             NAMES
62fbe97d43e5   bitwardenrs/server   "/usr/bin/dumb-init …"   About a minute ago   Up About a minute (healthy)   3012/tcp, 0.0.0.0:8000->80/tcp, :::8000->80/tcp   bitwarden-bitwarden-1

Теперь вы можете получить доступ к веб-панели Bitwarden по IP-адресу сервера и порту 8000.

Но вы не сможете создать учетную запись в Bitwarden, если у вас нет доступа к сайту по HTTPS.

Шаг 4 – Защитите Bitwarden с помощью доверенных сертификатов.

Установите веб-сервер Nginx для обратного прокси-сервера

##На RHEL/CentOS/Rocky Linux 8
sudo yum install nginx

##На Debian/Ubuntu
sudo apt install nginx

Для данного случая я использую систему на базе kali linux, я создам файл conf в /etc/nginx/conf.d/bitwarden.conf

sudo vim /etc/nginx/conf.d/bitwarden.conf

В файле добавьте приведенное ниже содержание для VirtualHost, заменив имя вашего домена соответствующим образом

Предоставьте привилегии Nginx созданному выше файлу.

# CentOS / RHEL / Fedora
sudo chown nginx:nginx /etc/nginx/conf.d/bitwarden.conf
sudo chmod 755 /etc/nginx/conf.d/bitwarden.conf

# Debian / Ubuntu
sudo chown www-data:www-data /etc/nginx/conf.d/bitwarden.conf
sudo chmod 755 /etc/nginx/conf.d/bitwarden.conf

Запустите веб-сервер Nginx.

sudo systemctl start nginx
sudo systemctl enable nginx

Если Nginx не удается запустить, удалите часть server в файле /etc/nginx/nginx.conf.

В этом руководстве я продемонстрирую два способа установки доверенных сертификатов в вашей системе Linux.

Основная цель этого шага – добавить HTTPS-доступ к сайту BItwarden.

  • Использование Let’s encrypt(Публичные IPs/FQDN)
  • Использование самоподписанного сертификата (частные IP)

4.a – Использование Let’s Encrypt SSL

Поскольку нам нужен доступ к Интернету через HTTPS, нам необходимо сгенерировать SSL-сертификаты.

Let’s Encrypt используется для бесплатной выдачи доверенных SSL-сертификатов для любого FQDN.

Установите Certbot, как показано ниже:

##На RHEL 8/CentOS 8/Rocky Linux 8/Fedora
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 
sudo dnf install certbot python3-certbot-nginx

##На Debian/Ubuntu
sudo apt install certbot python3-certbot-nginx

Установите SSL-сертификаты для вашего доменного имени

sudo certbot --nginx

Действуйте следующим образом

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): Enter a valid Email address here          

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: bitwarden.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Requesting a certificate for bitwarden.example.com
Performing the following challenges:
http-01 challenge for bitwarden.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/bitwarden.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/bitwarden.conf

Successfully received certificate.
Certificate is saved at: a2enmod ssl
/etc/letsencrypt/live/bitwarden.example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/bitwarden.example.com/privkey.pem
This certificate expires on 2022-01-09.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Теперь ваш файл конфигурации /etc/nginx/conf.d/bitwarden.conf будет содержать SSL сертификаты, как показано ниже.

...........
    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/letsencrypt/live/bitwarden.example.com/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/bitwarden.example.com/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
       proxy_pass http://localhost:8000/;
            index  index.html index.htm;
       	}

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

4.b – Использование самоподписанного сертификата

Другой альтернативой для тех, у кого нет полностью квалифицированного доменного имени, является защита SSL-сертификатов с помощью самоподписанных сертификатов.

Убедитесь, что OpenSSL установлен в вашей системе.

Затем создайте этот файл конфигурации для сертификатов

vim bitwarden_ssl.conf

В файл добавьте следующее:

[req]
default_bits       = 2048
default_keyfile    = bitwarden_ssl.key
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_ca

[req_distinguished_name]
countryName                 = Country Name (2 letter code)
countryName_default         = KE
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Nairobi
localityName                = Locality Name (eg, city)
localityName_default        = Nairobi
organizationName            = Organization Name (eg, company)
organizationName_default    = Bitwarden
organizationalUnitName      = organizationalunit
organizationalUnitName_default = Development
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_default          = Your_IP-Address
commonName_max              = 64

[req_ext]
subjectAltName = @alt_names

[v3_ca]
subjectAltName = @alt_names

[alt_names]
DNS.1   = localhost
DNS.2   = Your_IP-Address

Теперь сгенерируйте сертификаты из файла конфигурации, как показано ниже.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout bitwarden_ssl.key -out bitwarden_ssl.crt -config bitwarden_ssl.conf

Нажмите Enter до конца.

Затем скопируйте созданные файлы в каталог /etc/ssl/certs, как показано далее:

sudo cp bitwarden_ssl.crt /etc/ssl/certs/bitwarden_ssl.crt
sudo mkdir -p /etc/ssl/private/
sudo cp bitwarden_ssl.key /etc/ssl/private/bitwarden_ssl.key

С помощью этой команды ваш закрытый ключ и подписанный сертификат (.crt) будут сохранены в каталоге /etc/ssl/certs/.

Теперь скопируйте эти пути к сертификатам в ваш Nginx conf, как показано далее:

sudo vim  /etc/nginx/conf.d/bitwarden.conf

Вам нужно будет добавить их в Nginx, как показано ниже.

   server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  Your IP_Address;
        root         /usr/share/nginx/html;

        ssl_certificate /etc/ssl/certs/bitwarden_ssl.crt;
        ssl_certificate_key /etc/ssl/private/bitwarden_ssl.key;
	ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
       proxy_pass http://localhost:8000/;
            index  index.html index.htm;
       	}

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

Разрешите HTTP и HTTPS через брандмауэр, если вы используете firewalld.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

Перезапустите службу:

sudo systemctl restart nginx

Шаг 5 – Доступ к веб-интерфейсу Bitwarden

Теперь вы можете получить доступ к веб-интерфейсу Bitwarden, используя URL https://biwarden.example.com или https://IP_Address (для тех, кто использует самоподписанные сертификаты).

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

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

Добавить комментарий