Установка 2FAuth в Proxmox LXC контейнер

Как-то раз я столкнулся с тем, что мой телефон просто не включился, а у меня там были все TOTP коды аутентификации в гугловском приложении Authenticator. Облако в нем я не включаю по соображениям безопасности, коды храню только локально.

Хорошо, что у меня есть старый телефон, на который я периодически выгружал — дублировал все свои коды с основного телефона. На всякий случай. Но пары сервисов я недосчитался, не успел продублировать.

После этого случая я стал искать альтернативу «запасному» телефону в качестве места хранения кодов аутентификации и нашел 2FAuth, неплохой вариант для моих целей. Хранить пароли в Vaultwarden, и в нем же TOTP коды считаю не совсем хорошей идеей. Весь смысл TOTP теряется при таком подходе. В случае компрометации 2FAuth у злоумышленников не будет Vaultwarden с паролями, и наоборот.

А так как я переношу все свои домашние сервисы в Proxmox, 2fauth будет жить там же. В моем случае, для запуска можно пойти двумя путями — собрать lxc контейнер с помощью скрипта Proxmox VE Helper-Scripts или настроить самому.

Я выбрал первый вариант с ОС Alpine, которая не требует много ресурсов, ввиду своей легковесности. Параметры моего lxc: 1 ядро, 256мб ОЗУ и 1гб места на ссд.

Заходим в консоль контейнера и ставим docker-compose:

apk add docker-compose

Далее я создал папку 2fauth:

mkdir 2fauth

Даем права, согласно официальной инструкции с сайта 2FAuth:

chown 1000:1000 2fauth
chmod 700 2fauth

Далее создаем файл docker-compose.yml:

nano docker-compose.yml

Содержимое тоже берем с официального мануала.

Что я изменил:

Поменял порт на 8090:8000/tcp
Указал требование на перезапуск: restart: always
Сгенерировал свое значение APP_KEY, с этим отлично помог Vaultwarden.
Указал домен с https в строке APP_URL. Если заходить через http не будет работать сканирование qr.

Безопаснее, конечно же, использовать 2fauth только в локальной сети, не открывая доступ в интернет. Но тогда нужно настроить туннель в свою локальную сеть, чтобы иметь доступ к 2fauth вне дома. У Keenetic, например, для этого уже все предусмотрено даже без белого ip.

Итоговый файл docker-compose.yml выглядит следующим образом:

version: "3"
services:
  2fauth:
    image: 2fauth/2fauth
    container_name: 2fauth
    volumes:
      - ./2fauth:/2fauth
    ports:
      - 8090:8000/tcp
    restart: always
    environment:
      - APP_NAME=2FAuth
      - APP_ENV=local
      - APP_TIMEZONE=UTC
      - APP_DEBUG=false
      - SITE_OWNER=mail@example.com
      - APP_KEY=oCijrWWnj7r87KArG8jH9p6cBkg5xWKg
      - APP_URL=https://2fa.my.domain.com
      - IS_DEMO_APP=false
      - LOG_CHANNEL=daily
      - LOG_LEVEL=notice
      - DB_DATABASE="/srv/database/database.sqlite"
      - CACHE_DRIVER=file
      - SESSION_DRIVER=file
      - MAIL_MAILER=log
      - MAIL_HOST=smtp.mailtrap.io
      - MAIL_PORT=2525
      - MAIL_USERNAME=null
      - MAIL_PASSWORD=null
      - MAIL_ENCRYPTION=null
      - MAIL_FROM_NAME=null
      - MAIL_FROM_ADDRESS=null
      - MAIL_VERIFY_SSL_PEER=true
      - THROTTLE_API=60
      - LOGIN_THROTTLE=5
      - AUTHENTICATION_GUARD=web-guard
      - AUTHENTICATION_LOG_RETENTION=365
      - AUTH_PROXY_HEADER_FOR_USER=null
      - AUTH_PROXY_HEADER_FOR_EMAIL=null
      - PROXY_LOGOUT_URL=null
      - WEBAUTHN_NAME=2FAuth
      - WEBAUTHN_ID=null
      - WEBAUTHN_USER_VERIFICATION=preferred
      - TRUSTED_PROXIES=null
      - PROXY_FOR_OUTGOING_REQUESTS=null
      - BROADCAST_DRIVER=log
      - QUEUE_DRIVER=sync
      - SESSION_LIFETIME=120
      - REDIS_HOST=127.0.0.1
      - REDIS_PASSWORD=null
      - REDIS_PORT=6379
      - PUSHER_APP_ID=
      - PUSHER_APP_KEY=
      - PUSHER_APP_SECRET=
      - PUSHER_APP_CLUSTER=mt1
      - VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
      - VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
      - MIX_ENV=local

Далее запускаем контейнер:

docker-compose up -d


После сообщения об успешном запуске переходим по адресу, который мы настроили для 2fauth. У себя я это сделал через доменное имя Keenetic.

Поделитесь с друзьями
Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии