Tự triển khai Email Server với Mailcow: Nhìn lại 6 tháng vận hành thực tế

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Tại sao tôi từ bỏ các dịch vụ Email Hosting trả phí

Sau khi phải chi trả 6 USD cho mỗi người dùng hàng tháng cho Google Workspace, cuối cùng tôi đã quyết định giành lại quyền kiểm soát dữ liệu của mình. Việc tự vận hành email server (self-hosting) thường bị coi là “cơn ác mộng” đối với các quản trị viên hệ thống. Tuy nhiên, sau khi vận hành Mailcow thực tế hơn 180 ngày, tôi nhận thấy rằng “cơn ác mộng” đó thực chất chỉ là một chuỗi các rào cản về DNS mà bất kỳ ai cũng có thể vượt qua. Hiện tại, server của tôi đang xử lý ba tên miền và khoảng 50 email mỗi ngày với thời gian uptime tuyệt đối và khả năng gửi thư vào inbox hoàn hảo.

Mailcow không chỉ đơn thuần là một mail server; nó là một hệ sinh thái được đóng gói bằng Docker. Nó tích hợp sẵn Postfix để gửi thư, Dovecot để lưu trữ, Rspamd để lọc thư rác và giao diện webmail SOGo. Mailcow xử lý các công việc phức tạp về điều phối container, giúp bạn không phải tốn hàng giờ để chỉnh sửa các file cấu hình khó hiểu một cách thủ công.

Điều kiện tiên quyết: Đừng tiết kiệm phần cứng

Trước khi chạy bất kỳ câu lệnh nào, bạn cần một nền tảng phù hợp. Ban đầu tôi đã thử dùng VPS có 2GB RAM và đó là một thảm họa. ClamAV (trình diệt virus) và Solr (lập chỉ mục tìm kiếm) cực kỳ ngốn bộ nhớ. Để có trải nghiệm mượt mà, bạn cần một VPS Linux với ít nhất 4GB RAM — mặc dù 8GB mới là “điểm ngọt” nếu bạn muốn giao diện web hoạt động nhanh nhạy.

Quan trọng nhất, hãy xác nhận rằng nhà cung cấp VPS của bạn cho phép lưu lượng truy cập qua Cổng 25 (Port 25). Các nhà cung cấp như DigitalOcean, Vultr và AWS mặc định chặn cổng này đối với các tài khoản mới. Bạn thường phải mở một yêu cầu hỗ trợ (support ticket) và giải thích mục đích sử dụng để được mở chặn. Nếu họ từ chối, server của bạn sẽ không bao giờ có thể gửi được thư.

1. Chuẩn bị môi trường

Bắt đầu với một bản cài đặt Ubuntu 22.04 hoặc 24.04 LTS sạch. Cập nhật các gói phần mềm và cài đặt Docker engine.

sudo apt update && sudo apt upgrade -y
sudo apt install curl git -y
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable --now docker

2. Tải mã nguồn và Cấu hình

Tôi khuyên bạn nên để tất cả các dịch vụ Docker trong thư mục /opt để dễ dàng quản lý. Điều này giúp việc sao lưu sau này trở nên đơn giản hơn nhiều.

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh

Script sẽ yêu cầu bạn nhập Fully Qualified Domain Name (FQDN), ví dụ: mail.yourdomain.com. Hãy đảm bảo subdomain này đã trỏ về địa chỉ IP của server trước khi chạy script.

3. Khởi chạy hệ thống

docker compose pull
docker compose up -d

Hãy đợi khoảng hai phút để hệ thống khởi tạo tất cả hơn 17 container. Sau đó, bạn có thể truy cập trang quản trị qua FQDN của mình. Đăng nhập với thông tin mặc định là admin / moohoo và thay đổi chúng ngay lập tức. Thực sự đấy — hãy đổi ngay đi.

Ba trụ cột để email vào Inbox

Cài đặt server chỉ mất mười phút. Nhưng để khiến các “ông lớn” (Gmail/Outlook) tin tưởng bạn thì cần nỗ lực hơn một chút. Nếu DNS của bạn không hoàn hảo, email sẽ biến mất vào thư mục spam. Tôi đã sử dụng chính xác các thiết lập sau để duy trì điểm số 10/10 trên Mail-Tester.

SPF (Sender Policy Framework)

Bản ghi này xác thực địa chỉ IP của server được phép gửi thư thay mặt cho tên miền của bạn. Đây là một bản ghi TXT đơn giản trong cài đặt DNS.

v=spf1 ip4:1.2.3.4 -all

Hãy sử dụng -all (Hard Fail) thay vì ~all (Soft Fail). Nó yêu cầu các server nhận từ chối bất kỳ thư nào không đến từ IP của bạn, điều này giúp tăng uy tín (reputation) của bạn một cách đáng kể.

DKIM (DomainKeys Identified Mail)

Mailcow ký vào mỗi email gửi đi bằng một chữ ký số. Trong giao diện Mailcow, hãy vào phần Configuration > DNS Records để tạo khóa. Sao chép khóa công khai (public key) đó vào một bản ghi TXT cho selector dkim._domainkey tại nhà cung cấp DNS của bạn (như Cloudflare hoặc Namecheap).

DMARC (Reporting and Conformance)

DMARC hướng dẫn các server khác phải làm gì nếu SPF hoặc DKIM thất bại. Tôi khuyên bạn nên bắt đầu với chính sách ‘quarantine’ (cách ly).

v=DMARC1; p=quarantine; rua=mailto:[email protected]

Bản ghi PTR: Điều kiện bắt buộc

Địa chỉ IP của bạn phải phân giải ngược lại về tên miền mail. Đây được gọi là Reverse DNS (rDNS) hoặc bản ghi PTR. Bạn không thể thiết lập bản ghi này trong bảng điều khiển DNS của tên miền; bạn phải thiết lập nó trong dashboard của nhà cung cấp VPS. Không có bản ghi này, Gmail sẽ từ chối email của bạn ngay lập tức với lỗi 550.

Vấn đề “IP bẩn”: Sử dụng SMTP Relay

Đôi khi, bạn làm đúng mọi thứ nhưng dải IP của nhà cung cấp VPS đã nằm trong danh sách đen do người dùng trước đó phát tán spam. Nếu bạn thấy mình nằm trong danh sách chặn của Spamhaus, đừng bỏ cuộc. Tôi đã giải quyết vấn đề này bằng cách định tuyến email gửi đi qua một SMTP relay.

Mailcow hỗ trợ việc này một cách tự nhiên. Bạn có thể sử dụng các dịch vụ như Amazon SES với chi phí cực rẻ — khoảng 0,10 USD cho mỗi 1.000 email. Trong giao diện Mailcow, vào Configuration > Setup > Routing và thêm thông tin đăng nhập SES của bạn. Server của bạn vẫn xử lý tất cả email đến và lưu trữ, nhưng Amazon sẽ đảm nhận việc “bắt tay” gửi thư ra thế giới bên ngoài.

Thói quen bảo trì để hệ thống luôn khỏe mạnh

Bạn không thể chỉ cài đặt xong rồi để đó. Đây là cách tôi giữ cho hệ thống của mình hoạt động trơn tru trong sáu tháng qua:

  • Sao lưu hàng đêm: Sử dụng script có sẵn trong ./helper-scripts/backup_and_restore.sh. Tôi có một cron job chạy script này vào lúc 3 giờ sáng và rsync thư mục sao lưu 4GB sang một bộ lưu trữ bên ngoài (off-site).
  • Tinh chỉnh Rspamd: Kiểm tra số liệu thống kê của Rspamd mỗi tuần một lần. Nếu bạn nhận thấy các mẫu spam cụ thể, bạn có thể dễ dàng điều chỉnh trọng số của một số ký hiệu để chặn chúng trước khi chúng lọt vào hộp thư đến.
  • Luôn cập nhật: Mailcow phát triển rất nhanh. Hãy chạy ./update.sh mỗi tháng một lần để cập nhật các bản vá bảo mật và tính năng mới. Luôn nhớ chụp snapshot VPS trước khi cập nhật.
  • Theo dõi RAM: Nếu server 4GB của bạn bắt đầu tràn bộ nhớ đệm (swapping), hãy tắt ClamAV trong mailcow.conf (SKIP_CLAMD=y). Bạn sẽ mất tính năng quét virus tích hợp, nhưng sẽ tiết kiệm được gần 1GB RAM.

Tự vận hành email server là một sự cam kết, nhưng phần thưởng nhận lại là sự riêng tư tuyệt đối và hiểu biết sâu sắc hơn về cách thức hoạt động của internet. Nếu bạn tuân thủ các quy tắc DNS và cập nhật phần mềm thường xuyên, Mailcow là một lựa chọn thay thế vững chắc cho các nhà cung cấp lớn.

Share: