diff --git a/mail/README.md b/mail/README.md index b45e349..8b0fdfb 100644 --- a/mail/README.md +++ b/mail/README.md @@ -621,6 +621,13 @@ sudo docker logs "${PROJECT_NAME}-mail" 2>&1 | grep 'cannot validate DNSSEC' - 기존 서버 IP(`MAIL_PILOT_LEGACY_IPS`)에 **사람이 만든 자동 차단 예외(`x:AllowedIp`)가 없다** — setup 이 같은 주소로 시범 표시 항목을 만들어야 한다(같은 주소의 항목은 둘일 수 없다). 있으면 setup 이 멈춘다 — 지운 뒤 다시 실행한다. - 시범 사용자의 mailcow 사서함은 **그대로 둔다** — Transport Map 은 mailcow 에 있는 받는 사람에게만 먹고, 새 서버가 owner@ 명의로 동료에게 보낼 때도 mailcow 의 `reject_unlisted_sender` 를 이 사서함으로 통과한다. +**시범 주소가 mailcow 에 없던 새 주소일 때** (실제 시범: `sysadmin@arasystem.it.kr` · 표시 이름 "시스템 관리자" — 직원 메일함이 아니라 관리용 새 주소로 시험한다): +mailcow 에 **같은 주소의 메일함을 먼저 만든다** — 받기만 하는 자리다. Transport Map 은 mailcow 에 있는 받는 사람에게만 먹어 이 주소 앞 메일을 새 서버로 넘기고, +새 서버가 이 주소로 동료에게 보낼 때 mailcow 의 `reject_unlisted_sender` 를 이 메일함으로 통과한다. 로그인은 처음부터 막아 둔다 — Active 를 "Disallow login (incoming mail is still accepted)", +Allowed protocols 와 SOGo 접근을 모두 끄고 비밀번호는 무작위로(아래 9 를 미리 해 두는 것과 같다). 옛 메일이 없으니 imapsync(아래 5 · 7)는 건너뛰고, +되돌리기의 "mailcow 로 되복사"(되돌리기 3)는 시범 동안 새 서버에 온 · 보낸 메일뿐이다. 새 서버에서 이 주소는 보통 직원 계정(`User` 역할)이다 — +엔진 관리자(`MAIL_ADMIN_LOCAL_PART`)가 아니고 백엔드 차단 목록(`MAIL_BLOCKED_ACCOUNTS`)에도 넣지 않는다(넣으면 웹메일에 로그인하지 못한다). 아래 절차의 `owner@` 를 이 주소로 읽는다. + ### env 와 실행 (새 서버) `.env.production` 에 두 값을 적는다 — **셸이 아니라 파일에** (운영은 env 파일에 없는 시범 값이 셸에 있으면 setup 이 멈춘다): @@ -753,7 +760,19 @@ cd /opt/mailcow-dockerized alias dcx='docker compose exec postfix-mailcow' ``` -0. **읽기만 하는 점검** — 로컬로 새는 길이 없는지: +**SSH 가 없을 때 (mailcow 관리 화면만)** — 운영 mailcow 에는 관리 화면만 쓸 수 있다. 아래 절차의 명령은 SSH 가 있을 때의 길이고, 화면으로는 이렇게 한다: + +| 절차 | 화면으로 | +| --- | --- | +| 0 읽기 점검(명령) | SSH 가 있을 때만 한다 — 없으면 건너뛰고 4 · 6 의 시험 메일과 화면의 로그로 대신 본다. 도메인(백업 MX · "Relay all recipients" 가 꺼져 있는지)과 Synchronizations 는 화면으로 본다 | +| 1 postscreen 허용 목록 | 파일이라 화면으로는 할 수 없다 — 대신 새 서버 IP(``)가 차단 목록에 없는지 본다: [Spamhaus IP 조회](https://check.spamhaus.org/) · [MXToolbox Blacklist Check](https://mxtoolbox.com/blacklists.aspx). PTR(mx1)이 있고 목록에 없으면 보통 postscreen 을 통과한다 | +| 2 Fail2ban 예외 | 그대로 화면 — System → Configuration → Options → Fail2ban parameters | +| 4 · 6 의 로그(`docker compose logs postfix-mailcow` · `rspamd-mailcow`) | System → Information → Logs 의 Postfix · Rspamd (판에 따라 메뉴 이름이 다를 수 있다) | +| 6 `postmap -q` · `postfix reload` | 하지 않는다 — Transport Map 은 저장하면 1분 안에 먹는다(reload 없이). 목록의 Test 버튼과 실제 시험 메일로 본다 | +| 10 · 되돌리기 2 의 대기열(`postqueue`) | E-Mail → Queue Manager — 대기열을 보고 Flush queue 로 다시 보낸다 | +| 되돌리기 1 의 `postfix reload` · `postmap -q` | 하지 않는다 — Deactivate 뒤 1분 기다린 다음 시험 메일이 mailcow 사서함에 오는지 본다 | + +0. **읽기만 하는 점검** (SSH 가 있을 때 — 없으면 위 표) — 로컬로 새는 길이 없는지: ```bash grep -n -A3 '^transport_maps' data/conf/postfix/main.cf # custom_transport.pcre, local_transport, mysql_relay_ne.cf, mysql_transport_maps.cf 차례 dcx postconf -P 'smtpd/pass/smtpd_sender_restrictions' # permit_mynetworks,reject_unlisted_sender,reject_unknown_sender_domain