Blog

Team Blog 구축 기록 – 회원가입 이메일 발송 실패문제와 그 해결

December 8, 2013

Team Blog 구축 기록 – 회원가입 이메일 발송 실패문제와 그 해결

워드프레스로 운영되는 ‘이상한 모임 – Team Blog’에 회원가입을 하면,새 회원이 입력한 이메일 주소로 사용자 이름과 비밀번호가 자동으로 생성되어 전달됩니다. 대부분의 경우 별 문제없이 잘 되지만, 저희는 약간의 문제를 경험했는데, 그 원인과 해결책을 간략히 정리하였습니다.

새 회원이 http://we.weirdmeetup.com/wp-login.php?action=register 에서 이메일주소와 사용자 이름을 입력하면, 정상적으로 동작했을 떄 다음과 같은 형식의 이메일을 받아야 합니다.

WordPress <[email protected]>  7:19 PM (1 hour ago) to me
Username: <사용자이름>
 Password: <비밀번호>
 http://we.weirdmeetup.com/wp-login.php
하지만 사이트 구축 후 좀전까지 몇가지 문제들이 있었는데, 그 내용들을 간략히 기술해서, 차후에 다시 비슷한 문제가 발생했을때 해결방법을 찾는데 힌트가 되거나, 비슷한 문제를 겪고 있을 다른분들께 작게나마 도움이 될까 하는 기대를 해 봅니다.
이하 편의상 경어 생략
운용환경
  • Ubuntu 12.04 LTS
  • Virtual Box 내의 RAM 1GB의 가상머쉰에서 동작
  • Apache2, PHP5, Mysql
문제점들
  • 메일 발송 자체가 실패 – sendmail 이 기본적으로 설치되지 않아 발생한 문제로 ‘$ sudo apt-get install sendmail’ 로 간단히 해결 했다
  • 간헐적으로 메일 발송이 되었다 안되었다 하는 현상
    • DNS 서버의 SPF entry가 없어서 메일을 수신하는측에서 거부 (reject) 하는 현상
    • SPF entry 문제 수정 후 발송은 되지만 수신측에서 SPAM 처리하는 현상

SPF란?

Sender Policy Framework의 약자로 메일을 수신한 측에서 메일을 발송한 호스트 (컴퓨터/서버) 의 IP주소가 해당 도메인 (우리의 경우 weirdmeetup.com) 에서 메일 발송이 허락되었는지를 문의했을 때 확인해 줄 수 있는 장치라고 이해하면 되겠다. 보다 정확한 내용은 Wikipedia에서: http://en.wikipedia.org/wiki/Sender_Policy_Framework

SPF Entry가 없어 메일이 거부되는 현상

SPF Entry가 없어 메일이 거부되는 현상

 

 

SPF 문제는 통과 했지만 여전히 '경고'가 붙어 있어 SPAM 처리되는 현상

SPF 문제는 통과 했지만 여전히 ‘경고’가 붙어 있어 SPAM 처리되는 현상

 

SPF 문제는 weirdmeetup.com의 도메인 소유주께서 직접 아래와 같이 네임서버를 수정하여 해결.

네임서버 설정에 SPF Entry 추가한 모습

네임서버 설정에 SPF Entry 추가한 모습

 

SPF entry 문제 수정 후 발송은 되지만 여전히 수신측에서 SPAM 처리하는 현상의 원인은 무엇인가?

발송된 메일을 수신측에서 원본을 보면 아래와 같은 내용이 메일의 헤더에 포함되어 있다:
X-Authentication-Warning: blog.: www-data set sender to [email protected] using -f

이는 워드프레스를 가동하는 서버에서 메일을 발송할 때 사용된 sendmail에 의해 추가된 것으로, blog. 라는 이름을 가진 호스트에서 www-data라는 사용자가 메일 발신자 주소를 [email protected]으로 강제설정 (-f 옵션 사용해서) 했다는 의미의 경고로 한마디로 sendmail이 www-data라는 사용자를 ‘못믿겠다’는 뜻이다. 수신측에서는 이 내용을 참고해서 SPAM으로 분류하는곳도 있다. 우리는 이런 현상을 제거하는것이 그 목표다.

그래서 찾은 해결책이 설명된곳은 Removing “X-Authentication-Warning” headers 였는데, 한마디로 요약하면 이렇다.

sendmail은 -f를 통해서 발신자 이메일 주소를 변경하는 명령은 믿을 수 있는 사용자 (trusted user)로부터 받았을때만 정상처리 해 준다. 기본적으로 믿을수 있는 사용자는 root, daemon, uucp 이렇게 세명인데, 여기다 www-data를 추가 해 주면 저런 경고를 이메일 헤더에 넣치 않겠다는것이다.

이런 내용은 sendmail의 man page ($ man sendmail ) 에서도 확인할 수 있는데, -f 옵션에 대한 설명중 이런 내용이 있다.

…  -f should only be used by “trusted” users (normally root, daemon, and network) or if the person you are trying to  become  is  the same  as  the  person  you are.  Otherwise, an X-Authentication-Warning header will be added to the message.

그래서 해결은 구체적으로 어떻게 하는가?

위 링크의 설명에 따르면 다음과 같은 순서다

  1. /etc/mail/submit.mc 파일을 수정하여  FEATURE(use_ct_file)dnl 을 추가
  2. /etc/mail/trusted-users 파일에 ‘www-data’ 사용자를 추가
  3. sendmail 재시작

이를 Ubuntu 12.04 LTS에서 응용할떄는 조금 어려움이 있었는데, 우리가 적용한 방법은 이렇다.

  • /etc/mail/submit.mc 파일을 수정하여 아래와 같이 use_ct_file feature를 추가
...
OSTYPE(`debian')dnl
DOMAIN(`debian-msp')dnl
FEATURE(`use_ct_file')
dnl #
dnl #---------------------------------------------------------------------
...

위와같이 파일의 아부분, dnl로 시작하는 무수한 라인이 시작되기 직전에 넣었는데, 만약 파일을 가장 끝에 넣으면 오류를 submit.mc 파일을 submit.cf 파일로 변경하는 과정에서 오류를 만나게 된다.

  • /etc/mail/trusted-users 에 ‘www-data’ 라는 내용 한 줄을 추가 (위와 동일)
    • $ sudo echo www-data >> /etc/mail/trusted-users
  • 아래 명령을 수행하여 sendmail 설정을 저장. 특히 submit.mc가 submit.cf 파일로 변환되는 과정이 위 변경 사항을 반영하여 성공적으로 수행되어야 한다.
    • $ sudo sendmailconfig

위와같은 과정을 거치고나면 sendmail 서비스가 자동적으로 재시작 하면서 변경된 설정사항이 적용된다. 이렇게 해서 마지막 X-Authentication-Warning header 문제가 해결되었다.