POSTFIX: Giới hạn tốc độ mà một người dùng cụ thể có thể gửi email


13

Chúng tôi có thiết lập máy chủ CentOS máy chủ lưu trữ các trang web và máy chủ email của chúng tôi (sử dụng POSTFIX). Chúng tôi quản lý hệ thống bằng Virtualmin và Webmin tương ứng.

Nói chung cho mọi trang web mà chúng tôi thiết lập, chúng tôi cung cấp cho khách hàng một tài khoản email trên hệ thống của chúng tôi. Một khách hàng đặc biệt đã quyết định rằng nên gửi hàng ngàn email theo nghĩa đen. Khi điều này xảy ra, máy chủ thư sẽ không phản hồi và thư cho các khách hàng khác sẽ ngừng hoạt động trong khi hàng đợi được xử lý.

Có cách nào chúng ta có thể giới hạn tỷ lệ email được gửi cho một người dùng cụ thể của hệ thống chứ không phải tất cả mọi người không? Ngoài ra còn có một cài đặt chúng ta nên thay đổi để người dùng không thể làm gì có thể khiến máy chủ thư bắt đầu bị lỗi đối với người dùng khác?

Cảm ơn

Câu trả lời:



23

Tôi nhận ra rằng tất cả các câu trả lời khác cho câu hỏi cũ này chỉ là liên kết. Vì vậy, tôi sẽ mô tả trong vài từ làm thế nào để thực hiện giải pháp yêu thích của tôi cho công việc này.

Các liên kết@ 84.104 đã gợi ý, mặc dù rất hữu ích, không thể được sử dụng để thực hiện đúng tỷ lệ cho mỗi người gửi. smtpd_clientcác giới hạn không dành cho kiểm soát lưu lượng mà là để trợ giúp với phần mềm máy khách: "Các biện pháp chống lại khách hàng tạo ra quá nhiều kết nối". Mặc dù người ta có thể tìm thấy các khuyến nghị như thế này một rằng nó chắc chắn có thể giúp đỡ. Như @E. Yazici đã đề xuất, một addon cho postfix là bắt buộc. Cá nhân tôi thấy policyd theo khuyến nghị của @Janne Pikkarainen khá cồng kềnh mặc dù nó được coi là một tiêu chuẩn.

Addon yêu thích của tôi là postfwd vì nó nhẹ và dễ dàng. Điều đáng chú ý là điều này hoạt động rất dễ dàng với Plesk hoặc tương tự khác, mà không ảnh hưởng đến tập tin cấu hình phức tạp của Plesk. Giới hạn tốc độ email trong Plesk chỉ được triển khai trong phiên bản 12 nhưng vẫn còn các tính năng chính sách bị hạn chế.

Đầu tiên tải xuống addon mới nhất từ ​​trang web ở trên. Tôi tin rằng không có vòng quay cho CentOS, trái ngược với Ubuntu và Debian. Tuy nhiên, nó được khuyên rằng phiên bản mới nhất được sử dụng. Cụ thể hơn, phiên bản 1.32 (hiện diện trong ví dụ repos Ubuntu 14.04LTS) có một lỗi khó chịu ngăn không cho nó hoạt động một cách thích hợp. Phiên bản 1.35 sắp xếp này.

Hãy chắc chắn rằng các mô-đun PERL này có mặt. Nếu sử dụng Debian hoặc Ubuntu, bạn có thể cài đặt từ repos để tất cả các phụ thuộc được tự động sắp xếp và sau đó thay thế /usr/sbin/postfwdbằng phiên bản mới nhất.

Sau đó tạo quy tắc. Tạo một tệp như /etc/postfwd.cfhoặc /etc/postfix/postfwd.cfvà thêm:

id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)

Các quy tắc trên rõ ràng có hai quy tắc đánh giá cho tất cả người gửi. Cú pháp của ratehành động là:

rate (<item>/<max>/<time in sec>/<action>)

Ví dụ tỷ lệ khác có thể được tìm thấy ở đây . Tham chiếu đến cú pháp có thể được tìm thấy trên tài liệu . Thảo luận tương tự có thể được tìm thấy ở đây . Nếu SASL được thực hiện (ví dụ dovecot), bạn có thể an toàn thay thế sendervới sasl_username. Bạn có thể kiểm tra tính hợp lệ của bộ quy tắc với -Ctùy chọn:

postfwd -f /etc/postfwd.cf -C

Sau đó, bạn có thể tùy ý tạo một người dùng và nhóm chuyên dụng postfwdtheo đó postfwd sẽ chạy và khởi chạy nó:

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

Trong trường hợp có nó được cài đặt từ apt (Debian, Ubuntu vv), cũng có phải là một tập tin cấu hình dưới /etc/default/postfwdvà bạn có thể bắt đầu dịch vụ đúng cách, ví dụ sudo service postfwd start.

Sau đó hãy xem nhật ký để xác minh rằng postfwd đang lắng nghe. Postfwd sử dụng cùng một bản ghi như postfix (ví dụ /var/log/mailhoặc /usr/local/psa/var/log/maillogvv) và một dòng postfwd 1.35 ready for inputnên được đặt đúng chỗ.

Sau đó, cho postfix biết để sử dụng postfwd. Chỉnh sửa tập tin conffix (thường /etc/postfix/main.cf) và trong dòng:

smtpd_recipient_restrictions = permit_mynetworks,...

thêm check_policy_service inet:127.0.0.1:10040. Vui lòng xem xét rằng thứ tự bạn đặt trong smtpd_recipient_restrictionsnày có tầm quan trọng lớn và cuối cùng bạn có thể dành rất nhiều thời gian để chẩn đoán những gì có thể sai. Như đã giải thích trong câu hỏi này , nếu một kiểm tra trả về OK hoặc RE DỰNG thì postfix không tiếp tục đến lần tiếp theo, vì vậy bạn có thể nên đặt mức cao này.

Cuối cùng, để kiểm tra xem cái này có hoạt động không, bạn có thể chỉ định một giới hạn rất nhỏ, chẳng hạn như 1 hoặc thậm chí thêm một quy tắc như id=DEFAULT; action=dunno. Bất kỳ quy tắc nhấn nào cũng được ghi lại. Cũng xin lưu ý rằng giới hạn tỷ lệ trên mỗi người gửi không phân biệt giữa các email có một người nhận hoặc một email có nhiều người nhận.

Sau đó gửi email từ một tài khoản (trong máy chủ đó) và xem nhật ký:

grep "RULES" /var/log/mail

Các liên kết khác: khởi động nhanh postfwd .


1
một vụ nổ từ quá khứ câu hỏi này! cảm ơn bạn đã dành thời gian để cung cấp một câu trả lời tốt như vậy. Tôi rất ấn tượng!
WarpKid

1
phiên bản barfs postfix của tôi trên bất kỳ smtpd_recipient_restrictionsmục nào có khoảng trắng trong đó, vì vậy tôi phải xác định postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040trong /etc/postfix/main.cf và sau đó tham chiếu nó trong /etc/postfix/master.cf nhưsmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

Để khởi động lại postfix trong Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

Ít nhất sử dụng Ubuntu 16.04, tôi thấy rằng tôi cần thay đổi ký tự đại diện trong các quy tắc để sử dụng .+(ít nhất là 1) thay vì .*(ít nhất là 0) để các quy tắc không khớp với các trường vắng mặt.
TommyPeanuts

4

Những gì bạn cần là một addon chính sách cho Postfix. Có hàng tá addon chính sách cho Postfix, một số trong số chúng có tính năng giới hạn tỷ lệ. Bạn có thể tìm thấy một danh sách các addon chính sách Postfix tại đây .



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.