Triển khai hệ thống Wildduck Mail Server (Full Stack Dockerized) - Tự động Let's Encrypt, Tích hợp Anti-Spam

  • Người khởi tạo Người khởi tạo anhptt
  • Ngày bắt đầu Ngày bắt đầu
Chào anh em, tiếp nối series tự host (Self-host), hôm nay mình sẽ lên bài hướng dẫn triển khai Wildduck Mail Server dựa trên bộ source chuẩn wildduck-dockerized từ chính cha đẻ Nodemailer.

1787625863939.png

Khác với bài cấu hình tự build thủ công, bản wildduck-dockerized này là một Full Stack hoàn chỉnh bao gồm:
  • WildDuck: Core xử lý IMAP/POP3 và API.
  • WildDuck Webmail: Giao diện quản lý email trên Web.
  • ZoneMTA: Máy chủ gửi mail ra ngoài (Outbound SMTP).
  • Kirin: Máy chủ nhận mail (Inbound SMTP port 25).
  • Rspamd: Bộ lọc chống Spam/Virus cực mạnh.
  • Traefik: Reverse Proxy tự động cấp phát SSL (Let's Encrypt) và định tuyến giao thông mạng.
  • MongoDB & Redis: Cơ sở dữ liệu lưu trữ cấu trúc NoSQL.
Nhắc đến Mail Server tự host, nhiều người sẽ ngán ngẩm với cấu hình lằng nhằng của Postfix, Dovecot. Hôm nay mình sẽ giới thiệu và hướng dẫn anh em triển khai một hệ thống Mail Server siêu hiện đại: Wildduck Mail Server, sử dụng kho lưu trữ chuẩn wildduck-dockerized tích hợp sẵn Anti-spam (Rspamd) và tự động SSL (Traefik).

Vì đây là giải pháp Full-stack, hệ thống sẽ lưu email vào MongoDB (truy xuất siêu nhanh, không lo phân mảnh ổ cứng) và tự động hóa gần như 99% các bước sinh khóa DKIM, cấu hình DNS nhờ các script đi kèm.

1. Điều kiện tiên quyết (Rất quan trọng)



  • []VPS/Server có tối thiểu 2GB RAM (khuyên dùng 4GB vì Mongo và Rspamd ăn khá nhiều RAM).[]Cổng 25 (Inbound/Outbound) BẮT BUỘC phải được mở. Anh em dùng AWS, DigitalOcean, Vultr... nhớ tạo ticket xin hãng mở port này trước khi làm.

    []Đã trỏ tên miền (VD: mail.domain.com) về IP của VPS.[]Hệ thống đã cài đặt Docker và Docker Compose.

2. Các bước cài đặt chi tiết

1.Clone mã nguồn chính thức:
Thay vì tự viết file docker-compose.yml, chúng ta sẽ sử dụng bộ công cụ chuẩn do team phát triển cung cấp. Truy cập VPS qua SSH và chạy lệnh:

Bash:
git clone https://github.com/nodemailer/wildduck-dockerized.git /opt/wildduck

cd /opt/wildduck
2.Cấu hình biến môi trường (.env):
Nhân bản file cấu hình mẫu và tiến hành chỉnh sửa:

Bash:
cp example.env .env

nano .env

Anh em cần sửa các thông số sau cho đúng với hệ thống của mình (các giá trị khác có thể giữ nguyên):

Bash:
[HEADING=2]Tên miền truy cập Webmail / IMAP / SMTP (Ví dụ: mail.softlab.vn)[/HEADING]
PUBLIC_HOSTNAME=mail.softlab.vn

[HEADING=2]Tên miền đuôi email của anh em (Ví dụ: softlab.vn -> để tạo đuôi @softlab.vn)[/HEADING]
MAIL_DOMAIN=softlab.vn

[HEADING=2]BẮT BUỘC ĐỔI: Sửa các secret key này thành một chuỗi ngẫu nhiên khó đoán[/HEADING]
WILDDUCK_API_ACCESS_TOKEN=mot-chuoi-bi-mat-cua-ban

WILDDUCK_API_ACCESSCONTROL_SECRET=mot-chuoi-bi-mat-cua-ban-2

WILDDUCK_LOOP_SECRET=mot-chuoi-bi-mat-cua-ban-3

WILDDUCK_DKIM_SECRET=mot-chuoi-bi-mat-cua-ban-4

[HEADING=2]CẤU HÌNH SSL TỰ ĐỘNG BẰNG LET'S ENCRYPT[/HEADING]
TRAEFIK_TLS_MODE=acme

TRAEFIK_CERT_RESOLVER=letsencrypt

TRAEFIK_ACME_EMAIL=admin@softlab.vn # Điền email thật để nhận thông báo hết hạn SSL

[HEADING=2]THIẾT LẬP TÀI KHOẢN ADMIN ĐẦU TIÊN (Dùng cho bước Bootstrap)[/HEADING]
FIRST_USER_NAME=admin

FIRST_USER_PASSWORD=MatKhauSieuKho123!@#

FIRST_USER_ADDRESS=admin@softlab.vn

FIRST_USER_DISPLAY_NAME=Admin Mail

Lưu file lại (Ctrl+O -> Enter -> Ctrl+X).

TẠO CHỨNG CHỈ SSL CHO MAIL SERVER​


Bash:
mkdir -p ./certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout ./certs/wildduck.dockerized.test-key.pem \
  -out ./certs/wildduck.dockerized.test.pem \
  -subj "/CN=vn01.softmail.vn"
3.Build và Khởi chạy toàn bộ hệ thống:
Vẫn đang ở thư mục /opt/wildduck, anh em tiến hành build image và khởi chạy các container:

Bash:
docker compose up -d --build

Lưu ý: Quá trình này sẽ mất một lúc vì hệ thống cần build cấu hình cho Kirin và tải các DB (Mongo, Redis, Rspamd).
4.Chạy Bootstrap Script (Tự động hóa sinh cấu hình):
Đây là điểm "ăn tiền" nhất của bản dockerized. Script này sẽ tự động kết nối với API để tạo tài khoản, sinh khóa DKIM và xuất ra hướng dẫn cấu hình DNS.

Chạy lệnh sau:

Bash:
./setup-scripts/bootstrap.sh all

Hệ thống sẽ chạy và in ra màn hình toàn bộ các bản ghi DNS (A, MX, TXT, DKIM, DMARC) mà anh em cần phải cấu hình trên trang quản lý tên miền (như Cloudflare). Hãy copy phần output này lưu ra Notepad nhé.
5.Đồng bộ chứng chỉ SSL cho Kirin:
Trong kiến trúc này, Traefik sẽ xin chứng chỉ Let's Encrypt cho HTTPS/IMAPS/POP3S. Tuy nhiên, cổng 25 (SMTP) do Kirin quản lý cần chứng chỉ thật để mã hóa giao tiếp với các Mail Server khác (như Gmail).

Đầu tiên, anh em mở trình duyệt, truy cập vào Webmail của mình (VD: [https://mail.yourdomain.com](https://mail.yourdomain.com)) một lần để kích hoạt Traefik đi xin SSL.

Sau đó quay lại VPS chạy lệnh này để lấy SSL xuất sang cho Kirin và cài đặt Cronjob tự động gia hạn:

Bash:
./setup-scripts/bootstrap.sh certs --install-cron
3. Cấu hình DNS (Sinh tử của Mail Server)

Bước cuối cùng là đăng nhập vào trình quản lý tên miền (Cloudflare, Route53, v.v.) và khai báo các bản ghi DNS mà ở lệnh ./setup-scripts/bootstrap.sh all đã cung cấp.

Thường nó sẽ bao gồm:

  1. A Record: Trỏ mail về [IP_VPS].
  2. MX Record: Trỏ @ về mail.yourdomain.com (Priority 10).
  3. TXT Record (SPF): v=spf1 mx a -all
  4. TXT Record (DMARC): _dmarc -> v=DMARC1; p=quarantine;
  5. TXT Record (DKIM): Tên selector (ví dụ mar2026._domainkey) và public key tương ứng.
Sau khi cấu hình xong DNS, anh em có thể đăng nhập vào Webmail tại [https://mail.yourdomain.com](https://mail.yourdomain.com) bằng tài khoản admin đã khai báo trong file .env và thử gửi mail cho chính mình ở Gmail/Outlook.

Chúc anh em cấu hình thành công! Bất cứ bước nào có lỗi, anh em cứ ném log lên đây để mình bắt bệnh nhé.

Nguồn tham khảo: Github - nodemailer/wildduck-dockerized
 
Sửa lần cuối:
Back
Top Dưới