Bạn muốn theo dõi tất cả email gửi đến server bằng cách tự động BCC chúng đến một địa chỉ email giám sát? Trên Exim — mail server phổ biến nhất trên Linux — bạn có thể cấu hình BCC email Exim bằng một router redirect với flag unseen để gửi bản sao (blind carbon copy) mà không ảnh hưởng đến luồng email gốc.
Bài viết này sẽ hướng dẫn bạn cấu hình BCC tất cả email nhận vào trên Exim một cách an toàn: cách thêm rule, cách tránh loop (vòng lặp), cách kiểm tra hoạt động, và các lưu ý quan trọng trước khi triển khai trên production.
Cấu hình BCC email Exim cho tất cả mail nhận vào
Tùy thuộc vào hệ điều hành và cách cài đặt, Exim có hai dạng cấu hình:
Tìm hiểu thêm về ClamAV antivirus cho server và Proxmox Backup Server trên vnhte.com.
- Debian/Ubuntu (HestiaCP, Vestacp): Split config trong
/etc/exim4/conf.d/ - RHEL/CentOS/AlmaLinux: File đơn
/etc/exim/exim.conf
Tìm hiểu thêm về ClamAV antivirus cho email server và backup server trên vnhte.com.
Kiểm tra cấu trúc Exim trên server của bạn:
# Kiểm tra Exim version và config location exim -bV | grep "Configuration" # Output: /var/lib/exim4/config.autogenerated # Debian/Ubuntu: kiểm tra split config ls -la /etc/exim4/conf.d/ # Nếu có thư mục conf.d/ → đang dùng split config # Kiểm tra main config cat /etc/exim4/exim4.conf | grep -i "Splits" # CentOS/RHEL: kiểm tra file đơn cat /etc/exim/exim.conf | head -20
Debian/Ubuntu (split config):
# Tạo file router mới sudo nano /etc/exim4/conf.d/router/200_exim4-config_bcc_incoming # Thêm nội dung sau: bcc_incoming: driver = redirect allow_fail allow_defer unseen data = audit@domain.com
CentOS/RHEL (single config):
# Thêm vào phần routers trong /etc/exim/exim.conf # Tìm "begin routers" và thêm sau đó: bcc_incoming: driver = redirect allow_fail allow_defer unseen data = audit@domain.com
Thay audit@domain.com bằng địa chỉ email bạn muốn nhận bản sao BCC. Ví dụ: admin@example.com.
- driver = redirect: Sử dụng redirect driver để chuyển hướng email — không phải deliver trực tiếp.
- unseen: Quan trọng nhất! Email gốc vẫn được gửi đến người nhận ban đầu. Đồng thời, một bản sao được gửi đến địa chỉ BCC. Không có unseen, email sẽ chỉ được chuyển đến BCC và không đến người nhận gốc.
- allow_fail / allow_defer: Nếu việc gửi BCC thất bại (ví dụ: email không tồn tại), email gốc vẫn được deliver bình thường.
- data = audit@domain.com: Địa chỉ email nhận bản sao BCC.
# Debian/Ubuntu (HestiaCP): sudo update-exim4.conf sudo systemctl restart exim4 # CentOS/RHEL: sudo systemctl restart exim
Tránh vòng lặp khi BCC email Exim
Vấn đề: Nếu địa chỉ email nhận BCC (ví dụ: audit@domain.com) là một tài khoản trên cùng server, email BCC sẽ bị chặn lại bởi chính rule BCC → tạo thành vòng lặp infinite → server crash.
Giải pháp: Thêm điều kiện để Exim không BCC email đến chính địa chỉ nhận BCC.
# Thêm condition vào router BCC
bcc_incoming:
driver = redirect
allow_fail
allow_defer
unseen
condition = ${if !eq{$local_part@$domain}{audit@domain.com}{true}{false}}
data = audit@domain.com
Điều kiện !eq nghĩa là: chỉ BCC khi người nhận KHÔNG phải là địa chỉ BCC. Nếu email gửi đến user@domain.com → BCC gửi đến audit@domain.com. Nếu email gửi đến audit@domain.com → KHÔNG BCC (tránh loop).
BCC theo domain hoặc user cụ thể
Nếu bạn chỉ muốn BCC email đến một domain hoặc user nhất định, thêm điều kiện lọc:
# BCC tất cả email đến domain.com
bcc_incoming:
driver = redirect
allow_fail
allow_defer
unseen
condition = ${if match{$domain}{domain\.com}{yes}{no}}
condition = ${if !eq{$local_part@$domain}{audit@domain.com}{true}{false}}
data = audit@domain.com
# BCC chỉ email đến user admin
bcc_incoming:
driver = redirect
allow_fail
allow_defer
unseen
condition = ${if eq{$local_part}{admin}{yes}{no}}
data = audit@domain.com
Kiểm tra hoạt động
test@domain.com).audit@domain.com), kiểm tra xem có nhận được bản sao không.Nếu không nhận được, kiểm tra log:
# Xem log Exim sudo tail -f /var/log/exim4/mainlog # Hoặc CentOS: sudo tail -f /var/log/exim/mainlog # Filter BCC messages grep "bcc_incoming" /var/log/exim4/mainlog
Troubleshooting lỗi thường gặp
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Email gốc không đến người nhận | Thiếu unseen flag | Thêm unseen vào router |
| BCC không hoạt động | Syntax error trong config | Chạy exim -bV để check lỗi |
| Server load cao / crash | BCC loop (audit email trên cùng server) | Thêm condition tránh loop |
| Config không được áp dụng | Chưu restart Exim | Chạy lệnh update và restart |
| BCC đến spam | Email không có SPF/DKIM | Cấu hình SPF, DKIM cho domain BCC |
Lưu ý quan trọng trước khi triển khai
- Backup trước: Luôn backup file cấu hình trước khi chỉnh sửa:
sudo cp -r /etc/exim4 /etc/exim4.backup - Xung đột với filter khác: Nếu server đã có các rule filter hoặc forward khác, kiểm tra xem có xung đột không trước khi thêm BCC rule.
- Spam risk: BCC tất cả email có thể khiến server bị đánh dấu là spam nếu email không có proper authentication (SPF, DKIM, DMARC).
- Privacy: BCC email mà không thông báo có thể vi phạm luật privacy (GDPR, etc.) tùy quốc gia. Cân nhắc thông báo cho users.
- Disk space: Nếu email volume lớn, địa chỉ BCC sẽ nhận tất cả. Đảm bảo mailbox có đủ storage.
FAQ – Câu hỏi thường gặp
- Có thể BCC email Exim gửi đi không? Có, cách cấu hình tương tự nhưng thêm vào phần
transportthay vìrouter. Tuy nhiên, cần điều kiện khác ($sender_address). - BCC email Exim có thể gửi đến nhiều địa chỉ không? Có. Thay đổi
data = addr1@domain.com, addr2@domain.com - BCC email Exim có giữ header gốc không? Có. Exim giữ nguyên headers gốc, chỉ thêm một bản sao gửi đến địa chỉ BCC.
- Làm sao xóa rule BCC email Exim? Xóa file
/etc/exim4/conf.d/router/200_exim4-config_bcc_incoming, chạyupdate-exim4.conf, restart Exim. - BCC email Exim có ảnh hưởng performance không? Rất ít. Router redirect với unseen chỉ tạo thêm 1 bản sao, overhead gần như không đáng kể.