sendmail の設定には、とても複雑なルールを使用する必要があります。
それだけいろいろ工夫をこらした設定を行うことが可能ですが、普通は
一からsendmail.cf
を書くようなことは行いません。それは時間
の無駄です。書き上げること自体に興味を持っているなら、このドキュ
メントを読むことを即刻止めて、かわりに O'Reilly から出版されている
「コウモリ本」を読むことをお薦めします。
これらのルールを手書きするかわりに、m4
マクロ・プロセッサ
のお世話になることにしましょう。そうすれば sendmail 付属の雛形
のファイルから設定ファイルを生成できます。
まず sendmail.mc
ファイルのはじめの部分を見ましょう。
include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases')
最初に cf.m4
を include しています。この m4 マクロの
ファイルにはこの後で利用することになるマクロが数多く定義
されています。指定しているパスが正しいかチェックしてくだ
さい。なおここであげているのは、Debian GNU/Linux での例
です。OSTYPE
はいろいろなデフォルトの設定値をセット
するのに便利なマクロです。Debian を使っていないなら、
「debian」を「linux」に置き換えてください。ALIAS_FILE
によって sendmail が参照するエイリアスのリストを決めています。
下記の行は sendmail の機能である genericstable
を
使用する指定しています。またそれを使用するために必要な
設定ファイルがどこにあるのかも指定しています。
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
masquerade_envelope
機能は、sendmail がメッセージに
書かれているエンベロープの送信者(Sender)の部分を書き換え
ます。外部のメール配送システムがメールを配送できなかった
場合や、何らかの警告メッセージを送信者に知らせる場合に
このアドレスを使用します。generics*
ファイルについて
は後で説明します。
それではここで、スマートホストと呼ばれている、外部にメールを 配送する役目を負うマシンについて説明しておきましょう。 このマシンが ISP の POP、IMAP サーバとは違う役割を果たして いるということに注意してください。本当かな、とお思いなら、 ISP に電話して聞いてみてください。主な設定ファイルの内容 は下記の通りです。
define(`SMART_HOST',`mail-out.your.provider')
「mailer」の記述がある最後の 2 行は sendmail がいろいろ な種類のメールをどのように処理するかを決定するために必要 です。
MAILER(local) MAILER(smtp)
この sendmail.mc
から sendmail.cf
を生成するには、
下記のコマンドを root で実行してください。
# m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf
m4
による処理結果をテンポラリファイルにいったん
書いてから、正式の名前に変更してください。こうすることに
よって、sendmail がまだきちんと設定していないファイルを
使用してしまうことを防ぐことができます。
まず sendmail にどれがローカルなアドレス(つまり書き換えの対象
になる)なのかを判断させる必要があります。
このやり方はとても単純です。マシンについているインターネット
で一意に識別できるホスト名を
/etc/mail/genericsdomain
に書くだけです。
そのホスト名を調べるには下記のコマンドを入力してください。
$ hostname -f
それではアドレスの書き換え方を決めるテーブルである
/etc/mail/genericstable
をきちんと書いてみ
ましょう。このファイルは、スペースで区切られた 2 つのカラム
から構成されています。左側のカラムがローカルで使われるアド
レスで、右側がその代わりに使用されるアドレスです。
下記のような形になります。
harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp
1 つの指定ごとにローカルにあるマシンのそれぞれの アカウントを指定してください。そうするとローカルなシステム から自動的に出されたメールに正しいヘッダー情報がつけられる ことになります。
パフォーマンスを上げるため、sendmail はテキストで書かれたこの ファイルを直接利用しません。その代わりに「ハッシュ済み」のファイル を使います。そのファイルを作るには、下記の通りに入力します。
# makemap -r hash genericstable.db < genericstable
genericstable
にある書き換えのルールはローカルでのやり
取りや外部から配送されるメールには適用されません。
この書き換えはローカルなシステムから ISP のスマートホスト
に送る場合にだけ行われます。
aliases ファイルには、ローカルでやりとりするメールが使用する
名前を定義してあります。root
のように、自動的にシステム
からのメールを送られる、何かを管理するためのアカウントにとっ
ては便利な機能です。
/etc/mail/aliases
の正しい例は下記のような
内容のファイルになるでしょう。
root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody
この例ですと、root
、news
、postmaster
、mail
、
www
ユーザ宛のメールは fred
に送られ、nobody
と
MAILER-DAEMON
宛のメールは /dev/null
行きに
なります。
aliases
は genericstable
と同様に多くのエントリを含みます。したがって、genericstable と同じ
理由で sendmail がこのファイルをテキストで扱うのは得策では
ありません。genericstable
と同じ仕組みである ハッシュ
されたデータベースが aliases
にも利用されています。
ただ makemap
を直接使用せずに、newaliases
という
コマンドを使ってもかまいません。このコマンドが必要な処理を
すべて自動的に行ってくれます。