У меня есть сервер 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
Редактировать:
При отправке почты root это переходит в /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" туда попал. (Но может ли это быть причиной моей проблемы?)
Как обычно, проверьте свои журналы.
В вашем случае демон postfix думает, что почта не для него, и отправляет ее без использования /etc/aliases
Сначала проверьте свой /etc/hosts
файл: имя вашей машины должно соответствовать 127.0.1.1
, как это:
127.0.1.1 linux1.mydomain.com linux1
Проверьте свои /etc/mailname
тоже, и он должен быть последовательным.
Проверьте свои /etc/aliases
чтобы увидеть, отправлен ли root (пользователь) другому пользователю, и повторить newaliases
команда.
И должно работать!
Если mydestination
пусто или не содержит $myhostname
затем /etc/aliases
будет проигнорирован, потому что postfix считает, что электронная почта не является локальной доставкой, и поэтому не будет применять локальные псевдонимы. Итак, оставьте mydestination
по умолчанию (postconf -d mydestination
или удалить его из main.cf
) и журналы должны показывать to=<...>
в качестве адреса с псевдонимом.
В некоторых случаях (например, когда вся почта ретранслируется во внешнюю систему) проще просто установить MAILTO
переменную в корневом каталоге crontab на реальный адрес электронной почты. Это должно в значительной степени обойти традиционную доставку в root и просто заставить его работать там, где вы хотите.
# Root's crontab
MAILTO=someone@example.com
0 0 * * * /usr/bin/somescript
Кажется, есть проблема с открытием /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
работает отлично.
Если вы настроили фильтрацию целевого домена в /etc/postfix/transport
тогда вам нужно добавить поддомен вашего компьютера в список разрешенных доменов.
Например, если у вас были:
mydomain.com :
anotherdomain.com :
* discard:
Обновите его до:
linux1.mylinux.mydomain.com :
mydomain.com :
anotherdomain.com :
* discard:
Без этого обновления строка root: anothermail@anotherdomain.com
в /etc/aliases
или аналогичный в .forward
не имеет желаемого конечного эффекта, поскольку сообщение отбрасывается перед пересылкой.