Nhưng... bạn đã khám phá ra hầu hết mọi thứ rồi!
Bạn có thêm smtpd
dịch vụ thường được thiết lập trong master.cf
như thế này:
smtp:10025 inet n - n - - smtpd
...
Amavis được định cấu hình để gửi lại thư trở lại 127.0.0.1:10025
(hoặc bất kỳ cổng nào bạn sử dụng). Ý tưởng là thế này: bạn chạy dịch vụ riêng đặc biệt trên cổng có tường lửa không mặc định để chỉ chấp nhận thư đã xử lý.
Loại cấu hình này hoạt động như thế này:
- Một trong Postfix
smtpd
trường hợp, trình trao đổi hoặc gửi thư, nhận thư từ bên ngoài và đăng nhập nó lần đầu tiên (và gọi dịch vụ chính sách)
- Sau đó, theo một cấu hình, nó sẽ đẩy nó vào Amavis
- Amavis, sau khi xử lý, đưa thư trở lại Postfix, nhưng nó sẽ chuyển thư đó sang trạng thái đặc biệt
smtpd
ví dụ được cấu hình để không phải trả lại thư cho Amavis, vì nó muốn tất cả thư đến từ Amavis
- bổ sung này
smtpd
ghi lại thư đó (và gọi dịch vụ chính sách) rồi chuyển tiếp theo quy tắc thông thường.
Không có cách nào để sửa lỗi ghi nhật ký kép trong thiết lập như vậy, bởi vì nguyên nhân là do cách đưa Amavis vào quá trình xử lý thông qua SMTP vốn đã kém chất lượng này. Nhưng bạn vẫn có cách để ít nhất giảm tác động của việc ghi nhật ký kép này. Bạn có thể cung cấp thêm smtpd
ví dụ tiền tố nhật ký riêng biệt, do đó tạo ra một cách để phân biệt cái nào xử lý thư lần này. Sau dòng nơi bổ sung smtpd
dịch vụ được định nghĩa trong master.cf
, thêm dòng:
-o syslog_name=postfix/reinject
(hoặc bất cứ thứ gì bạn sẽ sử dụng để phân biệt nó với các smtpd
phiên bản, trao đổi thư và gửi).
Ngoài ra, bạn có thể tắt xử lý dịch vụ chính sách cho trường hợp này, vì vậy postfwd
sẽ không tính thư hai lần. Bạn phải nhân rộng tất cả của bạn smtpd_*_restrictions
bên trong master.cf
cho dịch vụ này ở đâu, không bao gồm dịch vụ chính sách này:
...
-o smtpd_recipient_restrictions=...,reject_unauth_destination
...
không bao giờ đặt khoảng trắng trong master.cf
-o thông số!
Lộn xộn, tôi biết. Điều này là do toàn bộ thiết lập với việc tiêm lại này rất lộn xộn.
Có khả năng bạn đã có một số thông số khác ở đó; không sao, chúng vẫn được yêu cầu. Cũng lưu ý, điều này chỉ thay đổi smtpd
hành vi khai thác gỗ; sau đó nó đặt thư vào hàng đợi chung nơi các trình nền khác nhận và xử lý và vì chúng tôi không tạo cấu hình ghi nhật ký đặc biệt cho chúng, bạn sẽ không thể dễ dàng phân biệt liệu chúng xử lý thư gốc hay đã xử lý lần này (gợi ý: ID hàng đợi thư hữu ích cho việc đó). Vì vậy, đây chỉ là một sửa chữa một phần, nhưng nó vẫn rất hữu ích.
Để khắc phục hoàn toàn việc ghi nhật ký kép đó, bạn phải thiết kế lại hệ thống thư của mình để không có thư nào đi qua nó hai lần. Vì vậy, mỗi thư sẽ được tính một lần, như một phép thuật. Postfix có một cách chuyên dụng đặc biệt để xử lý thư, được gọi là cối xay ("bộ lọc thư"), mà bạn nên sử dụng thay vì SMTP và tiêm lại. Bạn có thể kết nối Amavis hoặc bất kỳ ứng dụng hỗ trợ bộ lọc nào khác (có vô số ứng dụng) thông qua giao diện này và bạn sẽ nhận được đường dẫn định tuyến thư rõ ràng hơn nhiều bên trong hệ thống thư và ít gặp rắc rối hơn với nhật ký và các sự cố khác. Postfix sẽ ngay lập tức từ chối thư rác thay vì xếp hàng, kiểm tra rồi loại bỏ. Đọc hướng dẫn hoàn hảo của Postfix về Postfix before-queue Hỗ trợ Milter