搭建Authelia

图片[1]-搭建Authelia-RSG-人生观前言:

大家应该都没接触过authelia这个工具,也不了解SSO登录,其实就和我们在访问淘宝的时候,你在访问天猫会携带登录状态大致是一样的,我们家里的nas,会搭建很多服务,每个程序都会有一个前端页面,每个页面都会有一个账号和密码,或者是有的程序根本没有验证打开就是主界面,非常不安全,配置了authelia之后,大家都用一个账号密码,会记录登录状态,在打开其他程序时,不在需要输入密码,一段时间不操作,会自动退出,安全方面也是有很大的保证。

教程:

这里authelia要搭配Traefik,nginx,或者Apache来使用,并不能单独使用,因为我一直在用Traefik所以这里的教程也是针对Traefik来写的nginx和apache大家就不需要往下看了。

这里要注意一个问题就是,UNRAID因为HostName无法正常工作(本文章发布时尚未修复),所以配置方法和官方文档稍有区别,教程内我会演示unRAID和Linux(Ubuntu22.04.2)两个系统在docker下的配置方法。

Traefik的配置和部署这里我就不写了因为本站很早以前已经出过相关教程,大家可以自己去看一下

[ri-post id=”54748″ thumb=”right”]

UNRAID:

在安装之前,我们还需要部署数据库和Redis,数据库教程我已经出过,不需要写了,redis因为不需要数据持久化所以配置也不复杂。

Redis:

图片[2]-搭建Authelia-RSG-人生观

图片[3]-搭建Authelia-RSG-人生观

什么都不需要修改直接APPLY即可。

Mysql&Mariadb:

因为之前,做过教程就不在多余啰嗦,直接去看就可以了。

[ri-post id=”54553″ thumb=”right”]

数据库容器部署OK后,需要去手动创建一个数据库,这里大家可以用第三方工具或者命令,这里我演示一下用命令创建。

进入容器的ssh命令,un可以在docker界面快速进入,或者在SSH 界面输入docker exec -it Mariadb /bin/bash

图片[4]-搭建Authelia-RSG-人生观

输入命令:
mysql -u root -p 登录数据库
输入密码,密码是隐匿的不可见,心中默念输入完成后Enter(回车)
创建数据库
create database authelia; 
注意后面有;别丢了。
查看是否成功创建authelia。
show databases;

图片[5]-搭建Authelia-RSG-人生观

Authelia:

在UNRAID的APPS商店中搜索authelia。

图片[6]-搭建Authelia-RSG-人生观

图片[7]-搭建Authelia-RSG-人生观

直接APPLY就可以了,什么都不要改,但是因为配置文件并不会自动生成,所以容器是无法正常启动的,我们要去/mnt/user/appdata/autheila创建配置文件。

其他环境:docker-compose

.............
###Authelia
  Authelia:
    image: authelia/authelia
    container_name: "Authelia"
    restart: always
    volumes:
      - "/path/Authelia:/config"
    depends_on:
      - "redis"
      - "Mariadb"
    labels:
      - "traefik.http.routers.auth.rule=Host(`auth.example.com`)"
      - "traefik.enable=true"
      - "traefik.http.services.auth.loadbalancer.server.port=9091"
###Redis
  redis:
    image: redis
    container_name: "redis"
    restart: always
    network_mode: "host"
    volumes:
      - "/path/redis/databases:/data"
###Mariadb
  Mariadb:
    image: linuxserver/mariadb
    container_name: "Mariadb"
    restart: always
    network_mode: "host"
    environment:
      - "MYSQL_ROOT_PASSWORD=adminadmin123"
      - "PUID=1000"
      - "PGID=1000"
      - "TZ=Asia/Shanghai"
    volumes:
      - "/path/mysql:/config"
..........

注意,上面的配置中/path是需要求改为你的路径开头和结尾我这里都省略了,你们要把他填充才可以 ,上面的配置中并没有traefik的,我之前虽然写过traefik的教程,但是是针对unraid的,这里我在写一份docker-compose的。

###traefik
  traefik:
    image: traefik:latest
    container_name: "traefik"
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/path/traefik/acme.json:/acme.json"
      - "/etc/localtime:/etc/localtime"
      - "/path/traefik/traefik.yml:/traefik.yml"
      - "/path/traefik//configurations:/configurations"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "DNSPOD_API_KEY=241111,21bcb8e4f3aca123123125c4ccbaeacb59"
    labels:
      - "traefik.docker.network=bridge"
      - "traefik.http.routers.traefik-secure.rule=Host(`example.com`)"
      - "traefik.enable=true"
      - "traefik.http.routers.traefik-secure.entrypoints=websecure"
      - "traefik.http.routers.traefik-secure.middlewares=authelia@file"
      - "traefik.http.routers.traefik-secure.service=api@internal"

配套的配置文件下载路径https://file.lxg2016.com/assets/docker/traefik/traefik.zip 如果已经有traefik可以省略traefik的步骤。

配置Authelia:

经过上面的部署,大家都已经配置了基本的组件,但是authelia还不能启动,因为容器并没有自动填充默认配置文件,这里我们把配置文件写一下,然后启动。

配置文件有两个分别是configuration.yml和users_database.yml

configuration.yml是配置内容

users_database.yml是用户数据数据

在authelia的配置文件夹创建两个文件,这里我用的是命令。

进入authelia的配置路径。
cd /path/authelia
创建配置文件
touch ./configuration.yml
创建用户数据文件
touch ./users_database.yml

创建好后,我们先修改配置文件nano ./configuration.yml

---
###############################################################################
#                           Authelia Configuration                            #
###############################################################################

theme: dark
jwt_secret: ""  ###Jwt密码,可以用密码生成器随便生成一个


server:
  host: 0.0.0.0
  port: 9091
  path: ""
###4.37.0版本新参数
  buffers: 
    read: 4096 
    write: 4096
###4.36.0后废弃
#  read_buffer_size: 4096
#  write_buffer_size: 4096
  enable_pprof: false
  enable_expvars: false
  disable_healthcheck: false
  tls:
    key: ""
    certificate: ""

log:
  level: info

authentication_backend:
  password_reset:
    disable: false
  refresh_interval: 5m
  file:
    path: /config/users_database.yml 
    password:
      algorithm: argon2id
      iterations: 1
      key_length: 32
      salt_length: 16
      memory: 1024
      parallelism: 8

access_control: ###策略规则
  default_policy: one_factor 

      
session:
  name: RSG-人生观 ###验证时候页面显示的名字
  domain: lxg2016.com ###主域名,这里要写根域名
  same_site: lax
  secret: "" ###与JWT密码相同即可
  expiration: 1h
  inactivity: 5m
  remember_me_duration: 2M
  redis:
    host: 192.168.1.3 ###redis的ip
    port: 6379 ###redis的端口
    database_index: 0
    maximum_active_connections: 10
    minimum_idle_connections: 0

regulation:
  max_retries: 3
  find_time: 10m
  ban_time: 12h

storage:
  encryption_key: "" ###与JWT密码相同即可
  mysql:
    host: 192.168.1.3 ###数据库的IP
    port: 3306 ###数据库端口
    database: authelia ###数据库名字
    username: root ###数据库账号
    password: "rootpasswd" ###数据库密码
   
notifier:
  disable_startup_check: false
  smtp:
    username:  ###邮箱用户名
    password: ""  ###邮箱密码,注意QQ邮箱密码是独立的需要去设置内找SMTP密码
    host:  ###邮箱服务器的SMTP地址
    port:  ###邮箱服务器端口
    sender:  ###发件人
    identifier: localhost
    subject: "[Authelia] {title}"
    startup_check_address:  ###发件地址,与发件人同样即可
    disable_require_tls: false
    disable_html_emails: false
    tls:
      skip_verify: false
      minimum_version: TLS1.2
    
...

根据注释写入内容并保存配置文件,nano的保存方法Ctrl+o 保存 Ctrl+X退出。

配置用户数据文件nano ./users_database.yml

users:
  rsg: ###用户名
    displayname: "RSG-人生观" ###显示的名字
    password: "123123123233333333333333333333333333333333333333333333333333322123" ####密码
    email: email@lxg2016.com ###邮箱
    groups: ###该用户所在的权限组
      - admins
      - dev

看到这里有小伙伴可能不知道如何创建用户密码了,这里我教大家怎么生成。

打开SSH,输入命令docker run --rm authelia/authelia:latest authelia hash-password 'password'复制命令,然后修改password的内容

图片[8]-搭建Authelia-RSG-人生观

复制返回的数据,粘贴到nano ./users_database.yml文件中的对应用户名的passwod内即可生效,注意$之后的才是密码,包含$不要把digest:给复制了。

规则配置:

上面的配置文件我并没有写规则,因为我们不写的情况下,所有请求都会被转发到authelia进行验证,这里有一些具有API功能的程序就会出现通讯故障,所以我们要针对一些api程序写规则 比如sonarr radarr等工具进行处理。

access_control:
  default_policy: one_factor
  rules:
    - domain: 
        - "auth.example.com"
      policy: bypass
    - domain: "*.example.com"
      resources:
        - "^/api([/?].*)?$"
      policy: bypass
    - domain: "*.example.com"
      networks:
        - "192.168.1.0/24"
      policy: bypass 

我针对上面我写给规则进行一个简单的解释,方便大家理解。

 - domain:
     - "auth.example.com"
   policy: bypass

这里是针对authelia的域名进行一个通过,不进行验证,如果验证就无线循环了,所以做了通过。

 - domain: "*.example.com" 
   resources: 
     - "^/api([/?].*)?$"
   policy: bypass

这里是针对域名的路径中的API进行一个通过,路径中包含api的不进行验证。

 - domain: "*.example.com" 
   networks: 
     - "192.168.1.0/24" 
   policy: bypass

这个是针对内网整个ip段的一个通过,所有内网的机器在访问的时候不转发到authelia进行验证。

将自己的规则配置好以后,写入到configuration.yml的配置文件内,配置完成后重启authelia。

配置traefik转发中间件:

在traefik的动态配置文件中末尾添加下面内容

    authelia:
      forwardAuth:
        address: http://Authelia:9091/api/verify?rd=https://auth.example.com
        trustForwardHeader: true
        authResponseHeaders:
          - "Remote-User"
          - "Remote-Groups"
          - "Remote-Email"
          - "Remote-Name"
          
    authelia-basic:
      forwardAuth:
        address: http://Authelia:9091/api/verify?auth=basic
        trustForwardHeader: true
        authResponseHeaders:
          - "Remote-User"
          - "Remote-Groups"
          - "Remote-Email"
          - "Remote-Name"

对转发的地址我做一个简单的解释http://Authelia:9091/api/verify?rd=https://auth.example.com  这里红色的要写内部的通讯地址,比如docker的bridge的内部地址,或者容器网络切换到HOST,写宿主机的ip,绿色的要写公开能访问的地址,有端口号的需要携带端口号。

这里有个坑,如果是unraid的用户,请按照下面的配置进行部署。

    authelia:
      forwardAuth:
        address: http://unip:9091/api/verify?rd=https://auth.example.com
        trustForwardHeader: true
        authResponseHeaders:
          - "Remote-User"
          - "Remote-Groups"
          - "Remote-Email"
          - "Remote-Name"
          
    authelia-basic:
      forwardAuth:
        address: http://unip:9091/api/verify?auth=basic
        trustForwardHeader: true
        authResponseHeaders:
          - "Remote-User"
          - "Remote-Groups"
          - "Remote-Email"
          - "Remote-Name"

把unip写为你unraid的宿主机ip,因为unraid的docker,hostname功能不正常,所以要适当调整,否者配置后所有程序全部404,authelia的容器最好也把网络切换到host。

在需要验证的后端服务的配置中增加authelia,这里分两种,一种是写traefik的动态配置,一种是在docker容器上写标签。

标签:

unraid:

图片[9]-搭建Authelia-RSG-人生观

docker-compose:

 labels: 
   - "traefik.http.routers.traefik-secure.middlewares=authelia@file"

动态文件:

    xteve:
      service: xteve
      middlewares:
         - authelia
      rule: "Host(`auth.example.com`)"

红色区域就是动态新加入的内容。

测试访问:

访问地址,然后查看跳转url

图片[10]-搭建Authelia-RSG-人生观

这样就可以了。

结尾:

authelia是一个不错的工具部署之后,再也不用记忆那么多用户和密码了,妈妈再也不会因为密码忘记而担忧了,哈哈哈,不过这里要注意,authelia并不是取代了程序的验证方式,部署了authelia的程序要关闭本身的验证,否者你需要验证2次。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共1条

请登录后发表评论

    请登录后查看评论内容