가정에서 로컬 미니 PC에 Ubuntu 16.04 LTS를 설치하여 테스트 환경을 운영 중입니다(현재 2.4.0.beta4 버전). 훌륭한 30분 설치 가이드를 사용하여 설치했습니다. FQDN이 설정되어 있습니다. ISP의 메일함을 통해 포트 587의 SMTP와 일반 인증(plain authentication)을 사용하여 이메일을 보내는 방식은 1년 넘게 문제없이 작동해 왔습니다.
"새 버전 사용 가능"과 같은 이메일 알림을 한동안 받지 못했다는 것을 방금 깨달았습니다. 관리자 > 이메일 > 건너뜀(Skipped)을 확인해 보니 모든 항목에 다음과 같은 메시지가 표시됩니다.
550-Bad HELO: localhost.localdomain does not exist - Please see RFC 2821
메일함을 다시 살펴보니 이는 2.4.0.beta2 버전부터 시작되었을 수 있습니다. 하지만 같은 시기(2019년 7월 말경)에 ISP의 정책이 변경되었을 수도 있습니다. 어디서부터 확인해야 할지 막막합니다. 이 localhost.localdomain은 어디서 오는 것일까요? 설치 당시 수정한 것은 app.yml 파일뿐이었는데, 이 파일에는 DISCOURSE_HOSTNAME: 항목에 제 FQDN이 올바르게 표시되어 있습니다.
메일건(Mailgun)이라는 건 처음 들어봅니다. mailgun.com, 즉 '트랜잭션 이메일 API 서비스’를 말씀하시는 건가요? 제 지식 수준을 알려드리자면, API가 무엇인지 대략은 알고 있지만, 실제로 어떻게 사용하는지는 잘 모르겠습니다. 대신 다른 ISP의 메일박스로 SMTP를 사용해볼 수는 있을 것 같습니다. 내일 여기서 결과를 알려드리겠습니다.
Postfix와 같은 일부 SMTP 서버는 클라이언트의 IP 주소와 이를 대조하는 옵션을 제공합니다. localhost.localdomain은 SMTP 서버의 IP 주소로 해석되며, 아마도 해당 서버의 hosts 파일에 등록되어 있을 것입니다. ISP들이 스팸 메일과의 싸움에서 이 옵션을 활성화하고 있는 것으로 보입니다.
Mailgun은 이 검사를 수행하지 않기 때문에 Mailgun에서는 작동합니다. 하지만 여전히 "잘못된 HELO"입니다.
비교를 위해, 같은 시스템에서 이메일 클라이언트(Sylpheed)를 사용하여 이메일을 보내보았습니다. 이는 제 ISP의 메일박스에서도 작동하며, 다음과 같이 사용되는 것으로 보입니다:
HELO HL80L
HL80L은 제 로컬 네트워크 이름입니다. 여전히 FQDN은 아니지만, 적어도 제 ISP 서버에 명백한 위조로 보이지는 않습니다.
따라서 개선이 필요한 부분일 수 있습니다. 하지만 경고: 저는 SMTP 전문가가 아닙니다.
Debian 10 전환이나 Rails 6 업그레이드 과정에서 무언가를 망가뜨린 건지 확인해 보겠습니다. 그 동안 app.yml에서 DISCOURSE_SMTP_DOMAIN을 설정하면 작동할 것입니다. SMTP 도메인이 명시적으로 설정되지 않은 경우, DISCOURSE_HOSTNAME의 값을 기본값으로 사용해야 할 것 같습니다.
감사합니다, @gerhard! app.yml에 DISCOURSE_SMTP_DOMAIN이 없었는데, 심호흡을 한 뒤 해당 항목을 추가해 보니 실제로 해결되었습니다. 이제 ISP 메일함을 다시 사용할 수 있습니다. 수신 측 헤더에서 다음 내용을 확인할 수 있습니다:
Received: from XXXXXXX.cable.dynamic.v4.ziggo.nl ([XX.XX.XX.X] helo=mydomain.tld)
by smtp7.mnd.mail.iss.as9143.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1)
그동안 RFC 2821과 후속 문서인 RFC 5321, 4.1.4절에서 다음과 같이 명시하고 있다는 것을 알게 되었습니다:
SMTP 서버는 EHLO 명령어의 도메인 이름 인수가 클라이언트의 IP 주소와 실제로 일치하는지 확인할 수 있습니다(MAY). 그러나 검증이 실패하더라도 서버는 그 이유만으로 메시지 수신을 거부해서는 안 됩니다(MUST NOT). 검증 시 수집된 정보는 로깅 및 추적 목적으로만 사용됩니다. 이 금지 조항은 매개변수와 IP 주소의 일치 여부에만 적용됩니다. 수신 연결 또는 메일 메시지를 거부하는 것에 대한 더 광범위한 논의는 7.9절을 참조하세요.
하지만 Postfix와 Exim과 같은 많은 MTA에는 여전히 이를 수행하기 위한 선택적 설정이 있는 것으로 보입니다. 아마도 관리자들이 스팸과의 지속적인 싸움에서 해당 설정을 활성화하고 있는 것 같습니다.