【メールサーバー構築 第5回】防衛編 – スパムとウイルスを秒殺する!SpamAssassin・ClamAV・Fail2Ban完全導入ガイド

戦場へようこそ

こんにちは!「リナックス先生」です。
全5回の連載もついにラスト。前回までで、機能としては完璧なメールサーバーが出来上がりましたね。

【連載】Postfix+Dovecotで作る 最強のセキュアメールサーバー構築
コウ君

先生、完璧ですね!
もう友達とメールのやり取りをしてるんですが、Gmailにもちゃんと届くし、最高です。
これでもうやることはないですよね?

リナックス先生

甘いわ、コウ君。
ログを見てごらんなさい。あなたのサーバー、すでに世界中のハッカーから攻撃を受けているわよ。
25番ポートを開放した瞬間から、ボットによる「パスワード総当たり攻撃」は始まっているの。
今回は、サーバーを乗っ取られないための「最後の仕上げ」をするわよ。

1. 今回導入する「3つの盾」

メールサーバーを守るために、以下の3つのオープンソースソフトウェアを導入します。

  • Fail2Ban(フェイル・トゥ・バン):
    「パスワードを5回間違えたら、そのIPアドレスをBAN(接続拒否)する」という門番です。総当たり攻撃に効果絶大です。
  • SpamAssassin(スパムアサシン):
    届いたメールの内容を解析し、「これはスパムっぽい」と点数付け(スコアリング)をするフィルターです。
  • ClamAV(クラム・エーブイ):
    メールに添付されたファイルにウイルスが含まれていないかスキャンするアンチウイルスソフトです。

2. Fail2Banで不正アクセスを遮断する

まずは、今まさに来ている攻撃を止めることから始めましょう。
Fail2Banは、ログを監視して怪しいIPをFirewallレベルでブロックしてくれます。

インストール

AlmaLinux / RHEL系:

dnf install epel-release
dnf install fail2ban fail2ban-systemd

Ubuntu / Debian系:

apt install fail2ban

設定ファイルの作成 (jail.local)

デフォルトの設定ファイル(jail.conf)は更新で上書きされるので、コピーして使います。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

Postfix(送信)とDovecot(受信)のブロック設定を有効化します。

[postfix]
enabled = true
mode    = aggressive
port    = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
maxretry = 3
bantime  = 86400  ; 1日BAN

[dovecot]
enabled = true
port    = pop3,pop3s,imap,imaps,submission,465,sieve
logpath = %(dovecot_log)s
backend = %(dovecot_backend)s
maxretry = 5
bantime  = 86400

起動と確認

systemctl enable --now fail2ban
# 状態確認
fail2ban-client status postfix

これで、あなたのサーバーの玄関には屈強な警備員が配備されました。

3. SpamAssassin + ClamAV の導入

次に、メールの中身を検査する仕組みを作ります。
RHEL系とUbuntu系で連携方法(Amavisdを使うか、Milterを使うか)が異なりますが、今回はシンプルで管理しやすい「Amavisd-new(アマビス)」を使った構成を紹介します。

インストール

AlmaLinux / RHEL系:

dnf install amavisd-new clamav clamav-update spamassassin

ClamAV(アンチウイルス)の準備

ウイルス定義ファイルを更新し、デーモンを起動します。

# 定義ファイル更新
freshclam

# サービス有効化(設定ファイル /etc/clamd.d/amavisd.conf の編集が必要な場合あり)
systemctl enable --now clamd@amavisd

SpamAssassin(スパムフィルタ)の設定

設定ファイル /etc/mail/spamassassin/local.cf を編集します。

# スパム判定の閾値(デフォルト5.0)
required_score 5.0

# スパムと判定された場合、件名に目印をつける
rewrite_header Subject ***SPAM***

# ベイズ学習(自動学習)を有効化
use_bayes 1
bayes_auto_learn 1

4. Amavisd と Postfix の連携

Postfixがメールを受け取った時、一旦Amavisdに渡し、チェックが終わったら戻してもらう設定にします。

Amavisdの設定 (/etc/amavisd/amavisd.conf)

ウイルスチェックとスパムチェックを有効にします。

# コメントアウトを外して有効化
@bypass_virus_checks_maps = (0);
@bypass_spam_checks_maps  = (0);

# ホスト名を設定
$mydomain = 'example.com';

Postfixの設定 (/etc/postfix/master.cf)

Amavisdへメールを転送する設定を追記します。

# 既存のsmtpサービスの下あたりに追加
smtp-amavis unix - - n - 2 smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

127.0.0.1:10025 inet n - n - - smtpd
    -o content_filter=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -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_header_body_checks,no_unknown_recipient_checks

そして main.cf でコンテンツフィルターを有効化します。

content_filter = smtp-amavis:[127.0.0.1]:10024

5. 「迷惑メールフォルダ」への自動振り分け (Dovecot Sieve)

ここがユーザーにとって一番嬉しい機能です。
SpamAssassinが「これはスパムだ(Score: 10.0)」と判断しても、何もしなければ件名に「***SPAM***」とつくだけで、受信トレイに入ってきます。
これを自動的に「Junk(迷惑メール)」フォルダに移動させる設定を入れます。

Pigeonholeのインストール

dnf install dovecot-pigeonhole

Dovecot設定の有効化

/etc/dovecot/conf.d/20-lmtp.conf15-lda.confsieve プラグインを有効にします。

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

振り分けルールの作成

全ユーザー共通のルールファイル /etc/dovecot/sieve/default.sieve を作成します。

require ["fileinto"];
# X-Spam-Flag が YES なら Junk フォルダへ
if header :contains "X-Spam-Flag" "YES" {
  fileinto "Junk";
}

これをコンパイルします。

sievec /etc/dovecot/sieve/default.sieve

これで、スパム判定されたメールは、iPhoneやOutlookを開いた瞬間に「迷惑メールフォルダ」に入っている状態になります。


連載完了:最強のメールサーバーがここに完成

全5回の長い旅路、本当にお疲れ様でした!
これにて、あなたのメールサーバー構築プロジェクトは完了です。

【完成したサーバーのスペック】

  • 到達率最強: PTR, SPF, DKIM, DMARC完備でGmailにも確実に届く。
  • セキュリティ最強: SMTP-AuthとTLS暗号化で不正利用と盗聴を防止。
  • 防御力最強: Fail2Banで攻撃元を即BANし、ウイルスとスパムを自動除去。
  • 利便性最強: IMAP対応でマルチデバイス同期、迷惑メールは自動振り分け。
コウ君

先生、本当にありがとうございました!
最初は「メール送るだけでこんなに大変なの!?」って思いましたけど、一つ一つの設定に意味があるんですね。
自分で作ったサーバーで受け取るメールは、格別の愛着があります!

リナックス先生

よく頑張ったわね、コウ君。
メールサーバーはインターネットの縮図よ。DNS、暗号化、認証、セキュリティ攻撃…すべてが詰まっているわ。
このサーバーを運用し続けることで、あなたのエンジニアとしてのスキルは確実に磨かれていくはずよ。
素晴らしいサーバーライフを!

▼セキュリティソフトも快適に動くVPS

ClamAVやSpamAssassinはメモリを多く消費します。防御システムをフル稼働させても軽快に動作する、メモリ容量に余裕のある推奨VPSはこちらです。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント