Authelia

​ Authelia是一个开源的单点登录身份验证系统,可以用于保护Web应用程序、API和其他服务。它提供了多种身份验证方法,包括双因素身份验证、LDAP和SAML集成、OAuth2等,并且支持自定义主题和模板以实现与自己的品牌一致的UI。

OpenLdap

  • cn(common name):通用名称,表示一个对象的名称。在用户条目中,通常与用户的姓名相对应;在组条目中,则与组名相对应。
  • ou(organizational unit):组织单位,表示一个组织或部门。在LDAP目录服务中,可以使用ou来创建多级组织结构,并将用户和其他对象分配到相应的组织单元中,以便更好地管理它们。
  • dc(domain component):域组件,表示域名的一部分。在LDAP中,域名通常是按照层次结构组织的,例如:example.com可以被拆分为dc=example,dc=com。这样做有利于有效地组织和管理大规模的目录服务。
  • sn(surname):姓氏,表示一个人的姓氏。与cn属性不同,sn只表示姓氏,而且通常不唯一。

Helm部署

openldap

  • helm repo add stable https://charts.helm.sh/stable
  • helm install openldap stable/openldap

部署十分简单,但是我们可能需要调整Helm chart配置,所以建议把包拉取到本地调整之后再进行部署,下面是详细流程

[root@ycloud ~]# helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
[root@ycloud ~]# helm pull stable/openldap
[root@ycloud ~]# tar -zxvf openldap-1.2.7.tgz 
openldap/Chart.yaml
openldap/values.yaml
openldap/templates/NOTES.txt
openldap/templates/_helpers.tpl
openldap/templates/configmap-customldif.yaml
openldap/templates/configmap-env.yaml
openldap/templates/deployment.yaml
openldap/templates/pvc.yaml
openldap/templates/secret.yaml
openldap/templates/service.yaml
openldap/templates/tests/openldap-test-runner.yaml
openldap/templates/tests/openldap-tests.yaml
openldap/.helmignore
openldap/README.md
[root@ycloud ~]# cd openldap/ ;ls
charts  Chart.yaml  README.md  templates  values.yaml

刚刚我们拉取的Chart包 部署openldap,需要调整的地方不是很多

LDAP_ORGANISATION: "GStrain Inc." LDAP_DOMAIN: "ldap-openldap.authelia" LDAP_BACKEND: "hdb" LDAP_TLS: "false" LDAP_TLS_ENFORCE: "false" LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"

⚡️: LDAP_DOMAIN是指LDAP目录服务中的域名,它用于标识和区分不同的组织、部门或用户。

案例:cn=username,ou=department,dc=domain,dc=com

其中dc=domain,dc=com部分就是LDAP_DOMAIN,我们只需要注意这一部分,其他根据自己情况选择。

数据持久化

当我添加pvc来做数据持久化,一直提示没有权限,暂时没能解决。

chown: changing ownership of ‘/var/lib/ldap/data’: Operation not permitted

只好退而求其次,使用hostPath来针对pod做持久化

- hostPath: path: /data/openldap type: DirectoryOrCreate name: data

helm chart调整好之后,我们只需要一个命令就可以进行安装部署

  • helm install

OpenLdap 有很多第三方的控制工具,也可以使用命令行来进行操作,我这里推荐使用的是 Apache Directory Studio, 下面是一些简单的使用案例:

ldapadd -x -D "cn=admin,dc=ldap-openldap,dc=authelia" -w "W58jkiat0wt0hkUXSBUwJBbVFhaEmDr8" <<EOF
dn: uid=ycloud,ou=ycloud,dc=ldap-openldap,dc=authelia
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: ycloud
sn: User
givenName: ycloud
uid: ycloud
userPassword: {SHA}ICy5YqxZB1uWSwcVLSNLcA==
ou: ycloud

这是一个简单的添加功能

使用WEB,查看我们刚刚添加的用户属性,针对我们部署的openldap进行连接。

Authelia

整体跟OpenLdap部署流程是一致的,配置中我们只需要调整,authelia绑定的ldap信息,所以我们这里只提供下最终的配置文件

  • helm repo add truecharts https://charts.truecharts.org/
  • helm install authelia truecharts/authelia --version 15.1.29
theme: light default_redirection_url: "" default_2fa_method: 'totp' server: host: 0.0.0.0 port: 9091 path: auth asset_path: '' headers: csp_template: '' buffers: read: 4096 write: 4096 tls: key: "/app/ssl/tls.key" certificate: "/app/ssl/tls.crt" timeouts: read: 6s write: 6s idle: 30s enable_pprof: false enable_expvars: false log: level: debug format: text file_path: '' keep_stdout: true totp: disable: false issuer: ycloud.net algorithm: sha1 digits: 6 period: 30 skew: 1 secret_size: 32 webauthn: disable: false display_name: Authelia attestation_conveyance_preference: indirect user_verification: preferred timeout: 60s ntp: address: time.cloudflare.com:123 version: 4 max_desync: 3s disable_startup_check: false disable_failure: false authentication_backend: password_reset: disable: false custom_url: '' ldap: implementation: activedirectory url: ldap://ldap-openldap:389 timeout: 5s start_tls: false tls: server_name: '' skip_verify: false minimum_version: TLS1.2 maximum_version: TLS1.3 base_dn: dc=ldap-openldap,dc=authelia additional_users_dn: OU=ycloud permit_referrals: false permit_unauthenticated_bind: false permit_feature_detection_failure: false users_filter: "(&({username_attribute}={input})(objectClass=person))" username_attribute: uid user: CN=admin,DC=ldap-openldap,DC=authelia password_policy: standard: enabled: false min_length: 8 max_length: 0 require_uppercase: true require_lowercase: true require_number: true require_special: true zxcvbn: enabled: false min_score: 0 session: name: 'authelia_gs_session' domain: 'ycloud.net' same_site: 'lax' expiration: 1h inactivity: 5m remember_me_duration: 1M redis: host: redis-master port: 6379 username: default password: qweasdzxc regulation: ban_time: 5m find_time: 2m max_retries: 3 storage: mysql: host: mysql port: 3306 database: authelia username: root timeout: 5s
  • server:设置Authelia服务器的相关参数,包括主机名、端口号、路径、SSL证书等。
  • totp:启用或禁用基于时间的一次性密码(TOTP)身份验证,并设置相关参数,如加密算法、密码周期等。
  • webauthn:启用或禁用WebAuthn身份验证,并设置相关参数,如认证器名称、用户验证方式等。
  • ldap:设置LDAP身份验证后端的相关参数,包括LDAP服务器的URL、基本DN、用户名属性、过滤器等。
  • password_policy:设置密码策略,包括标准模式和zxcvbn模式两种,可以设置最小长度、大小写字母、数字和特殊字符等要求。
  • session:设置会话参数,如名称、域名、过期时间等。
  • regulation:设置访问限制参数,包括失败尝试次数、封禁时间、发现时间等。
  • storage:设置存储参数,包括MySQL数据库的连接信息。
  • notifier:设置通知功能的参数,包括SMTP服务器的连接信息、身份验证器等。

部署好之后我们先查看一下我们的应用是否正常,然后针对端口进行访问尝试

[root@ycloud authelia]# kubectl get svc -n authelia
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
authelia         NodePort    10.253.246.20    <none>        80:5716/TCP                   37d
ldap-openldap    NodePort    10.253.165.233   <none>        389:36300/TCP,636:26749/TCP   25d
mysql            ClusterIP   10.253.43.75     <none>        3306/TCP                      38d
mysql-headless   ClusterIP   None             <none>        3306/TCP                      38d
redis-headless   ClusterIP   None             <none>        6379/TCP                      38d
redis-master     ClusterIP   10.253.129.138   <none>        6379/TCP                      38d
redis-replicas   ClusterIP   10.253.85.35     <none>        6379/TCP                      38d
[root@ycloud authelia]# kubectl get po  -n authelia
NAME                            READY   STATUS    RESTARTS        AGE
authelia-p6qhp                  1/1     Running   0               25d
authelia-stgzs                  1/1     Running   0               25d
authelia-vxwgl                  1/1     Running   0               25d
ldap-openldap-b5f757dc9-tqnv9   1/1     Running   0               25d
mysql-0                         1/1     Running   1 (5d23h ago)   25d
redis-master-0                  1/1     Running   0               25d
redis-replicas-0                1/1     Running   0               25d
redis-replicas-1                1/1     Running   1               26d
redis-replicas-2                1/1     Running   1 (25d ago)     26d

访问地址 https://authelia.ycloud.net/auth 这里域名已经绑定到对应的 authelia 服务,访问界面会是这样

⚡️: 这里的用户名密码就用我们上面,我们再openldap中创建的用户密码,填写之后点击登录,

反向代理进行集成

我们需要把Authelia,针对 url 来进行单点登录控制访问权限,这里我们得用到反向代理。

访问 A 地址 --> 跳转到https://authelia.ycloud.net/auth --> Authelia认证接口成功

    server {
      listen       8080 ssl;
      listen  [::]:8080 ssl;
      server_name  localhost;
      ssl_certificate      /etc/nginx/ssl/tls.crt;
      ssl_certificate_key  /etc/nginx/ssl/tls.key;
      location / {
          auth_request /auth;
          error_page 401 = /login;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Authorization "Bearer $cookie_authelia_session";
          proxy_set_header Cookie $http_cookie;
          proxy_hide_header Strict-Transport-Security;
          proxy_pass http://127.0.0.1:80;
      location /auth {
        internal;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_set_header Authorization "Bearer $cookie_authelia_session";
        proxy_set_header Cookie $http_cookie;
        proxy_pass https://authelia.ycloud.net/auth/api/verify;
      location /login {
        return 302  https://authelia.ycloud.net/auth;
				
什么是 Authelia ?简单来说就是 可以给我们架设的各种应用增加认证功能,比如像 原本是没有任何验证功能的,打开就是测试页面,而通过设置,现在 需通过 的认证后才能使用,这大大提高了应用的安全性。下图是 的简单架构图 的主要功能列表:如果你和老苏一样,使用 做反向代理,并且希望向公开的服务或应用程序添加身份验证,那么 可能会是一个很好的解决方案。您可以选择对您的应用程序使用单因素身份验证或双因素身份验证。群晖自带的反向代理,虽然简单、易用,但是自定义的功能太弱,建议改用 做反向代理
Authelia是一种开源身份验证和授权服务器,可通过Web门户为您的应用程序提供2要素身份验证和单点登录(SSO)。 它充当反向代理(如 , 或的伴侣,以使他们知道查询是否应该通过。 未经身份验证的用户将重定向到Authelia登录门户。 可从获得文档。 下图显示了该体系结构。 Authelia可以作为独立服务从 , ,也可以使用或来利用入口控制器和入口配置进行安装。 非常感谢您协助发布。 这是Authelia的门户网站的样子 以下是主要可用功能的列表: 第二种因素: 使用电子邮件确认通过身份验证重置密码。 提供仅单因素身份验证方法。 尝试过多身份验证后的访问限制。 每个子域,用户,资源和网络的细粒度访问控制。 支持受单一因素保护的端点的基本身份验证。 使用远程数据库具有很高的可用性,Redis可作为高可用性KV存储使用。 开箱即用与Kubernetes 控制器兼容。 有关功能的更多详细信息,请遵循。 如果您想进一步了解路线图,请遵循。 Authelia与 , 或结合使用。 它可以使用Docker部署在裸
# 下载代码并切换到本地运行例子 git clone https://github.com/authelia/authelia.git cd authelia/examples/compose/local 三、配置相关参数 打开configuration.yml查看配置 具体参数详解可查看: https://www.authelia.com/docs/configuration/ 1、访问控制 access_control: default_po