Получить postfix для пересылки почты root

13

У меня на сервере Ubuntu работает postfix. Это не почтовый сервер для моего домена.

Всякий раз, когда задание cron выполняется для пользователя root, выходная почта не доставляется локально, а отправляется на root@mydomain.com через главный почтовый сервер. Это не то, что я хочу.

Я хочу, чтобы почта для root либо доставлялась локально, либо пересылалась на anothermail@anotherdomain.com.

Я попытался изменить оба ~root/.forwardи /etc/aliases(и запустить newaliases), но ничего не помогает (я думаю, что эти файлы проверяются, только когда postfix пытается доставить почту локально).

Что я могу сделать?

Это /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

Редактировать:

При отправке почты в корень, это идет в /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

Имя "ct" - это мое имя пользователя. Я сгенерировал приведенный выше текст с помощью этой команды:

echo test | mail -s test root

Содержание /etc/mailnameэто:

mydomain.com

Содержание /etc/aliases:

root: anothermail@anotherdomain.com
postmaster:    root

где anothermail@anotherdomain.com - это место, куда я хочу пересылать почту root.

Содержание на /etc/hostsсамом деле меня немного удивляет:

127.0.0.1 localhost
127.0.1.1 linux1.mylinux.mydomain.com linux1

где «mylinux» - это имя хоста операционной системы, под которой linux1 работает как виртуальная машина. Я не уверен, как "mylinux" попал туда. (Но может ли это быть причиной моей проблемы?)

oz1cz
источник
Не могли бы вы предоставить нам свои логи postfix при отправке почты в root?
Дом
Я сделал это в редактировании к оригинальному сообщению.
oz1cz
Не могли бы вы дать нам свои файлы / etc / mailname и / etc / aliases? Проверьте, содержит ли / etc / hosts файл linux1.mydomain.com, назначенный 127.0.1.1
Dom
Я добавил информацию в исходный пост.
oz1cz
Согласно вашим журналам, почта была правильно отправлена ​​на ваш SMTP-ретранслятор isp. Я бы попросил их (isp) проверить журналы my.isps.relayhost.com [<IP-адрес пропущен>] на предмет подсказки (антиспам, ошибка, ...) о проблеме.

Ответы:

13

Как обычно, проверьте ваши логи.

В вашем случае демон postfix считает, что почта не для него, и отправляет ее без использования /etc/aliases

Сначала проверьте ваш /etc/hostsфайл: имя вашего компьютера должно соответствовать 127.0.1.1:

127.0.1.1  linux1.mydomain.com  linux1

Проверьте свой /etc/mailnameтоже, и он должен быть последовательным.

Проверьте, /etc/aliasesне отправлен ли root (пользователь) другому пользователю, и повторите newaliasesкоманду.

И это должно работать!

Дом
источник
Должно ли это быть 127.0.0.1?
Ноябрь
Вы можете иметь любой адрес в 127.0.0.0/8, так что 127.0.0.1 также работает хорошо
Dom
У меня была похожая проблема, хотя я хотел использовать только ретранслятор smarthost для отправки писем: «myhostname» должно быть «localhost». Что-нибудь еще пропустило файл псевдонимов.
Алекс
8

Если mydestinationоно пустое или не содержит, $myhostnameто оно /etc/aliasesбудет проигнорировано, поскольку postfix считает, что электронная почта не является локальной доставкой, и поэтому не будет применять локальные псевдонимы. Поэтому оставьте значение mydestinationпо умолчанию ( postconf -d mydestinationили удалите его main.cf), и в журналах должен отображаться to=<...>ваш псевдоним.

ColinM
источник
Я использую внешний почтовый сервер и mydestinationдолжен быть пустым. В противном случае почта не отправляется.
Корни
1

В некоторых случаях (например, когда вся почта ретранслируется во внешнюю систему), проще просто установить MAILTOпеременную в crontab root на настоящий адрес электронной почты. Это должно в значительной степени обойти традиционную доставку в root и просто заставить ее идти туда, куда вы хотите.

# Root's crontab
MAILTO=someone@example.com
0 0 * * * /usr/bin/somescript
Дейл Андерсон
источник
0

Кажется, есть некоторые проблемы с открытием /root/.forwardдемона postfix, по крайней мере, на усиленной системе (я не копался в этом). Несмотря на:

# 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

Дочерний демон postfix не может получить доступ .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)

У меня не было времени копаться в этом ... Добавление записи, /etc/aliasesа затем newaliasesработает отлично.

r2oro
источник