メールサーバーがスパムに狙われる — 現実の課題
社内メールサーバーを運用しているなら――Postfix、Exchange、Zimbraのどれであれ――毎日数百通ものスパムメールを目の前にして、こう自問したことがあるはずです:どうすればユーザーの受信箱に届く前にこれを遮断できるのか?
私も小さなプロジェクトでメールサーバーを構築したときに同じ問題に直面しました。Postfixは問題なく動いていたものの、スパムやフィッシングメールが次々と届いてしまう。組み込みのアンチスパムは力不足で、外部フィルタリングサービスを使えばコストがかかる。そこで選んだ解決策が、Proxmox Mail Gateway(PMG)をメールサーバーの前段に配置し、すべてのSMTPトラフィックをフィルタリングするゲートウェイとして機能させることでした。
私のホームラボはProxmox VEで12台のVMとコンテナを管理しており、本番環境に投入する前に何でも試せるプレイグラウンドです。PMGは独立したVMとして構築し、メインのメールサーバーに転送する前にメールを処理させています。結果として、スパムが95%以上減少し、追加コストはゼロです。
Proxmox Mail Gatewayとは何か?どのように動作するのか?
Proxmox Mail Gateway(PMG)はオープンソースのメールセキュリティソリューションで、Debian上で動作し、著名なメールフィルタリングツールを統合しています:
- SpamAssassin — ヘッダー・本文の分析とスパムスコアリング
- ClamAV — 添付ファイルのウイルス・マルウェアスキャン
- Postfix — メールの受信と転送を担うMTA
- Fetchmail + Razor/Pyzor — 協調型スパム検知
動作フローは非常にシンプルです:
- インターネットからのメールがMXレコード(PMGを指す)に届く
- PMGが受信し、スパムスコアのチェック、ウイルススキャン、ルールの適用を行う
- クリーンなメールは社内メールサーバーへリレーされる
- スパムメールはブロック、隔離、またはタグ付けされる
実際のメールサーバーはPMGの背後に完全に隠れるため、インターネットへの公開が不要になります。
実践:ステップごとのインストールと設定
ステップ1:環境の準備
PMGは専用マシン(またはVM)が必要です。安定稼働に必要な最小スペックは以下の通りです:
- CPU:2コア
- RAM:2GB(高トラフィック時は4GB推奨)
- ディスク:32GB
- IPアドレス2つ:1つはパブリック(インターネットからのメール受信用)、1つは内部(メールサーバーへのリレー用)
私のようにProxmox VEを使っている場合は、新しいVMを作成してPMGのISOをマウントし、通常通りインストールするだけです。ISOはProxmox公式サイトから無料でダウンロードできます。
ステップ2:PMGのインストール
ISOからブートすると、インストール画面は非常にシンプルです。最も重要なのはネットワーク設定です:
- ホスト名:FQDNを設定します。例:
mail-gw.yourdomain.com - IPアドレス:ネットワーク構成に応じてパブリックIPまたは内部IPを指定
- ゲートウェイ:デフォルトゲートウェイを設定
インストール完了後、以下のURLでWeb UIにアクセスします:
https://<IP_PMG>:8006
rootとインストール時に設定したパスワードでログインします。
ステップ3:リレードメインの設定
これが最も重要なステップです。どのドメインのメールを受信し、どこへリレーするかをPMGに設定します。
Configuration → Mail Proxy → Relay Domainsに移動し、ドメインを追加します:
# メールを受信するドメイン
yourdomain.com
# リレー先:社内メールサーバーのIPとポート
# 例: 192.168.1.50:25
Web UIのフォームに以下を入力します:
- Domain:
yourdomain.com - Relay Host:
192.168.1.50 - Relay Port:
25
ステップ4:MXレコードをPMGに向ける
PMGのインストールとリレー設定が完了したら、次はDNSを更新します:
# 変更が必要なDNSレコード
# MXレコードをPMGに向ける(旧メールサーバーではなく)
yourdomain.com. MX 10 mail-gw.yourdomain.com.
# PMGのホスト名用Aレコード
mail-gw.yourdomain.com. A <IP_PUBLIC_PMG>
# SPFレコード(PMG経由でメールを送信する場合)
yourdomain.com. TXT "v=spf1 ip4:<IP_PUBLIC_PMG> ~all"
注意:社内メールサーバーはファイアウォールでポート25をインターネットからブロックし、PMGのIPからの接続のみを許可するよう設定してください。
ステップ5:スパムフィルターの設定
Configuration → Mail Filter → Rulesでスパム処理ルールを作成します。PMGにはデフォルトのサンプルルールがありますが、私は通常カスタマイズします:
# ルール1:スパムスコアが高いメールをブロック
# 条件:スパムスコア >= 7
# アクション:ブロック(5xxコードで拒否)
# ルール2:疑わしいメールにタグを付ける
# 条件:スパムスコア >= 4
# アクション:X-Spam-Flag: YES ヘッダーを追加
# ルール3:危険な添付ファイルをブロック
# 条件:添付ファイルが*.exe、*.bat、*.vbs、*.jsに一致する場合
# アクション:ブロック + 管理者に通知
Web UIではこれらのルールをドラッグ&ドロップで設定でき、非常に直感的です。各ルールには優先度(priority)があり、数値が低いルールが先に処理されます。
ステップ6:ClamAVの有効化とテスト
ClamAVはあらかじめインストールされていますが、データベースが最新であることを確認する必要があります:
# PMGにSSH接続し、ウイルスデータベースを手動で更新
freshclam
# サービスの稼働状態を確認
systemctl status clamav-daemon
systemctl status clamav-freshclam
# EICARテストウイルスをPMG経由で送信してテスト
# EICAR文字列(無害、テスト専用):
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | \
sendmail -v [email protected]
ClamAVが正常に動作していれば、EICARを含むメールはブロックされ、隔離ログに記録されます。
ステップ7:ログと隔離の確認
これはPMGで私が最も気に入っている機能です。メールトラフィックを非常に詳細に監視できるインターフェースです:
- メールログ:通過した各メール、スパムスコア、実行されたアクションを確認
- 隔離:保留されたメール — 管理者がリリースまたは削除可能
- 統計:日・週・月単位のスパム/ウイルスグラフ
コマンドラインからログを直接クエリすることもできます:
# 最近のメールログを表示
postqueue -p
# PMGの全ログを表示
journalctl -u pmg-smtp-filter -f
# キューを確認
postcat -vq <QUEUE_ID>
ステップ8:ホワイトリスト/ブラックリストの設定
実際には、正規のメールがスパムと誤判定(フォールスポジティブ)されることがあります。PMGでは送信者、ドメイン、またはIPでホワイトリストを設定できます:
# 設定場所:Configuration → Mail Filter → Whitelist
# 信頼するドメインを追加:
github.com
google.com
# または送信者IPでホワイトリスト登録(パートナー向け信頼設定)
# Configuration → Mail Proxy → Networks
まとめ
PMGは実際の課題をスマートな方法で解決します。メインのメールサーバーにアンチスパムを詰め込む代わりに、独立したレイヤーとして分離するのです。社内メールサーバーはスパムやウイルスを気にする必要がなくなり、PMGからクリーンなメールを受け取ってユーザーに提供するだけでよくなります。
私が最も評価しているのはWeb UIです。ルールの管理、ログの確認、隔離からのリリース――すべてブラウザから行えるため、複雑なコマンドを覚える必要がありません。メールサーバーの管理を始めたばかりのジュニアシスアドミンにとって、手動でSpamAssassinを設定するよりも大きなアドバンテージです。
Proxmox VEを使っているなら、30分もあればPMGのVMを立ち上げてスパムフィルタリングを開始できます。適度なトラフィック量(1日数千通以下)であれば、2CPU + 2GB RAMの構成で十分快適に運用できます。

