続・玩式草子 ―戯れせんとや生まれけん―

第39回 お久しぶりのSpamAssasin

この記事を読むのに必要な時間:およそ 5 分

過去2回ほどの記事では昨年暮れに起ったHDDトラブルについて紹介しました。先に触れたように,幸い今回は必要なファイルはほぼ全て回収できたので,元のシステムを復旧することも可能そうだったものの,さすがに7~8年前のPlamo-5.3くらいの環境に復旧しても使いづらいので,最新のPlamo-7.3環境でシステムを再構築することにしました。

普段使っている作業環境はテストを兼ねて新バージョンのPlamo Linuxを常にインストールしているものの,メールやWebといったサーバ系の環境は一度動き始めるとなかなか更新しづらいこともあり,本格的なリプレイスは久しぶりで,⁠ああ,そう言えば……」的な感慨にふけりつつ,インストールや設定作業を進めました。

たいていのソフトウェアはPlamo Linuxのパッケージが用意されているので,設定ファイルを調整する程度で使えたものの,Apache SpamAssasinはPlamo用のパッケージを作って無かったこともあり,久しぶりに依存関係の底無し沼を経験することになりました(苦笑⁠⁠。今回はこのSpam Assasin関連の経験を紹介しましょう。

Apache SpamAssasinのインストール

"Apache SpamAssasin"(以下SAと略)は,いわゆるアンチスパム(スパム対策用)ソフトウェアで,インターネット上に蔓延しているさまざまなスパム(迷惑メール)をブロックして,不要なメールに煩わされる手間を省いてくれます。

"assasin"は「暗殺者」「刺客」という意味で,スパムを人知れず葬りさる,という意味で名付けられたようです。

最近では,@niftyやbiglobeといったISPが提供するメールサービスだけでなく,Gmail等の無料メールサービスでもスパム対策やウィルスチェック機能が適用されているので,ほとんどの人はアンチスパム機能を意識することがないでしょう。

しかしながら,筆者のように独自ドメインで自前のメールサーバを運用している場合,日々流れてくる膨大な迷惑メールを自動ブロックするためのスパム対策は必須です。

もっとも,今回のシステム構築に際して久しぶりにスパム対策関連ソフトウェアを調べてみたところ,Gmail等の普及の結果か,この分野の活動は以前に比べてずいぶん下火になっているようで,解説記事等も新しいものはほとんど見つかりませんでした。一方,SAはそのような状況の元でも着実に開発が続いており,最新版は2021/04に公開された3.4.6で,スパムを判定するためのルールセットも頻繁に更新されています。

SAはPerlで書かれたスクリプトで,Perl用モジュールを提供しているCPANからも提供されているものの,必要な機能が細かく分割,モジュール化されており,それらを全て揃えるのはなかなか大変です。

$ perl -MCPAN -e shell
...
cpan shell -- CPAN exploration and modules installation (v2.22)
Enter 'h' for help.
cpan[1]> install Mail::SpamAssassin
Reading '/home/kojima/.cpan/Metadata'
  Database was generated on Thu, 21 Apr 2022 02:41:03 GMT
Running install for module 'Mail::SpamAssassin'
...
***************************************************************************
ERROR: the required HTML::Parser module is not installed,
minimum required version is 3.43.

  HTML is used for an ever-increasing amount of email so this dependency
  is unavoidable.  Run "perldoc -q html" for additional information.
.... 
ERROR: the required Net::DNS module is not installed,
minimum required version is 0.34.

  Used for all DNS-based tests (SBL, XBL, SpamCop, DSBL, etc.),
  perform MX checks, and is also used when manually reporting spam to
  SpamCop.
....
dependency check complete...

REQUIRED module missing: HTML::Parser
REQUIRED module missing: Net::DNS
REQUIRED module missing: NetAddr::IP
optional module missing: Digest::SHA1
optional module missing: Mail::SPF
...
No 'Makefile' created  SIDNEY/Mail-SpamAssassin-3.4.6.tar.gz
  /usr/bin/perl Makefile.PL -- NOT OK

上記リスト中,"REQUIRED"が必須の機能を提供するモジュール,"optional"は任意のモジュールです。もっとも,これらのモジュールをインストールするために,さらに別のモジュールが要求されたりするので,必要なモジュールは芋ヅル式に増えていきます。

行きつ戻りつしながら必要なモジュール類を作ってみたところ,最終的に67ものパッケージが必要となりました。

$ ls *tzst 
geoip_api_c-1.6.12-x86_64-B1.tzst                perl_IP_Country_DB_File-3.03-x86_64-B1.tzst
perl_Archive_Tar-2.40-x86_64-B1.tzst             perl_LWP_MediaTypes-6.04-x86_64-B1.tzst
perl_Archive_Zip-1.68-x86_64-B1.tzst             perl_MailTools-2.21-x86_64-B1.tzst
perl_BSD_Resource-1.2911-x86_64-B1.tzst          perl_Mail_AuthenticationResults-2.20210915-x86_64-B1.tzst
perl_B_COW-0.004-x86_64-B1.tzst                  perl_Mail_DKIM-1.20200907-x86_64-B1.tzst
....
perl_IO_String-1.08-x86_64-B1.tzst               re2c-2.2-x86_64-B1.tzst
perl_IO_Zlib-1.11-x86_64-B1.tzst
$ ls *tzst | wc -l
67

これらのパッケージをインストールすればSAは使えるようになるものの,実際にスパムフィルタとして使うためには,届いたメールをSAに送りこむ仕組みが必要です。

さてどうするか,としばし悩んだものの,まずは使いなれた方法がよかろうと,従来通りのfetchmailで取り込んだメールをprocmailでSAに送りこむ」という最も簡単な方法を取ることにしました。

このあたりの現状はいかに,と調べてみたところ,procmailはすでに開発が終了して誰もメンテしていないからfdmmaildrop等を使うべき,とされていました。しかしながら,手元で使っていた設定ファイルを捨てて新しく書き直すのも大変そうなので,とりあえずprocmailでしのぎつつ,maildrop等を調べてみることにしました。

fetchmaiの設定ファイル(~/.fetchmailrc)とprocmail用の設定ファイル(~/.procmailrc)は認識できなくなったHDDから回収できているので,これらを新しい環境に持ち込めば必要な設定は完了です。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html