Postfix가 lmtp를 통해 사용자 이름을 Dovecot에 전달하지 않는 이유는 무엇입니까? FreeBSD에서 이를 달성하는 방법은 무엇입니까?

Postfix가 lmtp를 통해 사용자 이름을 Dovecot에 전달하지 않는 이유는 무엇입니까? FreeBSD에서 이를 달성하는 방법은 무엇입니까?

Postfix가 데이터를 Dovecot에 전달하는 방법을 이해하는 데 어려움을 겪고 있으며 다음을 수행하기 위해 최소한(배포 프로필에서 최소한의 편차)이지만 완전한 예를 찾고 있습니다.

메일을 수신하려는 도메인이 여러 개 있습니다. 나는 가상 사용자가 일반 텍스트 파일에 저장된 비밀번호를 포함하여 자신에 대한 모든 정보를 갖기를 원합니다.

따라서 Postfix 예제를 따르면

virtual_mailbox_domains = mydomain1.com, mydomain2.com, ... (or a hash)
virtual_mailbox_maps = hash:/path/to/vmailboxes
virtual_transport = lmtp:unix:private/dovecot-lmtp

가상 사서함에서 나는

[email protected] someuser

비둘기장에서 나는 할 것이다

passdb {
  driver = passwd-file
  args = scheme=plain-md5 username_format=%n /usr/local/etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%n /usr/local/etc/dovecot/users
  default_fields = uid=dovecot gid=dovecot home=/home/dovecot/%u
}

그래서 Postfix가 메일을 받도록 해야 한다고 생각합니다.[이메일 보호됨], 목적지가 다음과 같은 사용자임을 알게 됩니다.사용자Dovecot에 정확하게 전달하세요. 그러나 Postfix는 항상 릴레이합니다.[이메일 보호됨]동일한 사용자를 가리키는 다른 이메일 주소가 있을 수 있으므로 확실히 내가 원하는 것이 아닙니다.

[email protected] someuser
[email protected] someuser

Dovecot이 비밀번호/사용자 데이터베이스를 참조하여 해당 디렉토리에 메시지를 채우도록 하고 싶습니다.사용자. 또한 IMAP 인증을 위해 동일한 데이터베이스를 쿼리하고 싶습니다.

마지막으로 SMTP 인증을 원합니다.사용자Postfix에 연결하여 릴레이로 사용할 수 있습니다. 내가 가지고 있는 구성을 사용하여 이 작업을 어떻게 수행합니까? 이를 위해 Postfix에 별도의 비밀번호 테이블을 설정해야 합니까, 아니면 Postfix가 어떻게든 Dovecot에 문의하여 해당 사용자가 메일을 보낼 수 있도록 허용합니까?

답변1

따라서 본질적으로 두 가지 오류가 있습니다.

첫째, virtual_mailbox_maps는 내 시나리오에 적합한 옵션이 아닙니다. 대신 virtual_alias_maps를 사용해야 합니다.

둘째, 가상 메일함의 왼쪽과 오른쪽에 이메일 주소를 제공해야 합니다. 그렇지 않으면 Postfix가 $myhostname으로 전송을 시도하지만 이는 LMTP를 통해 간단한 사용자 이름을 제공할 수 없습니다. 그렇다면 그렇다면

[email protected] [email protected]
[email protected] [email protected]
[email protected] anotheruser

처음 두 줄은 잘 작동하며 두 줄 모두에 메일을 전달합니다.[이메일 보호됨]그리고[이메일 보호됨]"라는 사용자에게[이메일 보호됨]"를 Dovecot에서 사용합니다. 유일한 차이점은 이제 인증하는 동안 다음을 사용하여 로그인해야 한다는 것입니다.[이메일 보호됨]” 뿐만 아니라 “@…”이 없는 사용자 이름도 아닙니다.

그러나 세 번째 줄은 메시지를 전달합니다.[이메일 보호됨]도착하다[이메일 보호됨], 사서함 쓰기는 Postfix에 의해 처리되며, 이 경우 LMTP가 호출되지 않습니다.

마지막으로 virtual_보다는 Relay_를 사용하는 것이 더 좋습니다. 왜냐하면 Postfix 용어로 Dovecot의 LMTP 서비스에 메일을 릴레이하는 것은 동일한 시스템에서 실행 중이더라도 다른 곳에서 릴레이하는 것과 동일하므로 Relay_option을 사용하는 것이 "더 똑똑"하기 때문입니다.

main.cf의 작업 구성은 다음과 같습니다.

relay_transport = lmtp:unix:private/dovecot-lmtp
relay_domains = mydomain1.com, mydomain2.com
virtual_alias_maps = hash:/usr/local/etc/postfix/virtualmailboxes

smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_auth_enable = yes

smtpd_tls_cert_file = /etc/ssl/servercertificate.pem
smtpd_tls_key_file = /etc/ssl/serverkey.pem
smtpd_tls_security_level = may
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

다른 모든 옵션은 귀하의 필요에 달려 있지만 Postfix와 함께 제공되는 main.cf 예제에서는 작동하도록 다른 어떤 것도 건드리지 않았습니다.

가상 사서함:

[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]

Dovecot에 구성된 인증 부분:

auth_debug = yes
auth_verbose = yes
auth_mechanisms = plain
passdb {
  driver = passwd-file
  args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%u /usr/local/etc/dovecot/users
  default_fields = uid=dovemail gid=dovemail home=/var/mail/%u
}

/usr/local/etc/dovecot/사용자:

[email protected]:{PLAIN}yourpassword::::::
[email protected]:{PLAIN}yourpassword::::::

/usr/local/etc/dovecot/conf.d/10-master.conf는 이미 존재하는 부분이 다음과 같이 보이도록 중간 줄의 주석 처리를 제거해야 합니다.

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    group = postfix
    user = postfix
  }

그리고 같은 파일의 또 다른 섹션은 다음과 같습니다.

unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
}

dovemail 사용자를 생성하고 메일 디렉터리(예: /var/mail)에 대한 읽기/쓰기 권한을 부여해야 합니다.

관련 정보