今日も変なメール到着により、yk.rimのPOPサーバからメールが吸い出せなくなってしまった。 今回は、発信元のドメイン名ispchannel.comがDNSで引けないというメールが引金。 fetchmail -v で様子を見てみると、以下のような動き。
ウチのマシンではDNSキャッシュ用に自前でnamedを動かしているんだけど、DNS引きに失敗した名前って覚えててくれないのかな。 namedには名前引き失敗情報も覚えておくネガティブキャッシュ機能がついているはずなんだけど。 名前引き1回失敗につき、gethostbynameで1分食われる + 設定によってはfetchmailもsendmailも名前引きを行う + IPv4, IPv6, MXをそれぞれ名前引きして全部失敗する = ものすごいタイムロスが発生している。
named(8), named.conf(5), /usr/share/doc/bind/html/index.html からオプションを調べてみたけど、ネガティブキャッシュを有効にするオプションらしきものは発見できず。
以下のオプションがそれっぽいけど、指定してもgethostbynameの2回目の失敗が高速化されるわけではないし。
謎だ。
(成功する名前引きについては自前namedがキャッシュしてくれているんだけど...。)
// /etc/namedb/named.conf options 内部の一部 // ネガティブキャッシュに関連しそうなオプション // これを書いても2回目の名前引き失敗が高速化されるわけではない has-old-clients no; rfc2308-type1 yes; max-ncache-ttl 3600;
結局、ウチでは以前からprocmailを使用していたので、fetchmailの設定でMDAにprocmailを設定することにした。 興風館.山鳥の間.fetchmail の設定と使い方を参考に、~/.fetchmailrcに以下の記述を追加。 FreeBSD用にパスが変えてある&procmailをMDAに指定してある他は上のページの内容と一緒。
# ~/.fetchmailrc の一部 # george は私のユーザー名 #---------------------------------------------------------------------- # default setting # defaults protocol pop3 fetchall no mimedecode # mda "/usr/libexec/mail.local -d george" # (default) # mda "/usr/local/lib/mh/slocal -user george" # MH's MDA mda "/usr/local/bin/procmail" # procmail
とりあえずこれでメール受信できるようになった。
あとはDNSのネガティブキャッシュを有効にする方法が判明したらまた日記に書く予定。
追記。 RFC2308 DNS問い合わせのネガティブキャッシュ(DNS NCACHE)の日本語訳。 SOAレコードの無いネガティブ応答はキャッシュすべきではない....悪いネガティブキャッシュをDNSの間に広めることでsendmailのキューをいっぱいにしたり、特定のサイトへアクセスできなくする攻撃もありうる...。 なるほど、ネガティブキャッシュは、今の動作でもOKな気がして来た(笑)。