INTAA.NETのメールサーバでは迷惑メールの検出用にSpamAssassinを使用している。
SpamAssassinはプロジェクトが生きてるのか死んでるのかわからないような状態だし、迷惑メールの検出ルールの更新もやってるのかやってないのか不明。そもそも、Perlスクリプトのお化けみたいなものなので、そろそろ何か別な物に乗り換えたいところではあるのだけど適当なものが見当たらないのと、迷惑メールの検出でそこそこの成果があるのでなかなか重い腰が上がらない。
で、SpamAssassinでSPFの異常判定が発生したので調べていたら、sa-updateによるルールセットの更新が失敗するようになっているのを見つけた。
ちなみに、SPFの方はportsのアップデートの際にNet::DNSモジュールが巻き込まれてVer.0.8*から1.0*に上がってしまったことによりモジュールが認識できない(足りないのと同様)状態になっていたこと。Net::DNSを認識できないとNet::DNS::Nameserverだけでなく何故かMail::SPFまで認識できなくなるみたい。危なっ。
SpamAssassinが必要とするPerlのモジュールが正しく認識されているか確認する。
本当はルールが正しいか確認するコマンドのデバッグモード。
# spamassassin --lint -D
結果Dec 5 18:10:15.637 [8720] dbg: diag: perl platform: 5.018004 freebsd Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Digest::SHA1, version 2.13 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: HTML::Parser, version 3.72 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::DNS, version 0.83 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: NetAddr::IP, version 4.079 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Time::HiRes, version 1.9741 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Archive::Tar, version 2.18 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Zlib, version 1.10 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Digest::SHA1, version 2.13 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: MIME::Base64, version 3.15 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: DB_File, version 1.827 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::SMTP, version 3.10 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Mail::SPF, version v2.009 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Geo::IP, version 1.50 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::CIDR::Lite, version 0.21 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Razor2::Client::Agent, version 2.84 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::IP, version 0.38 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::INET6, version 2.72 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: IO::Socket::SSL, version 2.039 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Compress::Zlib, version 2.069 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Mail::DKIM, version 0.4 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: DBI, version 1.636 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Getopt::Long, version 2.39 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: LWP::UserAgent, version 6.15 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: HTTP::Date, version 6.02 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Encode::Detect::Detector, version 1.01 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::Patricia, version 1.22 Dec 5 18:10:15.638 [8720] dbg: diag: [...] module installed: Net::DNS::Nameserver, version 1276
結構大量に出力される最初の方で表示される。
上ように全てのモジュールが「module installed」になっていれば問題ない。
・・・module not installed: Net::DNS ('require' failed)のような行があるとダメ。
本題のsa-updateの方。
# sa-update
Insecure dependency in require while running with -T switch at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/Base.pm line 570.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/Base.pm line 570.
Compilation failed in require at (eval 20) line 2.
...propagated at /usr/local/lib/perl5/5.18/base.pm line 88.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver/UNIX.pm line 18.
Compilation failed in require at (eval 19) line 2.
...propagated at /usr/local/lib/perl5/5.18/base.pm line 88.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/Net/DNS/Resolver.pm line 22.
Compilation failed in require at /usr/local/lib/perl5/site_perl/Net/DNS.pm line 51.
Compilation failed in require at /usr/local/bin/sa-update line 88.
BEGIN failed--compilation aborted at /usr/local/bin/sa-update line 88.
こんなの「with -T switch」で動いている時・・って表示される。Perlの-Tオプションって何だっけ?と思ったらTaint mode (汚染検出)。あぁ嫌いなやつだ。
/usr/local/bin/sa-updateの一行目を編集。
(SpamAssassinをportsでインストールしたらこのpath)
1 2 | #!/usr/local/bin/perl -T -w ← 1行目から
#!/usr/local/bin/perl -w ← -Tを削除
|
あくまでも対処療法だけどこれだけ。