smtpd에서 들어오는 메일이 spamassassin을 통해 자동으로 필터링되도록 postfix 설정이 있습니다(헤더가 추가된 메일 대기열에 다시 삽입됨).
이제 스팸으로 간주되는 메시지에 대해 두 가지 작업을 수행하고 싶습니다.
- 메일이 다시 아웃바운드되면(별칭으로 인해) 그 자리에서 메일을 폐기합니다.
- 메일이 로컬 가상 사용자를 위한 것이라면 Dovecot에 전달하여 스팸 폴더에 넣습니다.
이런 식으로 postfix를 구성할 수 있나요? 내 별칭과 사용자 정보는 모두 MySQL에 있습니다. 현재 나는 모든 스팸 메일(main.cf에 header_checks 포함)을 삭제하지만 위의 상황을 선호합니다.
답변1
보내는 메일을 처리하기 위해 master.cf에 다른 smtp 수신기 프로세스를 설정할 수 있습니다. 다음과 같은 내용을 통해 포트 26에서 수신 대기를 시작해야 합니다.
26 inet n - n - 18 smtpd -o header_checks=[your checks] mydestination= relayhost=
로컬 전달을 비활성화하고 localhost를 제외한 다른 곳으로부터의 메일을 허용하지 않으려면 이를 약간 조정해야 할 수도 있습니다. 그런 다음 main.cf에 다음을 추가하고 싶을 것입니다.
relayhost=127.0.0.1:26
물론 해당 파일에서 헤더 검사를 삭제하세요.
메일 출력은 26일의 두 번째 smtpd 프로세스로 전달되어 스팸으로 실패한 메시지를 삭제합니다. 메일을 직접 전달하는 대신 다운스트림 서버로 전달해야 하는 경우 해당 리스너에 릴레이 호스트를 지정할 수도 있습니다.
그런 다음 이미 제안한 대로 Dovecot을 사용하여 로컬 사용자에 대한 나머지 필터링을 설정합니다.
물론 일부 메일 공급자는 상당한 수의 홉이 포함된 메시지를 삭제하므로 이 작업을 수행할 때 메시지에 추가하는 메일 홉 수를 고려하고 싶을 것입니다(예를 들어 Gmail은 10 또는 15 정도 후에 삭제됨).