웹사이트 검색

Linux에서 가상 도메인 사용자로 Postfix 및 Dovecot을 구성하는 방법 - 2부


이 시리즈의 이전 기사에서는 phpMyAdmin을 사용하여 메일 서버 데이터베이스를 안전하게 설정하고 관리하는 방법을 설명했습니다.

요구 사항:

  1. MariaDB와 함께 Postfix 메일 서버 및 Dovecot 설치 - 1부

이제 이메일 보내기 및 받기를 현실로 만들어줄 내부 프로그램인 PostfixDovecot(각각 발신 이메일과 수신 이메일 처리용)을 구성할 차례입니다.

Postfix 메일 서버 구성

Postfix 구성을 시작하기 전에 여기 매뉴얼 페이지를 살펴보고 "새 Postfix 사용자를 위한 정보" 섹션을 특히 강조하는 것이 좋습니다. . 그렇다면 이 튜토리얼을 따라가기가 더 쉬울 것입니다.

간단히 말해서 Postfix에 대한 두 가지 구성 파일이 있다는 것을 알아야 합니다.

  1. /etc/postfix/main.cf(Postfix 구성 매개변수, 자세한 내용은 man 5 postconf를 참조하세요).
  2. /etc/postfix/master.cf(Postfix 마스터 데몬 구성, 자세한 내용은 man 5 마스터 참조).

/etc/postfix/main.cf에서 다음 줄을 찾아(또는 필요한 경우 추가) 아래 표시된 값과 일치하는지 확인하세요.


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

다음 세 가지 설정은 특히 중요합니다. 노란색으로 표시된 파일에서 Domains_tbl, Users_tblAlias_tbl 테이블에 대한 Postfix의 액세스를 구성합니다.


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

파일을 만들고 다음 내용을 삽입하는 한 위에서 다른 파일 이름을 선택할 수 있습니다. 각 경우에 YourPassword파트 1에서 dba 사용자에 대해 선택한 비밀번호로 바꾸거나 MariaDB를 사용할 수도 있습니다. 아래 사용자 및 비밀번호에 대한 루트 자격 증명입니다.

또한 1부에서 생성된 이메일 서버 데이터베이스 및 테이블의 이름과 정확히 동일한 이름을 사용해야 합니다.

/etc/postfix/mariadb-vdomains.cf에서:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

/etc/postfix/mariadb-vusers.cf에서:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

/etc/postfix/mariadb-valias.cf에서:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

마지막으로, 이 파일에 대한 권한을 640으로 변경하는 것을 잊지 마세요.


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

그리고 사용자 root 및 그룹 postfix에 대한 소유권은 다음과 같습니다.


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

다음으로 보안 연결을 활성화하려면 /etc/postfix/master.cf에서 다음 설정의 주석 처리를 해제(또는 필요한 경우 추가)해야 합니다.


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

참고: -o 옵션으로 시작하는 줄의 들여쓰기는 매우 중요합니다. 그렇지 않으면 접미사 검사에서 오류가 반환됩니다.

변경 사항을 저장하기 전에 파일 하단에 다음 줄을 추가하세요.


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

이 시점에서는 Postfix가 1부에서 생성한 데이터베이스 테이블과 도메인, 계정 및 별칭에 액세스할 수 있는지 확인하는 것이 중요합니다.

이를 위해 우리는 Postfix가 작업 중에 조회할 테이블과의 통신을 테스트하는 유틸리티인 postmap 명령을 사용할 것입니다. 하지만 무엇보다 먼저 postfix를 다시 시작해야 합니다.


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

아래 이미지에서는 데이터베이스의 기존 레코드에 대해 1이 반환되는 것을 볼 수 있습니다. 그렇지 않으면 화면에 아무것도 표시되지 않습니다. 별칭 확인의 경우 별칭이 매핑된 실제 이메일 계정이 반환됩니다.

우리는 각 이메일 계정에 설정된 자격 증명에 대해 인증하지 않습니다. 우리는 데이터베이스에서 해당 레코드를 감지하는 Postfix 기능만 테스트하고 있습니다.

따라서 위와 다른 결과가 나타나면 mariadb-vdomains.cf, mariadb-vusers.cf에서 유효한 사용자/비밀번호 쌍을 사용하고 있는지 확인하세요. mariadb-valias.cf(또는 해당 파일을 부르기 위해 선택한 이름).

비둘기장 구성

IMAP/POP3 서버로서 Dovecot은 메일 사용자 에이전트(MUA 또는 클라이언트라고도 함)(예: Thunderbird 또는 Outlook)을 사용하여 메일에 액세스할 수 있는 몇 가지 예를 들어보겠습니다.

시작하려면 이메일을 처리할 사용자와 그룹을 생성해 보겠습니다(이메일 계정은 시스템 사용자와 연결되어 있지 않으므로 이것이 필요합니다). 사용 중이 아니고 높은 숫자인 한 다른 UIDGID(아래에서 수행하는 5000 제외)를 사용할 수 있습니다.


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Dovecot의 설정은 여러 구성 파일로 분할됩니다(다음 줄의 주석 처리를 제거하고/하거나 아래 표시된 설정과 일치하도록 편집하십시오).

/etc/dovecot/dovecot.conf에서:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

/etc/dovecot/conf.d/10-auth.conf에서(SQL을 통한 인증만 활성화하고 다른 인증 방법은 주석 처리해 둡니다):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

/etc/dovecot/conf.d/auth-sql.conf.ext에서(이메일은 / home/vmail, 존재하지 않는 경우 만들어야 합니다. 우리의 경우에는 해당 도메인에 대한 이메일을 관리하기 위해 mkdir /home/vmail/linuxnewz.com을 수행했습니다.


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

해당 계정에 대한 이메일이 처음 수신되면 사용자 계정에 대한 개별 받은편지함이 생성됩니다.

/etc/dovecot/conf.d/10-mail.conf에서:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

/etc/dovecot/conf.d/10-master.conf에서:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

/etc/dovecot/conf.d/10-ssl.conf에서(CA에서 서명한 인증서를 사용하려는 경우 인증서와 키 경로를 교체하세요):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

/etc/dovecot/dovecot-sql.conf.ext에 데이터베이스 정보와 1부에서 생성한 관리 사용자의 자격 증명을 입력합니다.

중요: 비밀번호에 별표 (#)가 포함된 경우 아래 예에 표시된 대로 연결 문자열을 묶어야 합니다.


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

또한 /etc/dovecot/conf.d/10-logging.conf에서 Dovecot에 대한 로깅을 Postfix와 별도로 구성할 수 있습니다.


log_path = /var/log/dovecot.log

마지막으로 dovecot 사용자가 Dovecot 로그에 액세스할 수 있는지 확인하세요.


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Postifix 구성 확인 및 수정, 방화벽에서 SMTP, POP3 및 IMAP 활성화

Postfix 및/또는 Dovecot을 구성하는 동안 문제가 발생하면 도움을 요청하기 위해 모든 구성 파일을 제출하는 대신 다음을 사용하여 구성 요약(주석 처리되지 않은 행만)을 얻을 수 있습니다.


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

또한 이메일 받은편지함을 vmail로만 읽을 수 있는지 확인하세요.


chown –R vmail:vmail /home/vmail

구성 파일은 vmaildovecot 사용자도 읽을 수 있어야 합니다.


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

마지막으로 방화벽을 통해 SMTP, POP3IMAP을 활성화했는지 확인하세요.


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Thunderbird를 Postfix용 이메일 클라이언트로 구성

이메일 통신에 사용되는 포트에 대해 방화벽을 통해 액세스를 보호했다면 이제 이메일 클라이언트를 구성할 차례입니다. [이메일 보호됨] 및 해당 비밀번호와 함께 mail.linuxnewz.com을 IMAP(또는 POP3) 및 SMTP 서버로 사용하여 이메일을 주고받을 준비가 되었습니다. 그리고 해당 계정에서:

신뢰할 수 있는 타사 CA에서 서명하지 않은 인증서를 사용하고 있으므로 표시되는 경고 메시지는 무시해도 됩니다.

간단한 테스트 이메일을 작성하고 보내기를 클릭해 보겠습니다.

보내는 서버에 대해 자체 서명된 인증서를 수락하라는 메시지가 표시되면 이전과 같이 확인합니다.

마지막으로 대상 이메일로 이동하여 방금 보낸 이메일을 받았는지 확인하세요. 그렇다면 회신하여 원본 이메일 받은편지함으로 다시 전달되는지 확인하세요. 그렇지 않으면 /var/log/maillog의 Postfix 로그 또는 /var의 Dovecot 로그를 참조하세요. /log/dovecot.log 문제 해결 정보):

이제 Postfix 및 Dovecot 이메일 서버가 작동하고 이메일 보내기 및 받기를 시작할 수 있습니다.

요약

이 기사에서는 Linux 서버에서 이메일 트래픽을 처리하도록 Postfix 및 Dovecot을 구성하는 방법을 설명했습니다. 이 문서에 설명된 대로 작동하지 않는 경우 시간을 내어 Postfix 및 Dovecot 설명서를 확인하세요.

Postfix 메일 서버를 설정하는 것은 쉬운 작업은 아니지만 모든 시스템 관리자에게는 보람 있는 경험입니다.

문서를 검토한 후에도 여전히 Postfix 및/또는 Dovecot 문제로 어려움을 겪고 있는 경우 아래 의견 양식을 사용하여 언제든지 메모를 남겨주시면 기꺼이 도와드리겠습니다. 도움이 될 것입니다(이 문서에 설명된 대로 postconfdoveconf를 사용하여 검색된 Postfix 및 Dovecot 구성을 온라인 저장소 서비스에 업로드하는 것을 잊지 마십시오).