메뉴 닫기

[AWS] Amazon Linux에 메일 수신 서버 구축 (Postfix + Dovecot + RainLoop)

안녕하세요

이번 시간에는 Amazon EC2 + Route 53 + RainLoop를 활용해 퍼블릭 이메일 수신 서버를 구축하고, 웹 브라우저에서 메일을 확인할 수 있는 환경까지 완성해보았습니다.


🧱 전체 구성

구성 요소 역할
Postfix SMTP 수신 서버
Dovecot IMAP/POP3 서버 (메일 보관 및 사용자 전달)
RainLoop 웹메일 인터페이스 (PHP 기반)
Route 53 도메인 및 MX 레코드 설정
EC2 (Amazon Linux) 메일 서버 호스팅 환경

✅ 도메인 구조

항목
퍼블릭 도메인 a-cloud.info
메일 서버 도메인 email.a-cloud.info (MX 레코드 대상)
수신 메일 주소 acloud@a-cloud.info
웹메일 접속 주소 http://email.a-cloud.info/ → 자동 리디렉션 → http://email.a-cloud.info/rainloop/

🌐 Route 53 레코드 설정

도메인이 Amazon Route 53에 등록되어 있다면, 메일 수신을 위해 MX 레코드를 반드시 설정해야 합니다.

✅ A 레코드 설정

이름
email.a-cloud.info EC2 퍼블릭 IP 주소

✅ MX 레코드 설정

이름 타입
@ 또는 비워두기 MX 10 email.a-cloud.info.

🔸 이유:
이 설정을 통해 a-cloud.info 도메인으로 수신된 메일이 email.a-cloud.info 메일 서버로 전달됩니다.
10은 우선순위이며, 여러 메일 서버가 있을 경우 낮을수록 우선 처리됩니다.


📦 1. 필수 패키지 설치

sudo yum update -y
sudo yum install -y postfix dovecot mailx httpd php php-mbstring php-xml php-common unzip

⚙️ 2. Postfix 설정

메일 서버(Postfix)를 외부에서도 사용할 수 있도록 구성하기 위해서는, 단순히 설치만으로는 부족하며 도메인 기반 수신 환경, 메일 저장 형식, 가상 도메인 주소 매핑까지 포함한 설정이 필요합니다. 아래와 같은 설정은 그 모든 요구 사항을 충족하기 위한 핵심 항목들입니다.

sudo vi /etc/postfix/main.cf

다음 설정을 추가:

이유 : 외부에서 고객 도메인으로 메일을 수신하고, 내부에서는 안전하고 일관된 방식으로 저장 및 처리할 수 있도록 하는 기본 프레임워크 구성

myhostname = email.a-cloud.info
mydomain = a-cloud.info
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
virtual_alias_maps = hash:/etc/postfix/virtual

📬 도메인 매핑 – virtual alias 설정

/etc/postfix/virtual 파일 생성

sudo vi /etc/postfix/virtual
acloud@a-cloud.info    acloud@email.a-cloud.info

이후 아래 명령 실행:

sudo postmap /etc/postfix/virtual
sudo systemctl restart postfix

✅ 왜 필요한가요?

  • a-cloud.info는 고객에게 제공하는 대표 도메인입니다.
  • 실제 메일 서버는 email.a-cloud.info에서 동작합니다.
  • 이 설정을 통해 외부에서 보낸 메일(acloud@a-cloud.info)이 내부 수신 계정(acloud@email.a-cloud.info)으로 자동 전달됩니다.
  • 즉, 사용자는 단순하게 유지하면서, 시스템 구조는 유연하게 설계할 수 있습니다.

🧑‍💻 3. 사용자 계정 생성

sudo useradd acloud
sudo passwd acloud

메일 계정: acloud@email.a-cloud.info
(실제로는 위 virtual 설정을 통해 acloud@a-cloud.info로도 수신 가능)


📥 4. Dovecot 설정의 목적과 이유

메일 서버(Postfix)가 수신한 메일을 실제 사용자(acloud 등)가 확인하려면, 이를 보관하고 사용자에게 제공해줄 메일 전송 에이전트(MDA) 역할이 필요합니다.
Dovecot은 그 역할을 수행하며, IMAP/POP3 프로토콜을 통해 메일 클라이언트(RainLoop 등)와 연동됩니다.

다음과 같은 설정들을 통해 메일 저장 형식, 인증 방식, 접속 프로토콜을 명확히 지정해줍니다:

# /etc/dovecot/dovecot.conf
protocols = imap pop3
  • 이유: 사용자의 메일 클라이언트(웹메일 또는 PC/모바일 앱)에서 다양한 방식으로 접근할 수 있도록 IMAP, POP3 프로토콜 모두 활성화합니다.

    • IMAP: 서버에서 메일을 유지하고 다중 기기에서 동기화

    • POP3: 메일을 클라이언트로 내려받고 삭제

# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
  • 이유: Postfix에서 메일을 저장하는 방식으로 Maildir을 사용하고 있으므로, Dovecot도 동일한 디렉토리 구조로 메일을 읽을 수 있도록 설정합니다.
    Maildir은 메일을 각각 개별 파일로 저장해, 충돌이 적고 처리 성능이 뛰어납니다.

# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
  • 이유:

    • disable_plaintext_auth = no: 웹메일(RainLoop)에서 암호화 없이 로그인할 수 있도록 허용합니다. (테스트나 내부 네트워크에서 주로 사용)

    • auth_mechanisms = plain login: 로그인 인증 방식을 명시적으로 지정하여 RainLoop 등의 클라이언트와의 인증 실패를 방지합니다.

⚠️ 실제 운영 환경에서는 disable_plaintext_authyes로 하고 TLS 인증서를 적용하는 것이 보안상 권장됩니다.


이러한 설정들은 함께 작동하여:

  • 서버에서 수신된 메일을

  • Maildir에 저장하고

  • IMAP/POP3로 사용자에게 노출하며

  • RainLoop나 Thunderbird 같은 클라이언트와 문제 없이 연동되도록 합니다.


🌐 5. RainLoop 웹메일 설치 및 설정

cd /var/www/html
sudo mkdir rainloop && cd rainloop
sudo curl -sL https://repository.rainloop.net/installer.php | sudo php
sudo chown -R apache:apache /var/www/html/rainloop

Apache 시작:

sudo systemctl enable httpd
sudo systemctl start httpd

🔀 6. 리디렉션 설정 (루트 → 웹메일)

sudo vi /var/www/html/index.html

다음과 같이 작성:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="refresh" content="0; URL=/rainloop/">
  </head>
  <body>
    Redirecting to RainLoop...
  </body>
</html>

✅ 이제 브라우저에 http://email.a-cloud.info/ 를 입력하면 자동으로 RainLoop 페이지로 이동됩니다.


🛠 RainLoop 설정

접속: http://email.a-cloud.info/rainloop/?admin

  • 로그인: admin / 12345 → 기본 아이디와 비밀번호

도메인 등록

📬 RainLoop 도메인 등록: a-cloud.info

항목
Domain name a-cloud.info
IMAP Server 127.0.0.1, Port 143
SMTP Server 127.0.0.1, Port 25
Use short login 해제 (전체 주소 입력 필요)
Allow self-signed SSL 체크 (SSL 인증서 없이도 허용)

📬 RainLoop 도메인 등록: email.a-cloud.info

항목
Domain name email.a-cloud.info
IMAP Server 127.0.0.1, Port 143
SMTP Server 127.0.0.1, Port 25
Use short login 체크 (acloud 입력 시 자동으로 @a-cloud.info 붙음)
Allow self-signed SSL 체크 (SSL 인증서 없이도 허용)

  • 🧪 테스트 및 결과

    ✅ 1. 내부 테스트 (로컬 메일 발송)

    bash
    echo "테스트 메일입니다." | mail -s "테스트" acloud@email.a-cloud.info
    • EC2 서버 내부에서 직접 메일을 발송하여 수신이 정상적으로 이루어지는지 확인했습니다.

    • RainLoop 웹메일을 통해 메일이 Maildir에 잘 저장되고 수신함에 표시됨을 확인했습니다.


    ✅ 2. 외부 테스트 (Gmail → 내 메일 서버)

    • Gmail에서 직접 acloud@a-cloud.info 주소로 메일을 발송해 보았습니다.

    • Route 53의 MX 레코드 설정과 Postfix의 도메인 수신 설정이 잘 작동하여, 해당 메일이 정상적으로 수신됨을 확인했습니다.

    • RainLoop 웹메일에서도 메일이 정상적으로 수신되었고, 제목/본문 모두 문제없이 표시되었습니다.


    ✅ 3. 웹메일 확인

    항목 내용
    Email acloud@a-cloud.info
    Password EC2 리눅스 계정의 비밀번호

    ✅ 4. 리눅스 서버 내부에서도 수신 확인

    • 확인 디렉터리 :/home/acloud/Maildir/new/
    • 메일이 도착했는지 신규 파일 확인가능

확인 사항

항목 결과
MX 레코드 적용 ✅ 성공 (Route 53 설정)
RainLoop 접속 ✅ 정상
이메일 수신 ✅ 성공
도메인 통합 처리 (a-cloud.info) ✅ 완벽 적용
리디렉션 작동 ✅ 정상

🎯 최종 정리

✅ 고객은 acloud@a-cloud.info로 메일을 보내면 되고,
내부 시스템에서는 email.a-cloud.info 서버가 해당 메일을 받아 처리합니다.


 

이메일 서버 구축이 완료되었습니다.
이번 실습을 통해 간단하게 메일 서버를 구성하고, 대표 도메인을 통해 이메일을 효율적으로 수신할 수 있게 되었습니다.

감사합니다!