研究室のメールサーバが spam を喰らったようで、キューがいっぱいになっていました。
とりあえず環境は次の通り。
- Debian etch
- Postfix
- amavisd-new
- SpamAssassin
- ClamAV
Postfix からは content_filter で amavisd を呼び出し、スパムチェックとウィルスチェックを経て、再び Postfix へ戻す処理をしています。
Postfix でフィルタ処理をするときは、大きく分けて次の 2 方法があります。
- smtpd_proxy_filter
- content_filter
前者は外部 MTA から受け取った smtpd が SMTP を話すフィルタプログラムへ直接渡します。そのためフィルタプログラムでエラーが生じた場合、メールを受け取り損ねる場合があります。
一方の後者は、一度 smtpd で受け取りキュー処理をした後にフィルタプログラムへ渡すので、外部 MTA から受け取り損ねることはありません。しかし、フィルタプログラムを経たメールは再び smtpd へ渡されキュー処理されるので、Postfix のキューを 2 回通ることになり、場合によってはキューが溢れることがあります。
それぞれ一長一短なので、利用環境に応じて設定すると良いかも知れません。
さて Postfix のキューですが、次の 6 つがあります。
- maildrop: ローカルの sendmail コマンドから送信されたメールのキュー
- incoming: cleanup デーモンにより、最初に入るキュー
- active: 配送処理中のキュー
- deferred: active キューの後、送信ミスなどにより再送するメールが戻されるキュー
- corrupt: 何らかの原因で壊れているメールのキュー
- hold: 管理者が任意に使えるキュー
これらのキューに入っているメールの一覧は、qshape コマンドを用いることで確認できます。引数にキューを指定でき、省略時は“incoming active”です。
qshape コマンド
# qshape
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 1346 16 30 45 92 134 249 780 0 0 0
tom.sfc.keio.ac.jp 1324 15 29 44 91 132 242 771 0 0 0
sfc.keio.ac.jp 7 0 1 0 0 0 1 5 0 0 0
kencho.tom.sfc.keio.ac.jp 7 0 0 0 1 1 5 0 0 0 0
*****.com 5 1 0 1 0 1 0 2 0 0 0
***.org 2 0 0 0 0 0 0 2 0 0 0
********.co.jp 1 0 0 0 0 0 1 0 0 0 0横軸は時間 (単位: 分)、縦軸は宛先ドメインです。この時点でキューには 1346 通溜まっています。溜まりすぎですね……。
続いて、どの処理で遅延しているかを調べました。単純に調べる方法として、Postfix が処理中のものはファイルロックされるだろうと推定し、ps コマンドで見てみました。具体的には ps -lU postfix を watch コマンドで監視してました。その結果、Postfix にはボトルネックとなるような部分がありませんでした。
「じゃーどこだろう」と考えると、「フィルタリングで順番待ちをして居るんじゃないか」というところです。デフォルトで amavis は 2 プロセスしか立ち上がらないので、/etc/amavis/conf.d/50-user に $max_servers = 5; を書き加え、サービスをリスタートさせました。
そしたら快適に動くようになりました。終盤は端折りすぎましたが、そんな感じでした。
Related Entries
There is not related articles.
Trackbacks
Trackback URI: http://blog.c--v.net/trackback/2008/05/20/1
There is no trackback.
There is no comment.