이전 편을 먼저 읽어보세요
이 글은 "리눅스에서 메일 서버 구축하기" 시리즈의 여섯 번째 글입니다.
이전 편에서 PostgreSQL을 활용한 가상 사용자 계정 테이블 설계를 완료했습니다.
아직 확인하지 않았다면 먼저 읽어보는 것을 추천합니다.
👉 이전 편: Dovecot 가상 사용자 개념과 PostgreSQL 테이블 설계


Dovecot의 auth-sql.conf.ext 설정이란?

Dovecot이 시스템 계정이 아닌 데이터베이스를 통해 가상 사용자를 인증하려면, auth-sql.conf.ext 파일을 설정해야 합니다.
이 설정을 통해 Dovecot이 PostgreSQL에서 사용자 정보를 가져와 인증할 수 있습니다.


Dovecot의 SQL 인증 설정 (auth-sql.conf.ext)

Dovecot이 PostgreSQL과 연결하기 위해 설정해야 할 주요 항목은 다음과 같습니다.

1. 설정 파일 경로

설정 파일은 다음 경로에 위치합니다.

/etc/dovecot/conf.d/auth-sql.conf.ext

파일이 없는 경우 다음 명령어로 생성할 수 있습니다.

sudo touch /etc/dovecot/conf.d/auth-sql.conf.ext

2. 주요 설정 항목

driver = sql
connect = host=localhost dbname=mail user=mailadmin password=yourpassword

default_pass_scheme = SHA256-CRYPT

password_query = SELECT email AS user, password FROM mail_users WHERE email='%u';

user_query = SELECT home_directory AS home FROM mail_users WHERE email='%u';

설정 설명

  • driver = sql → SQL 기반 인증 사용
  • connect = host=localhost dbname=mail user=mailadmin password=yourpassword → PostgreSQL 연결 정보
  • default_pass_scheme = SHA256-CRYPT → 기본 비밀번호 해싱 알고리즘 지정. bcrypt를 사용한 경우, 'BLF-CRYPT'로 설정
  • password_query → 사용자가 입력한 비밀번호를 데이터베이스에서 가져온 해시 값과 비교
  • user_query → 사용자의 메일 저장 경로를 반환

3. Dovecot 서비스 재시작

설정을 적용한 후 Dovecot을 재시작합니다.

sudo systemctl restart dovecot

Dovecot과 PostgreSQL 연동 테스트

설정이 정상적으로 적용되었는지 확인하려면 다음 명령어를 사용합니다.

1. 인증 테스트

doveadm auth test user@example.com password123

정상적으로 설정되었다면 passdb 인증이 성공해야 합니다.

2. 오류 로그 확인

설정이 올바르게 적용되지 않았을 경우, 로그를 확인하여 원인을 분석할 수 있습니다.

journalctl -xe | grep dovecot

Secure authentication in mail server

비밀번호 해싱 방식 (MD5, SHA-256, BCRYPT 비교 및 적용)

Dovecot과 PostgreSQL이 연동될 때, 비밀번호는 반드시 해싱된 상태로 저장해야 합니다.
해싱 방식에 따라 보안성과 성능이 다릅니다.

1. 해싱 방식 비교

해싱 방식 보안 수준 속도 사용 예시
MD5 취약 (충돌 가능) 빠름 비추천
SHA-256 중간 (안전한 편) 보통 일반적인 보안 필요 시
BCRYPT 강력한 보안 느림 높은 보안 요구 시

MD5는 취약성이 알려져 있기 때문에 사용하지 않는 것이 좋습니다.
SHA-256은 일반적으로 널리 사용되며, 속도와 보안성이 균형을 이룹니다.
BCRYPT는 가장 강력한 보안을 제공하지만 속도가 느려 성능이 중요한 환경에서는 적절한 옵션을 고려해야 합니다.


Dovecot 명령어 (doveadm pw)를 사용한 해싱

Dovecot에서 직접 비밀번호를 해싱할 수도 있습니다.

1. SHA-256 해싱

doveadm pw -s SHA256-CRYPT

비밀번호를 입력하면 다음과 같은 해시 값이 생성됩니다.

{SHA256-CRYPT}$5$rounds=5000$abc123def456$ABCDEF1234567890ABCDEF1234567890

2. BCRYPT 해싱

doveadm pw -s BLF-CRYPT

출력 예시:

{BLF-CRYPT}$2a$05$abcdefghij1234567890ABCDEFGHIJKL$CDEFGHIJKLMNOPQRSTUVWXYZ123456

해당 해시 값을 PostgreSQL의 mail_users 테이블에 저장하면 됩니다.


PostgreSQL에서 직접 해싱하기 (pgcrypto 확장 사용)

PostgreSQL에서 pgcrypto 확장을 사용하면 doveadm 없이도 비밀번호를 해싱할 수 있습니다.

1. pgcrypto 확장 활성화

CREATE EXTENSION IF NOT EXISTS pgcrypto;

2. SHA-256 해싱하여 비밀번호 저장

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf')), '/var/mail/vmail/user@example.com');

3. BCRYPT 해싱하여 비밀번호 저장

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf', 12)), '/var/mail/vmail/user@example.com');

정리 및 다음 단계

이번 글에서 다룬 내용 - Dovecot의 auth-sql.conf.ext 설정 방법
- Dovecot과 PostgreSQL 연동 테스트 방법
- SHA-256 및 BCRYPT 해싱 방식 적용 방법
- PostgreSQL에서 직접 해싱하는 방법

다음 편 예고: Postfix와 Dovecot의 SMTP 인증 연동
이제 Dovecot을 설정했으니, 다음 단계는 Postfix가 Dovecot의 인증을 활용하도록 설정하는 방법입니다.

👉 다음 편: Postfix와 Dovecot의 SMTP 인증 연동 (Coming Soon!)