ttt

getttyent

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

2006-04-12 22:49:34 | デジタル・インターネット

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.


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。