dovecot SASL 설정하기

민정·2025년 8월 28일

dovecot-core SASL

https://doc.dovecot.org/2.4.1/core/config/auth/overview.html

Authentication

  • 시스템 사용자
    • 실제로 리눅스 시스템에 존재하는 사용자를 통해 SASL 인증을 받음
    • PAM, BSD, passwd file DB를 사용
  • 가상 사용자
    • 리눅스 시스템에 존재하지 않는 사용자도 SASL 인증이 가능하도록 가상 사용자로 등록
    • 보통 별도의 DB(파일, SQL DB 등)를 통해 가상 사용자를 저장
  • 해당 프로젝트의 시나리오는 "단일 사용자가 다수의 메일 구독자에게 특정한 시간에 대량의 메일을 발송하는 것"
    • 따라서 굳이 별도의 가상 사용자를 설정할 이유가 없으며 시스템 사용자를 사용할 예정
    • 리눅스 시스템에 메일 전송용 사용자를 별도로 생성 및 최소 권한 부여 예정

Overview

인증 매커니즘

  • cleartext
    • PLAIN
      • 암호화되지 않는 비밀번호를 dovecot에 전송
      • 최근에는 SSL/TLS 인증서를 대부분 적용하기 때문에 아무런 문제가 되지 않음
    • LOGIN
      • Outlook 사용자가 SMTP 서버에 인증하는 경우 사용
      • 해당 프로젝트는 MUA로 Outlook을 사용하지 않기 때문에 고려하지 않음
  • non-cleartext
    • SSL 암호화 없이도 안전하게 사용할 수 있도록 설계
    • 해당 프로젝트는 SSL/TLS 인증서가 적용되어 있기 때문에 고려하지 않음

암호 체계

  • 암호가 passdb에 저장되는 형식을 지정
  • 비밀번호 DB가 passwd, PAM, BSD의 경우 설정 불가능

Passdb

  • Success/Failure Database
    • Dovecot이 DB를 직접 조회할 수 없으며 DB로부터 성공, 실패 결과 답변만 얻을 수 있음
    • PAM, OAuth2 등의 DB가 해당
  • Lookup Database
    • Dovecot이 사용자 이름, 기타 정보를 기반으로 DB를 조회하고 비밀번호 유효성을 직접 확인함
    • passwd file, SQL 등의 DB가 해당

Userdb

  • 사용자 인증 후 로그인된 사용자에 대한 정보를 조회할 수 있는 DB
  • Success/Failure Database는 사용자에 대한 추가 정보를 제공하지 않아 별도의 userdb 조회가 없음

어떤 passdb를 사용할까?

  • 해당 시나리오에 적합하고, 가장 설정하기 쉬운 PAM 인증 방식을 사용할 예정
  • PAM은 userdb를 제공하지 않기 때문에 passwd file을 userdb로 함께 사용할 예정

PAM Authentication

https://doc.dovecot.org/2.4.1/core/config/auth/databases/pam.html

  • PAM 자체는 실제 DB가 아님
    • userdb를 사용할 수 없음
    • 비밀번호를 직접 저장하거나 관리하지 않으며 cleartext 인증만 가능
    • 실제 인증방식, DB는 PAM 설정에 따라 변화
  • 보통 일반적으로 passwd, static DB와 함께 사용

설정 방법

  • 인증 매커니즘 설정
# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
  • passdb, userdb 설정
# /etc/dovecot/conf.d/auth-system-conf.ext
passdb {
    driver = pam
}

userdb {
    driver = passwd
}
  • 위 설정들은 이미 기본값으로 적용되어 있는 설정
# /etc/pam.d/dovecot
#%PAM-1.0

@include common-auth
@include common-account
@include common-session
  • pam 파일의 기본 설정은 /etc/passwd에 존재하는 모든 계정이 dovecot에서 인증 가능
  • pam 파일을 변경해서 특정 사용자(dovecotuser)만 인증되도록 설정

pam.d 설정하기

  • /etc/pam.d/[service] 파일의 문법은 다음과 같다.
  • type control module-path module-arguments

type

  • auth: 사용자 인증 및 인가 수행
  • account: (인증된)계정 정책 관리 및 검사
  • password: 인증 정보 갱신
  • session: 인증 전후 수행 작업 정의

control

  • requisite: 인증 결과가 실패인 경우 즉시 인증 종료 및 실패
  • required: 인증 결과와 무관하게 다음 인증 실행, 인증 결과가 실패인 경우 최종 인증 결과도 실패
  • sufficient: 인증 결과가 성공인 경우 즉시 인증 종료 및 성공
  • optional: 최종 인증 결과에 반영되지 않음
  • include: 다른 PAM 설정 파일 호출
  • 복합 제어 조건도 설정 가능

module

  • pam_permit.so: 항상 성공
  • pam_deny.so: 항상 실패
  • pam_access.so: /etc/security/access.conf 정책에서 허용되는 계정만 성공
  • pam_time.so: (account) 특정 시간에만 서비스 사용 가능
  • pam_succeed_if.so: 조건에 부합하는 경우 성공
  • pam_unix.so

설정

# /etc/pam.d/dovecot
#%PAM-1.0

auth    requisite    pam_succeed_if.so user = dovecotuser
auth    requisite    pam_unix.so

account requisite    pam_succeed_if.so user = dovecotuser
account requisite    pam_unix.so
  • dovecotuser만 접속 허용
    • auth로 dovecotuser만 인증 및 인가가 가능하도록 설정
    • account로 dovecotuser만 실제로 dovecot 서비스를 사용할 수 있도록 설정
    • requisite로 빠르게 인증 실패 시 종료

autoselect

  • 사실 이렇게 pam 파일을 직접 편집하지 않고 일반적으로는 authselect를 통해 편집한다고 함
  • 이는 LDAP와 관련있다고 하는데 이후 조사해볼 예정

사용자 생성

  • useradd -M dovecotuser
  • SASL 인증에 사용할 사용자 dovecotuser 생성
    • 홈 디렉토리 없음
    • 셸 로그인 차단(-M) → 대화형 사용자가 아니기 때문
  • 필요한 경우 /etc/security/access.confpam_access.so를 통해 추가적인 제한도 가능하지만 일단은 안할 예정
  • 이후 passwd dovecotuser로 비밀번호 설정 완료
profile
시스템 + 리눅스 + 클라우드

0개의 댓글