
Authelia - 리버스 프록시 환경에서 강력한 인증(Authentication)과 인가(Authorization) 오픈소스 보안 서버
Authelia는 리버스 프록시와 긴밀하게 통합되어 웹 서비스에 대한 인증(Authentication)과 인가(Authorization)를 대행하는 오픈소스 보안 서버입니다. 사용자가 보호된 서비스에 접근하려고 할 때 프록시 서버가 Authelia에 해당 요청의 유효성을 확인하도록 요청하는 방식으로 작동
[세부 내용]
가. Authelia를 Nginx 기능과 특징
나. Authelia를 Nginx와 연동 구축 절차
[참고 #1] Local Domain에서 Authelia 설치
가. Authelia를 Nginx 기능과 특징
1. Authelia 주요 기능
Authelia는 자체 구축이 가능한 인증/인가(Authentication & Authorization) 서버로, 다음과 같은 기능을 제공합니다:
- 2단계 인증(2FA)
- 싱글 사인온(SSO)
- 세분화된 접근 제어
- LDAP/AD 통합
- 역방향 프록시 연동(Nginx, Traefik 등)
2. 주요 기능 및 장점
- Single Sign-On (SSO): 한 번 로그인하면 Authelia로 보호되는 모든 서비스에 추가 로그인 없이 접속할 수 있습니다.
- 다양한 2FA 지원: Yubikey와 같은 하드웨어 키부터 모바일 앱 OTP까지 폭넓은 2차 인증 수단을 제공합니다.
- 보안 강화: 자체 로그인 기능이 없거나 보안이 취약한 오래된 웹 서비스 앞단에 두어 보안 계층을 즉시 추가할 수 있습
3. 주요 구성 요소
- 리버스 프록시 (Reverse Proxy): Nginx Proxy Manager, Traefik, Caddy 등과 연동되어 실질적인 관문 역할을 합니다.
- 사용자 백엔드 (User Backend): 사용자 정보를 저장하는 곳으로, 간단한 YAML 파일이나 기업용 LDAP/Active Directory를 지원합니다.
- 데이터베이스 (Storage Backend): 인증 세션, 2FA 장치 정보 등을 저장하기 위해 SQLite, PostgreSQL, MariaDB 등을 사용합니다.
- 접근 제어 정책 (Access Control): 특정 도메인, IP 대역, 사용자 그룹에 따라 "인증 생략", "1단계만 필요", "2단계 필수" 등의 상세 규칙을 설정
- 요청 가로채기: 사용자가 웹 서비스에 접속하면, Nginx나 Traefik 같은 리버스 프록시가 이 요청을 먼저 받습니다.
- 인증 확인: 프록시 서버는 Authelia의 API(주로 /api/verify)에 "이 사용자가 인증되었는가?"를 묻습니다.
- 인증 진행:
- 미인증 시: 사용자를 Authelia 로그인 페이지로 리다이렉트합니다.
- 1단계 인증: 사용자가 아이디/비밀번호를 입력하면 Authelia는 백엔드(LDAP, 파일 등)에서 정보를 확인합니다.
- 2단계 인증 (2FA): 정책에 따라 TOTP(구글 OTP), WebAuthn(FIDO2 보안키), Duo 푸시 알림 등을 추가로 요구합니다.
- 세션 생성: 인증이 완료되면 Authelia는 사용자 브라우저에 쿠키(세션)를 생성합니다.
- 접근 허용: 이후 프록시 서버는 인증된 요청에 대해 사용자 정보 헤더(예: X-Forwarded-User)를 추가하여 실제 웹 서비스로 전달합니다
나 . Authelia를 Nginx와 연동 구축 절차
- 사용자(Browser): 웹사이트 접속 시도.
- Nginx (Reverse Proxy): 외부 요청을 받아 Authelia에게 "이 사용자 인증됨?"이라고 물어봄 (auth_request 모듈 사용).
- Authelia (Auth Server): 사용자가 로그인(ID/PW)하고 Google Authenticator 코드(2FA)를 입력하는 페이지 제공.
- Redis/File (Storage): 인증 세션 및 사용자 정보를 저장 (가장 간단한 파일 기반 설정 기준).
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- authelia
authelia:
image: authelia/authelia:latest
container_name: authelia
volumes:
- ./authelia:/config
environment:
- TZ=Asia/Seoul
restart: unless-stopped
server {
listen 80;
server_name ://example.com;
# 1. Authelia 인증 체크 경로
location /internal/authelia/authz {
internal;
proxy_pass http://authelia:9091/api/authz/forward-auth;
}
# 2. 실제 보호하려는 웹 서비스
location / {
# Authelia 인증 요청 활성화
auth_request /internal/authelia/authz;
# 인증 안됐을 경우 Authelia 로그인 페이지로 리다이렉트
error_page 401 =302 https://example.com;
proxy_pass http://my-backend-service:8080;
}
}
authentication_backend:
file:
path: /config/users_database.yml
# Google Authenticator (TOTP) 설정
totp:
issuer: "MyHomeServer"
period: 30
skew: 1
access_control:
default_policy: 'one_factor' # 기본은 ID/PW만
rules:
- domain: "://example.com"
policy: 'two_factor' # 특정 도메인은 무조건 OTP 강제- 첫 접속: 사용자가 Nginx(보호된 사이트)에 접속합니다.
- 인증 확인: Nginx가 auth_request를 통해 Authelia에게 사용자의 세션 쿠키가 유효한지 확인합니다.
- 로그인 이동: 인증되지 않은 사용자라면 Authelia 로그인 화면(://example.com)으로 보냅니다.
- 1단계 인증: 사용자가 ID와 비밀번호를 입력합니다.
- 2단계 인증(Google OTP): ID/PW가 맞으면 Authelia가 OTP 입력창을 띄웁니다. 사용자는 스마트폰의 Google Authenticator 앱에 뜬 6자리 번호를 입력합니다.
- 세션 발급: 인증 성공 시 Authelia는 세션 쿠키를 굽고 원래 접속하려던 페이지로 돌려보냅니다.
- 최종 승인: 이제 Nginx는 Authelia로부터 "인증됨(200 OK)" 응답을 받고 실제 내부 서버의 콘텐츠를 보여줍니다.
- HTTPS 필수: OTP 번호와 세션 쿠키를 보호하기 위해 반드시 SSL(HTTPS) 환경에서 구축해야 합니다 (Let's Encrypt 추천).
- 도메인: Authelia와 서비스 도메인이 같은 상위 도메인(예: *.example.com)을 공유해야 쿠키 공유가 원활합니다.
[참고 #1] Local Domain에서 Authelia 설치
다. Local Domain으로 작동 검증
- Windows: C:\Windows\System32\drivers\etc\hosts
- Mac/Linux: /etc/hosts
127.0.0.1 auth.local
127.0.0.1 my-app.local
- mkcert -install (로컬 신뢰 기관 등록)
- mkcert auth.local my-app.local (인증서 파일 생성: _wildcard.local.pem, _wildcard.local-key.pem)
services:
# 1. Nginx: 모든 요청의 입구
nginx:
image: nginx:latest
container_name: nginx
ports:
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/nginx/certs:ro # mkcert로 만든 인증서
depends_on:
- authelia
# 2. Authelia: 인증 서버 (Google OTP 처리)
authelia:
image: authelia/authelia:latest
container_name: authelia
volumes:
- ./authelia:/config
environment:
- TZ=Asia/Seoul
# 3. 테스트용 실제 앱
my-app:
image: nginxdemos/hello
container_name: my-app
server {
listen 443 ssl;
server_name my-app.local;
ssl_certificate /etc/nginx/certs/auth.local+1.pem;
ssl_certificate_key /etc/nginx/certs/auth.local+1-key.pem;
# Authelia 인증 체크
location /internal/authelia/authz {
internal;
proxy_pass http://authelia:9091/api/authz/forward-auth;
}
location / {
auth_request /internal/authelia/authz;
error_page 401 =302 https://auth.local; # 미인증 시 이동
proxy_pass http://my-app:80;
}
}
server {
listen 443 ssl;
server_name auth.local; # Authelia 로그인 페이지용 도메인
ssl_certificate /etc/nginx/certs/auth.local+1.pem;
ssl_certificate_key /etc/nginx/certs/auth.local+1-key.pem;
location / {
proxy_pass http://authelia:9091;
}
}- 접속: 브라우저에서 https://my-app.local 접속.
- 판단: Nginx가 Authelia에게 물어보고 401 코드를 받음.
- 이동: https://auth.local로 리다이렉트.
- 로그인: 미리 설정한 ID/PW 입력 (Authelia users_database.yml에 설정).
- 2FA 등록: 처음 접속 시 Authelia가 이메일 링크 대신 로컬 로그에 OTP 등록 QR 코드 주소를 남깁니다. (로컬은 메일 서버가 없으므로 도커 로그 확인 필요)
- docker logs authelia 명령어로 QR 코드 링크 확인 후 스마트폰 스캔.
- 완료: OTP 번호 입력 후 다시 my-app.local로 넘어가서 서비스 확인
[참고 #2] users_database.yml 샘플 코드
1. users_database.yml 샘플 코드
users:
# 사용자 아이디 (로그인 시 사용)
myuser:
# 비밀번호: 'password' (Argon2 해시 방식 권장)
password: "$argon2id$v=19$m=65536,t=3,p=4$uC6SInX8Uunb9SAn1f6D7Q$H5r9vA88U3p0Z3E/x9Xo/vX4vB8"
displayname: "My Admin"
emails:
- "myuser@example.com"
groups:
- admins
- users
- 비밀번호 해시: Authelia는 보안상 평문 비밀번호를 저장하지 않습니다.
- 초기 비밀번호 생성은 Docker 명령어로 간단히 할 수 있습니다
docker run --rm authelia/authelia:latest authelia hash-password "원하는비밀번호"
- 위 명령어를 실행해서 나온 결과를 password: 뒤에 붙여넣으세요.
- 이메일 주소: 로컬 테스트 환경이라도 이메일 형식을 갖춰야 합니다. (실제 수신 여부와 상관없이 초기 등록 시 식별자로 쓰입니다.)
- 그룹(Groups): configuration.yml의 access_control 섹션에서 특정 그룹만 접근 가능하게 제한할 때 활용합니다.
notifier:
filesystem:
filename: /config/notification.txt
2) 로그인 페이지에서 2FA 등록 버튼을 누릅니다.
3) 도커 볼륨으로 연결된 authelia/notification.txt 파일을 열어보면 QR 코드 링크가 텍스트로 찍혀 있습니다.
4) 그 링크를 브라우저에 붙여넣어 QR 코드를 띄운 후 Google Authenticator 앱으로 스캔하면 등록이 완료됩니다.
(관련 문서)
1. Authelia - 오픈소스 보안 서버 구축
https://couplewith.tistory.com/m/926
Authelia - 리버스 프록시 환경의 인증(Authentication)과 인가(Authorization)를 대행하는 오픈소스 보안 서
Authelia - 리버스 프록시 환경의 인증(Authentication)과 인가(Authorization)를 대행하는 오픈소스 보안 서버 Authelia는 리버스 프록시와 긴밀하게 통합되어 웹 서비스에 대한 인증(Authentication)과 인가(Author
couplewith.tistory.com
2. Authelia - 강력한 인증 특징과 장점 비교
https://couplewith.tistory.com/m/927
Authelia - 오픈 소스 기반의 강력한 인증 서버 분석 비교
Authelia - 오픈 소스 기반의 강력한 인증 서버 분석 비교 Authelia는 오픈 소스 기반의 강력한 인증 서버로, 특히 자체 호스팅(Self-hosted) 환경에서 최고의 가성비와 보안성을 제공합니다. 다른 상용
couplewith.tistory.com
'InfraPlatform' 카테고리의 다른 글
| Authelia - 오픈 소스 기반의 강력한 인증 서버 분석 비교 (0) | 2026.04.09 |
|---|---|
| Hyper-V Host → Rocky Linux 10 SSH 접속 구성 (0) | 2026.04.02 |
| Ollama + LLama + NVIDIA - WSL Oracle Linux 9.5 (0) | 2026.02.13 |
| Windows 11 설치 중 네트워크 드라이버 0x2000022f 오류 해결 (0) | 2026.02.04 |
| WSL2에서 VHDX 디스크 마운트하는 방법 (0) | 2026.01.20 |
| Windows 10/11 - WSL 2 업그레이드 (0) | 2026.01.19 |
| 웹서버 취약점 - SSL 보안 설정 및 점검 가이드 (0) | 2026.01.07 |