안녕하세요
이번 시간에는 Amazon EC2 + Route 53 + RainLoop를 활용해 퍼블릭 이메일 수신 서버를 구축하고, 웹 브라우저에서 메일을 확인할 수 있는 환경까지 완성해보았습니다.
🧱 전체 구성
| 구성 요소 | 역할 | 
|---|---|
| Postfix | SMTP 수신 서버 | 
| Dovecot | IMAP/POP3 서버 (메일 보관 및 사용자 전달) | 
| RainLoop | 웹메일 인터페이스 (PHP 기반) | 
| Route 53 | 도메인 및 MX 레코드 설정 | 
| EC2 (Amazon Linux) | 메일 서버 호스팅 환경 | 
✅ 도메인 구조
| 항목 | 값 | 
|---|---|
| 퍼블릭 도메인 | mail.example.com | 
| 메일 서버 도메인 | mail.example.com (MX 레코드 대상) | 
| 수신 메일 주소 | user@example.com | 
| 웹메일 접속 주소 | http://mail.example.com/ → 자동 리디렉션 → http://mail.example.com/rainloop/ | 
🌐 Route 53 레코드 설정
도메인이 Amazon Route 53에 등록되어 있다면, 메일 수신을 위해 MX 레코드를 반드시 설정해야 합니다.

✅ A 레코드 설정
| 이름 | 값 | 
|---|---|
| mail.example.com | EC2 퍼블릭 IP 주소 | 
✅ MX 레코드 설정
| 이름 | 타입 | 값 | 
|---|---|---|
@ 또는 비워두기 | 
MX | 10 mail.example.com. | 
🔸 이유:
이 설정을 통해 example.com 도메인으로 수신된 메일이 mail.example.com 메일 서버로 전달됩니다.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 = mail.example.com mydomain = mail.example.com 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
user@example.com    user@mail.example.com
이후 아래 명령 실행:
sudo postmap /etc/postfix/virtual
sudo systemctl restart postfix
✅ 왜 필요한가요?
mail.example.com는 고객에게 제공하는 대표 도메인입니다.- 실제 메일 서버는 
mail.example.com에서 동작합니다. - 이 설정을 통해 외부에서 보낸 메일(
user@example.com)이 내부 수신 계정(user@mail.example.com)으로 자동 전달됩니다. - 즉, 사용자는 단순하게 유지하면서, 시스템 구조는 유연하게 설계할 수 있습니다.
 
🧑💻 3. 사용자 계정 생성
sudo useradd acloud
sudo passwd acloud
메일 계정: user@mail.example.com
(실제로는 위 virtual 설정을 통해 user@example.com로도 수신 가능)
📥 4. Dovecot 설정의 목적과 이유
메일 서버(Postfix)가 수신한 메일을 실제 사용자(acloud 등)가 확인하려면, 이를 보관하고 사용자에게 제공해줄 메일 전송 에이전트(MDA) 역할이 필요합니다.
Dovecot은 그 역할을 수행하며, IMAP/POP3 프로토콜을 통해 메일 클라이언트(RainLoop 등)와 연동됩니다.
다음과 같은 설정들을 통해 메일 저장 형식, 인증 방식, 접속 프로토콜을 명확히 지정해줍니다:
- 
이유: 사용자의 메일 클라이언트(웹메일 또는 PC/모바일 앱)에서 다양한 방식으로 접근할 수 있도록
IMAP,POP3프로토콜 모두 활성화합니다.- 
IMAP: 서버에서 메일을 유지하고 다중 기기에서 동기화
 - 
POP3: 메일을 클라이언트로 내려받고 삭제
 
 - 
 
- 
이유: Postfix에서 메일을 저장하는 방식으로
Maildir을 사용하고 있으므로, Dovecot도 동일한 디렉토리 구조로 메일을 읽을 수 있도록 설정합니다.Maildir은 메일을 각각 개별 파일로 저장해, 충돌이 적고 처리 성능이 뛰어납니다. 
- 
이유:
- 
disable_plaintext_auth = no: 웹메일(RainLoop)에서 암호화 없이 로그인할 수 있도록 허용합니다. (테스트나 내부 네트워크에서 주로 사용) - 
auth_mechanisms = plain login: 로그인 인증 방식을 명시적으로 지정하여 RainLoop 등의 클라이언트와의 인증 실패를 방지합니다. 
 - 
 
⚠️ 실제 운영 환경에서는
disable_plaintext_auth를yes로 하고 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://mail.example.com/ 를 입력하면 자동으로 RainLoop 페이지로 이동됩니다.
🛠 RainLoop 설정
접속: http://mail.example.com/rainloop/?admin

- 로그인: 
admin / 12345→ 기본 아이디와 비밀번호 
도메인 등록

📬 RainLoop 도메인 등록: mail.example.com
| 항목 | 값 | 
|---|---|
| Domain name | mail.example.com | 
| 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 도메인 등록: example.com
| 항목 | 값 | 
|---|---|
| Domain name | example.com | 
| 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. 내부 테스트 (로컬 메일 발송)
- 
EC2 서버 내부에서 직접 메일을 발송하여 수신이 정상적으로 이루어지는지 확인했습니다.
 - 
RainLoop 웹메일을 통해 메일이 Maildir에 잘 저장되고 수신함에 표시됨을 확인했습니다.
 
✅ 2. 외부 테스트 (Gmail → 내 메일 서버)
- 
Gmail에서 직접 user@example.com 주소로 메일을 발송해 보았습니다.
 - 
Route 53의 MX 레코드 설정과 Postfix의 도메인 수신 설정이 잘 작동하여, 해당 메일이 정상적으로 수신됨을 확인했습니다.
 - 
RainLoop 웹메일에서도 메일이 정상적으로 수신되었고, 제목/본문 모두 문제없이 표시되었습니다.
 

✅ 3. 웹메일 확인
- 
접속 주소: http://mail.example.com
 - 
로그인 정보:
 
항목 내용 Email user@example.com Password EC2 리눅스 계정의 비밀번호 ✅ 4. 리눅스 서버 내부에서도 수신 확인
- 확인 디렉터리 :/home/acloud/Maildir/new/
 - 메일이 도착했는지 신규 파일 확인가능
 
 - 
 

확인 사항
| 항목 | 결과 | 
|---|---|
| MX 레코드 적용 | ✅ 성공 (Route 53 설정) | 
| RainLoop 접속 | ✅ 정상 | 
| 이메일 수신 | ✅ 성공 | 
| 도메인 통합 처리 | ✅ 완벽 적용 | 
| 리디렉션 작동 | ✅ 정상 | 
🎯 최종 정리
✅ 고객은 user@example.com로 메일을 보내면 되고,
내부 시스템에서는mail.example.com서버가 해당 메일을 받아 처리합니다.
이메일 서버 구축이 완료되었습니다.
이번 실습을 통해 간단하게 메일 서버를 구성하고, 대표 도메인을 통해 이메일을 효율적으로 수신할 수 있게 되었습니다.
감사합니다!