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
# /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.conf와 pam_access.so를 통해 추가적인 제한도 가능하지만 일단은 안할 예정
- 이후
passwd dovecotuser로 비밀번호 설정 완료