Postfixのcontent_filterではまった

もとより会員登録すると送られてくるメルマガぐらいしかメールなんてこないんだけど、それにしてもここ数日メールがこないなー、と思ったらClamAVのところでエラー吐いて止まってた。
いくらメール来ないといってもLogWatchのメールまで来ないのはおかしいなーと思って調べたら、ごらんのありさまだよ!
そういや何日か前にTwitterClamAVがどうとかってPOSTを見たような気がする。

何が起こっていたのか

とりあえず/var/log/maillogを覗いてみたらこんな感じのエラーが大量に出ていた。ぎゃーなにこれ。

Apr 18 10:12:31 xxxxx postfix/smtp[11864]: 0EFDA28748: to=<xxx@xxxxxx.xxx>, orig_to=<root>, relay=xxx.xxx.xxx.xxx[xxx.xxx.xxx.xxx], delay=22296, status=deferred (host xxx.xxx.xxx.xxx[xxx.xxx.xxx.xxx] said: 451-4.5.0 Error in processing, id=27899-19, virus_scan FAILED: virus_scan: ALL VIRUS SCANNERS FAILED: ClamAV-clamd av-scanner FAILED: CODE(0x810763c) Too many retries to talk to /tmp/clamd.socket (Can't connect to UNIX socket /tmp/clamd.socket: \343\201\235\343\201\256\343\202\210\343\201\206\343\201\252\343\203\225\343\202\241\343\202\244\343\203\253\343\202\204\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\343\201\257\343\201\202\343\202\212\343\201\276\343\201\233\343\202\223) 451-4.5.0  at (eval 44) line 310. at (eval 44) line 511.; ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan unexpected exit 50, output="LibClamAV Error: cli_hex2str(): Malformed hexstring: This ClamAV version has reached End of Life! Please upgrade to version 0.95 or later. For more information see  www.clamav.net/eol-clamav-

どうも/tmp/clamd.socketに接続できずにウィルススキャンに失敗しているのが原因の模様。*1
最後の方のメッセージを見ると、現在使用中のバージョンはサポートが終わってしまったようでバージョンアップしろといことのようだ。


このサーバのClamAVとAmavisd-newはパッケージで入れたんだけど、updateしてみても新しいのは出てこない模様。
となるとソースから入れるしかないわけだが……

とりあえず外してみた

そんな暇はないのでとりあえずClamAVを外すことにした。ウィルスチェックはクライアントでやれや!
Postfixなのでmaster.cfからamavisのプロセス設定をコメントアウトして、main.cfのcontent_filterも外して再起動。
試しにメールを送ってみると無事届くようになった!解決!

スプールがおかしい

解決してないよ!
無事にメールも届くようになって一段落、と思って確認のためmaillogを覗いたら今度はこんなログが頻繁に出てやがる。

Apr 20 21:39:22 xxxxx postfix/qmgr[23924]: warning: connect to transport smtp-amavis: Connection refused

smtp-amavisに繋がらないようなんだが、止めたんだから当然だ。
というかcontent_filterも外したし何度も再起動したのに、何故設定から消え去ったはずのsmtp-amavisに繋ぎに行くの?


これがどうしてもわからなくてひたすらググりまくってたら「スプールを消したら解消された」というヒントを発見。
早速/var/spool/postfix/deferredの中を漁ってみたらなんかsmtp-amavisとか書かれている部分が見える。
なるほどスプールされたファイル内にもcontent_filterとかが記録されているのか。ここをいじればよさそう?


しかしこれバイナリファイルっぽくてどういじったらいいのかわからん。
postcatというコマンドで内容が表示できることはわかったけど編集方法がわからん。


というわけでまたググりまくってたらpostsuper -r ALLとかやれば設定がキューファイルに反映される(つまりcontent_filterが取り除かれる)ことがわかった。ていうか普通に公式マニュアルに載ってた(読めよ)。
-rは正確にはキューに入れ直すオプションで、その際に再度マッピングなどの処理が適用されるということらしい。


とりあえずこれでdeferredに貯まってたメールも一気に流れて一段落。
いやー、Webとか止まってもたいして焦らない*2けどメール止まると焦るよねー。

*1:8進数のところは「そのようなファイルやディレクトリはありません」と出てる。

*2:仕事関係なら何が止まっても焦るけど