, Traefik Authelia 설치

반응형

Traefik Authelia 설치

Authelia는 웹 애플리케이션을 위한 SSO(Single Sign-On) 및 MFA(Multi-Factor Authentication)를 제공하는 오픈 소스 인증 및 인증 서버입니다. Authelia는 Traefik과 통합되어 Traefik 대시보드 및 백엔드 서비스에 액세스 하기 위한 추가 보안 계층을 제공할 수 있습니다.

 

다음은 Authelia를 설치하고 Traefik과 함께 작동하도록 구성하는 방법입니다:

 

전제조건

Authelia를 설치하기 전에 다음이 필요합니다:

  • Linux 운영 체제를 실행하는 서버 또는 VPS(예: Ubuntu, Debian, CentOS)
  • 서버에 설치된 Docker / Docker Compose
  • 도메인 이름 및 도메인에 대한 유효한 SSL/TLS 인증서(예: Let's Encrypt에서 가져옵니다.)

 

1단계: Authelia 구성 파일 생성

첫 번째 단계는 Authelia에 대한 구성 파일을 생성하는 것입니다. Authelia는 config.yml과 users.yml의 두 가지 구성 파일을 사용합니다.

 

config.yml에는 인증 백엔드, 스토리지 백엔드 및 세션 설정을 포함한 Authelia의 글로벌 구성이 포함되어 있습니다. 다음은 구성 파일의 예입니다:

# Global configuration
host: auth.example.com
port: 9091
cert: /etc/authelia/certs/auth.example.com.crt
key: /etc/authelia/certs/auth.example.com.key

# Authentication backend
ldap:
  host: ldap.example.com
  port: 389
  user: "cn=admin,dc=example,dc=com"
  password: "mypassword"
  baseDN: "dc=example,dc=com"
  additionalUsersDN:
    - "ou=users,dc=example,dc=com"
  additionalGroupsDN:
    - "ou=groups,dc=example,dc=com"

# Storage backend
postgresql:
  host: db.example.com
  port: 5432
  user: "authelia"
  password: "mypassword"
  database: "authelia"
  sslmode: "verify-full"
  sslrootcert: /etc/authelia/certs/db.example.com.crt

# Session settings
session:
  secret: "mysecret"
  domain: ".example.com"
  expiration: "2h"
  inactivity: "30m"

이 예에서는 LDAP를 인증 백엔드 및 Postgre로 사용하고 있습니다SQL을 스토리지 백엔드로 사용합니다. 또한 세션 암호, 도메인, 만료 및 비활성 설정을 설정하고 있습니다.

 

users.yml에는 Authelia에 대한 사용자 계정 및 그룹이 포함되어 있습니다. 다음은 구성 파일의 예입니다:

# User accounts
users:
  john:
    password: "$2a$10$QtNVH7LWqGw...."
    email: "john@example.com"
    groups:
      - "admins"
      - "developers"
  jane:
    password: "$2a$10$kcc2D87JUpM...."
    email: "jane@example.com"
    groups:
      - "developers"

# User groups
groups:
  admins:
    policies:
      - "resources:/api/*:GET,PUT,POST,DELETE"
      - "resources:/admin/*:GET,PUT,POST,DELETE"
  developers:
    policies:
      - "resources:/api/*:GET,PUT"

이 예에서는 두 개의 사용자 계정(John 및 Jane)과 두 개의 그룹(관리자 및 개발자)이 있습니다. 관리자 그룹은 /api 및 /admin 아래의 모든 리소스에 액세스 할 수 있는 반면 개발자 그룹은 /api 아래의 GET 및 PUT 메서드에만 액세스 할 수 있습니다.

 

2단계: Authelia Docker 작성 파일

다음 단계는 Authelia용 Docker Compose 파일을 만드는 것입니다. 이 파일은 Authelia 서비스와 해당 종속성을 정의합니다. 다음은 Docker Compose 파일의 예입니다:

version: '3.8'
services:
  authelia:
    image: authelia/authelia
    restart: always
    volumes:
      - ./config:/config
      - ./certs:/certs
    environment:
      - TZ=UTC
    ports:
      - "9091:9091"
    command: ["--config", "/config/config.yml", "--users", "/config/users.yml"]
    depends_on:
      - db
  db:
    image: postgres:12-alpine
    restart: always
    volumes:
      - ./db:/var/lib/postgresql/data
      - ./certs:/certs
    environment:
      - POSTGRES_USER=authelia
      - POSTGRES_PASSWORD=mypassword
      - POSTGRES_DB=authelia
    ports:
      - "5432:5432"

이 예에서는 authelia와 db라는 두 가지 서비스를 제공합니다. authelia 서비스는 authelia/authelia Docker 이미지를 기반으로 하며 2개의 볼륨(config 및 certs)과 2개의 환경 변수(TZ 및 구성 파일의 위치)가 마운트되어 있습니다. 또한 포트 9091을 호스트 시스템에 노출합니다.

 

db 서비스는 postgres:12-alpine Docker 이미지를 기반으로 하며 2개의 볼륨(db 및 certs)과 3개의 환경 변수(POSTGREES_USER, POSTGREES_PASSWORD 및 POSTGREES_DB)가 마운트되어 있습니다. 포트 5432도 호스트 시스템에 노출됩니다.

 

config.yml 및 Docker Compose 파일의 mypassword 값을 강력하고 고유한 암호로 대체해야 합니다.

SMALL

3단계: Authelia 서비스 시작

구성 파일과 Docker Compose 파일을 만든 후 Docker Compose를 사용하여 Authelia 서비스를 시작할 수 있습니다. Docker Compose 파일과 동일한 디렉토리에서 다음 명령을 실행합니다:

docker-compose up -d

그러면 Authelia 및 db 서비스가 분리 모드로 시작됩니다.

 

4단계: Authelia를 사용하도록 Traefik 구성

마지막 단계는 인증 및 권한 부여를 위해 Authelia를 사용하도록 Traefik을 구성하는 것입니다. 여기에는 다음을 포함하도록 Traefik 구성 파일(traefik.yml)을 업데이트하는 작업이 포함됩니다:

http:
  routers:
    traefik-auth:
      entryPoints:
        - websecure
      middlewares:
        - authelia-authentication
        - authelia-authorization
      rule: Host(`traefik.example.com`)
      tls:
        certResolver: myresolver
  middlewares:
    authelia-authentication:
      forwardAuth:
        address: http://authelia:9091/api/verify
        trustForwardHeader: true
        authResponseHeaders:
          - Remote-User
    authelia-authorization:
      plugin:
        authelia:
          basePath: /api/authelia
          redirectTo: https://auth.example.com/signin
          publicAccess:
            enabled: false
          rules:
            # Traefik Dashboard
            - domain: traefik.example.com
              methods: [GET]
              path: /dashboard/*
              policy: authenticated
            # Backend services
            - domain: example.com
              methods: [GET, POST, PUT, DELETE]
              path: /api/*
              policy: jwt

이 예에서는 traefik-auth라는 이름의 라우터에서 authelia-auth 및 authelia-auth 미들웨어를 사용합니다. 이 라우터는 HTTPS 및 유효한 SSL/TLS 인증서를 사용하도록 구성된 웹 보안 진입점을 사용하도록 구성되었습니다.

 

Authelia-authentication 미들웨어가 forward를 사용하고 있습니다인증을 위해 Authelia 서비스로 요청을 전달하는 인증 메커니즘입니다. 주소 매개 변수는 Authelia 서비스의 주소(http://authelia:9091/api/verify)로 설정하고 trustForwardHeader 매개 변수는 true로 설정하여 Traefik에서 보낸 X-Forwarded-* 헤더를 신뢰해야 합니다. authResponseHeaders 매개 변수는 Traefik에게 Authelia가 반환한 원격 사용자 헤더를 전달하도록 지시하는 데 사용됩니다.

 

Authelia-authorization 미들웨어는 인증에 사용되며 Authelia 플러그인을 사용하도록 구성되어 있습니다. basePath 매개 변수는 config.yml 파일의 authelia.base_path 값과 일치해야 합니다. redirectTo 매개 변수는 Authelia 로그인 페이지를 가리켜야 합니다. publicAccess 매개 변수는 기본적으로 모든 경로에 대한 인증을 요구하기 위해 false로 설정됩니다. 마지막으로, rules 매개 변수를 사용하여 권한 부여 규칙을 정의에 사용됩니다. 이 예에서는 Traefik 대시보드와 백엔드 서비스의 두 가지 규칙이 있습니다. 정책 매개 변수는 권한 부여 정책을 정의하는 데 사용됩니다. 이 경우 대시보드에는 인증(정책: 인증됨)이 필요하며 백엔드 서비스에는 유효한 JWT 토큰(정책: jwt)이 필요합니다. 필요에 따라 다른 경로 및 서비스에 대한 추가 규칙을 정의할 수 있습니다.

 

Traefik 구성 파일을 업데이트한 후에는 Traefik 서비스를 다시 시작하여 변경 사항을 적용할 수 있습니다:

docker-compose restart traefik

 

결론

결론적으로 Traefik은 애플리케이션 및 서비스에 트래픽을 라우팅하는 데 사용할 수 있는 강력하고 유연한 역방향 프록시입니다. 그러나 인프라의 다른 구성 요소와 마찬가지로 잠재적인 위협으로부터 보호하기 위한 조치를 취하는 것이 중요합니다.

 

이 안내서에 설명된 단계를 따르면 Traefik 배포의 보안을 크게 향상시킬 수 있습니다. 특히 Traefik 대시보드를 보호하고, 외부 연결에 HTTPS를 사용하고, 인증 및 권한 부여를 위해 Authelia를 구성하는 방법을 다루었습니다.

 

물론, 이러한 단계는 시작에 불과합니다. 특정 요구사항 및 사용 사례에 따라 추가 보안 조치를 구현해야 할 수도 있습니다. 예를 들어, 공격으로부터 보호하기 위해 속도 제한을 구성하거나 WAF를 구현할 수 있습니다.

 

어쨌든 중요한 것은 경계심을 유지하고 최신 보안 모범 사례를 파악하는 것입니다. 이렇게 하면 Traefik 배포가 사용자에게 안전하고 안정적으로 유지되도록 할 수 있습니다.

728x90
LIST

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band