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 serverProxmox 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 serverbackup 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

  • Gửi một email thử đến bất kỳ tài khoản nào trên server (ví dụ: test@domain.com).
  • Đăng nhập vào địa chỉ email nhận BCC (audit@domain.com), kiểm tra xem có nhận được bản sao không.
  • Kiểm tra email gốc ở người nhận ban đầu — phải vẫn nhận đầy đủ.
  • 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ânCách xử lý
    Email gốc không đến người nhậnThiếu unseen flagThêm unseen vào router
    BCC không hoạt độngSyntax error trong configChạy exim -bV để check lỗi
    Server load cao / crashBCC loop (audit email trên cùng server)Thêm condition tránh loop
    Config không được áp dụngChưu restart EximChạy lệnh update và restart
    BCC đến spamEmail không có SPF/DKIMCấ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 transport thay 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ạy update-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ể.

    Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...