Postfix+Clamav+Spamassassinの設定

PostfixにClamAVとSpamassassinを連携させて、ウィルスメール対策とスパムメール対策をする方法を記載します。

PostfixとClamAV,Spamassassinの中継には、Amavisd-newを利用します。

また、Postfixの設定は、このサイトで紹介しているバーチャルドメイン環境を想定しています。

なお、検証環境には、CentOS-6を利用しました。

 

インストール

ここでは、Amavisd-new、ClamAV、Spamassassinをインストールしますが、CentOS標準では提供されて無い物もあるため、ここでは、EPELリポジトリを利用します。

 

EPELリポジトリの追加

EPELリポジトリを追加は、以下のコマンド行います。

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm


以下のコマンドで読み込みます。

yum update

 

 

インストール

Amavisd-new、ClamAV、Spamassassinをインストールします。

yum install amavisd-new clamd spamassassin

大量の依存パッケージが同時にインストールされます。

 

各ソフトの設定

EPELパッケージでは、Amavis-new、clamd、spamassassin、は連携して動作する設定がされているため、ここでは、Amavisd-newを設定していき、ClamdとSpamassassinは初期設定のまま利用します。

 

Amavisd-newの設定

Amavisd-newの設定ファイルは、/etc/amavisd/amavisd.confです。

デフォルト設定から変更する部分、もしくは関連する部分のみ記載します。

設定の前提として、メールサーバのホストがmail.unixlife.jpでバーチャルドメイン環境で利用している物とします。

ドメインを設定します。バーチャル環境の場合、自ホスト名を記載します。
$mydomain = 'mail.unixlife.jp';

利用しているバーチャルドメインを追加します。 ここで追加しないとバーチャルドメインでSpamassassinが正常に動作しません。
@local_domains_maps = ( [".$mydomain","unixlife.jp","exampes.com"] );

Spamassassinの動作設定です(設定項目は後記します)
$sa_tag_level_deflt  = 2.0;
$sa_tag2_level_deflt = 6.2;
$sa_kill_level_deflt = 6.9;
$sa_dsn_cutoff_level = 10;
$sa_crediblefrom_dsn_cutoff_level = 18;
# $sa_quarantine_cutoff_level = 25;

# $sa_spam_subject_tag1 = '[Possibility SPAM] ';
$sa_spam_subject_tag = '[SPAM] ';

# $final_virus_destiny      = D_DISCARD;
# $final_banned_destiny     = D_BOUNCE;
# $final_spam_destiny       = D_BOUNCE;
# $final_bad_header_destiny = D_PASS;

ClamAVとの接続(初期状態で有効のため変更の必要なし)
 ['ClamAV-clamd',
   &ask_daemon, ["CONTSCAN {}n", "/var/run/clamav/clamd.sock"],
   qr/bOK$/m, qr/bFOUND$/m,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

 

Spamassassinの動作設定項目について

上記設定ファイルのうち、Spamassassin項目について解説します。

スコア値での動作定義

$sa_tag_level_deflt  = 2.0; <---スパムと判断したメールのヘッダに[X-Spam-Level],[X-Spam-Status]のヘッダを付加ける
$sa_tag2_level_deflt = 6.2; <---スパムと判断したメールのヘッダに[X-Spam-Flag: YES]を付加ける
$sa_kill_level_deflt = 6.9; <---スパムと判断したメールのアクションを行う。既定ではSpamが届いた通知メールを送る
$sa_dsn_cutoff_level = 10; <---スパムと判断したメールを配送せずに隔離する。既定での隔離先は/var/virusmails/以下
$sa_crediblefrom_dsn_cutoff_level = 18; <---不明(情報お待ちしています。)
# $sa_quarantine_cutoff_level = 25; <---スパムと判断したメールは、隔離せずに削除する

 

スパムと判断されたメールの件名に指定文字を付加する

$sa_spam_subject_tag1 = '[Possib SPAM] '; <---$sa_tag_level_defltのしきい値を超えたメールの件名に文字列を付加する
$sa_spam_subject_tag = '[SPAM] '; <---$sa_tag2_level_defltのしきい値を超えたメールの件名に文字列を付加する

 

最終的なメールの処理規則

設定項目

$final_virus_destiny = D_DISCARD; <---ウィルスメールの最終的な処理方法
$final_banned_destiny = D_BOUNCE; <---禁止されたメールの最終的な処理方法
$final_spam_destiny = D_BOUNCE; <---スパムメールの最終的な処理方法($sa_kill_level_deflt以上が対象)
$final_bad_header_destiny = D_PASS; <---ヘッダにASCII以外の文字が含まれているメールの最終的な処理方法

設定値

D_PASS <---メールは受信者に配送される
D_REJECT <---メールは配送されないが、送信者に配送されなかった事を伝える
D_BOUNCE <---メールは配送されないが、送信者に配送されなかった事を伝える。例外で伝えない場合もある
D_DISCARD <---メールは配送されず、送信者にも配送されなかった事を伝えない

 

例えば、Spamassassinでスコアが$sa_kill_level_deflt以上になっても配送を行いたい場合は、以下のように設定します。

$final_spam_destiny = D_PASS;

なお、Spamassassinでwhitelist_fromやblacklist_fromなどの設定を行う場合は、通常とおり/etc/mail/spamassassin/local.cfで行います。

 

 

ClamAVの設定

ClamAVは常駐デーモンとして動かします。

ClamAVの設定ファイルは、/etc/clamd.conf です。また、Amavis-newとの連携に関わる設定は、/etc/clamd.d/amavis.conf です。

MaxScanSize 150M <---検査する時、ファイルのどのサイズまで検査するかの上限
MaxFileSize 50M <---検査する1ファイルのサイズ上限
MaxRecursion 10 <---検査する圧縮ファイルの検査階層数の上限
MaxFiles 1000 <---検査するファイル数の上限
ClamukoMaxFileSize 50M <---検査するファイルの総容量の上限

 

 

ウィルスメールを検知した場合の設定

ウィルスメールを検知した場合には、管理者(virusalert@$mydomain)宛に通知がメールが送られます。

これを受け取れるように、/etc/aliasesに設定します。

virusalert:	admin@unixlife.jp

 

設定したら、以下のコマンドで読み込みます。

newaliases

 

 

Postfixの設定

関連ソフトの設定が終了しましたので、Postfixの設定を行います。

動作としては、Postfixで受け取ったメールをAmavisd-newに渡します。

Amavisd-newは、ClamAVとSpamassassinでウィルスとスパムをチェックしてPostfixに返します。

Postfixは帰って来たメールの配送処理を行います。

この設定は、/etc/postfix/main.cfと/etc/postfix/master.cfで行います。

 

main.cfの設定

main.cfにamavisd-newとの接続設定を追加します。

main.cf

content_filter = smtp-amavis:[127.0.0.1]:10024 <---この行を追加

 

master.cfの設定

master.cfの最下行に設定を追加します。

区切り文字には、スペースでは無く、Tabを使用してください。

master.cf

## Amavis Settings
smtp-amavis	unix	-	-	n	-	2	smtp
	-o smtp_data_done_timeout=1200
	-o smtp_send_xforward_command=yes
	-o disable_dns_lookups=yes

127.0.0.1:10025	inet	n	-	n	-	-	smtpd
	-o content_filter=
	-o local_recipient_maps=
	-o relay_recipient_maps=
	-o smtpd_restriction_classes=
	-o smtpd_client_restrictions=
	-o smtpd_helo_restrictions=
	-o smtpd_sender_restrictions=
	-o smtpd_recipient_restrictions=permit_mynetworks,reject
	-o mynetworks=127.0.0.0/8
	-o strict_rfc821_envelopes=yes
	-o smtpd_error_sleep_time=0
	-o smtpd_soft_error_limit=1001
	-o smtpd_hard_error_limit=1000
	-o smtpd_client_connection_count_limit=0
	-o smtpd_client_connection_rate_limit=0
	-o receive_override_options=no_address_mappings
	-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

 

 

各ソフトの起動と動作確認

設定の終了したPostfix、Amavisd-new、Clamd、Spamassassinを起動し動作確認を行います。

 

各ソフトの起動

ClamAV、Spamassassin、Amavisd-newの順に起動し、最後にPostfixをreloadします。

/etc/init.d/clamd.amavisd start 
/etc/init.d/spamassassin start 
/etc/init.d/amavisd start 
/etc/postfix reload

なお、ClamAVを起動するとウィルス定義データベースが古い為にWarningが出るかもしれません。

ウィルス定義の更新は、以下のコマンドで行ってください。

freshclam

 

自動起動の設定

ClamAV、Spamassassin、Amavisd-newを自動起動するように設定します。

chkconfig clamd.amavisd on 
chkconfig spamassassin on
chkconfig amavisd on

 

 

メール配送テスト

通常メールの配送テスト

適当なメールクライアントを利用して、メールの配送が正常に出来るか確認してください。

この時、/var/log/maillogを見ながらテストする事をお勧めします。

設定に誤りがあれば、ログに何らかのメッセージが記録されるはずです。

 

ウィルスメールの配送テスト

テスト用ウィルスファイルを利用して、ClamAVでウィルスファイルが適切に処理されているか確認してください。

テスト用ウィルスは、The EICAR( European Institute of Computer Anti-virus Research)で提供されています。

こちらから入手してテストしてください。

正常にウィルスメールが隔離出来ていれば、管理者にウィルスメール検知を知らせるメールが届きます。

また、隔離されたウィルスメールは、/var/virusmails/以下に保存されます。

 

スパムメールの配送テスト

スパムメールの配送テストには、本文に以下の文字列を加えたメールを作成し送信します。

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

 

 

ClamAVとウィルス定義データベースの更新

ウィルス定義データベースの更新は以下のコマンドで行います。

freshclam

cronに設定し、定期的に自動実行すると良いでしょう。

 

 

Spamassassinの設定

Spamassassinで誤検知がある場合は、システム全体のルールとして/etc/mail/spamassassin/local.cfにwhitelistやblacklistを設定します。

例)/etc/mail/spamassassin/local.cf

whitelist_from *.examples-1.com
whitelist_from *@examples-2.com

blacklist_from *test-example.com
blacklist_from *@test.org

 

ファイルを編集したら、amavisd をreloadします。

/etc/init.d/amavisd reload

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">