我が家のメール・サーバーには、平均で 1日あたり 400~500通程度の迷惑メールが届く。そのため迷惑メール対策が欠かせず、MTA と連動した迷惑メール・フィルターとして、SpamAssassin が活躍している。

MTA (Postfix) から SpamAssassin にメールを投げるのは自作のコンテンツ・フィルターで、これは自宅だけでなく、同様に Postfix + SpamAssassin が稼動する業務環境にも導入されている (自宅サーバーは業務のテスト環境でもあるが、その逆もまた真)。しかしこのコンテンツ・フィルターは長らく Postfix と spamd が同じサーバー上で動作していることを暗黙の了解としていて、メール・サーバーの負荷増大の一因にもなっていたが、前に別マシン上の spamd を利用して負荷分散を図る必要が生じたことで、先日久々にアップグレードした。

ところが、その 「別マシン上の spamd」 である CentOS の SpamAssassin は自機外からの利用は想定されていないようで、外部 spamc からのアクセスを許可するには、spamd 側で起動時のオプションを追加する必要があった。

spamd が外部 spamc からのアクセスを受け付ける設定は、次の通り。(CentOS 5.5)

# cat /etc/sysconfig/spamassassin
# Options to spamd
#SPAMDOPTIONS="-d -c -m5 -H" ← デフォルト設定をコメントアウト
SPAMDOPTIONS="-d -c -m5 -H -i -A 127.0.0.1,192.168.xxx.0/24" ← 追加

このように、-A オプションで接続を許可するクライアントの IP アドレスを、個別または範囲で列挙すればいいが、spamd が接続を待ち受ける IP アドレス (要するにインターフェイス?) を指定する -i オプションを忘れてはいけない。デフォルトで許可されているのは "127.0.0.1" だけなので、この指定がないと、外部からの接続は事実上不可能になる。上記例のように "-i" の後に任意の IP アドレスを明示しない場合は、"0.0.0.0" を指定するのと同義で、全てのインターフェイスが有効になる。

-m オプションは、子プロセスの最大数を指定している。デフォルトは 5 だが、spamd 専用マシンを用意できるなら、マシンのスペックに応じてもっと増やしてもいいと思う。あまり調子に乗りすぎると、窮地に陥るかもしれないが・・・。

加えてファイア・ウォールが有効な環境では、spamd が利用する TCP/783 を開けておく。

尚、spamc 実行時に -x オプションを付加すると、失敗時に以下のようなエラー・コードが得られるので、上手く動かない場合の調査や、spamc の結果を見てスクリプトの挙動を変えたりする際に役立つ (man spamc 参照)。

       If the "-x" option is specified, ’safe fallback’ will be disabled, and certain error conditions
       related to communication between spamc and spamd will result in an error code.  The exit codes used
       are as follows:

           EX_USAGE        64  command line usage error
           EX_DATAERR      65  data format error
           EX_NOINPUT      66  cannot open input
           EX_NOUSER       67  addressee unknown
           EX_NOHOST       68  host name unknown
           EX_UNAVAILABLE  69  service unavailable
           EX_SOFTWARE     70  internal software error
           EX_OSERR        71  system error (e.g., can’t fork)
           EX_OSFILE       72  critical OS file missing
           EX_CANTCREAT    73  can’t create (user) output file
           EX_IOERR        74  input/output error
           EX_TEMPFAIL     75  temp failure; user is invited to retry
           EX_PROTOCOL     76  remote error in protocol
           EX_NOPERM       77  permission denied
           EX_CONFIG       78  configuration error

Comments are closed.