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 root@mydomain.com 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 anothermail@anotherdomain.com.

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=<20130307083917.F3B9C98025E@linux1.mydomain.com>
Mar  7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: from=<ct@mydomain.com>, size=283, nrcpt=1 (queue active)
Mar  7 09:39:18 linux1 postfix/smtp[31558]: F3B9C98025E: to=<root@mydomain.com>, 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: anothermail@anotherdomain.com
postmaster:    root

onde anothermail@anotherdomain.com é 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?)


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!


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.


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
MAILTO=someone@example.com
0 0 * * * /usr/bin/somescript

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.