
Casi tengo mi configuración perfecta de Postfix (v3.3.1) en CentOS8. Mis objetivos son:
- Permitir que los servicios envíen correos electrónicos a usuarios de Linux. (crontab a raíz)
- No acepte correo electrónico público para usuarios de Linux. ([correo electrónico protegido])
- Defina qué usuarios recibirán correo electrónico público sin convertirlos en usuarios de Linux.
Logré lograr lo anterior, pero con un efecto secundario no sé cómo prevenirlo. Algo de lo que he hecho hasta ahora:
myhostname = server.foobar.com
mydomain = foobar.com
myorigin = $myhostname
mydestination = $myhostname, localhost
mail_spool_directory = /var/spool/mail
virtual_transport = virtual
virtual_mailbox_domains = foobar.com
virtual_mailbox_base = /var/spool/email/
Este bit le dice a Postfix que cualquier correo enviado por un servicio a un usuario recibe $myhostname agregado ([correo electrónico protegido]) y se entrega al correo electrónico estándar del sistema en formato /var/spool/mail
.
Cualquier correo electrónico enviado a un usuario de Linux en el dominio como[correo electrónico protegido]se trata como un dominio virtual, busca un usuario virtual y si no lo hay rechaza el correo electrónico.
Si agrego un usuario virtual (como webmaster), cualquier correo electrónico enviado a ese usuario ([correo electrónico protegido]) se acepta y se entrega para /var/spool/email/...
mantener el correo electrónico público separado del correo electrónico del sistema.
El problema...
Si alguien es lo suficientemente inteligente como para enviar un correo electrónico al nombre de host ([correo electrónico protegido]) desde Internet se acepta y se entrega a /var/spool/mail
. No sé cómo bloquear esto.
Intenté configurarlo default_transport = error:Domain doesn't accept email.
pero eso no cambió el comportamiento. Los documentos no admiten esta función, pero la vi mencionada en un foro, así que la probé.
No es importante para mí mantener a los usuarios de Linux como usuario@$mihostname, esta fue simplemente la única forma en que pude descubrir cómo mantener a los usuarios de Linux separados de los usuarios virtuales en el mismo nombre de dominio para evitar que los spammers lleguen.[correo electrónico protegido],[correo electrónico protegido], etc.
Otras configuraciones si son importantes:
html_directory = no
local_recipient_maps =
luser_relay = postmaster
mail_spool_directory = /var/spool/mail
meta_directory = /etc/postfix
mydestination = $myhostname, localhost
mydomain = foobar.com
myhostname = server.foobar.com
mynetworks_style = host
myorigin = $myhostname
relay_domains =
relayhost =
virtual_mailbox_base = /var/spool/email/
virtual_mailbox_domains = foobar.com
virtual_transport = virtual
¿Alguna idea u otra forma de hacer esto?
Respuesta1
Encontré una solución.
Manteniendo la myorigin = $myhostname
forma de separar a los usuarios locales de los usuarios virtuales en el mismo dominio como se indica en mi pregunta.
En la smtpd_recipient_restrictions
sección de main.cf
, después de permit_mynetworks
agregar check_recipient_access
apuntando a una lista. Yo usé hash:
, se veía algo así como:
# Don't include the "...", its just to show this is among other settings
smtpd_recipient_restrictions =
...
permit_mynetworks
check_recipient_access hash:/etc/postfix/block_mydomain
...
Luego cree el archivo lista/hash/etc/postfix/block_mydomain
hostname.domain.com 513 Invalid domain.
Guarde el archivo y ejecútelo postmap block_mydomain
para crear la versión *.db.
Luego reinicie postfix systemctl restart postfix
y eso debería ser suficiente.
Lo probé y puedo enviar correo usando el comando sendmail localmente a cualquier usuario de Linux. Crontab puede enviar correos electrónicos a usuarios locales de Linux. Pero si envía un correo electrónico desde Internet, [email protected]
será rebotado. Y en caso de que te estés preguntando[correo electrónico protegido]todavía es aceptado y descartado.