Khi sử dụng Server Mail thì đôi lúc bạn sẽ gặp vấn đề spam mail ra ngoài, điều này rất nguy hiểm đối với dịch vụ mail và uy tín của tài khoản mail. Trong bài viết này mình sẽ hướng dẫn bán ử dụng Policyd trên Zimbra Mail để khắc phục.

Policyd là một công cụ mã nguồn mở trong Zimbra, cho phép bạn đương đầu trong cuộc chiến với email rác (spam). Thông thường, bạn, một người quản trị hệ thống email, sẽ muốn thiết lập chính sách để hạn chế số lượng email tối đa mà một người dùng có thể gửi ra ngoài trong một khoảng thời gian nhất định. Điều này giúp cho hệ thống của bạn không bị liệt vào các blacklist.

Script cài đặt được cung cấp bởi Barry de Graaff, Channel Evangelist tại Synacor và đã được kiểm tra chạy tốt trên Zimbra 8.8.15, CentOS 7.

Bước 1: SSH vào Server Mail

Bước 2: Tải script

wget https://raw.githubusercontent.com/Zimbra-Community/zimbra-tools/master/cbpolicyd.sh -O /tmp/cbpolicyd.sh
chmod +rx /tmp/cbpolicyd.sh
CleanShot 2022 11 01 at 10.15.24
Hướng dẫn cấu hình PolicyD trên Zimbra Server 12

Bạn có thể mở file cbpolicyd.sh này ra, đọc qua các hướng dẫn để hiểu chương trình cài đặt này sẽ thực hiện những gì. Bạn có thể thay đổi cơ sở dữ liệu MariaDB để sử dụng một cơ sở dữ liệu MariaDB nằm bên ngoài hệ thống Zimbra (khi này dữ liệu cbpolicyd sẽ được bảo toàn khi bạn nâng cấp Zimbra).

Mặc định, script cài đặt sẽ thiết lập chính sách cho phép:

  • Hạn chế bất kỳ người gửi nào chỉ được phép gửi tối đa 100 email mỗi 60 giây. Qúa số lượng này các email sẽ bị deferred.
  • Hạn chế người dùng chỉ có thể nhận tối đa 125 email mỗi 60 giây. Qúa số lượng này sẽ bị chặn (reject).

Zimico khuyến nghị bạn nên điều chỉnh thông số này như sau:

  • Hạn chế người gửi chỉ được phép gửi 200 email mỗi 3600 giây (1 giờ).
  • Hạn chế người nhận chỉ được phép nhận 200 email mỗi 3600 giây (1 giờ).

Lưu ý khi người dùng gửi đến distribution list có số lượng member lớn sẽ làm cho quota bị hết nhanh chóng. Ngoài ra cbpolicyd bị trùng khi đếm số lượng message (thay vì 1 message sẽ đếm thành 2 message).

Bằng cách thay đổi khoảng thời gian từ 60 giây thành 3600 giây sẽ giúp hệ thống không bị rơi vào blacklist khi có 1 account nào đó bị compromised (lộ password) và bị dùng để gửi spam ra ngoài với số lượng lớn.

INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict,Data) VALUES (6, 'Sender:user@domain','Sender:user@domain', 3600, 'DEFER', 'You are sending too many emails, contact helpdesk');
INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict) VALUES (6, 'Recipient:@domain', 'Recipient:@domain', 3600, 'REJECT');
INSERT INTO quotas_limits (QuotasID,Type,CounterLimit) VALUES(3, 'MessageCount', 200);
INSERT INTO quotas_limits (QuotasID,Type,CounterLimit) VALUES(4, 'MessageCount', 200);

Bước 3: Chạy script vừa tải

Bạn copy lệnh bên dưới và chạy, script sẽ tự động detect và cấu hình vào.

/tmp/cbpolicyd.sh
CleanShot 2022 11 01 at 10.19.18
Hướng dẫn cấu hình PolicyD trên Zimbra Server 13

Bước 4: Khởi động lại dịch vụ

Bước tiếp theo bạn cần khởi động lại dịch vụ để áp dụng các cấu hình mới.

su - zimbra
zmprov ms $(zmhostname) +zimbraServiceEnabled cbpolicyd
zmprov ms $(zmhostname) zimbraCBPolicydQuotasEnabled TRUE
zmmtactl restart && zmcbpolicydctl start
CleanShot 2022 11 01 at 10.23.01
Hướng dẫn cấu hình PolicyD trên Zimbra Server 14

Bước 5: Kiểm tra tính khả dụng

Để test hoặc cập nhật số lượng message quota, bạn dùng lệnh sau.

Ví dụ, để thiết lập số lượng message quota = 5 để test thử, với quyền zimbra user:

/opt/zimbra/bin/mysql policyd_db
SELECT * FROM quotas_limits;
UPDATE quotas_limits SET CounterLimit = 5 WHERE QuotasID = 3;
CleanShot 2022 11 01 at 10.28.12
Hướng dẫn cấu hình PolicyD trên Zimbra Server 15

Bạn có thể xem các QuotasID bằng lệnh, và tìm trường ‘ID’ trong record ‘Sender:user@domain’.

SELECT * from quotas;
CleanShot 2022 11 01 at 10.30.12
Hướng dẫn cấu hình PolicyD trên Zimbra Server 16

Như vậy đã hoàn tất cấu hình. Ngoài ra bạn cần lưu ý Khi cập nhật hoặc nâng cấp Zimbra, bạn có thể phải chạy lại script này.