Kodama's home / tips.

Postfix のサイズ 制限

postfix 2.3 では, 送付メッセージのサイズ制限を越えた場合, "illegal seek"というエラーになる. エラーメッセージがサイズを連想させる物ではないので, とまどってしまう. エンベロープ情報まで含めた メッセージ全体の最大サイズはデフォルトで 10MB(10240000 bytes). デジカメの解像度が高くなってきたので, 普通の画像を送る場合でも, この制限に抵触することが多くなってきた.
  試験用ファイルを作る
$ dd bs=1024 count=20000 if=/dev/urandom of=test20M 
読み込んだブロック数は 20000+0
書き込んだブロック数は 20000+0
$ ls -s  test20M 
20024   test20M
  メール送付の試験
$ mailx -s size_test_20M  kodama@localhost < test20M 
postdrop: warning: uid=10001: Illegal seek
send-mail: fatal: kodama(10001): queue file write error
   /var/log/maillog より.
May 29 10:35:57 gar-local postfix/postdrop[13465]: warning: uid=10001: Illegal seek
May 29 10:35:57 gar-local postfix/sendmail[13464]: fatal: kodama(10001): queue file write error

対策

/etc/postfix/main.cf で制限を緩めることにする. 関連するサイズの制限は2箇所ある. 上記の "Illegal Seek" に直接関連するのは message_size_limit で. postfix が処理するメッセージサイズの最大を決める. また, 最終的に メール スプール に置かれる場合のサイズ制限が, mailbox_size_limit で, mailbox 形式の場合はメールの合計サイズ, maildir形式の場合は個々のファイル1つあたりの上限値となる. message_size_limit < mailbox_size_limit と設定しないと, postfix が処理しても受け取れなくなってしまう. サイズの制限を緩めてしまうと, メール爆弾攻撃に弱くなってしまうので, ディスクの使用制限(quota)の見直しも必要となるだろう.
# /etc/postfix/main.cf より

message_size_limit = 204800000
# 200M  単位はbyte. 0は無制限

mailbox_size_limit = 0
# 単位はbyte. 0は無制限
postfix を再起動すること.
Kodama's home / tips.