CentOS root 宛のメールが転送されないから直した

サーバの機材入れ替えで浮いたマシンを適当マシンにしようと、DNSで名前を割り当てずにいたら root 宛てのメールが飛ばなくなった。

aliases の設定は問題なし。newaliases も実施済み。

にもかかわらず、 maillog はエラー状態

Apr 24 01:13:00 foobar sendmail[19486]: q3P82D9A019486: from=root, size=15, class=0, nrcpts=1, msgid=<201204250413.q3P82D9A019486@foobar.mydomain.jp>, relay=root@localhost
Apr 24 01:13:00 foobar sendmail[19487]: q3P82D3l019487: from=<root@foobar.mydomain.jp>, size=365, class=0, nrcpts=1, msgid=<201204250413.q3P82D9A019486@foobar.mydomain.jp>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Apr 24 01:13:00 foobar sendmail[19486]: q3P82D9A019486: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30015, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q3P82D3l019487 Message accepted for delivery)
Apr 24 01:13:00 foobar sendmail[19489]: q3P82D3l019487: to=<root@foobar.mydomain.jp>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120365, relay=foobar.mydomain.jp, dsn=5.1.2, stat=Host unknown (Name server: foobar.mydomain.jp: host not found)
Apr 24 01:13:00 foobar sendmail[19489]: q3P82D3l019487: q3P82D3l019489: DSN: Host unknown (Name server: foobar.mydomain.jp: host not found)
Apr 24 01:13:00 foobar sendmail[19489]: q3P82D3l019489: to=<root@foobar.mydomain.jp>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=31640, relay=foobar.mydomain.jp, dsn=5.1.2, stat=Host unknown (Name server: foobar.mydomain.jp: host not found)
Apr 24 01:13:00 foobar sendmail[19489]: q3P82D3l019489: q3P82D3m019489: return to sender: Host unknown (Name server: foobar.mydomain.jp: host not found)

うろうろと情報を探し回ったところ、sendmail のマスカレード設定 always_add_domain の罠 を発見。
これによると、sendmail.mc で always_add_domain が有効になっていると勝手にマシンローカルで設定しているドメイン名(/etc/sysconfig/networkのHOSTNAMEの設定)が補完されるという。

確認すると、

# vi sendmail.mc

FEATURE(always_add_domain)dnl

ハイ。always_add_domain が有効になってました。そりゃ届かんよorz

勝手にマシン名が補完されてたので、aliases の設定は無視されて補完されたドメインのサーバに送ろうとするものの、DNSには未登録なので IP を引けなくてエラーになる。と。

コメントアウトしておく

dnl FEATURE(always_add_domain)dnl

設定変更したので m4 しようとしたらエラーorz

# m4 sendmail.mc > sendmail.cf
sendmail.mc:10: m4: cannot open `/usr/share/sendmail-cf/m4/cf.m4': No such file or directory

m4 はデフォルトでは入っていなくて、sendmail-cf パッケージが必要とのこと。
インストールする。

# yum -y install sendmail-cf 
(略)
Installed:
  sendmail-cf.i386 0:8.13.8-8.1.el5_7

設定反映させて sendmail 再起動。

# m4 sendmail.mc > sendmail.cf

# /etc/init.d/sendmail restart
sm-client を停止中: [  OK  ]
sendmail を停止中: [  OK  ]
sendmail を起動中: [  OK  ]
sm-client を起動中: [  OK  ]

テストメールを投げる。

# mail root
Subject: test
test
.
Cc: 

成功

Apr 24 01:26:12 foobar sendmail[19599]: q3PE4DFH019599: from=root, size=29, class=0, nrcpts=1, msgid=<201204250426.q3PE4DFH019599@foobar.mydomain.jp>, relay=root@localhost
Apr 24 01:26:12 foobar sendmail[19600]: q3PE4DPN019600: from=<root@foobar.mydomain.jp>, size=379, class=0, nrcpts=1, msgid=<201204250426.q3PE4DFH019599@foobar.mydomain.jp>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Apr 24 01:26:12 foobar sendmail[19599]: q3PE4DFH019599: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30029, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q3PE4DPN019600 Message accepted for delivery)
Apr 24 01:26:12 foobar sendmail[19601]: STARTTLS=client, relay=mail.mydomain.jp., field=cn_issuer, status=failed to extract CN
Apr 24 01:26:12 foobar sendmail[19601]: STARTTLS=client, relay=mail.mydomain.jp., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
Apr 24 01:26:12 foobar sendmail[19601]: q3PE4DPN019600: to=owner@mydomain.jp, ctladdr=<root@foobar.mydomain.jp> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=30649, relay=mail.mydomain.jp. [xxx.xxx.xxx.xxx], dsn=2.0.0, stat=Sent (Ok: queued as 58C763BF19C)