Postfixでメールサイズの制限を設定する|main.cf編集と関連パラメータ整合性確認

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > Postfixでメールサイズの制限を設定する|main.cf編集と関連パラメータ整合性確認
「Postfixでメールサイズの制限を変えたいが、main.cfのどこに何を書けば反映されるかわからない」
「9.5MBに制限したつもりが、20MBの添付が通ってしまう」
こういう「制限がかかっているようでかかっていない」状態のサーバーは、私のサポート案件でも定期的に見かけます。

この記事では、Postfixでメールサイズの制限を設定する方法を、main.cfの編集・反映確認・周辺パラメータの整合性まで含めて、現場でそのまま使える形で解説します。
RHEL9系/Ubuntu 24.04 LTSのPostfix 3.6~3.8で動作確認済みです。

この記事のポイント

・Postfixのメールサイズ制限は message_size_limit でバイト単位で設定する
・デフォルト値は 10240000(約10MB)/無制限にしたい場合は 0 を指定する
・main.cf 編集後は postfix reload で設定を反映させる
・mailbox_size_limit と virtual_mailbox_limit との整合性チェックを必ず行う


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

Postfixでメールサイズの制限を設定する基本

Postfixでメールサイズの制限を設定するには、設定ファイル /etc/postfix/main.cfmessage_size_limit パラメータを追加します。値はバイト単位の整数で指定します。

デフォルトでは 10240000(約10MB)までのサイズ制限が設定されています。message_size_limit を明示的に追加することで、任意のサイズに変更することができます。

# main.cf を編集 $ sudo vi /etc/postfix/main.cf # 9.5MB に制限する場合(末尾に追加) message_size_limit = 9500000

設定を保存・終了したら、Postfixに設定ファイルの再読込を行わせます。reloadはサービス無停止で反映できるため、稼働中のメールサーバーでも安全に適用できます。

# 設定ファイルの再読込 $ sudo postfix reload または $ sudo systemctl reload postfix

Postfixのメールサイズ制限で使う主要パラメータ

Postfixのメールサイズ制限は、message_size_limit 単体で完結しません。受信箱・キュー・添付ファイルサイズと整合性を取らないと、想定通りに制限がかかりません。実務で必ず確認すべき関連パラメータを整理します。

パラメータ 意味 デフォルト値
message_size_limit SMTPで受信する1通あたりの最大サイズ(バイト) 10240000(約10MB)
mailbox_size_limit ローカル配送先メールボックスの最大サイズ(バイト) 51200000(約50MB)
virtual_mailbox_limit virtual配送先メールボックスの最大サイズ(バイト) 51200000(約50MB)
smtpd_recipient_limit 1通あたりの宛先数上限 1000
queue_minfree キューディスクの最低空き容量(バイト) 0(無効)

注意:message_size_limitmailbox_size_limit より大きいと、SMTPは受信したのに配送時にバウンスする現象が起こります。受信制限を増やすときは、メールボックス上限も同時に引き上げてください。

メールサイズ制限の現在値を確認する

変更前後の現在値を確認するには、postconf コマンドを使います。postconf はmain.cf/master.cfの設定とコンパイル時のデフォルト値を統合した最終値を返してくれるため、「main.cfに書いたのに反映されない」事故を防ぐのに必須のコマンドです。

1. message_size_limit の現在値を確認する

$ postconf message_size_limit message_size_limit = 9500000

2. 関連パラメータをまとめて確認する

$ postconf | grep -E '^(message_size_limit|mailbox_size_limit|virtual_mailbox_limit|smtpd_recipient_limit|queue_minfree)' message_size_limit = 9500000 mailbox_size_limit = 51200000 virtual_mailbox_limit = 51200000 smtpd_recipient_limit = 1000 queue_minfree = 0

3. デフォルト値との差分を確認する

# -n オプションでデフォルトから変更されたパラメータだけを表示 $ postconf -n | grep size message_size_limit = 9500000

メールサイズの制限を解除・無制限にする方法

社内専用のサーバーや、大容量データ受け渡しを許容するシステムでは、メールサイズ制限を実質無制限にしたいケースがあります。Postfixでは message_size_limit = 0 を指定すると無制限になります。

ただし、無制限設定には注意点があります。

キューディスク逼迫:巨大メール1通がキューを埋め尽くす可能性がある
メールボックス溢れ:受信ユーザー側のディスク使用量が爆発する
SMTPセッション長時間化:大容量メールの送受信中は他クライアントの接続が遅延する
スパム標的化:制限ゼロのMTAは送信元偽装のリレー試行先になりやすい

無制限を選ぶ場合でも、queue_minfree を設定してディスクが枯渇する前に新規受信を停止させるなどの保険を必ずかけてください。

送信・受信側の上限と合わせる

Postfixで制限を設定しても、上流/下流のMTA・MUA側でも別の上限がかかっています。実際に「20MBは送れるけど30MBは弾かれる」という挙動になるのは、たいてい次のいずれかが原因です。

Gmail:添付25MB制限(実体は約35MBまでエンコーディング後)
Microsoft 365:標準25MB、テナント設定で最大150MBまで拡張可能
送信元MTA:SaaSメール送信サービス側で20~25MB制限のケースが多い
ロードバランサー/WAF:HTTPSプロキシ経由のSMTPでは別途バッファ制限がある

社内システム間で大容量メールを通したい場合は、Postfixだけでなく送受信両方のMTA設定・経路上のプロキシ設定を合わせて確認する必要があります。

トラブルシュート・よくある質問

Q. main.cf に書いたのに postconf で値が変わらない

typo・スペース・行頭スペース・コメント記号忘れが多い原因です。postconf -e "message_size_limit=9500000" でコマンド経由で書き込むと安全です。書き込み後は postfix reload を忘れずに。

Q. Message size limit exceeded のエラーがログに出る

SMTPセッション中に上限超過を検知した正常な拒否動作です。/var/log/maillog(RHEL系)または /var/log/mail.log(Debian系)に 552 5.3.4 Message size exceeds fixed limit が記録されます。送信側に上限値を伝えて分割してもらうのが基本対処です。

Q. メールボックス側でバウンスする

mailbox_size_limit または virtual_mailbox_limit がメッセージサイズより小さいケースです。message_size_limit ≤ mailbox_size_limit の関係を保ってください。Maildir形式の場合は1メッセージ=1ファイルなので、ファイルシステムのinode/単一ファイルサイズ制限にも注意が必要です。

Q. postfix reload と systemctl reload postfix のどちらを使うべきか

どちらでも同じ動作になります。systemd管理のサーバーでは systemctl reload postfix がログとの整合性を取りやすく、cron等の自動運用でも扱いやすいため推奨です。

Q. message_size_limit を変更しても古いキューに残っているメールには適用されない

キューに既に入っているメールは受信時のサイズチェックを通過済みのため、変更後の制限は適用されません。postqueue -p で現状確認後、必要なら postsuper -d で個別削除するか、postsuper -d ALL で全削除します(業務影響に注意)。

本記事のまとめ

やりたいこと コマンド/設定
メールサイズ制限を9.5MBに設定する postconf -e "message_size_limit=9500000"
制限を無制限にする postconf -e "message_size_limit=0"
現在値を確認する postconf message_size_limit
関連パラメータをまとめて確認する postconf | grep size_limit
main.cfから変更されたパラメータを確認する postconf -n
設定変更後の反映 systemctl reload postfix
キュー内のメッセージを確認する postqueue -p

メールサイズの制限は、Postfix単体で完結する設定のように見えて、実は「上流MTA・下流MTA・メールボックス容量・キュー容量」と整合性を取って初めて意図通りに動きます。設定値だけ書いて満足せず、postconfで反映を確認し、実際にテストメールを送って境界値を確認するところまでが、現場で求められる運用手順です。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。