2006年4月13日木曜日

FreeBSDなメールサーバで、メール送信時に5秒待たされる問題

FreeBSDマシンでsendmailを使ってメールサーバとし、Windowsなパソコンで、メール送信サーバとしてそのFreeBSDマシンを指定していると、メール送信時に、「サーバに接続中」みたいなメッセージを表示したまま、5秒間くらい待たされる、という奇妙な症状が見られていました。

Windowsパソコン
メールソフト
   ↓
   ↓
   ↓
   ↓
 FreeBSD
 sendmail

  1. メールを書き、送信ボタンを押す


  2. 接続中・・・となったまま、5秒くらい待たされる


  3. 送信処理がはじまる(すぐ終わる)


Mozilla Thunderbirdでも、Outlook Expressでも同じように5秒待たされるので、Windows側の問題ではなさそう?





これまで、「気のせい、気のせい」(笑)って言ってごまかして、見なかったことにしていたのですが・・・



「気のせいじゃないよ」、と突っ込まれてしまったので、ちゃんと調べてみました。



・・・で、tcpdumpしたら、すぐわかりました。



  1. Windowsから、sendmailにSMTPでconnectした直後、sendmailが、identでWindowsに問い合わせを行う。


  2. ところが、Windowsはidentには応答しない。


  3. sendmailは、identの結果を、5秒間のタイムアウトをするまで、待ちつづける。


というわけで、謎の5秒の原因が、あっさりとわかりました。もしかすると、Windows XP SP2で、Windowsファイアウォールを使っていると、identになんにも返事をしないので、タイムアウトまで待たされるのかもしれません。ああ!なので、自宅では、まったく気がつかなかったのかもしれません(???)。



で、ど う し よ う か な と考えて・・・

identなんて、たいして役に立たないから、使うのやめちゃえ

ってことにしました。



sendmail.cfを作る元となる「*.mc」ファイルに、

define(`confTO_IDENT',`0s')

と書いて、identのタイムアウト時間に0秒を指定する(=identを使わない)といいらしいです。



ちなみに、sendmail.cfでは

O Timeout.ident=0s

と指定するようです。*.mcファイルのほうが、*.cfよりも、書き方がハナモゲラなのは、なんだかなぁ~って感じがします。



FreeBSDの場合、*.mcファイルは、「/etc/mail/」ディレクトリの中に、「ホスト名.mc」というファイル名で作ることになっています。なければ、「freebsd.mc」を「ホスト名.mc」という名前でコピーして使います。

cd /etc/mail
(「ホスト名.mc」ファイルを書き換える)
make
make install
/etc/rc.d/sendmail restart

ってやればOKです。具体的には、以下のようなかんじになります。



# make
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4
ホスト名.mc > ホスト名.cf
# make install
install -m 444 ホスト名.cf /etc/mail/sendmail.cf
install -m 444 ホスト名.submit.cf /etc/mail/submit.cf
# /etc/rc.d/sendmail restart
Stopping sendmail.
Waiting for PIDS: 22504.
Stopping sendmail_clientmqueue.
Starting sendmail.





0 件のコメント:

コメントを投稿