- Mailcow dockerized là bộ mail server full-stack: Postfix + Dovecot + SOGo + Rspamd + ClamAV + Roundcube + Sieve.
- Self-host trên 1 VPS 4-8 GB RAM cho startup VN dưới 100 mailbox, đặt domain riêng @yourstartup.com.
- Yêu cầu khắt khe: PTR record, SPF, DKIM, DMARC, không bị blacklist, không trên IP cloud spam-prone.
- Backup hằng ngày bằng restic ra B2/R2 - mất dữ liệu mail là mất khách hàng, không có chỗ phục hồi miễn phí.
- Phù hợp khi muốn data sovereignty, tiết kiệm so với Google Workspace 6 USD/user/tháng x 50 user.
Startup 30 người dùng Google Workspace: 30 x 6 USD x 12 = 2160 USD/năm. Sau 3 năm là 6500 USD chỉ để có email + Drive + Calendar. Trong khi đó, 1 VPS 8 GB RAM chạy Mailcow + Nextcloud (thay Drive) chỉ tốn 300-500 USD/năm. Nếu data sovereignty quan trọng (khách hàng VN/EU yêu cầu data on-shore), self-host gần như là duy nhất hợp lý.
Nhưng tự host email server thì khó. Email phải qua nhiều cổng kiểm tra: SPF, DKIM, DMARC, IP reputation, blacklist database. Sai 1 bước, mail vào spam Gmail. Bài này hướng dẫn deploy Mailcow đầy đủ cho startup Việt Nam, kèm checklist deliverability đảm bảo mail outbound qua Gmail/Outlook không spam, có guide xử lý khi bị blacklist.
Mailcow là gì và phù hợp với ai?
Mailcow là bộ mail server open source bằng Docker, được dev người Đức duy trì từ 2016, ổn định, cộng đồng lớn. Đóng gói sẵn:
- Postfix: SMTP nhận/gửi mail.
- Dovecot: IMAP/POP3 cho client (Outlook, Apple Mail, mobile).
- SOGo: webmail kèm calendar + contacts (CardDAV/CalDAV).
- Rspamd: anti-spam, có UI quản lý whitelist/blacklist.
- ClamAV: quét virus attachment.
- Roundcube: webmail nhẹ thay thế khi không thích SOGo.
- Sieve: rule lọc mail server-side.
- Admin UI: tạo domain, mailbox, alias, set quota qua web.
Phù hợp: startup 10-200 mailbox, đội kỹ thuật có sysadmin cơ bản. Không phù hợp: cá nhân 1-2 mailbox (dùng Fastmail, Migadu rẻ hơn), enterprise 1000+ mailbox (Microsoft Exchange phù hợp hơn về compliance).
Chọn VPS phù hợp
| Số mailbox | RAM | vCPU | SSD | Bandwidth |
|---|---|---|---|---|
| 1-20 | 4 GB | 2 vCPU | 80 GB | 100 Mbps |
| 20-100 | 8 GB | 4 vCPU | 200 GB | 200 Mbps |
| 100-300 | 16 GB | 4-6 vCPU | 500 GB | 500 Mbps |
| 300-1000 | 32 GB | 8 vCPU | 1 TB | 1 Gbps |
Lưu ý đặc biệt cho mail server: IP reputation. Nhiều provider cloud có IP nằm trong blacklist do bị khách trước spam. Khi mua VPS dành cho mail, hỏi rõ provider có IP "clean" cho mail không, hoặc bạn được phép request đổi IP nếu IP cấp ban đầu bị blacklist. PTR record (reverse DNS) phải set được theo domain bạn.
DNS records bắt buộc trước khi cài
Set trước các record sau ở DNS provider (Cloudflare, AWS Route 53, ...):
| Name | Type | Value | Mục đích |
|---|---|---|---|
| mail.your-domain.com | A | 1.2.3.4 | Hostname mail server |
| autodiscover.your-domain.com | CNAME | mail.your-domain.com | Outlook/Mac auto config |
| autoconfig.your-domain.com | CNAME | mail.your-domain.com | Thunderbird auto config |
| your-domain.com | MX | 10 mail.your-domain.com | Nhận inbound mail |
| your-domain.com | TXT (SPF) | v=spf1 mx -all | SPF authorize MX |
| _dmarc.your-domain.com | TXT | v=DMARC1; p=quarantine; rua=mailto:[email protected] | DMARC policy |
Quan trọng nhất: liên hệ provider VPS yêu cầu PTR record cho IP trỏ về mail.your-domain.com. Không có PTR đúng, Gmail/Outlook reject mail outbound 90% trường hợp.
Cài Mailcow dockerized
# Ubuntu 24 LTS / Debian 13 / AlmaLinux 9
# Cài Docker + Compose
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# Clone Mailcow
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
# Generate config
sudo ./generate_config.sh
# Nhập mail hostname: mail.your-domain.com
# Time zone: Asia/Ho_Chi_Minh
# Branch: master (stable)
# Bật stack
sudo docker compose pull
sudo docker compose up -d
Đợi 5-10 phút cho images pull về và init. Sau đó vào https://mail.your-domain.com đăng nhập admin / moohoo (đổi mật khẩu ngay lập tức). Nếu cert Let's Encrypt chưa cấp tự động (port 80 đang bị chiếm), debug log docker logs mailcow-acme-mailcow.
Tạo domain và mailbox
Trong admin UI Mailcow:
- Email Configuration -> Domains -> Add domain: your-domain.com, quota 10 GB/mailbox, max mailbox 50.
- Sau khi domain xanh, click "DNS" -> copy DKIM public key.
- Sang DNS provider, thêm TXT record
dkim._domainkey.your-domain.comvới value DKIM vừa copy. - Quay lại Mailcow, click "Test DNS" -> phải xanh hết SPF, DKIM, DMARC.
- Email Configuration -> Mailboxes -> Add mailbox: [email protected], password mạnh, quota 5 GB.
Test gửi từ [email protected] sang gmail cá nhân. Kiểm tra source headers: SPF=PASS, DKIM=PASS, DMARC=PASS. Nếu fail, dừng lại sửa DNS trước khi gửi tiếp.
Test deliverability với mail-tester.com
Vào mail-tester.com, lấy địa chỉ test (vd [email protected]). Gửi mail từ Mailcow tới đó. Refresh trang, xem score:
- 10/10: hoàn hảo, mail outbound chắc chắn vào inbox Gmail.
- 8-9/10: OK cho production, fix các warning nhỏ.
- 6-7/10: có vấn đề, kiểm tra IP blacklist + reverse DNS.
- Dưới 6: không nên gửi production, cần fix gốc trước (đổi IP, blacklist...).
Mail-tester thường liệt kê chi tiết: thiếu DKIM canonicalization, có URL bị blacklist, body quá ngắn, không có text version. Sửa từng cái rồi test lại.
Anti-spam Rspamd
Mailcow đã cài Rspamd sẵn với rule mặc định khá tốt. Vào mail.your-domain.com/rspamd để xem dashboard:
- Score tăng: mail bị nghi spam. Trên 6.0 reject, 4.0-6.0 đánh dấu spam folder.
- History: log từng mail in/out với score, action, sender, recipient.
- Symbols: liệt kê rule nào trigger (FORGED_RECIPIENTS, BLACKLIST_URL, ...).
- Bayes: dạy spam/ham bằng cách move mail vào Junk - Rspamd tự học.
- Whitelist/Blacklist: thêm sender hoặc IP cụ thể.
Khuyến nghị: train Bayes 200-500 mail spam và 200-500 ham trong tuần đầu để filter quen với pattern email công ty.
Backup hằng ngày bằng restic
Mất mail = mất hợp đồng, mất khách hàng. Backup không thể bỏ. Script /etc/cron.daily/backup-mailcow.sh:
#!/usr/bin/env bash
set -euo pipefail
export RESTIC_REPOSITORY="b2:my-backup-bucket:mailcow"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
export B2_ACCOUNT_ID="..."
export B2_ACCOUNT_KEY="..."
cd /opt/mailcow-dockerized
./helper-scripts/backup_and_restore.sh backup all --delete-days 14
# Sync backup folder ra B2
restic backup /var/backups/mailcow --tag mailcow-daily
restic forget --tag mailcow-daily --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod +x, đặt timer hoặc cron @daily. Test restore mỗi quý 1 lần để chắc backup readable. Backup 100 mailbox active khoảng 5-10 GB/lần, B2 storage ~0.5 USD/tháng cho 50 snapshot.
Bảo mật cao
- Bật 2FA cho admin Mailcow và mailbox cá nhân (TOTP support sẵn).
- Restrict admin UI bằng Cloudflare Zero Trust hoặc allow IP list.
- Bật fail2ban (Mailcow có sẵn), tự ban IP brute force SMTP/IMAP.
- Disable POP3 nếu không ai dùng, giữ IMAP TLS only.
- Quota chặt: 5-10 GB/mailbox, tránh user lưu cả TB ảnh meme.
- Cron job hằng tuần check IP có trong các DNSBL: spamhaus, barracuda, sorbs.
- Monitor disk: mail spike vài GB/ngày là dấu hiệu spam attack hoặc bị compromise.
Khi nào nên dùng SaaS relay outbound?
Self-host Mailcow cho inbound + nội bộ rất ổn. Nhưng outbound transactional volume cao (>5k email/ngày: invoice, OTP, notification), IP của bạn dễ bị Google/Outlook flag dù không spam. Giải pháp: dùng SaaS SMTP relay outbound (AWS SES, Postmark, Brevo, SendGrid, Resend) cho mail transactional, Mailcow chỉ làm inbound + nội bộ.
Cấu hình relay trong Mailcow: Configuration -> Configuration & Details -> Routing -> Sender-dependent transports. Pattern: mail từ [email protected] đi qua SES, mail từ founder@... đi trực tiếp. Cân bằng cost/deliverability/độ kiểm soát.
Bẫy thường gặp
| Triệu chứng | Nguyên nhân | Cách fix |
|---|---|---|
| Mail outbound vào spam Gmail | Thiếu DKIM hoặc PTR | Verify mail-tester, fix DKIM + xin PTR provider |
| Mail inbound không tới Mailcow | MX trỏ sai hoặc port 25 bị chặn | Test bằng telnet your-domain.com 25, kiểm tra MX nslookup |
| SOGo webmail load chậm | RAM không đủ + IMAP cache nóng | Nâng RAM lên 8 GB, set vmail cache lớn hơn |
| Container restart loop | Disk full hoặc port conflict | df -h check disk, docker logs xem chi tiết |
| IP bị blacklist Spamhaus | User bị hack, gửi spam outbound | Disable user, change password, request delisting Spamhaus |
VPS có PTR setting cho mail server startup
Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Hỗ trợ cấu hình PTR record theo yêu cầu, port 25 mở mặc định cho mail outbound, đủ điều kiện chạy Mailcow production.
Xem 8 cấu hình Cloud VPS →FAQ
Mailcow có miễn phí cho commercial không?
Có. License GPL v2, miễn phí dùng cả commercial. Có tier "Sponsoring" tự nguyện cho ai muốn ủng hộ team dev. Không có hard limit nào kể cả số mailbox, chỉ giới hạn bởi tài nguyên VPS bạn cấp.
Có thể migrate từ Google Workspace sang Mailcow không?
Có. Mailcow có tab Sync Jobs cho phép pull IMAP từ source (gmail, outlook) sang mailbox đích. Cần generate app password Google. Migrate 1 mailbox 5GB mất 30-60 phút. Calendar và Contacts xuất từ Google ra ICS/VCF rồi import vào SOGo qua web.
Nếu VPS bị tấn công thì sao?
Backup hằng ngày là phòng tuyến đầu. Tấn công thường: brute force SMTP/IMAP (fail2ban xử lý), spam outbound từ tài khoản bị compromise (monitor + disable user), zero-day Docker (update Mailcow hằng tháng). Snapshot VPS hằng tuần để rollback toàn hệ thống khi xấu nhất. Nếu mất dữ liệu hoàn toàn, restic restore từ B2/R2 sẽ phục hồi trong 1-2 tiếng.
Tôi không có sysadmin background, có nên tự host không?
Cân nhắc kỹ. Mail server đòi hỏi maintenance đều: update, backup, monitor, xử lý blacklist, fix DNS. Nếu không đủ tự tin, dùng Google Workspace hoặc Migadu (1.9 USD/mailbox/tháng) - tiết kiệm thời gian + đỡ stress. Self-host hợp với người có 1-2 năm linux admin + sẵn sàng dành 2-4 giờ/tháng cho mail server.
Có thể chạy Mailcow chung VPS với app khác không?
Không nên. Mail server chiếm port 25, 80, 443, 465, 587, 993, 995. Postfix hay phải priority cao, có thể conflict với reverse proxy. Khuyến nghị: 1 VPS riêng cho Mailcow, các app khác (Gitea, n8n, ...) ở VPS thứ 2. Tách biệt vừa an toàn vừa dễ maintain. Cost không tăng đáng kể vì VPS 4-8 GB không quá đắt.


