root へのメール
root には、いろいろと大事なメールが送られてくる。たとえば、logwatch は、1日1回、ログをざっとまとめた結果を root にメールしてくる。他にも、cron が実行したプロセスが出力した結果は root へのメールになる*1。
ところが、この root へのメール、悲しいほどに放置されている。「su
すると、なんかメールがどうのこうのとかいう変な英語のメッセージ出ますよねぇ?」とか言われてしまう始末だ。
cron に仕込んだ自慢のバックアップスクリプトが実は失敗していて動いていなかった、なんていう悲劇を防ぐためにも、root へのメールはちゃんと読むようにしよう。
その際、root
でログインして mail
コマンド、なんてことはしないでいい。root
へのメールを適当なところに転送するようにすればいいのだ。具体的には、/etc/aliases にこう書く:
root: いつものメールアドレス
/etc/aliases を変更したときには newaliases
コマンドを実行するのを忘れずに。
スマートホストを使ったメール配送
root
へのメールをいつものメールアドレスに転送しようとしてもうまくいかないことがある。
最近は迷惑メールがひどいことになっているので、大概の MTA は、どこの馬の骨とも分からないホストからの SMTP 接続なんて受け入れてくれない。ISP による OP25B も一般的になったし、会社の LAN なんかだと組織外への IP 接続が許されていないのが普通だ。
でも、普段、MUA を使ってのメール送信は普通にできている。ISP なり LAN なりは、内部からのメール送信のために SMTP サーバを置いてくれているからだ。ならば、Linux マシンのローカル MTA も、この枠組みに加えてやればいい。要するに、すべてのメールを ISP や LAN の内部向け SMTP サーバに送信するようにローカル MTA を設定すればいいわけだ。HTTP でいうところのプロクシだが、SMTP の場合は「スマートホスト」と呼ぶらしい。
スマートホストを使うように Sendmail を設定するのは非常に簡単だ。/etc/mail/sendmail.mc にある以下の記述を書き換えればいい:
dnl define(`SMART_HOST', `your.isp.mail.server')
「dnl
」を削除してコメントアウトを解除し、「`your.isp.mail.server'
」に自分のスマートホストを書く。書き換えたら、/etc/mail で make
して sendmail
サービスを再起動するのを忘れずに。
エンベロープの送信者欄を ISP 提供のメールアドレスにする
自宅に設置した Linux マシンの場合、ISP の SMTP サーバをスマートホストに指定してもローカル MTA からのメール送信ができないことがある。
自分が適当につけたホスト名がエンベロープの送信者欄((from
と sender
のどちらが正しい用語なのか分からないので、「送信者欄」と書くことにした。))に書かれているため、ISP の SMTP サーバにメールの受け取りを拒否されてしまうのだ。SMTP セッションで「MAIL FROM: ユーザ名@自分で適当につけたホスト名
」を発行した直後、ISP の SMTP サーバに「そんなホストは存在しない」と言われてセッションを切られてしまう。エンベロープの送信者欄はバウンスメールの送り先なので、ドメイン部分が DNS の MX レコードで引けないようなアドレスは拒否するのが親切なのだ。
自分のホスト名を DNS に登録するのはちょっと大変なので、エンベロープの送信者欄を ISP 提供のメールアドレスにすることで対処する。Sendmail や Postfix での設定方法はよく分からなかった((エンベロープの送信者欄だけを書き換えたいのだが、From:
ヘッダも書き換わってしまう。多分、僕が設定方法を分かってないだけだと思う。))ので、Exim を使うことにしよう。
設定は実に簡単で、/etc/exim/exim.conf で「begin rewrite
」の次にこう書くだけでいい:
ちなみに、Exim でスマートホストを使うには、/etc/exim/exim.conf をこんな感じで書き換える:
*@自分で適当につけたホスト名 ISP提供のメールアドレス F
自分用のスマートホストを作る
エンベロープの書き換え設定は大した作業ではないが、sendmail.mc をちょろっと弄るのに比べるとかなり面倒くさい。何度もやらなくて済むよう、この書き換えをやってくれる SMTP サーバを自分用のスマートホストとして運用してみよう。
まず、LAN 内のどのマシンから送られてきたメールに対してもエンベロープの書き換えが行われるように、さっきのエンベロープ書き換え規則をちょっとアレンジする:
「LAN内のIPアドレスパターン」は、たとえば「
hostlist relay_from_hosts = 127.0.0.1 : LAN内のIPアドレスパターン
192.168.0.0/24
」のように指定する。最後に 25/tcp を LAN 内のホストに対して開放すれば、設定は完了だ。
他のホストでは、この SMTP サーバをスマートホストに指定するだけでよくなる。ただし、sendmail.mc の
SMART_HOST
に指定する値は、DNS で解決できるホスト名でなければならないっぽい*2。IP アドレスでの指定や /etc/hosts で解決できるようにした名前ではダメなので注意しよう。