홈으로 돌아가기

Kubernetes에서 Mailu: 개발자를 위한 메일 서버 설정

이 기사는 Helm을 사용하여 Kubernetes 클러스터에서 Mailu 메일 서버를 배포하는 과정을 설명합니다. DNS records 준비, network policies 설정, TLS 문제 해결 및 메일 배달을 보장하기 위한 DKIM, DMARC, SPF 구성 등을 다룹니다.

Kubernetes에서 Mailu 배포 방법: 완전한 가이드
Advertisement 728x90

쿠버네티스에 Mailu 메일 서버 배포: 단계별 가이드

Mailu는 도커와 쿠버네티스 환경에 최적화된 컨테이너화된 메일 서버입니다. 전통적인 Postfix와 Dovecot 설정처럼 복잡한 구성이 필요 없는 Mailu는 최소한의 노력으로 배포할 수 있어 홈 랩이나 테스트 환경에 딱 맞습니다. 이 가이드는 Helm을 사용해 쿠버네티스 클러스터에 Mailu를 설치하고, 네트워크 정책, DNS 레코드, 보안 조치를 설정하는 과정을 안내합니다.

인프라와 DNS 준비

Mailu 설치 전에 필수 인프라 작업을 완료하세요. 먼저 DNS 관리가 가능한 도메인이 필요합니다—예제에서는 yourdomain.com을 사용하겠습니다. 둘째, ISP에서 PTR(역방향) 레코드를 설정한 고정 공인 IP(예: 1.2.3.4)를 확보하세요. PTR 레코드가 없으면 주요 메일 제공업체에서 이메일을 스팸으로 분류합니다.

생성할 주요 DNS 레코드:

Google AdInline article slot
  • A 레코드: mail.yourdomain.com → 1.2.3.4
  • MX 레코드: @ → mail.yourdomain.com

설정 후 nslookup 1.2.3.4로 확인하세요—mail.yourdomain.com으로 해석되면 PTR 레코드가 올바른 것입니다.

쿠버네티스 설정 및 Mailu 배포

보안을 위해 메일 서버를 전용 네임스페이스에 격리해 위험을 최소화하세요—여기서는 dmz-mailu를 사용합니다. 기본적으로 모든 입/출력 트래픽을 차단하는 네트워크 정책을 즉시 적용하고, 필수 포트만 허용합니다.

네트워크 정책 예제 (network-policy-dmz-mail.yaml):

Google AdInline article slot
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-dmz-mail-deny
  namespace: dmz-mail
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-mailu-ports
  namespace: dmz-mail
spec:
  podSelector: {}
  egress:
    - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
      ports:
      - protocol: UDP
        port: 53
      - protocol: TCP
        port: 25
      - protocol: TCP
        port: 465

다음으로 Mailu Helm 리포지토리를 추가하고 values.yaml 파일을 만드세요. 도메인, 시간대, 초기 관리자 계정, 스토리지 옵션, 네트워크 인터페이스 등의 핵심 설정을 포함합니다. 클러스터의 StorageClass에 맞게 조정하세요.

주요 values.yaml 파라미터:

  • hostnames: ["mail.yourdomain.com"]
  • domain: yourdomain.com
  • 관리자 설정을 위한 initialAccount
  • PostgreSQL 또는 MariaDB 설정
  • 영속성 설정 (예: size: 50Gi)
  • cert-manager 어노테이션이 포함된 Ingress 설정
  • Frontend를 LoadBalancer 타입으로

차트를 설치하세요:

Google AdInline article slot
helm install mailu mailu/mailu -n dmz-mailu --values mailu_values.yaml

TLS 문제 해결 및 고급 설정

Ingress의 TLS 처리 특성 때문에 Mailu에서 SSL 오류가 발생할 수 있습니다. 대안으로 frontend 전용 LoadBalancer 서비스를 사용해 웹 UI를 별도 IP로 분리하고 Ingress TLS 충돌을 피하세요.

매니페스트 예제 (svc-mailu-front-web.yaml):

apiVersion: v1
kind: Service
metadata:
  name: svc-mailu-front-web
  namespace: dmz-mail
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app.kubernetes.io/component: front
    app.kubernetes.io/instance: mailu
    app.kubernetes.io/name: mailu
  type: LoadBalancer
  loadBalancerIP: 192.168.10.201

적용 후 로컬 DNS나 hosts 파일에서 mail-local.yourdomain.com을 해당 IP로 가리키세요. values.yaml의 loadBalancerIP로 게이트웨이에서 25번 포트를 포워딩해 수신 메일을 처리합니다.

DKIM, DMARC, SPF 설정

Gmail이나 Outlook 같은 서비스로의 전달을 보장하려면 DKIM, DMARC, SPF를 설정하세요. 이 인증 프로토콜은 발신자 신원을 검증해 스팸 폴더로 가지 않게 합니다.

설정 단계:

  • Mailu 관리 웹 UI에서 관리메일 도메인 → 도메인 선택 → 편집.
  • 오른쪽 상단의 키 생성 클릭.
  • DKIM, DMARC, SPF용 TXT 레코드를 도메인 DNS에 복사.
  • 전파 대기 (최대 48시간).

mxtoolbox.com 같은 도구로 검증하세요. 외부 주소로 테스트 송신—초기 메일은 스팸으로 갈 수 있으니 휴지통 확인.

성능 및 보안 최적화

Mailu의 선택적 컴포넌트를 비활성화해 리소스를 절약하거나 설정을 간소화할 수 있습니다. ClamAV(바이러스 검사), OleTools(Office 파일 스캐너), Tika(메타데이터 처리)는 핵심 메일 기능에 필수가 아니니 values.yaml에서 false로 설정하세요.

홈 사용 추천:

  • clamav: false
  • oletools: false
  • tika: false

Rspamd(스팸 필터)는 활성화 유지—입/출력 메일을 효과적으로 처리합니다.

주요 요약

  • 고정 IP의 PTR 레코드는 안정적 전달에 필수.
  • 전용 네임스페이스와 네트워크 정책으로 배포 보안 강화.
  • Ingress TLS 문제를 해결하려면 별도 LoadBalancer 서비스 사용.
  • 외부 메일 전달을 위해 DKIM, DMARC, SPF 필수.
  • ClamAV 같은 비필수 컴포넌트 비활성화로 리소스 절감.

— Editorial Team

Advertisement 728x90

다음 읽기