注意
ここの項目は、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 に変えてみました。
目次
- sendmail-8.9.3.tar.gz
です。
あたりにソースがあります。持って来るものは、
- sendmail のホームページ
- ftp://ftp.sendmail.org/pub/src/sendmail/
- ftp://ftp.jpcert.or.jp/pub/security/tools/sendmail/
- sendmail.8.9.3.tar.gz
- sendmail.8.9.3.patch.gz
- CF-3.7Wpl2.tar.gz
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 不正中継防止の設定
不正中継 を防止するために 次の設定を行います。
- sendmail.def の最後の方の MAIL_RELAY_RESTRICTION の # を外し、no を yes に変更する
- /etc/sendmai.localip に自分のドメイン IP を記述
130.xx.yy- /etc/sendmai.localdomain に自分のドメインネームを記述
hogehoge.ac.jpこれで、130.xx.yy か hogehoge.ac.jp が関与しているメールしか 中継されなくなります。
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 します。
ここでは、make ではなく、Build であることに注意して下さい。 Build コマンドで、設定からコンパイルまでしてくれます。 終了すると、obj.* というディレクトリができている筈です。
# cd /somewhere/sendmail-8.9.3/src
# sh ./Build
# 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*
以上でコンパイルは終了です。
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 をテストモードで起ち上げます。実際に入力するのは3行目の . までで、あとは sendmail の出力です。 これで、/var/mail/user ファイルの所有者、モードに問題がなければOKです。 このテストを自ドメイン内の別のホスト、他ドメイン内のホストなど なるべく多くのホストについてやっておきましょう。 user の所を mail address に変えてやればできます。
# ./sendmail -v user
test
.
user... Connecing to local...
user... Send
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 のデーモンを kill して新しい sendmail を フルパスで起動します。
# killall sendmail
# /usr/sbin/sendmail -bd -q1h
さて、これで sendmail が立ち上がったわけですが、 上で行ったはずの SPAM 対策がちゃんと組み込まれているか チェックしてみましょう。ターミナルの上でと打ちます。向こうに入ると自動的に、 こちらのホストにメールを中継させようと試みて来ます。 何度か(10数回)テストされますが、うまく中継を拒否していれば、
# telnet mail-abuse.org
という返事が帰って来ます。
Relay test result
All tests performed, no relays accepted.
Connection closed by foreign host.
トラブルシューティング
ダメだった場合は、例えば書籍 『FreeBSD を使ったインターネットサーバの作り方』 (胡桃・菅沼真理著、カットシステム) の フォローのページ 等を参照してください。