ANVIL(8) System Manager's Manual ANVIL(8)

anvil - کنترل تعداد نشست و نرخ درخواست Postfix

anvil [generic Postfix daemon options]


سرور anvil(8) در Postfix آمار و اطلاعات مربوط به تعداد اتصالات کلاینت یا نرخ درخواست‌های کلاینت را نگهداری می‌کند. این اطلاعات می‌تواند برای دفاع در برابر کلاینت‌هایی استفاده شود که با تعداد بیش از حد نشست‌های هم‌زمان، یا با تعداد بسیار زیادی درخواست متوالی در یک بازه زمانی قابل‌پیکربندی به سرور هجوم می‌آورند (hammering). این سرور به گونه‌ای طراحی شده است که تحت کنترل سرور master(8) در Postfix اجرا شود.

در متن زیر، ident ترکیبی از (سرویس، کلاینت) را مشخص می‌کند. نحو دقیق این اطلاعات وابسته به برنامه است؛ سرور anvil(8) به این ساختار اهمیتی نمی‌دهد.

برای ثبت یک اتصال جدید، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=connect
ident=string

سرور anvil(8) با تعداد اتصالات هم‌زمان و تعداد اتصالات در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
count=number
rate=number

برای ثبت یک رویداد قطع اتصال (disconnect)، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=disconnect
ident=string

سرور anvil(8) با موارد زیر پاسخ می‌دهد:

status=0

برای ثبت یک درخواست تحویل پیام، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=message
ident=string

سرور anvil(8) با تعداد درخواست‌های تحویل پیام در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
rate=number

برای ثبت یک درخواست گیرنده، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=recipient
ident=string

سرور anvil(8) با تعداد نشانی‌های گیرنده در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
rate=number

ویژگی‌های شرح‌داده‌شده در این بخش در Postfix نسخه 2.3 و بالاتر در دسترس هستند.

برای ثبت درخواستی برای یک نشست جدید TLS (یعنی در حافظه موقت کش نشده باشد)، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=newtls
ident=string

سرور anvil(8) با تعداد درخواست‌های نشست جدید TLS در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
rate=number

برای دریافت اطلاعات نرخ درخواست نشست جدید TLS بدون به‌روزرسانی اطلاعات شمارنده، ارسال کنید:

request=newtls_report
ident=string

سرور anvil(8) با تعداد درخواست‌های نشست جدید TLS در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
rate=number

برای ثبت یک درخواست AUTH، درخواست زیر را به سرور anvil(8) ارسال کنید:

request=auth
ident=string

سرور anvil(8) با تعداد درخواست‌های احراز هویت (auth) در واحد زمان برای ترکیب (سرویس، کلاینت) مشخص‌شده با ident پاسخ می‌دهد:

status=0
rate=number

سرور anvil(8) با شبکه یا کاربران محلی ارتباط برقرار نمی‌کند، و می‌تواند در محیط chroot با دسترسی پایین ثابت اجرا شود.

سرور anvil(8) یک جدول درون حافظه (in-memory) با اطلاعات مربوط به درخواست‌های اخیر کلاینت‌ها نگهداری می‌کند. هیچ وضعیت پایداری حفظ نمی‌شود زیرا روال‌های کتابخانه استاندارد سیستم برای برنامه‌هایی با به‌روزرسانی فشرده به اندازه کافی پایدار نیستند.

اگرچه وضعیت درون حافظه تنها به صورت موقت نگهداری می‌شود، اما در سیستم‌هایی که اتصالات کلاینت‌های راه دور متعددی را مدیریت می‌کنند، این امر ممکن است به حافظه زیادی نیاز داشته باشد. برای کاهش مصرف حافظه، واحد زمانی که وضعیت در طول آن نگهداری می‌شود را کاهش دهید.


مشکلات و تراکنش‌ها در syslogd(8) یا postlogd(8) ثبت می‌شوند.

هنگام خروج، و هر anvil_status_update_time ثانیه یک‌بار، سرور حداکثر مقادیر اندازه‌گیری‌شده برای تعداد و نرخ را همراه با اطلاعات (سرویس، کلاینت) و زمان وقوع روزانه مربوط به آن رویدادها در لاگ ثبت می‌کند. به منظور جلوگیری از سربار غیرضروری، هیچ اندازه‌گیری برای فعالیت‌هایی که محدودیت هم‌زمانی یا محدودیت نرخ ندارند انجام نمی‌شود.


سیستم‌های پشت روترهای ترجمه نشانی شبکه (NAT) یا پروکسی‌ها دارای نشانی کلاینت یکسانی به نظر می‌رسند و ممکن است به اشتباه دچار محدودیت‌های تعداد اتصال و/یا نرخ شوند.

در این پیاده‌سازی اولیه، یک فرآیند سرور که دارای محدودیت تعداد (یا نرخ) است می‌تواند در هر زمان تنها یک کلاینت راه دور داشته باشد. اگر یک فرآیند سرور چندین کلاینت هم‌زمان را گزارش کند، وضعیت تنها برای آخرین کلاینت گزارش‌شده نگهداری می‌شود.

سرور anvil(8) اطلاعات درخواست کلاینت را پس از انقضا به‌طور خودکار دور می‌اندازد. برای جلوگیری از این‌که سرور anvil(8) اطلاعات نرخ درخواست کلاینت را خیلی زود یا خیلی دیر دور بیندازد، یک سرویس دارای محدودیت نرخ باید همیشه رویدادهای connect/disconnect را حتی زمانی که صریحاً آن‌ها را محدود نمی‌کند، ثبت نماید.

در سیستم‌های پستی با ترافیک کم، تغییرات در main.cf به‌طور خودکار اعمال می‌شوند زیرا فرآیندهای anvil(8) تنها برای مدت زمان محدودی اجرا می‌گردند. در سایر سیستم‌های پستی، برای تسریع در اعمال تغییرات از دستور "postfix reload" استفاده کنید.

متن زیر تنها خلاصه‌ای از پارامترها را ارائه می‌دهد. برای جزئیات بیشتر شامل مثال‌ها به postconf(5) مراجعه کنید.

واحد زمانی که نرخ اتصالات کلاینت و سایر نرخ‌ها بر اساس آن محاسبه می‌شوند.
فاصله زمانی ثبت اطلاعات اوج مصرف توسط سرور محدودکننده اتصال و نرخ anvil(8).
مکان پیش‌فرض فایل‌های پیکربندی main.cf و master.cf در Postfix.
حداکثر زمانی که یک فرآیند دیمن Postfix مجاز است برای رسیدگی به یک درخواست صرف کند، پیش از آن‌که توسط تایمر نگهبان داخلی (watchdog) متوقف شود.
محدودیت زمانی برای ارسال یا دریافت اطلاعات از طریق یک کانال ارتباطی داخلی.
حداکثر مدت زمانی که یک فرآیند دیمن بیکار Postfix برای یک اتصال ورودی منتظر می‌ماند پیش از آن‌که به‌طور داوطلبانه خاتمه یابد.
حداکثر تعداد اتصالات ورودی که یک فرآیند دیمن Postfix پیش از توقف داوطلبانه به آن‌ها سرویس می‌دهد.
شناسه فرآیند (PID) یک دستور یا فرآیند دیمن Postfix.
نام فرآیند یک دستور یا فرآیند دیمن Postfix.
تسهیلات syslog برای ثبت وقایع Postfix.
پیشوندی که به ابتدای نام فرآیند در رکوردهای syslog افزوده می‌شود، به‌طوری که برای مثال "smtpd" به "prefix/smtpd" تبدیل می‌شود.

موجود در Postfix نسخه 3.3 و بالاتر:

نام سرویس در master.cf برای یک فرآیند دیمن Postfix.

smtpd(8), Postfix SMTP server
postconf(5), configuration parameters
master(5), generic daemon options

برای یافتن این اطلاعات از دستور "postconf readme_directory" یا "postconf html_directory" استفاده کنید.

TUNING_README, بهینه‌سازی کارایی (performance tuning)

مجوز Secure Mailer باید همراه با این نرم‌افزار توزیع شود.



سرویس anvil در Postfix نسخه 2.2 و بالاتر در دسترس است.

Wietse Venema
IBM T.J. Watson Research
P.O. Box 704
Yorktown Heights, NY 10598, USA
Wietse Venema
Google, Inc.
111 8th Avenue
New York, NY 10011, USA