1.3. MariaDB SQL 인증을 사용하여 Dovecot 서버 설정


사용자 및 암호를 MariaDB SQL 서버에 저장하는 경우 Dovecot를 사용자 데이터베이스 및 인증 백엔드로 사용하도록 구성할 수 있습니다. 이 구성을 사용하면 데이터베이스에서 계정을 중앙에서 관리하고 사용자는 Dovecot 서버의 파일 시스템에 대한 로컬 액세스 권한이 없습니다.

중앙 집중식 관리 계정을 사용하면 복제를 통해 여러 개의 Dovecot 서버를 설정하여 kdump를 고가용성으로 만들 계획도 누릴 수 있습니다.

1.3.1. Dovecot 설치

dovecot 패키지는 다음을 제공합니다.

  • dovecot 서비스와 이를 유지보수할 유틸리티
  • Dovecot가 필요할 때 시작되는 서비스(예: 인증)
  • 서버 측 메일 필터링과 같은 플러그인
  • /etc/dovecot/ 디렉토리에 있는 설정 파일
  • /usr/share/doc/dovecot/ 디렉토리에 있는 설명서

절차

  • dovecot 패키지를 설치합니다.

    # dnf install dovecot
    참고

    Dovecot가 이미 설치되어 있고 정리된 구성 파일이 필요한 경우 /etc/dovecot/ 디렉토리 이름을 변경하거나 제거해야 합니다. 그런 다음 패키지를 다시 설치합니다. 설정 파일을 제거하지 않으면 dnf reinstall dovecot 명령이 /etc/dovecot/ 의 구성 파일을 재설정하지 않습니다.

1.3.2. Dovecot 서버에서 TLS 암호화 구성

dovecot는 보안 기본 구성을 제공합니다. 예를 들어 TLS는 네트워크를 통해 암호화된 자격 증명 및 데이터를 전송하기 위해 기본적으로 활성화됩니다. Dovecot 서버에서 TLS를 구성하려면 인증서 및 개인 키 파일에 대한 경로만 설정하면 됩니다. 또한 Diffie-Hellman 매개변수를 생성 및 사용하여 완벽한PFS(forward secrecy)를 제공하여 TLS 연결의 보안을 높일 수 있습니다.

사전 요구 사항

  • dovecot가 설치되어 있어야 합니다.
  • 다음 파일이 서버의 나열된 위치에 복사되었습니다.

    • 서버 인증서: /etc/pki/dovecot/certs/server.example.com.crt
    • 개인 키: /etc/pki/dovecot/private/server.example.com.key
    • CA(인증 기관) 인증서: /etc/pki/dovecot/certs/ca.crt
  • 서버 인증서의 Subject DN 필드에 있는 호스트 이름은 서버의 FQDN(정규화된 도메인 이름)과 일치합니다.
  • 서버가 RHEL 9.2 이상을 실행하고 FIPS 모드가 활성화된 경우 클라이언트는 확장 마스터 시크릿(Extended Master Secret) 확장을 지원하거나 TLS 1.3을 사용해야 합니다. TLS 1.2 연결이 없는 경우 실패합니다. 자세한 내용은 TLS 확장 "Extended Master Secret" enforced Knowledgebase 문서를 참조하십시오.

절차

  1. 개인 키 파일에 대한 보안 권한을 설정합니다.

    # chown root:root /etc/pki/dovecot/private/server.example.com.key
    # chmod 600 /etc/pki/dovecot/private/server.example.com.key
  2. Diffie-Hellman 매개변수를 사용하여 파일을 생성합니다.

    # openssl dhparam -out /etc/dovecot/dh.pem 4096

    서버의 하드웨어 및 엔트로피에 따라 4096비트의 Diffie-Hellman 매개변수를 생성하는 데 몇 분이 걸릴 수 있습니다.

  3. /etc/dovecot/conf.d/10-ssl.conf 파일에서 인증서 및 개인 키 파일의 경로를 설정합니다.

    1. ssl_certssl_key 매개변수를 업데이트하고 서버 인증서 및 개인 키의 경로를 사용하도록 설정합니다.

      ssl_cert = </etc/pki/dovecot/certs/server.example.com.crt
      ssl_key = </etc/pki/dovecot/private/server.example.com.key
    2. ssl_ca 매개변수의 주석을 해제하고 CA 인증서 경로를 사용하도록 설정합니다.

      ssl_ca = </etc/pki/dovecot/certs/ca.crt
    3. ssl_dh 매개변수의 주석을 해제하고 Diffie-Hellman 매개변수 파일의 경로를 사용하도록 설정합니다.

      ssl_dh = </etc/dovecot/dh.pem
    중요

    Dovecot가 파일에서 매개변수 값을 읽으려면 경로는 선행 < 문자로 시작해야 합니다.

추가 리소스

  • /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt

1.3.3. 가상 사용자 사용을 위한 Dovecot 준비

기본적으로 Dovecot는 파일 시스템에서 서비스를 사용하는 사용자로 많은 작업을 수행합니다. 그러나 하나의 로컬 사용자를 사용하여 이러한 작업을 수행하도록 Dovecot 백엔드를 구성하면 다음과 같은 몇 가지 이점이 있습니다.

  • dovecot는 사용자 ID(UID)를 사용하는 대신 특정 로컬 사용자로 파일 시스템 작업을 수행합니다.
  • 사용자는 서버에서 로컬로 사용할 수 없습니다.
  • 모든 Webhook 및 사용자별 파일을 하나의 루트 디렉터리에 저장할 수 있습니다.
  • 사용자에게 UID 및 그룹 ID(GID)가 필요하지 않으므로 관리 작업을 줄일 수 있습니다.
  • 서버의 파일 시스템에 액세스할 수 있는 사용자는 이러한 파일에 액세스할 수 없기 때문에 사용자의 속성이나 인덱스를 손상시킬 수 없습니다.
  • 복제를 쉽게 설정할 수 있습니다.

사전 요구 사항

  • dovecot가 설치되어 있어야 합니다.

절차

  1. vmail 사용자를 만듭니다.

    # useradd --home-dir /var/mail/ --shell /usr/sbin/nologin vmail

    dovecot는 나중에 이 사용자를 사용하여boxes를 관리합니다. 보안상의 이유로 dovecot 또는 dovenull 시스템 사용자를 사용하지 마십시오.

  2. /var/mail/ 와 다른 경로를 사용하는 경우 mail_spool_t SELinux 컨텍스트를 설정합니다. 예를 들면 다음과 같습니다.

    # semanage fcontext -a -t mail_spool_t "<path>(/.*)?"
    # restorecon -Rv <path>
  3. vmail 사용자에게 /var/mail/ 에 대한 쓰기 권한을 부여합니다.

    # chown vmail:vmail /var/mail/
    # chmod 700 /var/mail/
  4. /etc/dovecot/conf.d/10-mail.conf 파일에서 mail_location 매개 변수의 주석을 해제하고 이 매개 변수를 copy 형식 및 위치로 설정합니다.

    mail_location = sdbox:/var/mail/%n/

    이 설정으로 다음을 수행합니다.

    • Dovecot는 high-performant dbox box format을 단일 모드에서 사용합니다. 이 모드에서 서비스는 maildir 형식과 유사하게 각 이메일을 별도의 파일에 저장합니다.
    • dovecot는 사용자 이름 경로의 %n 변수를 해결합니다. 이 작업은 각 사용자에게 해당 2.10에 대한 별도의 디렉터리가 있는지 확인하는 데 필요합니다.

추가 리소스

  • /usr/share/doc/dovecot/wiki/VirtualUsers.txt
  • /usr/share/doc/dovecot/wiki/MailLocation.txt
  • /usr/share/doc/dovecot/wiki/MailboxFormat.dbox.txt
  • /usr/share/doc/dovecot/wiki/Variables.txt

1.3.4. MariaDB SQL 데이터베이스를 Dovecot 인증 백엔드로 사용

dovecot는 MariaDB 데이터베이스에서 계정과 암호를 읽고 해당 사용자를 사용하여 Manila 또는 POP3 서비스에 로그인할 때 사용자를 인증할 수 있습니다. 이 인증 방법의 장점은 다음과 같습니다.

  • 관리자는 데이터베이스에서 사용자를 중앙에서 관리할 수 있습니다.
  • 사용자는 서버에서 로컬로 액세스할 수 없습니다.

사전 요구 사항

  • dovecot가 설치되어 있어야 합니다.
  • 가상 사용자 기능이 구성됩니다.
  • MariaDB 서버에 대한 연결은 TLS 암호화를 지원합니다.
  • dovecotDB 데이터베이스는 MariaDB에 있으며 users 테이블에는 적어도 usernamepassword 열이 포함됩니다.
  • 암호 열에는 Dovecot에서 지원하는 스키마로 암호화된 암호가 포함되어 있습니다.
  • 암호는 동일한 스키마를 사용하거나 {pw-storage-scheme} 접두사가 있습니다.
  • dovecot MariaDB 사용자는 dovecotDB 데이터베이스의 users 테이블에 대한 읽기 권한이 있습니다.
  • MariaDB 서버의 TLS 인증서를 발행한 인증 기관(CA) 인증서는 /etc/pki/tls/certs/ca.crt 파일의 Dovecot 서버에 저장됩니다.
  • MariaDB 서버가 RHEL 9.2 이상을 실행하고 FIPS 모드가 활성화된 경우 이 Dovecot 서버는 확장 마스터 시크릿(ECDSA) 확장을 지원하거나 TLS 1.3을 사용합니다. TLS 1.2 연결이 없는 경우 실패합니다. 자세한 내용은 TLS 확장 "Extended Master Secret" enforced Knowledgebase 문서를 참조하십시오.

절차

  1. dovecot-mysql 패키지를 설치합니다.

    # dnf install dovecot-mysql
  2. /etc/dovecot/conf.d/10-auth.conf 파일에서 인증 백엔드를 구성합니다.

    1. 주석 처리에 auth-*.conf.ext 인증 백엔드 구성 파일에 대한 설명이 포함되어 있습니다. 예를 들면 다음과 같습니다.

      #!include auth-system.conf.ext
    2. 다음 줄의 주석을 해제하여 SQL 인증을 활성화합니다.

      !include auth-sql.conf.ext
  3. /etc/dovecot/conf.d/auth-sql.conf.ext 파일을 편집하고 다음과 같이 override_fields 매개변수를 userdb 섹션에 추가합니다.

    userdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf.ext
      override_fields = uid=vmail gid=vmail home=/var/mail/%n/
    }

    고정 값으로 인해 Dovecot는 SQL Server에서 이러한 설정을 쿼리하지 않습니다.

  4. 다음 설정으로 /etc/dovecot/dovecot-sql.conf.ext 파일을 만듭니다.

    driver = mysql
    connect = host=mariadb_srv.example.com dbname=dovecotDB user=dovecot password=dovecotPW ssl_ca=/etc/pki/tls/certs/ca.crt
    default_pass_scheme = SHA512-CRYPT
    user_query = SELECT username FROM users WHERE username='%u';
    password_query = SELECT username AS user, password FROM users WHERE username='%u';
    iterate_query = SELECT username FROM users;

    데이터베이스 서버에 TLS 암호화를 사용하려면 ssl_ca 옵션을 MariaDB 서버 인증서를 발행한 CA 인증서의 경로로 설정합니다. 작업 인증서 검증을 위해 MariaDB 서버의 호스트 이름이 TLS 인증서에 사용된 호스트 이름과 일치해야 합니다.

    데이터베이스의 암호 값에 {pw-storage-scheme} 접두사가 포함된 경우 default_pass_scheme 설정을 생략할 수 있습니다.

    파일의 쿼리는 다음과 같이 설정해야 합니다.

    • user_query 매개변수의 경우 쿼리에서 Dovecot 사용자의 사용자 이름을 반환해야 합니다. 또한 쿼리는 하나의 결과만 반환해야 합니다.
    • password_query 매개변수의 경우 쿼리에서 사용자 이름과 암호를 반환해야 하며 Dovecot는 사용자암호 변수에 이러한 값을 사용해야 합니다. 따라서 데이터베이스에서 다른 열 이름을 사용하는 경우 AS SQL 명령을 사용하여 결과의 열의 이름을 바꿉니다.
    • iterate_query 매개변수의 경우 쿼리에서 모든 사용자 목록을 반환해야 합니다.
  5. /etc/dovecot/dovecot-sql.conf.ext 파일에 대한 보안 권한을 설정합니다.

    # chown root:root /etc/dovecot/dovecot-sql.conf.ext
    # chmod 600 /etc/dovecot/dovecot-sql.conf.ext

추가 리소스

  • /usr/share/doc/dovecot/example-config/dovecot-sql.conf.ext
  • /usr/share/doc/dovecot/wiki/Authentication.PasswordSchemes.txt

1.3.5. Dovecot 구성 완료

Dovecot를 설치 및 구성한 후 firewalld 서비스에서 필요한 포트를 열고 서비스를 활성화 및 시작합니다. 그런 다음 서버를 테스트할 수 있습니다.

사전 요구 사항

  • Dovecot에서 다음 내용이 구성되어 있습니다.

    • TLS 암호화
    • 인증 백엔드
  • 클라이언트는 CA(인증 기관) 인증서를 신뢰합니다.

절차

  1. 사용자에게 CloudEvent 또는 POP3 서비스만 제공하려면 /etc/dovecot/dovecot.conf 파일에서 protocols 매개변수의 주석을 제거하고 필요한 프로토콜로 설정합니다. 예를 들어, POP3이 필요하지 않은 경우 다음을 설정합니다.

    protocols = imap lmtp

    기본적으로 imap,pop3, lmtp 프로토콜이 활성화됩니다.

  2. 로컬 방화벽에서 포트를 엽니다. 예를 들어, CloudEventS,Forwarded, POP3S 및 POP3 프로토콜의 포트를 여는 경우 다음을 입력합니다.

    # firewall-cmd --permanent --add-service=imaps --add-service=imap --add-service=pop3s --add-service=pop3
    # firewall-cmd --reload
  3. dovecot 서비스를 활성화하고 시작합니다.

    # systemctl enable --now dovecot

검증

  1. Mozilla Thunderbird와 같은 메일 클라이언트를 사용하여 Dovecot에 연결하고 이메일을 읽습니다. 메일 클라이언트 설정은 사용하려는 프로토콜에 따라 다릅니다.

    표 1.3. Dovecot 서버에 대한 연결 설정
    프로토콜포트연결 보안인증 방법

    IMAP

    143

    STARTTLS

    PLAIN[a]

    IMAPS

    993

    SSL/TLS

    PLAIN[a]

    POP3

    110

    STARTTLS

    PLAIN[a]

    POP3S

    995

    SSL/TLS

    PLAIN[a]

    [a] 클라이언트는 TLS 연결을 통해 암호화된 데이터를 전송합니다. 따라서 인증 정보가 공개되지 않습니다.

    기본적으로 Dovecot는 TLS가 없는 연결에서 일반 텍스트 인증을 허용하지 않으므로 이 테이블에는 암호화되지 않은 연결의 설정이 나열되지 않습니다.

  2. 기본값이 아닌 값을 사용하여 구성 설정을 표시합니다.

    # doveconf -n

추가 리소스

  • firewall-cmd(1) 매뉴얼 페이지
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.