Me gustaría pasar el correo entrante usando virtual_transport
un transporte spamassassin
(main.cf:) virtual_transport=spamassassin
y luego reinyectar el correo escaneado en postfix usando sendmail.
El transporte se ve así:
spamassassin unix - n n - - pipe
flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}
Esto debería ser posible según eldocumentación postfix:
Los sitios de gran volumen deben evitar el uso de filtros de contenido "simples" que reinyectan el correo escaneado a través de Postfix sendmail(1) y postdrop(1).
Con mi llamada actual a sendmail /usr/sbin/sendmail -f ${sender} ${recipient}
, el correo vuelve a pasar a la cola y luego regresa a spamassassin y así sucesivamente.
Según tengo entendido de la documentación de Postfix, el correo entregado usando Postfix sendmail
se coloca en el maildrop
directorio y luego se recoge usando pickup
. Intenté agregar un -o virtual_transport=dovecot
al transporte de recogida para evitar la cola, pero esto no ayudó. (Supongo que esas opciones solo se pueden agregar a los transportes smtp).
¿Cómo puedo reinyectar el correo escaneado con spamassassin en la cola para su entrega final sin provocar un bucle?
Respuesta1
¿Cómo puedo reinyectar el correo escaneado con spamassassin en la cola para su entrega final sin provocar un bucle?
NO, no puedes
Explicación
Entiendo la razón por la que virtual_transport
canalizas el correo electrónico a Spam Assassin. Sólo desea escanear el correo electrónico destinado a su virtual_mailbox_domain
. Lamentablemente no sigue lasrecomendado configuración para filtro de contenido simpleque usar content_filter
el parámetro en su lugar virtual_transport
.
¿Por qué no puedo pasar virtual_transport
a pickup o smtpd?
En general, aquí se muestra el recorrido del correo electrónico a través del código Postfix.
Input --> cleanup --> qmgr --> Output
*smtpd *local
*pickup *virtual
*qmqpd *smtp
*lmtp
*pipe
En cleanup
daemon, postfix 'enrutará' su correo electrónico, ya sea que pertenezca a transporte virtual, local, smtp u otros. Una excepción es cuando content_filter
se pasa un parámetro que no está en blanco al servicio de entrada ( ,, smtpd
) . Cuando esto suceda, postfix anulará la ruta del mensaje y enviará el correo electrónico a su lugar.pickup
qmqpd
content_filter
Otra nota, de forma predeterminada, todos los servicios postfix obtenían el valor del parámetro main.cf
a menos que lo anule usando-o parámetro=valor en master.cf
. Pero no todos los parámetros son man 5 postconf
utilizados por un servicio. Por ejemplo,Filtro de contenidosolo usado por pickup
, smtpd
por qmqpd
lo que puedes poner-o content_filter=amavis:[127.0.0.1:10025en ellos. Otro ejemplo, no es sensato poner-o dirección_smtp_bindya smtpd
que este parámetro solo se usa en smtp
servicio.
El mismo argumento se puede aplicar a su pregunta: "¿Por qué puedo aprobar-o transporte_virtualen pickup
?"
Aquí están las diversas alternativas para su configuración.
Úselo
content_filter
como se explica en la documentación de postfix. La desventaja es que también escanea el correo electrónico que se retransmitió fuera de su dominio.Usar
content_filter
a través de la tabla ACCESS y la acción FILTER. De esta manera, puede escanear selectivamente el correo electrónico entrante.Desafortunadamente debes. Puedes evitarlo colocando con cuidado la tabla ACCESS después devirtual domain
volver a inscribirte en esa tabla.permit_mynetworks
,permit_sasl_authenticated
. De esta manera, el correo electrónico saliente ya estará permitido y solo escaneará el correo electrónico entrante. (Crédito al comentario de OP:) )UsandoInstancia múltiple de Postfix. De esta manera, puede conservar el
virtual_transport
parámetro y spamc inyectará el correo electrónico en su segunda instancia. Y luego puedes definir diferentesvirtual_transport
en diferentes instancias. Pero es un poco excesivo si desea mantener la configuración simple.