
Quase tenho minha configuração perfeita do Postfix (v3.3.1) no CentOS8. Meus objetivos são:
- Permitir que os serviços enviem e-mails para usuários Linux. (crontab para root)
- Não aceite e-mail público para usuários Linux. ([e-mail protegido])
- Defina quais usuários receberão emails públicos sem torná-los usuários Linux.
Consegui fazer o que foi dito acima, mas com um efeito colateral não consigo descobrir como prevenir. Um pouco do que fiz até agora:
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 informa ao Postfix que qualquer e-mail enviado por um serviço a um usuário recebe $myhostname adicionado ([e-mail protegido]) e é entregue no e-mail padrão do sistema no formato /var/spool/mail
.
Qualquer email enviado para um usuário Linux no domínio como[e-mail protegido]é tratado como um domínio virtual, procura um usuário virtual e se não houver rejeita o email.
Se eu adicionar um usuário virtual (como webmaster), qualquer email enviado para esse usuário ([e-mail protegido]) é aceito e entregue para /var/spool/email/...
manter o email público separado do email do sistema.
O problema...
Se alguém for sábio o suficiente para enviar um e-mail para o nome do host ([e-mail protegido]) da Internet, ele é aceito e entregue em /var/spool/mail
. Não consigo descobrir como bloquear isso.
Eu tentei configurar default_transport = error:Domain doesn't accept email.
, mas isso não mudou o comportamento. Os documentos não suportam esse recurso, mas vi isso mencionado em um fórum, então tentei.
Não é importante para mim manter os usuários do Linux como user@$myhostname, essa foi apenas a única maneira de descobrir como manter os usuários do Linux separados dos usuários virtuais no mesmo nome de domínio para evitar que spammers atinjam[e-mail protegido],[e-mail protegido], etc.
Outras configurações, se 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
Alguma idéia ou outra maneira de fazer isso?
Responder1
Eu encontrei uma solução.
Mantendo a myorigin = $myhostname
forma de separar usuários locais de usuários virtuais no mesmo domínio conforme indicado na minha pergunta.
Na smtpd_recipient_restrictions
seção de main.cf
, depois de permit_mynetworks
adicionar check_recipient_access
apontando para uma lista. Eu usei hash:
, parecia algo 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
...
Em seguida, crie o arquivo de lista/hash/etc/postfix/block_mydomain
hostname.domain.com 513 Invalid domain.
Salve o arquivo e execute postmap block_mydomain
para criar a versão *.db.
Em seguida, reinicie o postfix systemctl restart postfix
e pronto.
Eu testei e posso enviar e-mails usando o comando sendmail localmente para qualquer usuário Linux. O Crontab pode enviar e-mail para usuários locais do Linux. Mas se você enviar um e-mail da Internet, [email protected]
ele será devolvido. E caso você esteja se perguntando o[e-mail protegido]ainda é aceito e descartado.