你的账号该再加把锁了!Docker快速部署一款在线两步验证工具:2FAuth
先说几句
本篇为大家带来的是一款不错的在线两步验证器部署使用教程~
▲双重认证:Two-factor authentication,缩写为2FA,又叫做双重验证、两步骤验证,是一种使用两种不同的元素,基于时间随机生成一串验证码用于和服务器验证的技术,来确认用户身份的认证方法。
▼稍微久远一点,将军令和银行电子令牌就类似,冲Q币给的密保卡也勉勉强强吧;后来移动设备兴起,各家基本都推出了电子令牌,比如steam、世纪天成管家、剑三玲珑密保、QQ至尊宝(小辣鸡)等等。

▲实际证明,增加两步验证的确可有效降低网络钓鱼攻击的成功率,减少盗号风险,即使密码意外泄露,但盗号的没有两步验证,就无法访问咱们的账户。虽说二次验证不能说是百分百防御 ,但相较于单一密码,大幅增强账户的安全性是不争的事实。
▼文章还没发,群友养了几年的馒头号无情被盗,没有两步验证只能封号,这两步验证还不抓紧安排上?

▲如果咱们想用现成的,推荐Google Authenticator(自用,比较麻烦的是魔法不能一直开着),另外有Aegis(朋友强烈推荐)和Authy也都不错,微软那个不建议碰~
说了这么多,接下来进入正题。
部署2FAuth
▼先去文件总管,创建一个文件目录

▼为防止是在非root用户下操作,先ssh进入服务器/nas后台,输入以下命令,修改目录所有者和权限

▼接下来还是老样子,通过Docker Compose进行部署,先来看看原代码,内容有点多,"#"后的内容为注释部分,想折腾的朋友可以仔细看看,不想看就直接划下去,有咱们精简后的保留部分。点我查看完整的yml文件。
version: "3"
services:
2fauth:
image: 2fauth/2fauth
container_name: 2fauth
volumes:
- ./2fauth:/2fauth
ports:
- 8000:8000/tcp
environment:
# 你可以更改程序名
- APP_NAME=2FAuth
# 可以默认不修改,如果修改为"production",大多数控制台命令会需要额外确认
# 永远不要设置为 "testing".
- APP_ENV=local
# 如果您想在错误屏幕中查看调试信息,请设置为 true。
- APP_DEBUG=false
# 你的邮箱地址
- SITE_OWNER=mail@example.com
# 数据库和会话的加密密钥,务必保护好
# 如果创建新的密钥,所有现有数据都必须被视为丢失
# 命令`php artisan key:generate` 可生成新的32位字符串
- APP_KEY=SomeRandomStringOf32CharsExactly
# 该变量必须与安装的外部地址匹配
# 否则将不会正常工作
- APP_URL=http://localhost
# 生成演示demo,每小时重置程序内容,若要使用请设置为"true"
- IS_DEMO_APP=false
# 日志通道定义日志条目去向
# 'daily' 为默认记录模式,/storage/logs/中会存在七个每日替换的日志文件
# 还可以使用'errorlog', 'syslog','stderr', 'papertrail', 'slack' 和'stack' channel
# 将多个通道合并为一个
- LOG_CHANNEL=daily
# 日志级别,从左到右严重性逐步增加
# debug, info, notice, warning, error, critical, alert, emergency
# 如果设置为debug,日志频率会很高文件可能会很大;反之可能永远不会记录任何内容
- LOG_LEVEL=notice
# 数据库配置(只支持sqlite)
- DB_DATABASE="/srv/database/database.sqlite"
# 如果追求性能改进,可以安装memcached
- CACHE_DRIVER=file
- SESSION_DRIVER=file
# 邮件设置
# 参考对应供应商配置邮件设置
# 只要供应商有提供,都建议填写对应值
- MAIL_DRIVER=log
- MAIL_HOST=smtp.mailtrap.io
- MAIL_PORT=2525
- MAIL_FROM=changeme@example.com
- MAIL_USERNAME=null
- MAIL_PASSWORD=null
- MAIL_ENCRYPTION=null
- MAIL_FROM_NAME=null
- MAIL_FROM_ADDRESS=null
# SSL 对等验证,改为"fale"表示禁用SSL证书验证
- MAIL_VERIFY_SSL_PEER=true
# API 设置,同一ip一分钟内最大调用次数
# 修改为"null"可禁用
- THROTTLE_API=60
# 登录认证,一分钟内失误五次,本分钟内其它所有尝试会被拒绝,直至下一分钟
# 适用于电子邮件/密码和网络身份验证登陆尝试
- LOGIN_THROTTLE=5
# 默认认证
# 支持:
# 'web-guard': Laravel内置的验证系统 (若为null则默认)
# 'reverse-proxy-guard': 当2FAuth部署在处理认证的反向代理后面时
# 警告⚠️
# 使用'reverse-proxy-guard'时2FAuth只查找专用的头部信息并跳过所有其它内置的
# 认证检查。这意味着你的代理完全负责认证过程,只要头部信息存在,2FAuth就会信任
- AUTHENTICATION_GUARD=web-guard
# 使用此设置来控制用户验证期间的行为方式
# 'required': 始终验证
# 'preferred' (默认) : 如果可能,则要求用户验证
# 'discouraged' : 不会要求验证
- WEBAUTHN_USER_VERIFICATION=preferred
# 设置可信任代理
# 支持:
# '*': 信任任何代理
# 逗号分隔的 IP 列表:要信任的代理 IP 列表
- TRUSTED_PROXIES=null
# 传出请求的代理,例如新版本检测或徽标获取
# 可以提供包含方案、用户名和密码的代理 URL
# 例如, "http://username:password@192.168.16.1:10".
- 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
▼下面是精简后的代码
version: "3"
services:
2fauth:
image: 2fauth/2fauth
container_name: 2fauth
volumes:
- "/share/Container/2FA/data:/2fauth"
ports:
- 8189:8000/tcp # 冒号左侧端口可修改
environment:
- APP_NAME=2FAuth
- APP_KEY=SomeRandomStringOf32CharsExactly # 建议生成一个并保存好
- APP_URL=https://2fa.xxx.xxx:监听端口号 # 填写咱们的域名,国内服务器基本不能用443端口,需要额外加上监听端口号
- IS_DEMO_APP=false # 关闭demo演示
- LOG_CHANNEL=daily #日志
- LOG_LEVEL=notice #日志等级
- DB_DATABASE="/srv/database/database.sqlite" #数据库
- CACHE_DRIVER=file #性能改进,下同
- SESSION_DRIVER=file
- AUTHENTICATION_GUARD=web-guard # 内置验证系统
▼最新版本的 v5.0.3 部署后会出现白屏,有两种解决方案,个人更倾向第一种

▼解决方案一:将上面代码 APP_URL 替换成 ASSET_URL
- APP_URL=https://2fa.xxx.xxx # 完整替换成下面的
- ASSET_URL=https://2fa.xxx.xxx
▼解决方案二:部署历史版本
image: 2fauth/2fauth # 带上具体的版本号,如下所示
image: 2fauth/2fauth:4.2.4 # 示例
▼历史版本点击下图位置进行查看

▼关于上文代码中,注释提到的域名填写,请参照下图,国外VPS可忽略

▼检查无误后,点击【创建】

▼完事后,web输入 NAS_IP:端口 理论上就已经能用了,不过我们设置了域名访问,这类高敏感服务建议还是搞搞https

接下来进行反向代理,实现https访问
反向代理
Nginx Proxy Manager
▼可以参考这篇文章,包含了域名解析及反向代理的详细流程。
▼国内VPS包括NAS,部署Nginx Proxy Manager,还是直接放弃默认80、81、443端口,直接用非标端口吧。部署篇,设置8190为我们的监听端口,最终实现外网使用则需要在路由器将8190端口转发

▼咱们第一次设置的时候点申请一个新的证书,也就是绿色的那个,图中是已经申请过的

▼启用强制SSL,然后点击【save】等待即可

▼设置完毕后如下图所示

Lucky
▼可参考这篇
▼监听端口不需要动,只需再加一条子规则

▼名称自定义,服务类型为反向代理,前端域名:2fa.xxx.love,后端地址:http://192.168.xxx.xxx:8189,最后点击修改即可

▼设置完后,https访问成功,能用443端口的国外vps要好看很多,不用加端口号,对比如下图示

使用体验
▼首先注册一个账户,默认为管理员

▼先别着急使用,看一下设置

▼支持创建安全密钥登入

▼比较重要的是启用数据库加密和禁用注册,作者的本意是仅供个人使用~其它功能咱们可以自行查看


▲数据库加密可以对存储在数据库中的敏感数据进行加密,以保护它们免受数据库入侵。加密作为选项提供,默认情况下处于禁用状态。强烈建议在加密处于打开状态时备份 .env 文件(或整个文件)的APP_KEY。
▼接下来导入QR码。除了直接扫描,2FAuth 也支持从以下格式导入:2FAuth (JSON)、Google Auth (QR code)、Aegis Auth (JSON,纯文本)、2FAS Auth (JSON)

▼这样导入导出就很方便,接下来我们转移至手机上进行操作。点击左上角三条横杠,选择【转移账号】

▼选择【导出账号】,默认选择所有,点击【下一页】,掏出另一块手机用2FAuth扫描出现的二维码

▼点击【扫描QR码】,扫描之后选择【全部导入】,导入完毕后回到主页即可,点击【管理】还可进行更多设置

▼效果如下

▼非活动也会自动注销

总结
通过自行搭建2FAuth,可以把所有账户数据存储在我们的独立数据库中,能做到轻松备份和回复,即便是手机遗失也不需担心。用了小一个月,后续我的打算是双端搞起来,可以用得更加奔放
有需要的朋友可以抓紧部署一个~
本篇到这儿就结束啦,欢迎大伙评论区留言交流讨论;后续我也会定期分享NAS使用经验以及好用、好玩的Docker项目,喜欢的朋友记得点赞、收藏、关注
咱们下期再见!

AlDa
校验提示文案
值友6382649925
校验提示文案
值友1870686349
校验提示文案
markychens
校验提示文案
mail
校验提示文案
Ho---
校验提示文案
rui3bo2
校验提示文案
回响丶
校验提示文案
让钱包再次鼓起来
校验提示文案
麦芽糖的梦
校验提示文案
90边缘的80后
校验提示文案
dongzhiks
校验提示文案
dongzhiks
校验提示文案
90边缘的80后
校验提示文案
麦芽糖的梦
校验提示文案
Ho---
校验提示文案
让钱包再次鼓起来
校验提示文案
mail
校验提示文案
markychens
校验提示文案
值友1870686349
校验提示文案
rui3bo2
校验提示文案
回响丶
校验提示文案
值友6382649925
校验提示文案
AlDa
校验提示文案