sendmail

注意
ここの項目は、FreeBSD 2.2.8-RELEASE マシンにおける設定です。 記述自身も古いですが、 FreeBSD 3.x-RELEASE と違いがでている可能性もありますので お気をつけ下さい。

sendmail のバージョンは新しければ新しいほど、 セキュリティーホールなどが解消されて良いです。 そこで、FreeBSD 2.2.8-RELEASE に組み込みの sendmail-8.8.8 を 最新の(99/04/26時点)sendmail-8.9.3 に変えてみました。

目次


ソースを持って来る

CF で /etc/sendmail.cf を作る

FreeBSD 2.2.8-RELEASE 付の sensmail.cf は V7 ですが、 sendmail-8.9.3 では V8 の sendmail.cf を使います。 したがって、CF を使って sendmail.cf を新たに書き直します。

CF のインストール

適当な場所で、CF-3.7Wp12.tar.gz を展開し、make します。
% tar zxf CF-3.7Wp12.tar.gz
% cd CF-3.7Wpl2
% make clean tools

CF による設定ファイルの生成

% cp Standards/sendmail-v8.def sendmail.def

コピーした sendmail.def を編集し、make します。
% make sendmail.cf

生成された sendmail.cf を /etc へコピーします。
# cp sendmail.cf /etc

不正中継防止の設定

不正中継 を防止するために 次の設定を行います。

これで、130.xx.yy か hogehoge.ac.jp が関与しているメールしか 中継されなくなります。

sendmail は新しい方がセキュリティーホールが潰されています。 常にアップグレードすることをお勧めします。

sendmail のコンパイル

適当なところ(/somewhere)でソースを展開します。
% tar zxf sendmail.8.9.3.tar.gz
% cd sendmail-8.9.3

BuildTools/Site/site.config.m4 にコンパイル時のオプションを書きます。 こんな感じです。
/somewhere/sendmail-8.9.3/BuildTools/Site/site.config.m4
define(`confCC',`gcc')
define(`confOPTIMIZE',`-O2')
define(`confLDOPTS',`-static')
APPENDDEF(`confENVDEF',`-D_FFR_MAX_MIME_HEADER_LENGTH=1')
詳しい設定は、マニュアルを御覧下さい。

最後に、/somewhere/sendmail-8.9.3/src で Build します。
# cd /somewhere/sendmail-8.9.3/src
# sh ./Build
ここでは、make ではなく、Build であることに注意して下さい。 Build コマンドで、設定からコンパイルまでしてくれます。 終了すると、obj.* というディレクトリができている筈です。
# cd obj.FreeBSD.2.2.8-RELEASE.i386
# pwd
/somewhere/sendmail-8.9.3/src/obj.FreeBSD.2.2.8-RELEASE.i386
# ls -F sendmail
sendmail*

以上でコンパイルは終了です。

CF のテスト

sendmail のインストールの前に、 まずは CF をテストして正常に機能しているかを確認しましょう。 sendmail をテストモードで立ち上げます。 確認するのは、ホスト名取得、local host への配送、 同一ドメイン内の別のホストへの配送です。 ここでは、use というユーザが local host と hoge.hogehoge.ac.jp という 別のホストへ送った場合のテストの模様を示しています。

  # cd /somewhere/sendmail-8.9.3/src/obj.FreBSD.2.2.8-RELEASE.i386
  # pwd
  /somewhere/sendmail-8.9.3/src/obj.FreBSD.2.2.8-RELEASE.i386
  # ./sendmail -bt -d0.4 -C /etc/sendmail.cf
  .......................
  ============SYSTEM IDENTITY=====================
             $w = hoge
     	     $j = $w.$m
	     $m = hogehoge.ac.jp
	     $k = hoge
  ================================================
  > /parse user
  .......................
  mailer  local , user  user 
  > /parse user@hoge
  .......................
  mailer  smtp , host  hoge.hogehoge.ac.jp. , user  user@hoge.hogehoge.ac.jp 
  

赤く書いた文字が期待通りであればテストは成功です。 SYSTEM IDENTITY の所は

  $w = ホスト名
  $j = ホスト名のフルネーム
  $m = ドメイン名
  $k = ノード名 
  
となっていればOKです。

sendmail のテスト

次は、sendmail のテストです。 sendmail をテストモードで起ち上げます。
# ./sendmail -v user
test
.
user... Connecing to local...
user... Send
実際に入力するのは3行目の . までで、あとは sendmail の出力です。 これで、/var/mail/user ファイルの所有者、モードに問題がなければOKです。 このテストを自ドメイン内の別のホスト、他ドメイン内のホストなど なるべく多くのホストについてやっておきましょう。 user の所を mail address に変えてやればできます。

sendmail のインストール

sendmail のインストールは make install をするのは危険です。 手作業で確認しながら行いましょう。 sendmail のあるディレクトリは環境に併せて適当に読み変えてください。
  # cd /somewhere/sendmail-8.9.3/src/obj.FreBSD.2.2.8-RELEASE.i386
  # cp ./sendmail /usr/sbin/sendmail.new
  # chown root /usr/sbin/sendmail.new
  # chmod 4755 /usr/sbin/sendmail.new
  # mv /usr/sbin/sendmail /usr/sbin/sendmail.old
  # mv /usr/sbin/sendmail.new /usr/sbin/sendmail
  

ここから先は、一度行われていれば2度やる必要はありません。

  # mv /usr/bin/mailq /usr/bin/mailq.org
  # ln -s /usr/sbin/sendmail /usr/bin/mailq
  # mv /usr/bin/newaliases /usr/bin/newaliases.org
  # ln -s /usr/sbin/sendmail /usr/bin/newaliases
  # mv /usr/bin/mailstats /usr/bin/mailstats.org
  # ln -s /usr/sbin/sendmail /usr/bin/mailstats 

これで、古い sendmail は /usr/sbin/sendmail.old として 残されていますから、これを立ち上げたい場合は
  # mv /usr/sbin/sendmail /usr/sbin/sendmail.bad
  # mv /usr/sbin/sendmail.old /usr/sbin/sendmail
  
とします。

sendmail の起動

いよいよ、新しい sendmail を起動する時がやって来ました。 古い sendmail のデーモンを kill して新しい sendmail を フルパスで起動します。
# killall sendmail
# /usr/sbin/sendmail -bd -q1h

アンチ SPAM テスト

さて、これで sendmail が立ち上がったわけですが、 上で行ったはずの SPAM 対策がちゃんと組み込まれているか チェックしてみましょう。ターミナルの上で
# telnet mail-abuse.org
と打ちます。向こうに入ると自動的に、 こちらのホストにメールを中継させようと試みて来ます。 何度か(10数回)テストされますが、うまく中継を拒否していれば、
Relay test result
All tests performed, no relays accepted.
Connection closed by foreign host.
という返事が帰って来ます。

トラブルシューティング

ダメだった場合は、例えば書籍 『FreeBSD を使ったインターネットサーバの作り方』 (胡桃・菅沼真理著、カットシステム) の フォローのページ 等を参照してください。

FreeBSD の部屋


Apr. 1, 2000