Obter o postfix para encaminhar o correio raiz

13

Eu tenho um servidor Ubuntu executando o postfix. Não é o servidor de correio do meu domínio.

Sempre que um trabalho cron é executado como root, o email de saída não é entregue localmente, mas é enviado para [email protected] através do servidor de email principal. Não é isso que eu quero.

Desejo que o correio para raiz seja entregue localmente ou encaminhado para [email protected].

Eu tentei modificar ambos ~root/.forwarde /etc/aliases(e executando newaliases), mas nada ajuda (acho que esses arquivos são verificados apenas quando o postfix tenta entregar emails localmente).

O que eu posso fazer?

Isto é /etc/postfix/main.cf:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = linux1.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = linux1.mydomain.com, localhost.linux1.mydomain.com, localhost
relayhost = my.isps.relayhost.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

Editar:

Ao enviar email para o root, isso entra em /var/log/mail.log:

Mar  7 09:39:17 linux1 postfix/pickup[31381]: F3B9C98025E: uid=1000 from=<ct>
Mar  7 09:39:18 linux1 postfix/cleanup[31556]: F3B9C98025E: message-id=<[email protected]>
Mar  7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: from=<[email protected]>, size=283, nrcpt=1 (queue active)
Mar  7 09:39:18 linux1 postfix/smtp[31558]: F3B9C98025E: to=<[email protected]>, orig_to=<root>, relay=my.isps.relayhost.com[<IP address omitted>]:25, delay=0.72, delays=0.19/0.02/0.27/0.25, dsn=2.0.0, status=sent (250 Ok: queued as A97F5D8126)
Mar  7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: removed

O nome "ct" é o meu nome de usuário. Eu gerei o texto acima através deste comando:

echo test | mail -s test root

O conteúdo de /etc/mailnameé:

mydomain.com

O conteúdo de /etc/aliasesé:

root: [email protected]
postmaster:    root

onde [email protected] é para onde gostaria que o email do root fosse encaminhado.

O conteúdo de /etc/hostsrealmente me surpreende um pouco:

127.0.0.1 localhost
127.0.1.1 linux1.mylinux.mydomain.com linux1

onde "mylinux" é o nome do host de um sistema operacional host no qual o linux1 é executado como uma máquina virtual. Não tenho certeza de como o "mylinux" chegou lá. (Mas isso poderia realmente ser o motivo do meu problema?)

oz1cz
fonte
Você poderia nos fornecer seus logs de postfix ao enviar um email para o root?
Dom
Fiz isso em uma edição da postagem original.
oz1cz
Você poderia nos fornecer seus arquivos / etc / mailname e / etc / aliases? Verifique se / etc / hosts contém o linux1.mydomain.com atribuído a 127.0.1.1
Dom
Eu adicionei as informações ao post original.
Oz1cz 07/03
De acordo com os seus logs, o email foi enviado corretamente para o seu relé ISP SMTP. Eu pediria que eles (isp) verificassem os registros my.isps.relayhost.com [<endereço IP omitido>] em busca de alguma pista (antispam, erro, ...) sobre o problema.

Respostas:

13

Como de costume, verifique seus logs.

No seu caso, o daemon postfix acha que o correio não é para ele e o envia sem usar /etc/aliases

Primeiro verifique seu /etc/hostsarquivo: ele deve ter o nome da sua máquina correspondente a 127.0.1.1: 127.0.1.1 linux1.mydomain.com linux1

Verifique o seu /etc/mailnametambém, e deve ser consistente.

Verifique seu /etc/aliasespara ver se o usuário root é enviado para outras pessoas e refaça o newaliasescomando.

E deve funcionar!

Dom
fonte
Isso deveria ser 127.0.0.1?
Nate
Você pode ter qualquer endereço em 127.0.0.0/8, assim 127.0.0.1 funciona muito bem
Dom
Eu tive um problema semelhante enquanto só queria usar uma retransmissão mais inteligente para enviar e-mails: "myhostname" tinha que ser "localhost". Qualquer outra coisa pulou o arquivo de aliases.
Alex
8

Se mydestinationestiver vazio ou não contiver $myhostname, /etc/aliasesserá ignorado porque o postfix acha que o email não é uma entrega local e, portanto, não aplicará os aliases locais. Portanto, deixe mydestinationno padrão ( postconf -d mydestinationou remova-o main.cf) e os logs devem mostrar to=<...>como o seu endereço alternativo.

ColinM
fonte
Estou usando um servidor de email externo e mydestinationdeve estar vazio. Caso contrário, nenhum email será enviado.
Corni
1

Em algumas circunstâncias (por exemplo, onde todo o correio é retransmitido para um sistema externo), é mais fácil definir a MAILTOvariável no crontab da raiz como um endereço de email real. Isso deve ignorar a entrega tradicional para fazer o root e apenas ir para onde você quiser.

# Root's crontab
[email protected]
0 0 * * * /usr/bin/somescript
Dale Anderson
fonte
0

Parece haver algum problema com a abertura do /root/.forwarddaemon postfix, pelo menos no sistema reforçado (eu não o mergulhei). Apesar de:

# ls -ld / /root /root/.forward
dr-xr-xr-x. 18 root root  236 Dec  4 00:02 /
dr-xr-x--x. 13 root root 4096 Jan  8 17:45 /root
-rw-r--r--.  1 root root   30 Jan  8 14:51 /root/.forward

O filho do daemon postfix não pode acessar .forward:

7603  open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 16
7603  fstat(16, {st_mode=S_IFREG|0644, st_size=1227, ...}) = 0
7603  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f86854fb000
7603  read(16, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1227
7603  close(16)                         = 0
7603  munmap(0x7f86854fb000, 4096)      = 0
7603  geteuid()                         = 89
7603  getegid()                         = 89
7603  geteuid()                         = 89
7603  setresuid(-1, 0, -1)              = 0
7603  setresgid(-1, 0, -1)              = 0
7603  setgroups(1, [0])                 = 0
7603  lstat("/root/.forward", 0x7ffc03f84750) = -1 EACCES (Permission denied)

Não tive tempo de investigar ... Anexar entrada a /etc/aliasesseguida por newaliasesfunciona bem.

r2oro
fonte