Ubuntu Server 22.04 Postfix/Dovecot 오류: postfix/smtpd 치명적: SASL 인증 메커니즘 없음

Ubuntu Server 22.04 Postfix/Dovecot 오류: postfix/smtpd 치명적: SASL 인증 메커니즘 없음

Ubuntu의 공식 가이드를 따르세요.Postfix 설치 및 구성, 내가 달릴 때

telnet localhost 25

알겠어요

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

내가 얻은 로그를 보면

$ sudo tail /var/log/mail.err
Dec  7 11:38:17 <host> postfix/smtpd[8477]: fatal: no SASL authentication mechanisms

위의 예는 가상 머신에서 실행되었지만 클라우드의 서버에서 telnet도메인으로 원격으로 실행되는 경우에도 동일한 시나리오가 발생합니다. (나는 무슨 일이 일어나고 있는지 더 쉽게 알아낼 수 있는지 확인하기 위해 가상 머신에서 프로세스를 복제해 보았습니다.)

이전 게시물과 새 게시물, 블로그, 기사를 모두 읽고 생각할 수 있는 모든 구성을 시도했지만 오류가 지속됩니다. 나는 무엇이 잘못되었는지 이해하지 못합니다. 내 구성:

/etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6



# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key
smtpd_tls_security_level = may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = <host>
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = <host>, <host>.local, <host>, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128 [::ffff:127.0.0.0]/104 [::1]/128 192.168.30.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox = Maildir/
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous,noplaintext
smtpd_sasl_tls_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 4
smtpd_tls_received_header = yes

/etc/dovecot/conf.d/10-master.conf

service auth {
  unix_listener auth-userdb {
    #mode = 0666
    #user = 
    #group = 
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

  # Auth process is run as this user.
  #user = $default_internal_user
}

공식 가이드에 따라 생성한 VM의 SSL 파일보안 - 인증서. 내 클라우드 서버에서 Let's encrypt/Certbot 파일을 사용하려고 합니다. 나는 그것들을 다음에 추가한다/etc/dovecot/conf.d/10-ssl.conf문서

ssl_cert = </etc/ssl/certs/server.crt
ssl_key = </etc/ssl/private/server.key

구성이 변경될 때마다 Postfix 및 Dovecot 서비스를 다시 시작했습니다. 서비스 설명:

접미사

● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2023-12-07 12:26:07 UTC; 9min ago
       Docs: man:postfix(1)
    Process: 3362 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 3362 (code=exited, status=0/SUCCESS)
        CPU: 1ms

dic 07 12:26:07 <host> systemd[1]: Starting Postfix Mail Transport Agent...
dic 07 12:26:07 <host> systemd[1]: Finished Postfix Mail Transport Agent.

비둘기 로프트

● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-12-07 12:26:08 UTC; 12min ago
       Docs: man:dovecot(1)
             https://doc.dovecot.org/
   Main PID: 3372 (dovecot)
     Status: "v2.3.16 (7e2e900c1a) running"
      Tasks: 5 (limit: 2220)
     Memory: 3.1M
        CPU: 44ms
     CGroup: /system.slice/dovecot.service
             ├─3372 /usr/sbin/dovecot -F
             ├─3373 dovecot/anvil
             ├─3374 dovecot/log
             ├─3375 dovecot/config
             └─3381 dovecot/stats

dic 07 12:26:08 <host> systemd[1]: Starting Dovecot IMAP/POP3 email server...
dic 07 12:26:08 <host> dovecot[3372]: master: Dovecot v2.3.16 (7e2e900c1a) starting up without any protocols (core dumps disabled)
dic 07 12:26:08 <host> systemd[1]: Started Dovecot IMAP/POP3 email server.

나는 팔로우한다문제 해결섹션을 참조하세요. 많은 순열을 시도했지만 아무것도 작동하지 않으며 로그에는 작업할 수 있는 세부 정보가 제공되지 않습니다.

문제는 이미너무 오래, 많은 것을 시도했기 때문에 더 이상 만들고 싶지 않으므로 댓글로 질문해 주시면 필요한 경우 관련 정보를 추가하도록 편집하겠습니다. 아마도 나는 아주 기본적인 것을 놓치고 있는 것 같습니다.

답변1

훌륭한 접미사 기본값을 사용하는 것이 좋습니다. 공식 가이드를 따르고 최소한의(및 설명이 포함된) 구성을 만드는 것이 가장 좋습니다. 위 매개변수의 기본값은 다음과 같습니다.

postconf -d | grep -E "smtpd_sasl.*security_options"

smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options

답변2

우분투 가이드

사람들은 기대했을 것이다우분투 공식 가이드다음과 같이하세요에스결과를 줄 것이다오른쪽테스트 가능시간, 그것이 가이드가 제시되는 방식이기 때문입니다.

마친 후에스오른쪽시간, 테스트에 실패해서 혼란스러워서 여기에도 질문이 게시되었습니다.

그러나 다음과 같은 일이 발생합니다에스일으키지 않을 것이다오른쪽:

가이드는 이 구성을 다음과 같이 제공합니다.에스:

...
sudo postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
...

알아채다 noplaintext.

그러자 투어 가이드가 말했다."초기 구성 결과":

...
smtpd_sasl_security_options = noanonymous
...
smtpd_tls_auth_only = no

알아채다아니요 noplaintextsmtpd_tls_auth_only = no이에 포함되지 않은 것에스postfix기본 구성 파일(버전 3.6.4)에는 없습니다 .

따라서 telnet설정된 경우 가이드에서 제안하는 대로 테스트해도 작동하지 않습니다 noplaintext. 이는 통신이 안전하게 이루어져야 하며 telnetSSL이 지원되지 않는다는 의미이기 때문입니다.

~에서www.postfix.org/SASL_README

더 복잡한 정책에서는 일반 텍스트 메커니즘을 허용하지만 TLS 암호화 연결을 통해서만 허용됩니다.

/etc/postfix/main.cf:
       smtpd_sasl_security_options = noanonymous, noplaintext
       smtpd_sasl_tls_security_options = noanonymous

시험:

  • smtpd_sasl_security_options = noanonymous다음과 연결하면 telnet작동합니다.

    telnet <domain> 25
    
  • smtpd_sasl_security_options = noanonymous,noplaintext연결 하여telnet 작동하지 않습니다.

  • with smtpd_sasl_security_options = noanonymous,noplaintextsmtpd_tls_auth_only = yesconnect with를 모두 openssl사용할 수 있습니다.

    openssl s_client -starttls smtp -connect <domain>:25
    
  • 와 연결되어 smtpd_sasl_security_options = noanonymous,noplaintext있다smtpd_tls_auth_only = noopenssl 작동하지 않습니다.


전체적으로 Ubuntu 가이드는 적어도 Ubuntu Server 22.04의 경우 다음과 같이 손상되었습니다.에스일으키지 않을 것이다오른쪽그래서시간실패할 것이다.


이 모든 내용은 가이드 포럼에서 인정되며 링크 아래에 다시 작성해야 합니다.포럼에서 이 문서를 개선하는 데 도움을 주세요.(액세스하려면 계정을 만들어야 합니다). 한 기여자가 말한 내용은 다음과 같습니다.

문제 설명

텔넷을 사용하면 메커니즘이 적용됩니다 . 즉 127.0.0.1 25, 일반 텍스트이므로 필터링 됩니다 . 이 2개만 활성화하라는 메시지가 표시되므로( 참고 ) 다른 메커니즘을 사용할 수 없습니다 . 따라서 치명적인 오류가 발생합니다 .postfixsmtpd_sasl_security_options = noanonymous,noplaintextPLAINLOGINdovecotauth_mechanismsSASLno SASL authentication mechanisms

그러나 연결하면 이제 MTA와의 암호화된 연결이 있으므로 둘 다 허용되는 것을 볼 openssl s_client -connect 127.0.0.1:25 -starttls smtp수 있습니다 . 및 은 익명이 아니므 로 필터링되는 메커니즘이 없습니다.PLAINLOGINsmtpd_sasl_tls_security_options = noanonymousPLAINLOGINpostfix

noplaintext지시문은 자격 증명이 일반 텍스트로 유출되는 것을 방지하려는 것처럼 들리기 때문에 혼란스러울 수 있습니다. 그러나 TLS를 통해 사용하도록 설계되었습니다. 즉 PLAIN, LOGIN실제 일반 텍스트가 전송되지 않음을 의미합니다.

현재 모범 사례

현재 모범 사례를 따르려면 가이드를 업데이트해야 한다고 생각합니다. SASL 인증은 TCP/25에서는 활성화하면 안 되며 TCP/465 및 TCP/587에서만 활성화해야 합니다. 편의적 TLS를 사용하는 MTA 간(서버 간) 통신을 위해 포트 25를 남겨두는 것이 가장 좋으며, 사용자가 TLS 및 인증(SASL)이 이루어지는 smtps(TCP/465)/submit(TCP/587) 포트를 사용하도록 허용하는 것이 가장 좋습니다. ) 의무적이다. 안타깝게도 다시 쓸 시간이 없습니다.

관련 정보