OCI 6. OCI 에서 25번 포트가 막혀 메일을 못 보낼 때: mailcow 를 Email Delivery 릴레이로 보내기
회사 메일을 mailcow 로 직접 운영합니다. 받는 건 문제가 없는데, OCI 는 인스턴스에서 바깥으로 나가는 25번 포트를 막아 둡니다. 보안 목록을 열어도 소용이 없고, 풀려면 지원 요청을 해야 합니다. 그래서 보내는 메일은 OCI 의 Email Delivery 를 릴레이로 씁니다. mailcow 가 587번 포트로 Email Delivery 에 SASL 로그인해서 넘기면, Email Delivery 가 받는 쪽 메일 서버로 전달합니다.
이번에 메일 서버를 춘천 리전에서 오사카 리전으로 옮기면서 릴레이도 새로 맞춰야 했습니다. Email Delivery 의 자격증명은 테넌시에 묶여 있어서 다른 계정의 것을 그대로 쓸 수가 없었거든요. 오사카 계정에서 순서대로 했습니다.
- 이메일 도메인으로 우리 도메인을 추가합니다.
- 승인된 발신자를 등록합니다. 여기 없는 주소로는 보낼 수 없습니다.
- IAM 사용자에 SMTP 자격증명을 만듭니다.
- 그 사용자가 속한 그룹에 정책을 줍니다.
allow group <그룹> to use email-family in tenancy
엔드포인트는 리전마다 다릅니다. 오사카는 smtp.email.ap-osaka-1.oci.oraclecloud.com:587 입니다.
DKIM 은 새 키를 만들지 않았습니다. Email Delivery 에서 “기존 DKIM 추가” 로 mailcow 가 쓰던 키를 그대로 넣었더니 DNS 를 건드리지 않고 바로 활성화됐습니다. Email Delivery 는 봉투 발신자를 자기 도메인 주소로 바꿔서 보내기 때문에 SPF 는 OCI 쪽 레코드로 통과하고, DKIM 은 우리 도메인으로 서명돼서 DMARC 도 통과합니다. 옮긴 뒤 mail-tester 로 보내 보니 9.9점이 나왔습니다.
mailcow 에서 릴레이를 바꿀 때 한 번 헛짚었습니다. 기존 릴레이 항목을 지우고 새로 만들면 도메인에 걸려 있던 릴레이 지정이 풀려 버립니다. 라우팅 화면에서 그 릴레이의 “In use by” 가 비어 있으면 그 상태입니다. 릴레이를 안 타면 mailcow 는 25번으로 직접 보내려다 막혀서 메일이 큐에 쌓입니다. 기존 항목을 편집하거나, 새로 만들었으면 메일 → 구성 → 도메인 편집에서 다시 골라 줘야 합니다.
남은 한계도 있습니다. Email Delivery 는 메시지 크기 제한이 있어서 큰 첨부는 이렇게 반송됩니다. 옮기기 전 춘천에서도 똑같았습니다.
552 exceeds byte limit
역방향 DNS(PTR)는 릴레이를 거쳐 보내니 꼭 필요하지는 않지만, 받는 메일 서버가 우리 서버로 직접 붙을 때를 생각해 지원 요청을 넣어 두었습니다.
참고: OCI Email Delivery, https://docs.oracle.com/en-us/iaas/Content/Email/home.htm