IT 관련/우분투(Ubuntu) 이것저것

[왕초보] Banana Pi M5 메일 서버 호스팅 A to Z: 3단계 Dovecot IMAP 설정 및 메일 수신 확인

islet2 2025. 5. 23. 21:24

 

[왕초보] Banana Pi M5 메일 서버 호스팅 A to Z: 3단계 - Dovecot과 IMAP/POP3, 이메일 수신과 확인 지난 2부에서는 Postfix를 설정하여 이메일을 성공적으로 '발송'했습니다. 이제는 외부에서 보낸 이메일을 우리 서버가 '수신'하고, 사용자가 그 메일을 '확인'할 수 있도록 하는 Dovecot 설정을 진행할 차례입니다!

2부에서 우리는 `docker-mailserver`를 이용해 Postfix SMTP 서버를 구축하고 첫 이메일 발송에 성공했습니다. 기억나시죠? 이제 반쪽짜리 메일 서버를 온전하게 만들 시간입니다. 이메일을 받고, 내가 원할 때 언제든지 확인할 수 있어야 진정한 나만의 메일 서버라고 할 수 있겠죠? 자, 그럼 이메일 수신과 접근을 담당하는 Dovecot의 세계로 함께 떠나봅시다! 📬

 

Dovecot, IMAP, POP3: 내 메일함은 어떻게 관리될까요? 🗄️

Postfix가 우체부처럼 메일을 주고받는 역할을 한다면, Dovecot은 내 편지함(메일박스)을 관리하고, 내가 메일을 읽거나 정리할 수 있도록 도와주는 집사와 같습니다. Dovecot은 크게 두 가지 프로토콜을 사용하여 이 기능을 제공합니다: IMAPPOP3.

  • IMAP (Internet Message Access Protocol): 서버에 직접 접속하여 메일을 확인하고 관리하는 방식입니다. 메일이 서버에 저장되어 있기 때문에, 여러 기기(PC, 스마트폰, 태블릿 등)에서 접속해도 동일한 메일 상태(읽음, 안 읽음, 삭제 등)를 유지할 수 있습니다. 최근 가장 널리 사용되는 방식입니다.
  • POP3 (Post Office Protocol version 3): 메일을 서버에서 사용자 기기로 다운로드하는 방식입니다. 기본적으로 다운로드 후 서버에서 메일이 삭제될 수 있어 (설정에 따라 보관도 가능), 여러 기기에서 동일한 메일을 보거나 관리하기에는 IMAP보다 불편할 수 있습니다.

우리가 사용하는 `docker-mailserver` 이미지에는 이미 Dovecot이 포함되어 있으며, Postfix와 잘 연동되도록 기본 설정이 되어 있습니다. 우리는 이 기능을 활성화하고 메일 클라이언트에서 접속할 수 있도록 포트 설정을 확인하는 작업을 주로 하게 됩니다.

💡 IMAP을 선택하는 이유
대부분의 현대적인 이메일 사용 환경에서는 IMAP이 더 편리합니다. 여러 장치에서 이메일에 접근하고, 모든 장치에서 메일 상태가 동기화되기를 원한다면 IMAP을 사용하는 것이 좋습니다. 이 가이드에서도 IMAP 설정을 중심으로 설명합니다.

 

`docker-mailserver`에서의 Dovecot 확인 및 포트 설정 🐳

2부에서 작성했던 `docker-compose.yml` 파일을 다시 한번 살펴봅시다. 이미 Dovecot이 사용할 포트들을 노출시켜 두었습니다.


# ~/mailserver/docker-compose.yml 일부 발췌

services:
  mailserver:
    # ... (다른 설정들) ...
    ports:
      - "25:25"      # SMTP (Postfix)
      - "143:143"    # IMAP (Dovecot) - 암호화되지 않은 연결 또는 STARTTLS
      - "587:587"    # SMTP Submission (Postfix) - STARTTLS
      - "993:993"    # IMAPS (Dovecot) - SSL/TLS 암호화 연결
    # ... (다른 설정들) ...
    environment:
      # ... (다른 환경 변수들) ...
      - SSL_TYPE=manual # 4부에서 Let's Encrypt 등으로 변경 예정
      # ...

`docker-mailserver`는 별도의 Dovecot 활성화 환경변수가 필요 없을 정도로 기본적으로 IMAP/POP3 서비스를 제공합니다. 중요한 것은 `SSL_TYPE=manual`로 설정되어 있는 현재 상태에서는 SSL/TLS 인증서가 자동으로 발급되지 않습니다. 하지만 대부분의 경우 `docker-mailserver`는 이 상태에서도 143번 포트(IMAP)와 587번 포트(SMTP Submission)에서 STARTTLS라는 방식으로 암호화 통신을 시도할 수 있도록 자체 서명된 인증서를 사용합니다. 클라이언트에서 연결 시 이 자체 서명된 인증서에 대한 경고가 표시될 수 있으며, 이는 4부에서 Let's Encrypt를 통해 정식 인증서를 발급받아 해결할 것입니다.

공유기 포트 포워딩 및 방화벽 확인:

외부 메일 클라이언트에서 우리 서버의 Dovecot에 접속하려면, 공유기에서 다음 포트들이 Banana Pi (192.168.0.60)로 포워딩되어야 합니다:

  • TCP 143 (IMAP)
  • TCP 993 (IMAPS)

만약 Banana Pi에서 `ufw` 방화벽을 사용 중이라면, 이 포트들도 허용해야 합니다. (2부에서 이미 진행했을 수 있습니다.)


sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw status

`docker-mailserver`는 2부에서 생성한 `postfix-accounts.cf` 파일의 계정 정보를 사용하여 Dovecot 사용자 인증도 처리합니다. 따라서 별도의 사용자 생성 과정은 필요 없습니다.

 

메일 클라이언트 설정 (Thunderbird 예시) 💻

이제 데스크톱 메일 클라이언트를 설정하여 우리 메일 서버에 접속하고, 메일을 확인해 보겠습니다. 여기서는 무료 오픈소스 메일 클라이언트인 Mozilla Thunderbird를 예시로 사용합니다.

1. Thunderbird를 실행하고 새 이메일 계정 설정을 시작합니다.

2. "기존 이메일 주소 설정" 또는 유사한 옵션을 선택합니다.

3. 사용자 정보 입력:

  • 이름: 원하는 이름 (예: 내이름)
  • 이메일 주소: `user1@aaaaa.org` (2부에서 생성한 계정)
  • 암호: `user1@aaaaa.org` 계정의 비밀번호

4. Thunderbird가 자동으로 설정을 찾으려고 시도하지만, 수동으로 설정해야 할 가능성이 높습니다. "수동 설정" 또는 "직접 설정" 버튼을 클릭합니다.

5. 서버 정보 입력 (IMAP 기준):

  • 받는 서버 (Incoming Server / IMAP):
    • 프로토콜: IMAP
    • 서버 호스트명: `mail.aaaaa.org` (1부에서 설정한 A 레코드 주소)
    • 포트: `143`
    • 연결 보안: `STARTTLS` (또는 "자동 감지" 후 STARTTLS 선택)
    • 인증 방식: 일반 암호 (Normal password)
    • 사용자 이름: `user1@aaaaa.org` (전체 이메일 주소)
  • 보내는 서버 (Outgoing Server / SMTP):
    • 서버 호스트명: `mail.aaaaa.org`
    • 포트: `587`
    • 연결 보안: `STARTTLS`
    • 인증 방식: 일반 암호 (Normal password)
    • 사용자 이름: `user1@aaaaa.org` (전체 이메일 주소)
⚠️ 자체 서명된 인증서 경고!
위 설정으로 연결을 시도하면 Thunderbird에서 "알 수 없는 인증 기관에 의해 서명된 인증서" 또는 "보안 예외 추가"와 같은 경고창이 나타날 수 있습니다. 이는 현재 우리 서버가 자체 서명된 SSL 인증서를 사용하고 있기 때문입니다. 내용을 확인하고 "보안 예외 확인" 또는 "이해하고 계속 진행" 등을 선택하여 예외를 추가해주시면 됩니다. 이 문제는 4부에서 Let's Encrypt를 통해 공인된 인증서를 발급받아 해결할 예정입니다.

6. 설정이 완료되면 "완료" 또는 "계정 생성" 버튼을 누릅니다.

이제 Thunderbird가 메일 서버에 접속하여 받은 편지함, 보낸 편지함 등을 표시해야 합니다. 아직 메일이 없다면 받은 편지함은 비어있을 것입니다.

 

이메일 수신 테스트 📥

이제 실제로 메일이 수신되는지 테스트해봅시다.

  1. Gmail, Naver 등 외부 메일 계정에서 `user1@aaaaa.org` (또는 여러분이 생성한 계정)로 테스트 메일을 보내보세요.
  2. 몇 분 정도 기다린 후, Thunderbird에서 "메일 받기" 또는 동기화 버튼을 클릭합니다.
  3. `user1@aaaaa.org` 계정의 받은 편지함에 방금 보낸 테스트 메일이 도착했는지 확인합니다.
  4. 메일이 도착했다면, 답장을 보내 발신 기능도 다시 한번 확인해 볼 수 있습니다.

메일이 도착하지 않는다면 다음 사항들을 확인해보세요:

  • `docker logs mailserver_instance`: 컨테이너 로그에 오류 메시지가 없는지 확인합니다. 특히 Postfix(수신 시도)나 Dovecot(인증, 메일 전달) 관련 로그를 살펴보세요.
  • Cloudflare DNS 설정: MX 레코드가 정확히 `mail.aaaaa.org`를 가리키고 있고, 우선순위가 올바른지 다시 확인합니다. (1부 참고)
  • 공유기 포트 포워딩: 25번 포트(SMTP 수신), 143번 포트(IMAP)가 Banana Pi로 정확히 포워딩되고 있는지 확인합니다.
  • 방화벽 설정: Banana Pi의 `ufw`에서 해당 포트들이 허용되어 있는지 확인합니다.
  • 메일 저장 공간: `docker-compose.yml`에 설정한 볼륨 경로 (`~/mailserver/data`, `~/mailserver/state`)에 디스크 공간이 충분한지 확인합니다. `docker-mailserver`는 기본적으로 Maildir 형식을 사용하며, 메일은 `/var/mail/` 디렉토리 아래 도메인별, 사용자별로 저장됩니다.

메일 저장 위치 확인 (참고) 📝

`docker-mailserver` 컨테이너 내부에서 메일은 주로 다음 경로에 저장됩니다:

  • /var/mail/aaaaa.org/user1/: Maildir 형식으로 실제 메일 파일들이 저장되는 경로.
  • /var/mail-state/: Dovecot의 인덱스 파일 등 상태 정보 저장.

이 경로들은 `docker-compose.yml`에서 호스트의 `~/mailserver/data` 및 `~/mailserver/state` 디렉토리와 연결되어 있으므로, 실제 파일은 호스트에서도 해당 경로에서 확인할 수 있습니다. (하지만 직접 수정하는 것은 권장하지 않습니다.)

 

3부 마무리 및 다음 단계 예고 📝

자, 이제 여러분의 Banana Pi M5 메일 서버는 이메일을 주고받을 수 있는 완전한 기능을 갖추게 되었습니다! Postfix로 메일을 보내고, Dovecot으로 메일을 받아 Thunderbird와 같은 클라이언트에서 확인할 수 있게 되었네요. 정말 대단한 진전입니다! 👍

하지만 아직 끝이 아닙니다. 현재 우리 서버는 암호화되지 않은 연결(또는 자체 서명 인증서 사용)을 사용하고 있고, 스팸이나 바이러스에 대한 대비도 부족합니다. 또한, 매번 메일 클라이언트를 사용하기보다는 웹 브라우저에서 바로 메일을 확인하고 싶을 수도 있겠죠?

그래서 4부에서는 웹메일(Roundcube) 설치, Let's Encrypt를 이용한 SSL/TLS 암호화 설정, 그리고 이메일 보안의 필수 요소인 DKIM, DMARC, 스팸 필터(SpamAssassin) 설정에 대해 자세히 알아보겠습니다. 더욱 안전하고 편리한 메일 서버를 향해 함께 나아가요! 기대해주세요! 😄

💡

3부 핵심 요약: Dovecot & IMAP/POP3

🗄️ Dovecot, IMAP/POP3: 메일 수신 및 사용자 접근 프로토콜(IMAP 권장) 역할 이해.
🐳 `docker-mailserver` 연동: 별도 설정 없이 기본 활성화. 포트(143, 993) 및 SSL/STARTTLS 개념 이해.
💻 메일 클라이언트 (Thunderbird): IMAP(143/STARTTLS), SMTP(587/STARTTLS) 설정 방법, 자체 서명 인증서 경고 처리.
📥 수신 테스트: 외부 메일 발송 후 Thunderbird에서 확인, 로그 점검 및 트러블슈팅.

자주 묻는 질문 (FAQ) ❓

Q: Thunderbird에서 "서버에 연결할 수 없습니다" 오류가 발생합니다.
A: 👉 먼저 `mail.aaaaa.org`가 정확한 공인 IP로 resolve 되는지 `ping mail.aaaaa.org` 명령으로 확인해보세요. 그 다음 공유기의 포트 포워딩 설정(143, 993, 587번 포트)이 Banana Pi의 IP(192.168.0.60)로 올바르게 되었는지, Banana Pi의 방화벽(`ufw`)에서 해당 포트가 허용되었는지 확인해야 합니다. 또한 `docker ps` 명령으로 `mailserver_instance` 컨테이너가 정상 실행 중인지, `docker logs mailserver_instance`로 특이사항은 없는지 점검하세요.
Q: STARTTLS와 SSL/TLS의 차이점은 무엇인가요?
A: 👉 STARTTLS는 처음에는 암호화되지 않은 일반 포트(예: IMAP 143번, SMTP 587번)로 연결을 시작한 후, 클라이언트와 서버 간의 협상을 통해 암호화된 통신(TLS)으로 전환하는 방식입니다. 반면, SSL/TLS는 처음부터 암호화된 전용 포트(예: IMAPS 993번, SMTPS 465번 - SMTPS 465는 요즘 Submission용 587 STARTTLS에 밀려 잘 안 쓰이는 추세)로 접속하여 통신하는 방식입니다. 4부에서 Let's Encrypt 인증서를 설정하면 두 방식 모두 안전하게 사용할 수 있게 됩니다.
Q: 스마트폰에서도 이메일을 확인할 수 있나요?
A: 👉 네, 물론입니다! 스마트폰의 기본 메일 앱이나 다른 메일 앱(예: Outlook 모바일, K-9 Mail 등)에서 Thunderbird와 유사한 방식으로 IMAP/SMTP 서버 정보를 입력하여 계정을 설정할 수 있습니다. 서버 주소, 포트, 사용자 이름, 암호, 연결 보안 방식(STARTTLS 또는 SSL/TLS)을 정확히 입력하면 됩니다. 자체 서명 인증서 경고는 동일하게 발생할 수 있습니다.