나는 postfix + dovecot + pgsql을 가지고 있습니다. 모든 것이 예상대로 작동합니다. 최근에 스팸을 방지하기 위해 구성에서 몇 가지 사항을 변경했습니다. 이제 로그에서 다음을 볼 수 있습니다.
localhost postfix/smtpd[2299]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_unauthenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_unauthenticated_sender_login_mismatch' ignored: no SASL support
하지만!
$ postconf -a
cyrus
dovecot
그리고
$ ldd /usr/sbin/postfix | grep sasl
libsasl2.so.3 => /usr/lib/libsasl2.so.3 (0x00007f9508e75000)
내 기억이 맞다면 "pacman"을 통해 postfix를 설치했습니다.
경고가 나타나는 이유와 해결 방법은 무엇입니까?
업데이트 1:
sudo postconf | grep -i smtpd_sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = no
smtpd_sasl_exceptions_networks =
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_service = smtp
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
업데이트 2:
그 후 master.cf
나는 이것을 발견했습니다 :
smtp inet n - n - - smtpd
-o smtpd_sasl_auth_enable=no
이것이 이유일까요?
업데이트 3:
반품:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated, reject
답변1
먼저, 메일을 보내고 받는 데 동일한 IP 주소(스마트 호스트라고 함)를 사용한다고 가정하겠습니다.
이 경우 메시지는 일반적으로 포트 587에서 전송하기 위해 직접 제출하지만 포트 25에서 수신됩니다.
이것이 왜 중요합니까? 이 구성에서는 postfix가 포트를 사용하여 연결을 처리하는 방법을 식별하기 때문입니다.
SMTP 서버의 실제 로그를 살펴보겠습니다. 첫 번째 로그는 포트 25 연결에서 발생합니다.
Nov 26 07:33:45 box postfix/smtpd[128819]: connect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]
Nov 26 07:35:01 box postfix/smtpd[128819]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
Nov 26 07:35:02 box postfix/smtpd[128819]: NOQUEUE: reject: RCPT from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]: 554 5.7.1 Service unavailable; Client host [86.157.106.5] blocked using zen.spamhaus.org; https://www.spamhaus.org/query/ip/86.157.106.5; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<desktop>
Nov 26 07:35:13 box postfix/smtpd[128819]: disconnect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5] ehlo=2 starttls=1 auth=0/1 mail=1 rcpt=0/1 quit=1 commands=5/7
이제 동일한 IP 주소에서 연결하려면 포트 587을 사용하십시오.
Nov 26 07:40:53 box postfix/smtpd[130170]: disconnect from unknown[185.218.234.97] ehlo=1 mail=1 rcpt=0/1 rset=1 quit=1 commands=4/5
Nov 26 07:43:12 box postfix/submission/smtpd[130244]: connect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]
Nov 26 07:43:31 box postfix/submission/smtpd[130244]: warning: host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]: SASL plain authentication failed:
Nov 26 07:43:36 box postfix/submission/smtpd[130244]: disconnect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5] ehlo=2 starttls=1 auth=0/1 quit=1 commands=4/5
모든 연결에 대해 동일한 AUTH PLAIN 명령을 사용합니다. 일반 텍스트 유효성 검사
무슨 일이야.
첫째, 이상적인 세계에서는 인증 방법이 지원된다는 가정 하에 클라이언트가 자체적으로 AUTH PLAIN을 보낸 다음 서버로부터 응답 334를 받습니다. 그러면 클라이언트는 인증 정보를 보냅니다.
그러나 AUTH PLAIN을 사용하면 동일한 줄에 인증 문자열을 추가하여 하나의 명령으로 모든 것을 보낼 수 있습니다. 이 경우 334 라인을 포기하고 바로 인증으로 이동합니다.
250 SMTPUTF8
ehlo desktop
250-box.timothydutton.co.uk
250-PIPELINING
250-SIZE 134217728
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
auth plain <base64 string with email address and wrong password>
535 5.7.8 Error: authentication failed:
quit
221 2.0.0 Bye
closed
위 내용은 실제로 포트 587의 두 번째 연결 시도에서 가져온 것입니다.
하지만 포트 25는 이메일 수신에 사용되기 때문입니다. SASL은 사용되지 않습니다. 포트 25의 모든 연결이 해당 서버에 속한 주소인 rcpt만 허용하도록 서버를 구성해야 합니다. 이렇게 하면 서버가 오픈 릴레이로 작동하는 것을 방지할 수 있습니다.
따라서 무슨 일이 일어나고 있는지는 서버가 AUTH PLAIN 명령의 추가 정보를 처리하고 이것이 잘못되었다고 말하는 것입니다. 그러나 실제로 이 포트에서 인증을 사용하지 않기 때문에 중요하지 않습니다.
첫 번째 예의 응답에서 서버에는 다른 방어 기능이 작동하고 있음을 알 수 있습니다.
참고: 저는 연결 예시를 보여주는 데 사용되는 서버를 소유하고 있습니다.