6화. Mailcow — 우리 도메인 이메일을 직접 발급하는 메일 서버

웰컴스 조회 24

name@ourcompany.com 같은 자체 도메인 이메일. 워크스페이스 구독으로 해결할 수도 있지만, 사용자 수만큼 매달 과금된다. Mailcow는 메일 서버 스택 전부 — 수신·발신·스팸필터·웹메일 — 를 도커로 묶어 제공하는 오픈소스다. 다만 이메일은 셀프호스팅 난이도 최상위 종목이라, 이 글은 설치법보다 "시작하기 전에 확인할 세 가지 관문"을 정직하게 먼저 다룬다.


이런 때 유용합니다

  • 회사 도메인으로 이메일을 직접 쓰고 싶을 때. name@ourcompany.com 주소를 인원수 제한 없이 발급한다.
  • 사용자 수대로 매달 구독료를 내는 게 아까울 때. 워크스페이스 과금 대신 서버와 디스크 비용만 든다.
  • 업무 메일 데이터를 외부에 두기 싫을 때. 메일함 전체가 내 서버에 보관된다.
  • 계정 추가·삭제, 용량 할당을 즉시 처리하고 싶을 때. 관리자 화면에서 클릭 몇 번으로 끝난다.
  • 퇴사자 메일함 보관, 부서별 메일링 리스트 같은 세밀한 운영이 필요할 때.

필요한 것은 25번 포트가 열린 서버, 역방향 DNS를 설정할 수 있는 고정 IP, 그리고 도메인 DNS 제어권 — 아래에서 하나씩 설명한다.

Mailcow는 어떤 프로그램인가

메일 서버는 하나의 프로그램이 아니다. 발신(SMTP), 수신함(IMAP), 스팸 필터, 바이러스 검사, 웹메일 — 전문 분야가 다른 여러 프로그램의 조합이고, 이들을 서로 맞추는 게 자체 메일 서버 구축의 진입장벽이었다. Mailcow는 이 스택 전부를 검증된 조합으로 묶어 도커 컴포즈 한 번에 띄워주는 배포판이다.

구성 요소 역할
Postfix SMTP — 메일 발신·수신
Dovecot IMAP/POP3 — 수신함
SOGo 웹메일 + 캘린더·주소록, 모바일 동기화(ActiveSync)
Rspamd 스팸 필터 — 자동 학습 지원
ClamAV 첨부파일 바이러스 검사
관리자 UI 계정·도메인·쿼터 관리, DKIM 키 자동 생성

계정은 무제한, 도메인도 여러 개 운영 가능하다. DKIM 서명 키를 관리자 UI가 생성해주고, 스팸 필터는 사용자가 "스팸/스팸 아님" 버튼을 누를 때마다 학습한다.

전체 구성

flowchart TB
    DNS["DNS 레코드 - MX · SPF · DKIM · DMARC"]
    O["상대 메일 서버 - 구글 · 네이버 등"]
    subgraph SRV["Docker - mailcow 스택"]
        PF["Postfix - SMTP 수신·발신"]
        RS["Rspamd - 스팸·바이러스 필터"]
        DV["Dovecot - IMAP 수신함"]
        SG["SOGo - 웹메일·캘린더"]
    end
    C["메일 클라이언트 - 폰 · PC"]
    O -->|수신 메일| PF
    PF -->|발신 메일| O
    DNS -.->|발신자 신뢰 검증| O
    PF --> RS
    PF --> DV
    C --> SG
    SG --> DV

여기서 DNS 레코드가 차지하는 비중이 크다. 상대 메일 서버는 내가 누구인지 DNS에 등록된 증거들(SPF, DKIM, DMARC, 역방향 DNS)로 판단한다. 서버 설정만 완벽해도 DNS가 엉망이면 메일이 스팸함으로 사라진다.

시작 전에 통과해야 할 세 가지 관문

메일 자체호스팅의 성패는 설치가 아니라 여기서 갈린다.

관문 1 — 25번 포트가 열려 있는가. 메일 발신은 TCP 25번 포트를 쓰는데, 대부분의 가정용 인터넷 회선과 주요 클라우드(AWS·GCP·Azure)는 스팸 방지를 위해 기본 차단한다. 국내 하이브리드/서버 호스팅이나 포트 개방 신청이 가능한 환경이어야 한다.

관문 2 — 역방향 DNS(PTR)를 설정할 수 있는가. 받는 쪽 서버는 발신 IP의 역방향 조회 결과가 발신 도메인과 일치하는지 확인한다. IP를 할당한 업체에 PTR 등록 요청이 가능해야 한다.

관문 3 — 도메인 DNS를 마음대로 수정할 수 있는가. MX, SPF, DKIM, DMARC 레코드를 직접 추가할 수 있어야 한다.

세 가지 모두 가능하면 mailcow 설치 자체는 의외로 단순하다. 하나라도 불가능하면 — 솔직히 말해 이 글은 참고만 하고, 발신은 메일 릴레이 서비스를 붙이거나 메일은 외부 서비스를 유지하는 편이 정신건강에 이롭다.

설치 방법

git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh    # 접속 도메인(mail.example.com)과 시간대를 입력하면 mailcow.conf 생성
docker compose up -d

기동 후 관리자 UI(https://mail.example.com, 초기 계정 admin/moohoo — 즉시 변경)에 접속해 다음 순서로 진행한다.

  1. 도메인 추가 → 관리자 UI가 DKIM 키를 생성해준다
  2. DNS 레코드 등록 — 아래 표의 레코드를 도메인 업체에 추가한다
  3. 메일박스 생성 — 계정별 용량(쿼터) 지정
  4. 클라이언트 연결 — IMAP 993 / SMTP 465(또는 587), 폰은 계정 추가만으로 자동 설정
  5. mail-tester.com 점검 — 테스트 메일을 보내면 스팸 점수를 10점 만점으로 알려준다. 10점을 노리자
DNS 레코드 값 예시 역할
MX mail.example.com (우선순위 10) 이 도메인 메일의 수신 위치
TXT (SPF) v=spf1 mx ~all 발신을 허가한 서버 선언
TXT (DKIM) dkim._domainkey — 관리자 UI가 생성 메일 서명 검증 공개키
TXT (DMARC) _dmarc — v=DMARC1; p=quarantine 위조 메일 정책·리포트
A + PTR mail.example.com과 서버 IP 상호 일치 역방향 조회 일치 확인

운영하며 쌓은 것들

발신 신뢰는 워밍업이 필요하다. DKIM·DMARC를 전부 세팅해도, 새 서버의 발신은 초기에 스팸함으로 분류되는 경우가 있다. 구글·네이버 같은 주요 서비스로 테스트 메일을 꾸준히 주고받으며 도메인 평판이 쌓이기를 기다리는 단계를 밟자. mail-tester 점수가 10점이면 설정은 완벽한 상태다.

스팸 필터는 가르친다. Rspamd는 사용자가 웹메일에서 스팸/스팸 아님 처리할 때마다 학습한다. 초기 며칠만 진지하게 눌러주면 이후 오탐이 눈에 띄게 줄어든다.

백업은 내장 스크립트로. ./backup_and_restore.sh backup all 한 줄이 메일함·설정 전체를 덤프한다. cron에 걸어 외부 저장소로 옮기는 구성이 기본값이다.

업데이트도 스크립트로. 저장소의 update.sh가 마이그레이션을 포함해 처리한다. 다만 메일은 회사의 급이 되는 서비스이니, 업데이트 전 백업과 업무 시간 외 실행은 원칙으로.

트러블슈팅 정리

증상 원인 해결
발신 메일이 스팸함으로 간다 DKIM·DMARC 미설정, PTR 불일치 DNS 레코드 점검 + mail-tester 점수 확인
발신 자체가 안 된다 25번 포트 차단 회선·클라우드 정책 확인, 릴레이 검토
수신이 안 된다 MX 레코드 누락·오류 DNS 확인 후 dig로 조회 테스트
대용량 첨부가 실패한다 메시지 크기 제한 mailcow.conf의 크기 설정 조정 후 재기동
업데이트 후 일부 컨테이너 재시작 반복 마이그레이션 중단 update.sh 재실행, 로그 확인

자주 묻는 질문

이메일 자체호스팅, 정말 해도 되나?

세 가지 관문(25포트·PTR·DNS)이 통과되고 스팸함 워밍업을 견딜 수 있다면 충분히 가능하고, 한 번 안정되면 가장 만족스러운 셀프호스팅 영역이다. 반대로 관문이 막혔다면 억지로 하지 말자. 메일은 실패 비용(업무 메일 유실)이 큰 서비스다.

구글 워크스페이스를 대체할 수 있나?

메일·캘린더·주소록·모바일 동기화는 가능하다(ActiveSync 지원). 문서 협업이나 드라이브는 별도 서비스(Seafile·Immich 같은 이 시리즈의 다른 화들)와 조합하는 구성이 된다.

스팸 필터 성능은 믿을 만한가?

Rspamd 자체가 상용급이고, 사용자 학습을 거칠수록 좋아진다. 발신 쪽은 DKIM+DMARC 덕에 위조 메일로 오인될 일이 없어진다.

백업과 복구는?

backup_and_restore.sh가 전부 덤프해준다. 복구는 스크립트의 restore 모드로, 메일함 단위 선택 복구도 가능하다.


서버 한 대로 충분하다 연재 목차 — 시리즈 소개 · 1화. Home Assistant · 2화. Frigate + go2rtc · 3화. Seafile 13 · 4화. Immich · 5화. Vaultwarden

실제 운영 도메인 메일로 검증한 구성입니다. 발신 평판 관리 경험 포함.

💬 댓글 0
글보기
제목6화. Mailcow — 우리 도메인 이메일을 직접 발급하는 메일 서버2026-09-30 23:55
카테고리리눅스(서버)
작성자
> name@ourcompany.com 같은 자체 도메인 이메일. 워크스페이스 구독으로 해결할 수도 있지만, 사용자 수만큼 매달 과금된다. Mailcow는 메일 서버 스택 전부 — 수신·발신·스팸필터·웹메일 — 를 도커로 묶어 제공하는 오픈소스다. 다만 이메일은 셀프호스팅 난이도 최상위 종목이라, 이 글은 설치법보다 **"시작하기 전에 확인할 세 가지 관문"**을 정직하게 먼저 다룬다.

---

## 이런 때 유용합니다

- **회사 도메인으로 이메일을 직접 쓰고 싶을 때.** name@ourcompany.com 주소를 인원수 제한 없이 발급한다.
- **사용자 수대로 매달 구독료를 내는 게 아까울 때.** 워크스페이스 과금 대신 서버와 디스크 비용만 든다.
- **업무 메일 데이터를 외부에 두기 싫을 때.** 메일함 전체가 내 서버에 보관된다.
- **계정 추가·삭제, 용량 할당을 즉시 처리하고 싶을 때.** 관리자 화면에서 클릭 몇 번으로 끝난다.
- **퇴사자 메일함 보관, 부서별 메일링 리스트 같은 세밀한 운영이 필요할 때.**

필요한 것은 25번 포트가 열린 서버, 역방향 DNS를 설정할 수 있는 고정 IP, 그리고 도메인 DNS 제어권 — 아래에서 하나씩 설명한다.

## Mailcow는 어떤 프로그램인가

메일 서버는 하나의 프로그램이 아니다. 발신(SMTP), 수신함(IMAP), 스팸 필터, 바이러스 검사, 웹메일 — 전문 분야가 다른 여러 프로그램의 조합이고, 이들을 서로 맞추는 게 자체 메일 서버 구축의 진입장벽이었다. **Mailcow는 이 스택 전부를 검증된 조합으로 묶어 도커 컴포즈 한 번에 띄워주는 배포판**이다.

| 구성 요소 | 역할 |
|---|---|
| Postfix | SMTP — 메일 발신·수신 |
| Dovecot | IMAP/POP3 — 수신함 |
| SOGo | 웹메일 + 캘린더·주소록, 모바일 동기화(ActiveSync) |
| Rspamd | 스팸 필터 — 자동 학습 지원 |
| ClamAV | 첨부파일 바이러스 검사 |
| 관리자 UI | 계정·도메인·쿼터 관리, DKIM 키 자동 생성 |

계정은 무제한, 도메인도 여러 개 운영 가능하다. DKIM 서명 키를 관리자 UI가 생성해주고, 스팸 필터는 사용자가 "스팸/스팸 아님" 버튼을 누를 때마다 학습한다.

## 전체 구성

```mermaid
flowchart TB
DNS["DNS 레코드 - MX · SPF · DKIM · DMARC"]
O["상대 메일 서버 - 구글 · 네이버 등"]
subgraph SRV["Docker - mailcow 스택"]
PF["Postfix - SMTP 수신·발신"]
RS["Rspamd - 스팸·바이러스 필터"]
DV["Dovecot - IMAP 수신함"]
SG["SOGo - 웹메일·캘린더"]
end
C["메일 클라이언트 - 폰 · PC"]
O -->|수신 메일| PF
PF -->|발신 메일| O
DNS -.->|발신자 신뢰 검증| O
PF --> RS
PF --> DV
C --> SG
SG --> DV
```

여기서 DNS 레코드가 차지하는 비중이 크다. 상대 메일 서버는 내가 누구인지 **DNS에 등록된 증거들**(SPF, DKIM, DMARC, 역방향 DNS)로 판단한다. 서버 설정만 완벽해도 DNS가 엉망이면 메일이 스팸함으로 사라진다.

## 시작 전에 통과해야 할 세 가지 관문

메일 자체호스팅의 성패는 설치가 아니라 여기서 갈린다.

**관문 1 — 25번 포트가 열려 있는가.** 메일 발신은 TCP 25번 포트를 쓰는데, 대부분의 가정용 인터넷 회선과 주요 클라우드(AWS·GCP·Azure)는 스팸 방지를 위해 기본 차단한다. 국내 하이브리드/서버 호스팅이나 포트 개방 신청이 가능한 환경이어야 한다.

**관문 2 — 역방향 DNS(PTR)를 설정할 수 있는가.** 받는 쪽 서버는 발신 IP의 역방향 조회 결과가 발신 도메인과 일치하는지 확인한다. IP를 할당한 업체에 PTR 등록 요청이 가능해야 한다.

**관문 3 — 도메인 DNS를 마음대로 수정할 수 있는가.** MX, SPF, DKIM, DMARC 레코드를 직접 추가할 수 있어야 한다.

세 가지 모두 가능하면 mailcow 설치 자체는 의외로 단순하다. 하나라도 불가능하면 — 솔직히 말해 이 글은 참고만 하고, 발신은 메일 릴레이 서비스를 붙이거나 메일은 외부 서비스를 유지하는 편이 정신건강에 이롭다.

## 설치 방법

```bash
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh # 접속 도메인(mail.example.com)과 시간대를 입력하면 mailcow.conf 생성
docker compose up -d
```

기동 후 관리자 UI(`https://mail.example.com`, 초기 계정 admin/moohoo — 즉시 변경)에 접속해 다음 순서로 진행한다.

1. **도메인 추가** → 관리자 UI가 DKIM 키를 생성해준다
2. **DNS 레코드 등록** — 아래 표의 레코드를 도메인 업체에 추가한다
3. **메일박스 생성** — 계정별 용량(쿼터) 지정
4. **클라이언트 연결** — IMAP 993 / SMTP 465(또는 587), 폰은 계정 추가만으로 자동 설정
5. **mail-tester.com 점검** — 테스트 메일을 보내면 스팸 점수를 10점 만점으로 알려준다. 10점을 노리자

| DNS 레코드 | 값 예시 | 역할 |
|---|---|---|
| MX | mail.example.com (우선순위 10) | 이 도메인 메일의 수신 위치 |
| TXT (SPF) | v=spf1 mx ~all | 발신을 허가한 서버 선언 |
| TXT (DKIM) | dkim._domainkey — 관리자 UI가 생성 | 메일 서명 검증 공개키 |
| TXT (DMARC) | _dmarc — v=DMARC1; p=quarantine | 위조 메일 정책·리포트 |
| A + PTR | mail.example.com과 서버 IP 상호 일치 | 역방향 조회 일치 확인 |

## 운영하며 쌓은 것들

**발신 신뢰는 워밍업이 필요하다.** DKIM·DMARC를 전부 세팅해도, 새 서버의 발신은 초기에 스팸함으로 분류되는 경우가 있다. 구글·네이버 같은 주요 서비스로 테스트 메일을 꾸준히 주고받으며 도메인 평판이 쌓이기를 기다리는 단계를 밟자. mail-tester 점수가 10점이면 설정은 완벽한 상태다.

**스팸 필터는 가르친다.** Rspamd는 사용자가 웹메일에서 스팸/스팸 아님 처리할 때마다 학습한다. 초기 며칠만 진지하게 눌러주면 이후 오탐이 눈에 띄게 줄어든다.

**백업은 내장 스크립트로.** `./backup_and_restore.sh backup all` 한 줄이 메일함·설정 전체를 덤프한다. cron에 걸어 외부 저장소로 옮기는 구성이 기본값이다.

**업데이트도 스크립트로.** 저장소의 `update.sh`가 마이그레이션을 포함해 처리한다. 다만 메일은 회사의 급이 되는 서비스이니, 업데이트 전 백업과 업무 시간 외 실행은 원칙으로.

## 트러블슈팅 정리

| 증상 | 원인 | 해결 |
|---|---|---|
| 발신 메일이 스팸함으로 간다 | DKIM·DMARC 미설정, PTR 불일치 | DNS 레코드 점검 + mail-tester 점수 확인 |
| 발신 자체가 안 된다 | 25번 포트 차단 | 회선·클라우드 정책 확인, 릴레이 검토 |
| 수신이 안 된다 | MX 레코드 누락·오류 | DNS 확인 후 dig로 조회 테스트 |
| 대용량 첨부가 실패한다 | 메시지 크기 제한 | mailcow.conf의 크기 설정 조정 후 재기동 |
| 업데이트 후 일부 컨테이너 재시작 반복 | 마이그레이션 중단 | update.sh 재실행, 로그 확인 |

## 자주 묻는 질문

### 이메일 자체호스팅, 정말 해도 되나?

세 가지 관문(25포트·PTR·DNS)이 통과되고 스팸함 워밍업을 견딜 수 있다면 충분히 가능하고, 한 번 안정되면 가장 만족스러운 셀프호스팅 영역이다. 반대로 관문이 막혔다면 억지로 하지 말자. 메일은 실패 비용(업무 메일 유실)이 큰 서비스다.

### 구글 워크스페이스를 대체할 수 있나?

메일·캘린더·주소록·모바일 동기화는 가능하다(ActiveSync 지원). 문서 협업이나 드라이브는 별도 서비스(Seafile·Immich 같은 이 시리즈의 다른 화들)와 조합하는 구성이 된다.

### 스팸 필터 성능은 믿을 만한가?

Rspamd 자체가 상용급이고, 사용자 학습을 거칠수록 좋아진다. 발신 쪽은 DKIM+DMARC 덕에 위조 메일로 오인될 일이 없어진다.

### 백업과 복구는?

`backup_and_restore.sh`가 전부 덤프해준다. 복구는 스크립트의 restore 모드로, 메일함 단위 선택 복구도 가능하다.

---

**서버 한 대로 충분하다 연재 목차** — [시리즈 소개](/info/186/) · [1화. Home Assistant](/info/185/) · [2화. Frigate + go2rtc](/info/184/) · [3화. Seafile 13](/info/183/) · [4화. Immich](/info/182/) · [5화. Vaultwarden](/info/181/)

*실제 운영 도메인 메일로 검증한 구성입니다. 발신 평판 관리 경험 포함.*
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)
목록으로