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:
- Email từ internet đến MX record của bạn (trỏ vào PMG)
- PMG nhận, kiểm tra spam score, quét virus, áp dụng rule
- Email sạch được relay tiếp vào mail server nội bộ
- 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.

