Triển khai Proxmox Mail Gateway làm lớp bảo vệ cho Mail Server: Hướng dẫn ảo hóa bộ lọc Spam và mã độc chuyên nghiệp

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Mail server bị spam tấn công — bài toán thực tế

Nếu bạn đang vận hành mail server nội bộ — dù là Postfix, Exchange hay Zimbra — chắc chắn bạn đã từng nhìn vào hàng trăm email rác mỗi ngày và tự hỏi: làm sao để chặn đống này trước khi nó chạm vào hộp thư người dùng?

Mình gặp đúng vấn đề đó khi dựng mail server cho một dự án nhỏ. Postfix chạy tốt, nhưng spam và phishing thì vào vô tư. Antispam tích hợp sẵn thì yếu, còn thuê dịch vụ lọc ngoài thì tốn tiền. Giải pháp mình chọn: đặt Proxmox Mail Gateway (PMG) ngồi trước mail server, đóng vai trò gateway lọc toàn bộ traffic SMTP.

Mình chạy homelab với Proxmox VE quản lý 12 VM và container — đây là playground để test mọi thứ trước khi đưa lên production. PMG được mình dựng lên như một VM riêng biệt, xử lý email trước khi chuyển vào mail server chính. Kết quả: spam giảm hơn 95%, không cần trả thêm một đồng nào.

Proxmox Mail Gateway là gì và nó hoạt động thế nào?

Proxmox Mail Gateway (PMG) là một giải pháp email security mã nguồn mở, chạy trên nền Debian, tích hợp sẵn các công cụ lọc thư nổi tiếng:

  • SpamAssassin — phân tích header, nội dung, scoring spam
  • ClamAV — quét virus, malware trong file đính kèm
  • Postfix — MTA nhận và chuyển tiếp email
  • Fetchmail + Razor/Pyzor — collaborative spam detection

Luồng hoạt động cực kỳ đơn giản:

  1. Email từ internet đến MX record của bạn (trỏ vào PMG)
  2. PMG nhận, kiểm tra spam score, quét virus, áp dụng rule
  3. Email sạch được relay tiếp vào mail server nội bộ
  4. Email bẩn bị block, quarantine hoặc gắn tag

Mail server thật của bạn hoàn toàn ẩn sau PMG — nó không cần expose ra ngoài internet nữa.

Thực hành: Cài đặt và cấu hình từng bước

Bước 1: Chuẩn bị môi trường

PMG cần một máy riêng (hoặc VM). Cấu hình tối thiểu để chạy ổn:

  • CPU: 2 core
  • RAM: 2GB (khuyến nghị 4GB nếu traffic cao)
  • Disk: 32GB
  • 2 IP: 1 public (nhận mail từ internet), 1 internal (relay vào mail server)

Nếu bạn đang dùng Proxmox VE như mình, tạo VM mới, mount ISO của PMG và cài như bình thường. ISO tải tại trang chủ Proxmox — miễn phí hoàn toàn.

Bước 2: Cài đặt PMG

Boot từ ISO, màn hình cài đặt khá straightforward. Quan trọng nhất là phần network:

  • Hostname: đặt FQDN, ví dụ mail-gw.yourdomain.com
  • IP: IP public hoặc IP nội bộ tùy topology
  • Gateway: default gateway của bạn

Sau khi cài xong, truy cập web UI tại:

https://<IP_PMG>:8006

Đăng nhập bằng root và mật khẩu bạn đặt lúc cài.

Bước 3: Cấu hình Relay Domain

Đây là bước quan trọng nhất — nói cho PMG biết nó sẽ nhận email cho domain nào và relay vào đâu.

Vào Configuration → Mail Proxy → Relay Domains, thêm domain của bạn:

# Domain nhận email
yourdomain.com

# Relay target: IP và port của mail server nội bộ
# Ví dụ: 192.168.1.50:25

Trong giao diện web, điền vào form:

  • Domain: yourdomain.com
  • Relay Host: 192.168.1.50
  • Relay Port: 25

Bước 4: Trỏ MX Record về PMG

Sau khi PMG cài xong và cấu hình relay, bước tiếp theo là cập nhật DNS:

# DNS Records cần thay đổi
# MX record trỏ vào PMG (không phải mail server cũ)
yourdomain.com.  MX  10  mail-gw.yourdomain.com.

# A record cho hostname của PMG
mail-gw.yourdomain.com.  A  <IP_PUBLIC_PMG>

# SPF record (nếu dùng PMG để gửi đi)
yourdomain.com.  TXT  "v=spf1 ip4:<IP_PUBLIC_PMG> ~all"

Lưu ý: mail server nội bộ của bạn nên được firewall block port 25 từ ngoài internet — chỉ cho phép kết nối từ IP của PMG.

Bước 5: Cấu hình Spam Filter

Vào Configuration → Mail Filter → Rules để tạo các rule xử lý spam. PMG có sẵn rule mẫu, nhưng mình thường tùy chỉnh lại:

# Rule 1: Block email có spam score cao
# Condition: Spam Score >= 7
# Action: Block (reject với 5xx code)

# Rule 2: Tag email nghi ngờ
# Condition: Spam Score >= 4
# Action: Add Header X-Spam-Flag: YES

# Rule 3: Block file đính kèm nguy hiểm
# Condition: Attachment matches *.exe, *.bat, *.vbs, *.js
# Action: Block + Notify Admin

Trong web UI, các rule này được cấu hình bằng drag-and-drop, khá trực quan. Mỗi rule có priority — rule có số thấp hơn được xử lý trước.

Bước 6: Bật ClamAV và test

ClamAV đã được cài sẵn, nhưng cần đảm bảo database được cập nhật:

# SSH vào PMG, cập nhật virus database thủ công
freshclam

# Kiểm tra service đang chạy
systemctl status clamav-daemon
systemctl status clamav-freshclam

# Test gửi EICAR test virus qua PMG
# EICAR string (vô hại, chỉ để test):
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | \
  sendmail -v [email protected]

Nếu ClamAV hoạt động đúng, email chứa EICAR sẽ bị block và xuất hiện trong quarantine log.

Bước 7: Xem Log và Quarantine

Đây là tính năng mình thích nhất của PMG — giao diện theo dõi mail traffic rất chi tiết:

  • Mail Log: xem từng email đi qua, spam score, action thực hiện
  • Quarantine: email bị giữ lại — admin có thể release hoặc delete
  • Statistics: biểu đồ spam/virus theo ngày, tuần, tháng

Từ command line, bạn cũng có thể query log trực tiếp:

# Xem mail log gần đây
postqueue -p

# Xem toàn bộ log PMG
journalctl -u pmg-smtp-filter -f

# Kiểm tra queue
postcat -vq <QUEUE_ID>

Bước 8: Cấu hình Whitelist/Blacklist

Trong thực tế, sẽ có email hợp lệ bị nhận diện sai là spam (false positive). PMG cho phép whitelist theo sender, domain hoặc IP:

# Vào: Configuration → Mail Filter → Whitelist
# Thêm domain tin tưởng:
github.com
google.com

# Hoặc whitelist theo sender IP (dùng cho partner trust)
# Configuration → Mail Proxy → Networks

Kết luận

PMG giải quyết một bài toán thực tế theo cách khá elegant: thay vì nhồi nhét antispam vào mail server chính, bạn tách hẳn thành một lớp riêng. Mail server nội bộ không cần lo về spam, virus — nó chỉ cần nhận email sạch từ PMG và phục vụ người dùng.

Điểm mình đánh giá cao nhất là web UI — quản lý rule, xem log, release quarantine — tất cả làm được từ trình duyệt, không cần nhớ lệnh phức tạp. Với một junior sysadmin mới bắt đầu quản lý mail server, đây là lợi thế lớn so với cấu hình SpamAssassin thủ công.

Nếu bạn đang chạy Proxmox VE, tốn chưa đến 30 phút để spin up một VM PMG và bắt đầu lọc spam ngay. Với traffic vừa phải (dưới vài nghìn email/ngày), cấu hình 2 CPU + 2GB RAM là đủ dùng thoải mái.

Share: