Postfixで送信制限を設定する方法

Postfixで送信制限

Postfixで送信制限を設定してメールサーバを安全に運用する方法

メールサーバをインターネットへ公開する場合、送信制限の設定は非常に重要です。

適切な制限を設定していないと、スパムメール送信の踏み台として悪用されたり、大量メール送信によってサーバ負荷が上昇したりする危険があります。

特に企業のメールサーバでは、送信制限によって不正利用を防止し、正常なメール配送を維持することが重要です。

Postfixには様々な送信制御機能が用意されており、環境に応じて柔軟な設定が可能です。

本記事ではPostfixで利用できる代表的な送信制限設定について解説します。

なぜ送信制限が必要なのか

メールサーバは外部からSMTP接続を受け付けるため、適切な制御を行わないと悪用される可能性があります。

例えば以下のような問題が発生します。

  • スパムメール大量送信
  • メールサーバの高負荷
  • ブラックリスト登録
  • 正規メールの配送失敗
  • 不正中継(オープンリレー)

送信制限はこれらを防止するための重要なセキュリティ対策です。

Postfixの送信制御の仕組み

PostfixではSMTP通信中に様々な条件をチェックできます。

SMTP接続
    ↓
接続元確認
    ↓
送信者確認
    ↓
宛先確認
    ↓
認証確認
    ↓
メール受信

各段階で許可・拒否の判定が行われます。

オープンリレー対策

最も重要なのがオープンリレー防止です。

現在のPostfixでは以下の設定が基本となります。

smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination

この設定によって認証済みユーザーまたは許可ネットワークのみメール送信が可能になります。

mynetworksによる制限

許可するネットワークを指定します。

mynetworks = 127.0.0.0/8, 192.168.60.0/24

この設定ではローカルホストと192.168.60.0/24のみ送信を許可します。

社内メールサーバではよく利用される設定です。

SMTP認証を必須にする

認証済みユーザーのみ送信可能にします。

smtpd_sasl_auth_enable = yes

さらに以下を設定します。
permit_sasl_authenticated

現在のメールサーバでは標準的な運用です。

送信元メールアドレスを制限する

存在しない送信者アドレスを拒否できます。

smtpd_sender_restrictions =
 reject_unknown_sender_domain

不正な送信者を減らすことができます。

送信元ドメインを制限する

特定ドメインのみ許可することも可能です。

送信者制御ファイルを作成します。

# vi /etc/postfix/sender_access
例です。

example.com OK
bad-domain.com REJECT

DB化します。
# postmap /etc/postfix/sender_access

main.cfへ追加します。
smtpd_sender_restrictions =
 check_sender_access hash:/etc/postfix/sender_access

接続元IPアドレスを制限する

特定IPを拒否できます。

アクセス制御ファイルを作成します。

# vi /etc/postfix/client_access

例です。
192.168.60.100 OK
203.0.113.100 REJECT

DB化します。
# postmap /etc/postfix/client_access

設定します。
smtpd_client_restrictions =
 check_client_access hash:/etc/postfix/client_access

宛先アドレスを制限する

配送先を制限することも可能です。

smtpd_recipient_restrictions =
 reject_unknown_recipient_domain

存在しないドメインへの送信を防止できます。

HELOホスト名を検査する

不正なHELOを拒否できます。

smtpd_helo_required = yes

さらに検査を追加します。

smtpd_helo_restrictions =
 reject_invalid_helo_hostname

スパム対策として利用されます。

同時接続数を制限する

大量接続による負荷を防止できます。

smtpd_client_connection_count_limit = 20

1つのIPから20接続まで許可する例です。

接続レートを制限する

短時間の大量接続を制限します。

smtpd_client_connection_rate_limit = 30

スパム送信対策として有効です。

メッセージ数を制限する

1接続あたりの送信メール数を制限できます。

smtpd_client_message_rate_limit = 100

大量送信の防止に利用されます。

メールサイズを制限する

送信可能なメールサイズを制限します。

message_size_limit = 10485760

10MB制限の例です。

添付ファイル対策として利用されます。

送信先数を制限する

大量の宛先指定を制限します。

smtpd_recipient_limit = 100

メーリングリスト以外では有効な制限です。

ブラックリストを利用する

DNSBLによるスパム対策です。

smtpd_recipient_restrictions =
 reject_rbl_client zen.spamhaus.org

既知のスパム送信元を拒否できます。

導入時は運用ポリシーを確認しましょう。

Fail2banとの連携

認証失敗を繰り返すIPを自動的に遮断できます。

Fail2banと組み合わせることでブルートフォース攻撃を防止できます。

実務ではよく利用される構成です。

設定変更後の確認

設定ファイルを確認します。

# postfix check

問題がなければ反映します。
# systemctl restart postfix

または
# systemctl reload postfix

動作確認方法

SMTP接続確認です。

# telnet localhost 25

ログ確認です。
# tail -f /var/log/maillog

拒否設定が正しく動作しているか確認します。

よくある設定ミス

送信制限設定では以下のミスが発生しやすくなります。

  • 正規ユーザーまで拒否する
  • mynetworks設定ミス
  • アクセスDB未作成
  • 設定反映忘れ
  • オープンリレー化

設定後は必ずテストを実施しましょう。

企業環境で推奨される設定

一般的な企業メールサーバでは以下が推奨されます。

  • SMTP-AUTH必須
  • TLS必須
  • オープンリレー禁止
  • 接続数制限
  • メールサイズ制限
  • Fail2ban導入

基本的なセキュリティ対策として有効です。

まとめ

PostfixではSMTP認証、アクセス制御、レート制限など様々な送信制限を設定できます。

特にreject_unauth_destinationによるオープンリレー対策は必須です。

また、接続数制限やメールサイズ制限を組み合わせることで、スパム送信や不正利用を防止できます。

メールサーバを安全に運用するためには、適切な送信制限を設定し、定期的にログを確認することが重要です。