はじめまして。サーバ初心者が会社のメールサーバを触わる機会をいただきまして、スパムメール対策の設定を加えることになったので、その記録を残したいと思います。
メールサーバと環境
社内の環境をAWSに移行してからEC2上でAmazonLinuxを利用しています。メールサーバはpostfixを利用しており、postfixにバーチャルドメインを構築し、バーチャルメールボックスによって作成した仮想的なアカウントに、メールをポストしています。受信メールサーバがPOPなので、IMAPと設定が異なる部分があることに注意が必要です。
Procmail+SpamAssassin
procmailはメールの配送をしてくれるアプリケーションです。postfixとprocmailを連携することで、メールの配送をprocmailに任せることができます。 SpamAssassinはメールを読み込みスパムメールかどうかを判定してくれるアプリケーションです。スパム判定を受けたメールの件名に「SPAM」のような文字列を加えてprocmailに返し、procmailに「SPAM」の文字列の入った件名のメールを削除、または別の受信BOXに配送するような処理を加えます。 今回の目的は、postfixからメールの配送をprocmailに任せ、SpamAssassinによるフィルタを通してスパムを撃退し、必要なメールだけ配送されるように設定することです。
インストール手順
procmailのパスを確認をします。
今回はprocmailがインストールされていましたが、インストールされていない場合は、
次にSpamAssassinをインストールします。
SpamAssassinの設定
初期設定では日本語のスパムメールには対応していないので、日本語に対応した設定ファイルをセットアップします。
# TextCat – language guesser
#
SpamAssassinの設定ファイルの最新化スクリプトを作成します。
cd /etc/mail/spamassassin
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo “report_safe 0” >> local.cf
echo “rewrite_header Subject ***SPAM***” >> local.cf
if [ -f /etc/rc.d/init.d/spamassassin ]; then
/etc/rc.d/init.d/spamassassin restart > /dev/null
else
systemctl restart spamassassin > /dev/null
fi
fi
cp user_prefs user_prefs.org
SpamAssassinの設定ファイル最新化スクリプトへ実行権限を付加します。
SpamAssassinの設定ファイル最新化スクリプトを実行します。
SpamAssassinの設定ファイル最新化スクリプトを毎日自動実行されるディレクトリへ移動します。
SpamAssassinのルールを自動更新するcronを設定します。
postfixとprocmailの設定
postfixとprocmailの連携させるための設定を行います。※ここからは設定にミスがあると、メールが届かなくなる恐れがありますので、必ず設定ファイルのバックアップを取っておきます。
procmailの設定
procmailrcを新規作成します。ここで重要なのは、配送するメールの保存先として、正しいディレクトリを指定することです。保存先を間違えてしまうとメールが届かなくなる恐れがあるので、環境に合った保存先を指定する必要があります。
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=/var/spool/virtual/$DOMAIN/$USER ←環境にあったディレクトリの指定が必要
DEFAULT=$HOME/var/spool/virtual/$DOMAIN/$USER ←環境にあったディレクトリの指定が必要
SPAM=$MAILDIR/.Spam/
LOGFILE=$HOME/.procmail.log # ログ出力先
VERBOSE=ON # 詳細ログ出力
:0fw
|/usr/bin/spamc
# ※20の設定値は高いので必要なメールまで削除されてしまうことに留意すること
# 最後に動作テストを行う関係で以下をコメントアウトしています
#:0
#* ^X-Spam-Level: 20
#/dev/null
procmailのログローテーションの設定ファイルを作成し、ログの肥大化を防ぎます。
/home/*/.procmail.log {
missingok
nocreate
notifempty
}
postfixの設定
ここからは、バーチャルドメイン、バーチャルメールボックスの設定に合わせて、procmailとの接続とメールの配送先を指定する必要があります。まずはmain.cfを編集します。
# virtual_transport = virtual ←コメントアウト
virtual_transport = procmail ←追記
procmail_destination_recipient_limit = 1 ←追記
次にmaster.cfを編集します。
#以下を追記
procmail unix – n n – – pipe
postfixを再起動します。
■ 動作テスト
自分自身宛にスパムメールを送ってみます。メール本文に「XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X」という文字列を記載して送ります。 postfixとprocmailが連携していて、SpamAssassinが正常に動作していれば、メールの件名の先頭に、「***SPAM***」の文字列が追加されているはずです。procmailの設定ファイルのSPAMを削除するための設定からコメントアウトを外せば、実際にスパムメールは削除されます。
SpamAssassinの学習機能
SpamAssassinは稀にスパムメールの誤認識をします。大切なメールをスパム判定したり、スパム判定してほしいメールをスパム判定しなかったり。そこで残したいメールやスパムメールを読み込むことで、SpamAssassinに学習させることができます。
spamを学習させる
non-spamを学習させる
【まとめ】
procmailにメール振り分けのロジックを加えると、特定ユーザにはスパムメールが届かないようにすることもできました。正規表現で件名に「SPAM」の文字列の入ったメール以外のメールを配送するようにします。環境に合わせたカスタマイズで上手にフィルタリングをすることで、必要なメールだけ受け取ることが可能です。
今回メールサーバを触ってみて、設定ミスによるメールが配送されなくなる怖さと、設定ファイルのバックアップの大切さを学ぶことができ、便利な反面、落とし穴も多い、、、良い経験になりました。