Authelia é um servidor de autenticação e autorização de código aberto que fornece autenticação de múltiplos fatores e login único (SSO) para seus aplicativos por meio de um portal web. Ele atua como um complemento para proxies reversos comuns.
Ele é leve, rápido e seguro. Também suporta vários métodos de segundo fator, regulação de login, redefinição de senha e políticas de autorização.
Índice
Introdução
Neste guia, você será orientado sobre como instalar o Authelia usando docker. Além disso, utilizaremos o Caddy como proxy reverso para a geração de certificados. Por fim, testaremos a proteção em uma aplicação.
Esta será uma configuração básica, voltada para homelabbing, com certificados gerados automaticamente pelo Caddy. Além disso, contará com métodos de autenticação de dois fatores e Single Sign-On (SSO).
Pré-requisitos
Antes de começar, certifique-se de que você tem o Docker e o Docker Compose instalados em seu sistema. Se não, você pode seguir este guia de instalação do Docker
Um Nome de Domínio (ex: seudominio.com).
Encaminhamento de porta (port forwarding) nas portas 80 e 443 no seu roteador.
Configuração do Authelia
Abaixo segue os arquivos e diretorios que serao usados pelo container
/mnt └── docker └── authelia └── config ├── configuration.yml └── users_database.yml └── db.sqlite
Para criar os diretórios e o arquivo do banco de dados, você pode usar o seguinte comando:
sudo mkdir -p /mnt/docker/authelia
sudo mkdir -p /mnt/docker/authelia/config
sudo touch /mnt/docker/authelia/config/db.sqlite3
Criando o arquivo users_database.yml
caminho
/mnt └── docker └── authelia └── config └── users_database.yml
sudo nano /mnt/docker/authelia/config/users_database.yml
users_database.yml
---
###############################################################
# Users Database #
###############################################################
# This file can be used if you do not have an LDAP set up.
# List of users
users:
authelia:
disabled: false
displayname: "Authelia User"
password: seu argo2 hash
email: [email protected]
groups:
- admins
- dev
Este arquivo é onde seu nome de usuário será armazenado. Ele está configurado para o nome de usuário “authelia”, e você precisará criar uma senha para ele. Você pode utilizar uma ferramenta online para gerar um hash de senha de forma segura no site Argon2 Hash Generator
Após a criação substitua no arquivo onde esta escrito “seu argo2 hash”
Criando o arquivo configuration.yml
caminho do arquivo
/mnt └── docker └── authelia └── config └── configuration.yml
sudo nano /mnt/docker/authelia/config/configuration.yml
configuration.yml
---
theme: dark
jwt_secret: sua_string_aqui
default_redirection_url: https://seusite.com
default_2fa_method: ""
server:
host: 0.0.0.0
port: 9091
path: ""
enable_pprof: false
enable_expvars: false
disable_healthcheck: false
log:
level: debug
telemetry:
metrics:
enabled: false
address: tcp://0.0.0.0:9959
totp:
disable: false
issuer: authelia.com
algorithm: sha1
digits: 6
period: 30
skew: 1
secret_size: 32
webauthn:
disable: false
timeout: 60s
display_name: Authelia
attestation_conveyance_preference: indirect
user_verification: preferred
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: ""
refresh_interval: 5m
file:
path: /config/users_database.yml
watch: false
search:
email: false
case_insensitive: false
password:
algorithm: argon2
argon2:
variant: argon2id
iterations: 3
memory: 65536
parallelism: 4
key_length: 32
salt_length: 16
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: 3
access_control:
default_policy: one_factor
rules:
- domain: seudominio.com
policy: bypass
- domain: whoami.seudominio.com
policy: one_factor
- domain: teste.seudominio.com
policy: one_factor
session:
name: authelia_session
domain: seudominio.com
same_site: lax
secret: seu_secret_aqui
expiration: 1h
inactivity: 5m
remember_me_duration: 1M
regulation:
max_retries: 3
find_time: 2m
ban_time: 5m
storage:
encryption_key: seu_secret_storage_key_aqui
local:
path: /config/db.sqlite3
notifier:
disable_startup_check: false
filesystem:
filename: /config/notification.txt
Vamos precisar fazer algumas alterações nesse arquivo.
jwt_secret
Precisamos gerar uma string alfanumérica aleatória para o jwt secret.
use o comando abaixo para gerar
openssl rand -hex 64
copie e cole a string gerado no campo jwt_secret
default_redirection_url
Insira um site para o qual deseja fazer redirecionamentos ex: google.com meusite.com etc.
access_control:
O parâmetro default_policy no arquivo de configuração do Authelia Docker define a política aplicada se nenhuma regra se aplicar às informações conhecidas sobre a solicitação. Aqui estão as opções que você pode usar para este parâmetro:
- deny: Esta é a política recomendada para ser configurada por razões de segurança. Sites que você não deseja proteger com o Authelia não devem ser configurados em seu proxy reverso para realizar autenticação com o Authelia.
- bypass: Authelia não exigirá autenticação.
- one_factor: Apenas um usuário/senha é necessário.
- two_factor: (padrão) Nome de usuário/senha, bem como um segundo fator, são necessários.
Altere no arquivo conforme o tipo de aplicacao voce quer proteger e qual metodo
Exemplo:
rules:
– domain: whoami.seudominio.com
policy: two_factor
session
Na parte session você deve adicionar o nome do seu domínio em domain
Mais abaixo em secret adicione uma string alfanumérica aleatória que pode ser criada com o comando:
openssl rand -hex 64
storage
Em storage você deve adicionar também uma string alfanumérica aleatória.
Essas seriam as configurações básicas para o funcionamento do authelia mais informações sobre a configurações de arquivo podem ser encontradas em Authelia Files
Configuração do Caddy
Frequentemente considerado um dos proxies reversos mais fáceis de configurar, sendo amplamente utilizado em ambientes de homelabing devido à sua simplicidade. No entanto, para ambientes de produção, existem opções mais robustas disponíveis como o Traefik.
caminho do diretórios
/mnt └── docker └── caddy
sudo mkdir -p /mnt/docker/caddy
Criando o Arquivo de Configuração do Caddy
O Caddy utiliza um arquivo de configuração denominado Caddyfile. Este arquivo armazena todas as configurações necessárias para o funcionamento do Caddy.
caminho do arquivo
/mnt └── docker └── caddy └── Caddyfile
sudo nano /mnt/docker/caddy/Caddyfile
Caddyfile
{
# Global options block. Entirely optional, https is on by default
# Optional email key for lets encrypt
email [email protected]
# Optional staging lets encrypt for testing. Comment out for production.
#acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
(trusted_proxy_list) {
trusted_proxies 10.0.0.0/8 172.16.0.0/16 192.168.0.0/16 fc00::/7
}
# Authelia Portal.
authelia.seudominio.com {
reverse_proxy authelia:9091 {
import trusted_proxy_list
}
}
# Endpoint Protegido.
whoami.seudominio.com {
forward_auth authelia:9091 {
uri /api/verify?rd=https://authelia.seudominio.com/
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
import trusted_proxy_list
}
reverse_proxy whoami:80 {
import trusted_proxy_list
}
}
O primeiro campo, email, será o e-mail associado ao certificado Let’s Encrypt que será gerado. Caso seja necessário renová-lo no futuro, você utilizará o e-mail informado aqui.
Neste arquivo de configuração é criado uma lista de endereços locais, denominada trusted_proxy_list, que são considerados confiáveis.
No bloco abaixo ele configura o domínio authelia.dominio.com para ser um proxy reverso para authelia:9091
No próximo bloco, whoami.seudominio.com é configurado para utilizar a autenticação avançada (forward auth) com authelia:9091 e para atuar como um proxy reverso para whoami:80.
O whoami será utilizado como um exemplo prático de como proteger uma aplicação utilizando o Authelia.
Criando o Arquivo Docker Compose
caminho dos arquivos
/mnt └── docker └── docker-compose.yaml
Crie o arquivo abaixo:
sudo nano /mnt/docker/docker-compose.yaml
docker-compose.yaml
---
version: "3.7"
networks:
proxy:
external: false
app-network:
external: false
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
networks:
- proxy
- app-network
authelia:
image: authelia/authelia
restart: unless-stopped
volumes:
- ./authelia/config:/config
networks:
- app-network
- proxy
após a criação do arquivo suba o serviço com o comando
cd /mnt/docker/ && sudo docker compose up -d
Configuração do DNS
Primeiramente, você precisará configurar uma entrada A em seu DNS para apontar para o seu servidor. Por exemplo, você pode criar uma entrada A para authelia.meudominio.com e outra para whoami.meudominio.com que aponta para o endereço IP do seu servidor.
Caso voce já tenha feito isso siga para o proximo passo caso contrario siga os passos abaixo para configuração usando o Cloudflare.(Você precisa estar utilizando o Cloudflare como seus servidores de nomes (Name servers))
Configurar DNS Cloudflare
Depois de apontar seu domínio para o Cloudflare, você pode adicionar as entradas A para os subdomínios authelia.dominio.com e whoami.dominio.com:
Dentro do site da cloudflare cloudflare.com
Faça Login na sua conta
Vá a guia de configurações DNS.
Clique em “Adicionar registro”.
Escolha o tipo de registro como A.
No campo “Nome”, insira o subdomínio que você deseja mapear (por exemplo, “authelia” ou “whoami”).
No campo “IPv4”, insira “1.1.1.1” (mude para seu ip real).
Clique em “Salvar”.
Repita os passos 2 a 6 para o segundo subdomínio.
Por favor, note que o IP “1.1.1.1” é apenas um exemplo. Você deve substituí-lo pelo IP real para o qual você deseja apontar o registro A. Além disso, você deve substituir “dominio.com” pelo seu domínio real e os nameservers fornecidos pelo Cloudflare pelos nameservers reais fornecidos para o seu domínio.
Durante os testes iniciais, certifique-se de desmarcar a opção “Proxied” e deixá-la em cinza.
Acessando o Authelia
Para acessar o Authelia, abra o endereço do subdomínio criado no seu navegador:
ex : https://authelia.seudominio.com
Ao fazer isso, você deverá ver uma tela de login semelhante à ilustrada abaixo.
Insira o nome de usuário e a senha que você criou anteriormente, os quais estão armazenados no arquivo users_database.yml.
Após a autenticação, você será redirecionado para o endereço especificado no arquivo configuration.yml.
Protegendo uma Aplicação
Vamos utilizar a aplicação “whoami” como um caso de teste para a proteção do Authelia.
caminhos:
/mnt └── docker └── whoami └── docker-compose.yaml
sudo mkdir -p /mnt/docker/whoami
crie o arquivo docker-compose.yaml
sudo nano /mnt/docker/whoami/docker-compose.yaml
version: '3'
services:
whoami:
image: containous/whoami
networks:
- docker_proxy
networks:
docker_proxy:
external: true
suba o serviço utilizando o comando
cd /mnt/docker/whoami && sudo docker compose up -d
abra o arquivo de configuração do Authelia
sudo nano /mnt/docker/authelia/config/configuration.yaml
Vá ate a sessão access_control rules:
No campo domain, insira o subdomínio que você usou para o “whoami”. Em seguida, na opção policy, selecione “one_factor”. Isso irá configurar a política de autenticação para o seu subdomínio.
Neste exemplo, estamos utilizando a política de autenticação “one_factor”. Caso você queira utilizar a autenticação de dois fatores, altere a opção para “two_factor”. Após realizar o login, selecione a opção “Outros métodos”.
Finalmente, inicie uma sessão anônima no seu navegador e visite https://whoami.seudominio.com. Você será recebido por uma tela de login do Authelia. Uma vez que você se autentique com sucesso, terá acesso à aplicação.
Conclusão
Entre os vários portais de autenticação disponíveis, como Keycloak e Authentik, o Authelia se destaca pela facilidade de configuração e economia de recursos. Normalmente, ele ocupa apenas cerca de 30 megabytes de memória RAM, tornando-se uma opção eficiente. Quando combinado com o proxy Caddy, que é conhecido por sua segurança e facilidade de uso, o Authelia pode ser uma excelente opção para homelabbing.