I have an Ubuntu server running postfix. It is not the mail server for my domain.
Whenever a cron job runs for root, the output mail is not delivered locally, instead it gets sent to [email protected] via the main mail server. This is not what I want.
I want mail for root to either be delivered locally or forwarded to [email protected].
I've tried modifying both ~root/.forward
and /etc/aliases
(and running newaliases), but nothing helps (I guess these files are only checked when postfix tries to deliver mail locally).
What can I do?
This is /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
Edit:
When sending mail to root, this goes into /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
The name "ct" is my user name. I generated the above text through this command:
echo test | mail -s test root
The content of /etc/mailname
is:
mydomain.com
The contents of /etc/aliases
is:
root: [email protected]
postmaster: root
where [email protected] is where I would like root's mail to be forwarded to.
The content of /etc/hosts
actually surprises me a little:
127.0.0.1 localhost
127.0.1.1 linux1.mylinux.mydomain.com linux1
where "mylinux" is the hostname of a host operating system under which linux1 runs as a virtual machine. I'm not sure how "mylinux" got in there. (But could this really be the reason for my problem?)
As ususal, check your logs.
In your case, the postfix daemon thinks the mail is not for it and sends it without using
/etc/aliases
First check your
/etc/hosts
file : it should have your machine name corresponding to127.0.1.1
, like this:Check your
/etc/mailname
too, and it should be consistent.Check your
/etc/aliases
to see if root (user) is sent to another user, and redo thenewaliases
command.And it should work!
If
mydestination
is empty or does not contain$myhostname
then the/etc/aliases
will be ignored because postfix thinks the email is not a local delivery and will therefore not apply the local aliases. So, leavemydestination
at the default (postconf -d mydestination
or remove it frommain.cf
) and the logs should show theto=<...>
as your aliased address.In some circumstances, (i.e. where all mail gets relayed to an external system), it's easier to just set the
MAILTO
variable in root's crontab to a real email address. This should pretty much bypass traditional delivery to root and just make it go where you want.There seems to be some issue with opening of
/root/.forward
by postfix daemon, at least on hardened system (I didn't dig into it). Despite:Child of postfix daemon is not able to access .forward:
I didn't have time to dig into it... Appending entry to
/etc/aliases
followed bynewaliases
works fine.In case you happen to have set up destination domain filtering in
/etc/postfix/transport
then you need to add the subdomain of your machine to the allowed domains list. And in case you are using some VPS and the hosting provider has assigned some automatic internal domain name to your system, then you may need to add this too.For example, if you had:
Update it to:
Without this update the line
root: [email protected]
in/etc/aliases
or a similar one in.forward
does not have the desired end effect since the message is discarded before being forwarded.