スパマーが数千台のゾンビPCのボットネットを使用して、存在しないランダムなアドレス@ example.comに非常に高速でスパムを送信すると、postfixはVPSプロバイダーのリソース制限を使い果たして対処しようとします。具体的には、VPSによって900に制限されている非TCPソケットの数を使い果たします。 Virtuozzo linuxVPSのCentOS5で接尾辞2.3.3-2.1.el5_2を実行しています。
/var/log/maillog says:
Feb 23 06:26:22 postfix/smtpd[3938]: warning: connect #1 to subsystem private/proxymap: Cannot allocate memory
Feb 23 06:26:22 postfix/smtpd[3936]: fatal: socket: Cannot allocate memory
Feb 23 06:26:48 postfix/qmgr[17702]: fatal: socket: Cannot allocate memory
辞書攻撃には何千ものIPが関係しているため、ファイアウォールはやや困難です。
VPSプロバイダーは、次のパラメーターを調整することを提案しましたが、それらを何に設定するかについては提案しませんでした。
max_idle = 100s (default)
max_use = 100 (default)
Postfixとスパマー辞書攻撃で同じ問題を抱えている別の人を見つけました:
http://forums.vpslink.com/linux/394-you-hitting-socket-resource-limits-2.html#post5241
彼は変わった:
default_process_limit from 100 (default) to 10
...これで問題は解決しましたが、パフォーマンスが低下しました。
Postfix.org/TUNING%5FREADME.htmlをスキミングした後でも、ここでどのパラメーターを安全に調整する必要があるのか正確にはわかりません。
残念ながら、Postfixはプロセス駆動型モデルに従っているため、負荷がかかった状態でのメモリ使用量が多いことは、その副作用の1つです。あなたはこれを試すことができます
/etc/postfix/master.cfから
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - 5 smtpd
maxproc
列で、-
をより小さな数に置き換えて、同時のsmtpd
プロセスの数を制限できます。これにより、受信メールの量にある程度のゲートが提供されます。
もう1つの方法は、fail2ban
を解析して大量の配信不能メールを送信するアドレスのiptablesブロックを発生させるように構成できる/var/log/maillog
を調べることです。
次のようなものを追加することを検討してください。
smtpd_recipient_restrictions =
permit_auth_destination,
permit_mynetworks,
reject_unauth_destination,
reject_unlisted_recipient
...あなたのmain.cf
ファイル。これにより、配信先のユーザーがいないことが判明するとすぐに、postfixが接続の一部をダンプします。魔法は reject_unlisted_recipient
、これを使用すると、システムで無効なユーザーが拒否されます local_recipient_maps
。そうすることで、ドロップされた各接続が次の接続を処理するために貴重なリソースを解放するため、進行中の処理の量を減らすことによって、ある程度のプレッシャーを取り除く必要があります。はい、スパマーはどのアドレスが無効であるかを判断できますが、スパマーはあなたのアドレス(攻撃をかわす)よりも送信に時間を浪費する(そして拒否され、帯域幅を浪費する)方が良いでしょう。