13.4. 設定例

13.4.1. SpamAssassin と Postfix

SpamAssassin プロジェクトページより抜粋:
原文: "Open Source mail filter, written in Perl, to identify spam using a wide range of heuristic tests on mail headers and body text. Free software." (訳文: Perl で記述されたオープンソースのメールフィルターです。メールのヘッダーおよび本文で幅広い範囲の発見的テストを使用してスパムを識別するフリーソフトウェアです。)
Red Hat Enterprise Linux を使用する場合、SpamAssassin は spamassassin パッケージで提供されます。rpm -q spamassassin を実行して、spamassassin パッケージがインストールされているか確認してください。インストールされていない場合は、root ユーザーで次のコマンドを実行してインストールを行ないます。
yum install spamassassin
SpamAssassin は Postfix などのメーラーと連携してスパムフィルタリング機能を提供します。メールの効果的な遮断、分析、フィルタリングが行なわれるためには、SpamAssassin はネットワークインターフェース上でリッスンを行なう必要があります。SpamAssassin のデフォルトポートは TCP/783 ですが、変更することもできます。SELinux で特定のポートに限ったアクセスをデフォルトで許可することにより SpamAssassin を補完している実践的な例を以下に示します。次に、ポートを変更する方法およびデフォルト以外のポートで SpamAssassin を正常に動作させる方法について説明していきます。
以下に示す例は、 シンプルな SpamAssassin 設定に対してどのように SELinux が影響を与えることができるのかを示す一例に過ぎません。 SpamAssassin に関する総合的な説明は本ガイドの範疇を越えてしまいますので、 詳細については、 公式の SpamAssassin ドキュメント を参照してください。 ここでは、spamassassin がインストールされていること、使用しているポートでのアクセス許可がファイアウォールで設定されていること、SELinux が enforcing モードで実行されていることを前提としています。

デフォルト以外のポートで SpamAssassin を実行する

  1. semanage コマンドを実行して、SELinux で spamd によるリッスンをデフォルトで許可しているポートを表示させます。
    # semanage port -l | grep spamd
    spamd_port_t		tcp	783
    
    上記の出力では、SpamAssassin が動作するポートとして TCP/783 が spamd_port_t で定義されていることを示しています。
  2. /etc/sysconfig/spamassassin 設定ファイルを編集し、SpamAssassin が TCP/10000 で起動するよう変更します。
    # Options to spamd
    SPAMDOPTIONS="-d -p 10000 -c m5 -H"
    
    上記の行は、SpamAssassin がポート 10000 で動作するよう指定しています。ここからは、このソケットを開くよう SELinux ポリシーを変更する方法を見ていきます。
  3. SpamAssassin を起動すると、次のようなエラーメッセージが表示されます。
    # service spamassassin start
    Starting spamd: [2203] warn: server socket setup failed, retry 1: spamd: could not create INET socket on 127.0.0.1:10000: Permission denied
    [2203] warn: server socket setup failed, retry 2: spamd: could not create INET socket on 127.0.0.1:10000: Permission denied
    [2203] error: spamd: could not create INET socket on 127.0.0.1:10000: Permission denied
    spamd: could not create INET socket on 127.0.0.1:10000: Permission denied
                                                               [FAILED]
    
    上記の出力は、このポートへのアクセスが SELinux によってブロックされたことを表しています。
  4. SELinux により次のような拒否がログ記録されます。
    SELinux is preventing the spamd (spamd_t) from binding to port 10000.
    
  5. root ユーザーで semanage コマンドを実行し、SpamAssassin のサンプルポート (TCP/10000) での動作を許可するよう SELinux ポリシーを変更します。
    semanage port -a -t spamd_port_t -p tcp 10000
    
  6. SpamAssassin が起動し、TCP ポート 10000 で動作していることを確認します。
    # service spamassassin start
    Starting spamd:					[ OK ]
    
    # netstat -lnp | grep 10000
    tcp	0	0 127.0.0.1:10000	0.0.0.0:*	LISTEN	2224/spamd.pid
    
  7. SELinux ポリシーで spamd による TCP ポート 10000 へのアクセスが許可されたため、SpamAssassin がこのポートで正常に動作するようになりました。