戦場へようこそ
こんにちは!「リナックス先生」です。
全5回の連載もついにラスト。前回までで、機能としては完璧なメールサーバーが出来上がりましたね。
- 第1回:設計・DNS編 – 初心者でもGmailに届くインフラ作り
- 第2回:送信編 (Postfix) – 不正中継を防ぐSMTP-AuthとSubmissionポート
- 第3回:受信編 (Dovecot) – 盗聴不可能なIMAP環境とSSL/TLS
- 第4回:信頼性編 – SPF・DKIM・DMARCフル装備
- 第5回(今回):防衛編 – SpamAssassin + ClamAV + Fail2Ban
先生、完璧ですね!
もう友達とメールのやり取りをしてるんですが、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.conf と 15-lda.conf で sieve プラグインを有効にします。
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はこちらです。


コメント