๐ก ํต์ฌ ์์ฝ (Executive Summary)
๋ณธ ๊ฐ์ด๋๋ docker mailserver ํต์ฌ ๊ฐ์ด๋ ๋ฐ ์ค์ ์ํคํ ์ฒ์ ํต์ฌ ๊ฐ๋ , ์ค์ ๊ตฌ์ฑ ๋ช ๋ น์ด ๋ฐ ์ํคํ ์ฒ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ๋ค๋ฃน๋๋ค. ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ฐ ์ธํ๋ผ ์์ง๋์ด๋ง ์ค๋ฌด์ ์ฆ์ ํ์ฉ ๊ฐ๋ฅํ๋๋ก ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค.
๐ Table of Contents
Docker
Generate cf
bash
docker run --rm \
-e [email protected] \
-e MAIL_PASS=$pw \
-ti tvial/docker-mailserver:latest \
/bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' \
>> postfix-accounts.cf
K8s
helm install
bash
helm repo add docker-mailserver https://docker-mailserver.github.io/docker-mailserver-helm/
helm pull docker-mailserver/docker-mailserver --untar
# setting values.yaml
## tls setting (recomended cert-manager)
--set certificate = $TLS_SECRET
--set deployment.env.OVERRIDE_HOSTNAME = $MAIL_ADDRESS_HOST
--set deployment.env.TZ = "Asia/Seoul"
--set service.type = "NodePort"
--set service.nodePort.smtp = ""
--set persistence.mail-config.storageClass = $sc
--set persistence.mail-data.storageClass = $sc
--set persistence.mail-state.storageClass = $sc
--set persistence.mail-log.storageClass = $sc
# ์ต์ด ๊ณ์ ์์ฑ ํ์
์ด์ Pod ์ ๊ทผํ์ฌ ๊ณ์ ๋ฑ๋ก
bash
k exec -it -n $ns deployments/docker-mailserver -- bash
setup email add $user@$OVERRIDE_HOSTNAME $pw
cat /tmp/docker-mailserver/postfix-accounts.cf
๋ด๋ถ setup.sh (/usr/local/bin/setup)
yaml
#email ์ถ๊ฐ
setup email add $user@$OVERRIDE_HOSTNAME $pw
#dkim
setup config dkim
Exporter (failed)
bash
--set metrics.enabled = true
--set metrics.serviceMonitor.enabled = true
--set metrics.serviceMonitor.labels.release = $releaseLabel
# Image: blackflysolutions/postfix-exporter@sha256:7ed7c0534112aff5b44757ae84a206bf659171631edfc325c3c1638d78e74f73
# in container logic
/bin/postfix_exporter \
--postfix.showq_path /var/mail-state/spool-postfix/public/showq \
--postfix.logfile_path /var/log/mail/mail.log
>>>
2024/05/10 03:33:29 Reading log events from /var/log/mail/mail.log
2024/05/10 03:33:29 Listening on :9154
2024/05/10 03:33:29 FATAL -- failed to create Watcher
goroutine 34 [running]:
runtime/debug.Stack(0xc000418000, 0x21, 0x0)
/usr/local/go/src/runtime/debug/stack.go:24 +0x9f
github.com/nxadm/tail/util.Fatal(0x9555f8, 0x18, 0x0, 0x0, 0x0)
/go/pkg/mod/github.com/nxadm/[email protected]/util/util.go:23 +0xc7
github.com/nxadm/tail/watch.(*InotifyTracker).run(0xc000412000)
/go/pkg/mod/github.com/nxadm/[email protected]/watch/inotify_tracker.go:220 +0x445
created by github.com/nxadm/tail/watch.glob..func1
/go/pkg/mod/github.com/nxadm/[email protected]/watch/inotify_tracker.go:55 +0x12f
<<<
Service Port
yaml
## Send Mail: smtp
- name: smtp
nodePort: 30025
port: 25
protocol: TCP
targetPort: smtp
## Send Mail: smtp (SSL)
- name: submissions
nodePort: 30465
port: 465
protocol: TCP
targetPort: submissions
## Send Mail: smtp (STARTTLS)
- name: submission
nodePort: 30587
port: 587
protocol: TCP
targetPort: submission
## SMTP SSL ์ฐ๊ฒฐ์ ๋ํ ํ๋ก์ ์๋ฒ
- name: subs-proxy
nodePort: 30444
port: 10465
protocol: TCP
targetPort: subs-proxy
## SMTP STARTTLS ์ฐ๊ฒฐ์ ๋ํ ํ๋ก์ ์๋ฒ
- name: sub-proxy
nodePort: 32074
port: 10587
protocol: TCP
targetPort: sub-proxy
## Receive: imap ํด๋ผ์ด์ธํธ ์์ ํฌํธ
- name: imap
nodePort: 30143
port: 143
protocol: TCP
targetPort: imap
## Receive: imap ํด๋ผ์ด์ธํธ SSL ์์ ํฌํธ (IMAPS)
- name: imaps
nodePort: 30993
port: 993
protocol: TCP
targetPort: imaps
## Receive: imap ํด๋ผ์ด์ธํธ ์์ ํ๋ก์ ์๋ฒ
- name: imap-proxy
nodePort: 30845
port: 10143
protocol: TCP
targetPort: imap-proxy
## Receive: imap ํด๋ผ์ด์ธํธ SSL ์์ ํ๋ก์ ์๋ฒ (IMAPS)
- name: imaps-proxy
nodePort: 32648
port: 10993
protocol: TCP
targetPort: imaps-proxy
## Rspamd: ์ด๋ฉ์ผ ์คํธ ๋ฐ ๋ฐ์ด๋ฌ์ค๋ฅผ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ ์คํธ ํํฐ๋ง ๋ฐ ์ด๋ฉ์ผ ๋ถ์ ๋๊ตฌ
- name: rspamd
nodePort: 30884
port: 11334
protocol: TCP
targetPort: rspamd
Additional Service
yaml
# SRS (Sender Rewriting Scheme)
# Description: ์ด ์๋น์ค๋ ๋ณด๋ธ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ฌ์์ฑํ์ฌ ์ด๋ฉ์ผ์ ๋ค์ ์ ๋ฌํ ๋ ๋๋ฉ์ธ ์ธ์ฆ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. SRS๋ SPF (Sender Policy Framework)์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
deployment.env.ENABLE_SRS = 0
# OPENDKIM (Open DomainKeys Identified Mail)
# Description: ์ด ์๋น์ค๋ ์ด๋ฉ์ผ ์๋ฒ์์ ๋๊ฐ๋ ์ด๋ฉ์ผ์ ๋์งํธ ์๋ช
์ ์ถ๊ฐํ์ฌ ์ด๋ฉ์ผ์ ์ ๋ขฐ์ฑ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ฉ์ผ ์์ ์๋ ์ด๋ฉ์ผ์ด ์ค์ ๋ก ๋ณด๋ธ ์ฌ๋์์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
deployment.env.ENABLE_OPENDKIM = 0
# OPENDMARC (OpenDMARC)
# Description: ์ด ์๋น์ค๋ ์ด๋ฉ์ผ ์์ ํ๋ก์ธ์ค์์ DMARC (Domain-based Message Authentication, Reporting, and Conformance) ์ ์ฑ
์ ์ ์ฉํ์ฌ ์ด๋ฉ์ผ ๋๋ฉ์ธ์ ์์กฐ๋ฅผ ๋ฐฉ์งํ๊ณ ์ด๋ฉ์ผ ์คํธ์ ์ฐจ๋จํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_OPENDMARC = 0
# POLICYD_SPF (Policyd SPF)
# Description: ์ด ์๋น์ค๋ SPF (Sender Policy Framework) ์ ์ฑ
์ ์ ์ฉํ์ฌ ์ด๋ฉ์ผ ์์ ์์ ๋๋ฉ์ธ์์ ์จ ์ด๋ฉ์ผ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_POLICYD_SPF = 0
# POP3
# Description: POP3 (Post Office Protocol version 3)๋ ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ์ด๋ฉ์ผ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์
๋๋ค. ์ด ์๋น์ค๋ POP3๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฉ์ผ์ ๊ฐ์ ธ์ค๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
deployment.env.ENABLE_POP3 =
# CLAMAV (Clam AntiVirus)
# Description: ์ด ์๋น์ค๋ ์
์ฑ ์ฝ๋์ ๋ฐ์ด๋ฌ์ค๋ฅผ ํ์งํ์ฌ ์ด๋ฉ์ผ ๋ฉ์์ง๋ฅผ ์ค์บํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_CLAMAV = 0
# AMAVIS (Amavis-New)
# Description: ์ด ์๋น์ค๋ ์ด๋ฉ์ผ ๋ฉ์์ง๋ฅผ ์ค์บํ์ฌ ์
์ฑ ์ฝ๋, ๋ฐ์ด๋ฌ์ค ๋ฐ ์คํธ์ ํ์งํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_AMAVIS = 0
# DNSBL (DNS-based Blackhole List)
# Description: ์ด ์๋น์ค๋ ์คํธ ๋๋ ์
์ฑ ์ด๋ฉ์ผ์ ํํฐ๋งํ๊ธฐ ์ํด DNS ๊ธฐ๋ฐ์ ๋ธ๋ํ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
deployment.env.ENABLE_DNSBL = 0
# FAIL2BAN
# Description: ์ด ์๋น์ค๋ ์๋ฒ์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ๋ก๊ทธ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์ง์ ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์๋ชป๋ ๋ก๊ทธ์ธ ์๋ ๋ฑ์ ์ฐจ๋จํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_FAIL2BAN = 0
# MANAGESIEVE
# Description: MANAGESIEVE๋ ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฉ์ผ ์๋ฒ์ ๋ํ ํํฐ ๋ฐ ์ ์ฑ
์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋กํ ์ฝ์
๋๋ค.
deployment.env.ENABLE_MANAGESIEVE =
# SPAMASSASSIN
# Description: ์ด ์๋น์ค๋ ์ด๋ฉ์ผ ๋ฉ์์ง๋ฅผ ์ค์บํ์ฌ ์คํธ์ ํ์งํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_SPAMASSASSIN = 0
# SPAMASSASSIN_KAM
# Description: SPAMASSASSIN_KAM์ SPAMASSASSIN๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก, ์คํธ์ ํ์งํ๊ณ ๋ถ๋ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_SPAMASSASSIN_KAM = 0
# FETCHMAIL
# Description: ์ด ์๋น์ค๋ ์ธ๋ถ ์ด๋ฉ์ผ ์๋ฒ์์ ์ด๋ฉ์ผ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_FETCHMAIL = 0
# GETMAIL
# Description: GETMAIL์ ์ธ๋ถ ์ด๋ฉ์ผ ์๋ฒ์์ ์ด๋ฉ์ผ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_GETMAIL = 0
# POSTGREY
# Description: ์ด ์๋น์ค๋ ์ด๋ฉ์ผ ์๋ฒ์ ๋ํ ๊ทธ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ์ฌ ์คํธ ๋ฉ์์ง์ ์ ๋ฌ์ ์ง์ฐ์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
deployment.env.ENABLE_POSTGREY = 0
# SASLAUTHD
# Description: SASLAUTHD๋ SMTP ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. (CRAM-MD5 ๋ฑ)
deployment.env.ENABLE_SASLAUTHD = 0
Leave a Reply