home server 篇三:翻车的home server经验分享-sso+mfa[authelia

2022-08-14 19:25:58 20点赞 104收藏 6评论

创作立场声明:仅个人折腾



这次又是翻的人仰马翻,原因和dns一样,那群翻车的home server经验分享-sso+mfa[authelia 程序员又不把话说全。

介绍

SSO

先介绍下什么是sso(SingleSignOn)。就是你有很多服务,然后访问服务需要登陆对不,但是每更换一个服务就要重新输入账号密码登陆是不是很繁琐,那干脆把所有服务的登陆集中到同一个授权界面,那岂不是登陆一次就能访问全部服务了,单点登陆(sso)就是这样。举个不恰当的例子:租了一层楼当办公室,这层楼有一个大门,用传统钥匙锁,开起来要用钥匙,所以要给开门的人配钥匙。现在把传统钥匙锁换成电子锁,支持指纹解锁,已授权人员用指纹就能开锁了,是不是方便很多。虽然这例子的确不恰当,又不是所有员工都有大门钥匙。因为只有一种验证方式,那被突破了岂不是全完了,所以才出现了下面的mfa。嘛,我这只从井底爬上来跳进大海的青蛙实在是知识库欠乏,想不到更合适的了,还是画图来解释更清楚。翻车的home server经验分享-sso+mfa[authelia SSO听起来是不是很美好,那为什么翻车了,因为那群翻车的home server经验分享-sso+mfa[authelia 程序员没说要服务支持了才能sso,他们把没有自带登陆界面的几个服务拿出来做演示,当然可以sso啦。翻车的home server经验分享-sso+mfa[authelia 换jellyfin、qinglong、pihole这些不支持的试试,只是从一个登陆界面换到另一个登陆界面而已,虽然sso登陆过后就不用再验证了,我访问一个服务要登陆大于一次那还能叫sso吗。翻车的home server经验分享-sso+mfa[authelia

翻车的home server经验分享-sso+mfa[authelia

MFA

再介绍下什么是mfa(Multi-Factor Authentication)。密码就是一层验证,所以算是1fa,那再加一层验证就成了2fa,再加一层验证就成了3fa,以此类推。验证不局限于密码,还有ldap、saml、one time password、hardware authentication,等等。这些验证和密码验证不在同个地方(网页),所以99.9%情况下,第三方不知道下一步在哪进行,就算知道了还要继续攻击下一个验证的地方。要把所有验证都通过才算是一次成功登陆,所以被爆破风险就减小了很多。其实各位都用过mfa的,登陆微信要短信验证码,登陆支付宝要短信验证码,登陆京东要短信验证码,没错,短信验证码就是一层验证。所以我是怎么翻车的。这就要从头说起了。

authelia

我不是在docker搭了web服务吗,虽然那些服务自带登陆界面,但是我怕被暴力破解,然后又碰巧在油管看到关于authelia的介绍,知道可以自建授权服务,用多重验证保护服务。翻车的home server经验分享-sso+mfa[authelia 对了traefik还可以自己给没登陆界面的服务添加BasicAuth,这在traefik官网有介绍,我很懒所以没写。翻车的home server经验分享-sso+mfa[authelia

翻车的home server经验分享-sso+mfa[authelia

我看完介绍就去搭了,也不是很难,看看authelia官网就能明白了。

安装和使用

首先要users_database.yml用来储存用户名和密码,然后准备configuration.yml用来配置authelia。

先来users_database.yml,要用这个命令创建密码:

docker run --rm authelia/authelia:latest authelia hash-password '新密码'

然后把hash后面的东西都复制下来。我写了几个当示范,写的email也是假的:

翻车的home server经验分享-sso+mfa[authelia

users:
!!userone:
!!!!displayname: "one"
!!!!password: "$argon2id$v=19$m=65536,t=3,p=4$b2FJYktMSSs3RVdha3dOUg$EzLWvm3CuOkLG5rnjdH0ZKwXOcWJ6AMNYSAsw1sG7Yk"
!!!!email: one@authelia.home
!!!!groups:
!!!!!!- admins
!!usertwo:
!!!!displayname: "two"
!!!!password: "$argon2id$v=19$m=65536,t=3,p=4$bGw5bXZRbzFJbDVPbE9vLw$0p61fv9XtRoH3RfNCICQZ0gwSYGBcFdGoQAGQzund2w"
!!!!email: two@authelia.home
!!!!groups:
!!!!!!- family
!!userthree:
!!!!displayname: "three"
!!!!password: "懒得搞新的了,假装这是密码翻车的home server经验分享-sso+mfa[authelia "
!!!!email: three@authelia.home

记事本把!全部替换成空格,下同。翻车的home server经验分享-sso+mfa[authelia

然后就是configuration.yml,这文件是要重启才生效,初次启动authelia时会自己生成,所以只要改改就能用了,改完重启容器就好。不要被这么长的东西吓到,只需要改一部分的就行了,唯一需要自己会写的只有Access control,这官网写的很详细。我写了几个当示范了,参照官网看一下就能懂。因为authelia目前只支持单个域名,所以authelia和所有服务都需要在那个域名中,例如authelia在auth.lastview.duckdns.org,jellyfin在jellyfin.lastview.duckdns.org,同理在session的cookie域名就是lastview.duckdns.org了,看一看,了解一下就好:

翻车的home server经验分享-sso+mfa[authelia

## Access Control Configuration

default_policy: deny

networks:
- name: internal
networks:
- 192.168.0.0/24 #注意自己的网段
- name: test #这只是个示范,yaml的写法有很多种
networks: 10.0.0.0/16

rules:
#authelia
- domain:
- '子域名.duckdns.org'
policy: bypass
# jellyfin
- domain:
- 'jellyfin.子域名.duckdns.org'
policy: two_factor
subject:
- 'group:family'
# qinglong
- domain:
- 'qinglong.子域名.duckdns.org'
policy: two_factor
subject:
- 'group: admins'
# friend
- domain:
- 'friend.子域名.duckdns.org'
policy: one_factor
# something need authentication but also need api passthrough
- domain:
- 'something.子域名.duckdns.org'
policy: one_factor
subject:
- 'group: family'
- domain:
- 'something.子域名.duckdns.org'
policy: bypass
resources:
- '^/api'
# hide can only be visited in local network
- domain:
- 'hide.子域名.duckdns.org'
policy: two_factor
subject:
- 'group: admins'
networks:
- 'internal'

剩下的就jwt_secret填下,default_redirection_url填下,default_2fa_method改成totp,session domain填:子域名.duckdns.org,secret填下,encryption_key填下,Storage Provider选择local。就这么多需要改的,如果你们真的要用,记得先去官网看完configuration再弄。

然后就是docker-compose了:

翻车的home server经验分享-sso+mfa[authelia

version: '3'
services:
!!authelia:
!!!!image: authelia/authelia
!!!!container_name: authelia
!!!!volumes:
!!!!!!- /home/用户名/docker/authelia/config:/config
!!!!networks:
!!!!!!- traefik_proxy
!!!!ports:
!!!!!!- 9091:9091
!!!!restart: unless-stopped
!!!!environment:
!!!!!!- TZ=Asia/Shanghai
!!!!healthcheck:
!!!!!!disable: true #默认是false,想了解,自己看官网去
networks:
!!traefik_proxy:
!!!!external: true

然后是rp- authelia.yml:

翻车的home server经验分享-sso+mfa[authelia

http:
!!routers:
!!!!authelia-http:
!!!!!!entryPoints:
!!!!!!!!- web
!!!!!!rule: "Host(`auth.子域名.duckdns.org`)"
!!!!!!middlewares:
!!!!!!!!- https-redirectscheme
!!!!!!service: authelia authelia-https:
!!!!!!entryPoints:
!!!!!!!!- websecure
!!!!!!!!- public
!!!!!!rule: "Host(`auth.子域名.duckdns.org`)"
!!!!!!middlewares:
!!!!!!!!- default-headers
!!!!!!!!- auth
!!!!!!tls: {}
!!!!!!service: authelia
!!services:
!!!!authelia:
!!!!!!loadBalancer:
!!!!!!!!servers:
!!!!!!!!!!- url: "http://authelia:9091"
!!middlewares:
!!!!auth:
!!!!!!forwardAuth:
!!!!!!!!address: http://authelia:9091/api/verify?rd=https%3A%2F%2F子域名.duckdns.org:666%2F
!!!!!!!!trustForwardHeader: true
!!!!!!!!authResponseHeaders:
!!!!!!!!!!- "Remote-User"
!!!!!!!!!!- "Remote-Groups"
!!!!!!!!!!- "Remote-Email"
!!!!!!!!!!- "Remote-Name"

没错,为了在外网也能用,我搞了个新entryPoint,然后authelia就能从https://auth.lastview.duckdns.org:666访问了,同时其它服务在进行mfa验证时也会跳转到666端口,例如https://nginx.lastview.duckdns.org:666跳转到https://auth.lastview.duckdns.org:666/api/verify?rd=https%3A%2F%2Fnginx.lastview.duckdns.org:666%2F。要让服务mfa就要在Access Control写好,然后在各服务的middlewares加- auth。像上面那样。

成功跳转会出现这页面成功跳转会出现这页面

吐槽

我成功的在内网给nginx测试了mfa,然后又在外网成功测试了。前面用的notifier是file,然后就应该正式换成SMTP了,但是啊,我搞不定SMTP,完全没学过,又不知道去哪找相关教程。翻车的home server经验分享-sso+mfa[authelia 然后换qinglong,正如开头所说,没办法sso。然后jellyfin之类的不是有app支持吗,这类服务除非支持,要不然不能给它们多一层验证,要不然在app端会无法登陆。然后更坑爹的是2fa,authelia提供了3给方案,但是完全依靠第三方服务。我可是花大量时间去测试的。翻车的home server经验分享-sso+mfa[authelia 所以这自建授权服务完全就是脱裤子放屁,sso没法应用于全部服务,2fa依赖第三方服务,要第三方服务我直接找google不就行了吗。翻车的home server经验分享-sso+mfa[authelia

总结:authelia is useless to me.翻车的home server经验分享-sso+mfa[authelia

下一篇,翻车的fail2ban。

附件

traefik.yml for httpstraefik.yml for https

docker-compose.yml for traefik-httpsdocker-compose.yml for traefik-https

rp-traefik.yml for httpsrp-traefik.yml for https

docker-compose.yml for nginxdocker-compose.yml for nginx

rp-nginx.yml for httpsrp-nginx.yml for https

rp-portainer.yml for httpsrp-portainer.yml for https

rp-pihole.yml for httpsrp-pihole.yml for https

未经授权,不得转载
展开 收起

极空间私有云 Z4S 四核8G内存 4盘位 NAS家庭个人云网盘 网络存储服务器(无内置硬盘 )珍珠白

极空间私有云 Z4S 四核8G内存 4盘位 NAS家庭个人云网盘 网络存储服务器(无内置硬盘 )珍珠白

3799元起

极空间Z4S 旗舰版 四核4盘位 NAS网络存储服务器(配2块8T希捷酷狼硬盘)碳晶灰

极空间Z4S 旗舰版 四核4盘位 NAS网络存储服务器(配2块8T希捷酷狼硬盘)碳晶灰

7999元起

极空间Z2S-4G版四核2盘位NAS家庭个人云网盘 私有极空间 网络存储服务器雪山白色

极空间Z2S-4G版四核2盘位NAS家庭个人云网盘 私有极空间 网络存储服务器雪山白色

3199元起

极空间私有云 Z4S 四核8G内存 4盘位 NAS家庭个人云网盘 网络存储服务器(无内置硬盘)天青蓝

极空间私有云 Z4S 四核8G内存 4盘位 NAS家庭个人云网盘 网络存储服务器(无内置硬盘)天青蓝

3799元起

ASUS 华硕 AS6702T 双盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 双盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

3799元起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

4799元起

万由 U-NAS NS-810P 八盘位NAS主机 企业级网络私有家庭个人云存储服务器 双网口 黑色 内存4GB

万由 U-NAS NS-810P 八盘位NAS主机 企业级网络私有家庭个人云存储服务器 双网口 黑色 内存4GB

2750元起

HUAWEI 华为 AS6020 双盘位NAS存储

HUAWEI 华为 AS6020 双盘位NAS存储

2999元起

asustor爱速特 AS6706T 华硕nas网络存储服务器

asustor爱速特 AS6706T 华硕nas网络存储服务器

7880元起

铁威马(TerraMaster)T9-423 9盘位NAS 网络存储服务器

铁威马(TerraMaster)T9-423 9盘位NAS 网络存储服务器

暂无报价

Lenovo 联想 个人云X1s 4盘位 NAS存储(N5105、8GB)

Lenovo 联想 个人云X1s 4盘位 NAS存储(N5105、8GB)

2899元起

Lenovo 联想 个人云T2s 双盘位 NAS存储(RTD1619B、2GB)

Lenovo 联想 个人云T2s 双盘位 NAS存储(RTD1619B、2GB)

1279元起

Lenovo 联想 个人云A1s 单盘位 NAS存储(RTD1619B、2GB)

Lenovo 联想 个人云A1s 单盘位 NAS存储(RTD1619B、2GB)

1299元起

Lenovo 联想 个人云New T2 Pro 双盘位 NAS存储(N4120、4GB)

Lenovo 联想 个人云New T2 Pro 双盘位 NAS存储(N4120、4GB)

1499元起

asustor爱速特AS5202T 华硕子品牌云盘NAS存储网络存储器2.5G双网口家用私有云主机服务器硬盘盒

asustor爱速特AS5202T 华硕子品牌云盘NAS存储网络存储器2.5G双网口家用私有云主机服务器硬盘盒

1999元起

HIKVISION 海康威视 探索者 HS-AFS-S1H1 单盘位NAS存储 白色(Cortex-A7、1GB)

HIKVISION 海康威视 探索者 HS-AFS-S1H1 单盘位NAS存储 白色(Cortex-A7、1GB)

479元起
6评论

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
104
扫一下,分享更方便,购买更轻松