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 を実行する
semanage
コマンドを実行して、SELinux でspamd
によるリッスンをデフォルトで許可しているポートを表示させます。# semanage port -l | grep spamd spamd_port_t tcp 783
上記の出力では、SpamAssassin が動作するポートとして TCP/783 がspamd_port_t
で定義されていることを示しています。/etc/sysconfig/spamassassin
設定ファイルを編集し、SpamAssassin が TCP/10000 で起動するよう変更します。# Options to spamd SPAMDOPTIONS="-d -p 10000 -c m5 -H"
上記の行は、SpamAssassin がポート 10000 で動作するよう指定しています。ここからは、このソケットを開くよう SELinux ポリシーを変更する方法を見ていきます。- 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 によってブロックされたことを表しています。 - SELinux により次のような拒否がログ記録されます。
SELinux is preventing the spamd (spamd_t) from binding to port 10000.
- root ユーザーで
semanage
コマンドを実行し、SpamAssassin のサンプルポート (TCP/10000) での動作を許可するよう SELinux ポリシーを変更します。semanage port -a -t spamd_port_t -p tcp 10000
- 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
- SELinux ポリシーで
spamd
による TCP ポート 10000 へのアクセスが許可されたため、SpamAssassin がこのポートで正常に動作するようになりました。