안녕하세요
이번 시간에는 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 등)와 연동됩니다.
다음과 같은 설정들을 통해 메일 저장 형식, 인증 방식, 접속 프로토콜을 명확히 지정해줍니다:
-
이유: 사용자의 메일 클라이언트(웹메일 또는 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://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. 내부 테스트 (로컬 메일 발송)
-
EC2 서버 내부에서 직접 메일을 발송하여 수신이 정상적으로 이루어지는지 확인했습니다.
-
RainLoop 웹메일을 통해 메일이 Maildir에 잘 저장되고 수신함에 표시됨을 확인했습니다.
✅ 2. 외부 테스트 (Gmail → 내 메일 서버)
-
Gmail에서 직접
acloud@a-cloud.info
주소로 메일을 발송해 보았습니다. -
Route 53의 MX 레코드 설정과 Postfix의 도메인 수신 설정이 잘 작동하여, 해당 메일이 정상적으로 수신됨을 확인했습니다.
-
RainLoop 웹메일에서도 메일이 정상적으로 수신되었고, 제목/본문 모두 문제없이 표시되었습니다.
✅ 3. 웹메일 확인
-
접속 주소: http://email.a-cloud.info/
-
로그인 정보:
항목 내용 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
서버가 해당 메일을 받아 처리합니다.
이메일 서버 구축이 완료되었습니다.
이번 실습을 통해 간단하게 메일 서버를 구성하고, 대표 도메인을 통해 이메일을 효율적으로 수신할 수 있게 되었습니다.
감사합니다!