内向きに関しては、Postfix SMTP サーバ は悪意があったり混乱したクライアントに対して適切に防御します。 インフラストラクチャに対する激しい Denial of Service 攻撃に対する 保護はしませんが、これにはプラグを抜く以外の対処法はないでしょう。
特に指示がなければ、ここで記述される全てのパラメータは main.cf ファイルに書きます。動いている Postfix システムの パラメータを変更したら、忘れずに postfix reload コマンドを 実行してください。
master.cf ファイルを編集する事で、特定の Postfix デーモンに対してこの設定を上書きする事ができます。例えば、 同時に 100 の SMTP メッセージを受け取りたくなければ、次のように 指定することができます:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== . . . smtp inet n - - - 5 smtpd . . .
Postfix キューマネージャが救いの手をさしのべます。このプログラムは TCP slow start 流量制限戦略と同様の物を実装しています: あるサイトへの配送時に、まず小量のメッセージを送り、それから すべてがうまくいく間、速度を増加させます; 渋滞の直前で速度を 緩めます。
initial_destination_concurrency パラメータ (デフォルト: 2) は、並列配送数を適応する前に同じ配送先に最初に送るメッセージの 数を制御します。もちろんこの設定は プロセス制限や特定のメール配送チャネルに 対する並列配送数制限を越えない限りにおいて有効です。
default_destination_concurrency_limit パラメータ (デフォルト: 20) は同じ配送先に同時に送ることができるメッセージの 数を制御します。この設定は特定の配送チャネル (local, smtp, uucp 等)に対して上書きすることができます。main.cf ファイルは 次の設定を推奨しています:
一つの配送先への SMTP 配送を潰さずにシステムに目立った負荷をかけるには、
並列数制限は 20 で十分だと思われます。大きすぎる値に変更する際は
十分注意してください。
特定の Postfix 配送エージェント (smtp, uucp, 等) に対して
この設定を上書きすることができます。例えば:
受信者数制限を大きくする際には十分注意しなければいけません;
メモリを使い果たしたり受信者数のハード制限に達すると接続を
強制終了する SMTP サーバがあり、メールが届かなくなります。
smtpd_recipient_limit パラメータ (デフォルト: 1000)
は SMTP サーバが配送毎に受け取る受信者の数を制御します。
これは適切な SMTP クライアントが送るよりも大きな値です。
この制限は悪意があったり混乱したクライアントからローカル
メールシステムを保護するためだけに存在します。
一時的にしかオンラインにならなかったり、(例えば PPP ダイアルアップ
スクリプトから) sendmail -q コマンドが実行されるまで
全ての配送を遅延したい小さなサイトでは、次のように使います:
ISP では defer_transports 機能をほとんどの時間 off-line
な顧客に使うこともできます。顧客は ETRN コマンドを
SMTP ポートで実行する事で、配送を促すことができます。次の例は
そのような顧客を設定する方法を示します:
ここにはいくつでも transport を指定する事ができます。この例では
一つだけです。
[] は MX 検索を避けるために必要で、これはローカルマシンを指すかも
しれません。2番目のエントリは顧客のサブドメインにメールを
リレーしたい時のみに必要です。
これは通常の SMTP に対する master.cf エントリと同じで、
最初のフィールドだけが hold に変わっています。
期待通りに、このプロセス全体はいくつかの小さなパラメータによって
支配されています。
いくつかの防御はより一般的な戦略の一部です: 例えば、どの程度の
長さのテキストが細かく分割されるかであるとか、複数行メールヘッダで
どの程度の量のテキストを配送するかなどです。詳細は リソース制御のドキュメントを参照してください。
Postfix SMTP サーバ はクライアントの要求が
認識できなかったり実装されていない場合や、クライアントの要求が
UCE 制限や他の理由に違反している場合に
セッション毎のエラーカウンタを増加させます。エラーカウンタは
メッセージの配送に成功するとリセットされます。
セッション毎のエラーカウンタが増加すると、SMTP サーバは振る舞いを
変えます。クライアントを遅くすることでダメージを制限するという
考え方です。この振る舞いは次のパラメータにより制御されます:
不幸なことに、Postfix SMTP サーバは SMTP サーバプロセスの総数を制限
する(プロセス制限参照)以外に、
同じクライアントからの接続の数を制限する方法を未だに知りません。
さらに悪い状況:
SMTP サーバプロセス制限を実装していないメーラもあります。
もちろんこれは弁解ではありません。私はよい解決法を探し続けています。
受信者制限
default_destination_recipient_limit パラメータ (デフォルト:
50) Postfix 配送エージェント (smtp, uucp, etc.)
がEメールメッセージのコピーを送る際の受信者の数を制限します。
一つのEメールメッセージに $default_destination_recipient_limit
以上の同じ配送先の受信者があると、受信者リストは小さく分けられ、
複数のメッセージのコピーが送られます。
は UUCP 配送ごとの受信者の数を 100 に制限します。
常に遅延させる配送
defer_transports パラメータには、Postfix が明示的に配送を
依頼されるまで、メールを常に遅延させる配送方法を指定します。
接続できないホストの配送遅延
Postfix 配送エージェント (smtp, local, uucp, など)
がメッセージを配送できない時に、メッセージ自身や受け取る組織に
原因を求めるかも知れません。
悪質クライアントの低速化
まずはじめに、どんな防御も激しい Denial of Service 攻撃に対しては
保護しません。不可能な期待を起こすことは避けたいだけです。
しかし混乱したり悪意を持ったクライアントプログラムに対処するために
できる簡単なことがいくつかあります。
上のレベルへ |
基本設定 | UCE
制御 | 速度制御 | リソース
制御 | アドレス操作