先日、管理しているメールサーバの調子がおかしいとクライアントから連絡がありました。
「特定の日のメールが届いていない」というのです。

すぐにログを調べてみると、想像以上の異常が記録されていました。


350万回の認証失敗

/var/log/maillog を確認すると、SASL LOGIN authentication failed の嵐。
数えてみると 350万回以上 のログが残っていました。
メールサーバ自体の不調ではなく、外部からの大規模な攻撃が原因でした。

この攻撃で一番つらかったのは、サーバ防御の要である Fail2ban がリソース制限に引っかかって動作不能になってしまったことです。
結果的に「アクセスし放題」状態がしばらく続き、正規のクライアントの接続にも影響が出たようです。


攻撃の入り口は25番ポート

メールサーバの設定を見直してみると、25番ポートでの認証が有効になっていたことが分かりました。

25番は本来 MTA 間(サーバ間配送)のためのポートであり、ユーザ認証に使うのは 587(submission) や 465(smtps) が標準です。
そこに向かって大量のブルートフォースアタック(総当たり攻撃)が行われていたわけです。


対策と再設定

対応としてはシンプルです。

  • 25番ポートでの認証を無効化

  • ユーザ認証は 587/465 のみ許可し、TLS必須に

  • Fail2ban の設定を見直し

    • 必要な jail だけを残す(postfix / dovecot / sshd など)

    • systemd backend で効率的にログを監視

    • systemd の LimitNOFILE を引き上げて「Too many open files」を防止

  • Postfix 側でも接続レート制限 (smtpd_client_connection_rate_limit など)

これらを反映してからはサーバも落ち着き、ログも静かになりました。


今回の学び

  • 公開しているメールサーバには常時攻撃が来ている。

  • Fail2ban は有効だが、無限に守ってくれるわけではなくリソース制限の壁に注意が必要。

  • 「25番でのユーザ認証」は避ける。

  • 不具合報告を受けたらまずログを確認し、不正アクセスによるリソース枯渇の可能性も疑う。


日常的に「ログに出ているけど無害」と思っていた攻撃も、規模が大きくなるとインフラに直接ダメージを与えます。
メールサーバの運用は地味に見えて、実は攻防の最前線。
あらためて「基本設定をきちんと守ること」と「監視と見直しを怠らないこと」の重要性を痛感しました。

 


チェックリスト(運用者向け)

  • 25番ポートでユーザ認証が有効になっていないか?

  • submission(587) / smtps(465) で TLS を必須にしているか?

  • Fail2ban の jail を必要最小限にしているか?

    • postfix / postfix-sasl / dovecot / sshd だけ

  • Fail2ban のリソース上限を systemd で十分に確保しているか?

    • LimitNOFILE を 65536 以上に

  • Postfix の接続レート制限を設定しているか?

  • 定期的に maillog を grep して、不正アクセスの傾向を確認しているか?

 

まとめ

今回の件で、基本を守った堅牢な設定がいかに重要かを再確認しました。
攻撃は止められませんが、適切な制限と監視で「壊れないサーバ」を維持することは可能です。