SMTPD.CONF(5) File Formats Manual SMTPD.CONF(5)
نام (NAME)
smtpd.conf – پرونده پیکربندی دیمن SMTP
توضیحات (DESCRIPTION)
smtpd.conf پرونده پیکربندی برای دیمن ارسال و دریافت ایمیل smtpd(8) است.
هنگام رسیدن ایمیل، هر دستور “RCPT TO:” یک پاکت نامه (envelope) تولید
میکند. اگر یک پاکت با هر یک از معیارهای از پیش تعیینشده مطابقت داشته
باشد (با استفاده از دستورالعمل match) ، پیام برای تحویل پذیرفته میشود.
یک رونوشت از پیام و همچنین پاکتهای مربوط به آن، در صف ایمیل ذخیره شده و
بعداً طبق مجموعهای از اقدامات مرتبط (با استفاده از دستورالعمل action)
ارسال میگردد. اگر پاکتی با هیچ گزینهای مطابقت نداشته باشد، رد میشود.
قوانین تطبیق به صورت متوالی ارزیابی میشوند و نخستین تطبیق اعمال خواهد شد.
قالب پرونده پیکربندی نسبتاً انعطافپذیر است. خط جاری میتواند با استفاده از
یک بکاسلش (‘\’) به چند خط امتداد یابد. توضیحات را میتوان با استفاده از
نماد هش (‘#’) در هر کجای پرونده قرار داد و تا انتهای خط جاری امتداد
مییابند. هنگام کامنتگذاری متنهای چندخطی باید دقت کرد: توضیح تا پایان کل
بلوک معتبر خواهد بود. نام آرگومانهایی که با حرف، عدد یا زیرخط شروع
نمیشوند، و همچنین کلمات رزروشده (مانند listen, match, و port) ، باید داخل
نقلقول قرار گیرند. آرگومانهای حاوی فاصلههای خالی باید در میان گیومه
دوتایی (") محصور شوند.
یک ماکرو با دستوری به شکل name=value تعریف میشود. نام ماکرو name میتواند
شامل حروف، اعداد و زیرخط باشد و نباید یک کلمه رزروشده باشد. درون
آرگومانهای بدون نقلقول، عبارت $name بعداً به value گسترش مییابد.
برای نمونه:
lan_addr = "192.168.0.1"
listen on $lan_addr
listen on $lan_addr tls auth
دستور زبان smtpd.conf در زیر شرح داده شده است.
action name method [options]
هنگامی که پردازشگر صف، پاکتی را از صف ایمیل پردازش میکند، اقدام
action name را که توسط دستورالعمل match ... action در زمان دریافت
پیام انتخاب شده است، اجرا میکند. دستورالعمل action دادههای
پیکربندی را برای تلاشهای تحویل فراهم میسازد. جستجوهای لازم در
زمان هر تلاش برای تحویل انجام میشوند. در نتیجه، تغییر یک
دستورالعمل action یا پروندههای ارجاعشده توسط آن و راهاندازی مجدد
دیمن smtpd(8) باعث اعمال تغییرات برای تلاشهای بعدی تحویل برای
ارسالکننده مربوطه name میشود، حتی برای پیامهایی که پیش از تغییرات
پیکربندی در صف گیر کرده بودند.
پارامتر روش تحویل method میتواند یکی از موارد زیر باشد:
expand-only
تنها در صورتی پیام را بپذیر که یک روش تحویل در پرونده
نامهای مستعار یا .forward مشخص شده باشد.
forward-only
تنها در صورتی پیام را بپذیر که گیرنده پس از پردازش نامهای
مستعار یا پرونده forward به یک نشانی راه دور منتهی شود.
lmtp destination [rcpt-to]
پیام را به یک سرور LMTP در destination تحویل بده. مکان
میتواند به صورت host:port یا به صورت یک سوکت یونیکس بیان
شود.
به صورت اختیاری، rcpt-to میتواند مشخص شود تا به جای کاربر
محلی، از نشانی ایمیل گیرنده (پس از بسط) در نشست LMTP به
عنوان RCPT TO استفاده شود.
maildir [pathname] [junk]
پیام را به maildir در pathname (در صورت تعیین) یا به طور
پیشفرض به ~/Maildir تحویل بده.
مسیر pathname میتواند شامل مشخصکنندههای قالبی باشد که پیش
از استفاده بسط مییابند (نگاه کنید به FORMAT SPECIFIERS).
اگر آرگومان junk ارائه شود، پیام در صورتی که حاوی سربرگ
مثبت ‘X-Spam’ باشد به پوشه ‘Junk’ منتقل خواهد شد. این
پوشه اگر هنوز وجود نداشته باشد، در زیر pathname ایجاد
خواهد شد.
mbox پیام را با mail.local(8) به mbox کاربر تحویل بده.
mda command
تحویل را به یک command محول کن که پیام را روی ورودی
استاندارد خود دریافت میکند (نگاه کنید به MDA COMMANDS).
دستور command میتواند حاوی مشخصکنندههای قالب باشد که پیش
از استفاده بسط مییابند (نگاه کنید به FORMAT SPECIFIERS).
relay پیام را به یک سرور SMTP دیگر بازپخش کن.
روشهای تحویل محلی از گزینههای اضافی زیر پشتیبانی میکنند:
alias
از جدول نگاشت table برای بسط aliases(5) استفاده کن.
ttl n{s|m|h|d}
مدت زمانی را که یک پیام میتواند در صف بماند مشخص کن.
user username
نام کاربری username را برای انجام تحویل مشخص کن که با
getpwnam(3) جستجو میشود.
این گزینه برای میزبانی مجازی که در آن یک نام کاربری واحد
مسئول مدیریت تحویل برای همه کاربران مجازی است به کار
میرود.
این گزینه با روش تحویل mbox قابل استفاده نیست.
تنها پرونده .forward کاربر تحویل پردازش خواهد شد.
userbase
از جدول نگاشت table برای جستجوی کاربران به جای تابع
getpwnam(3) استفاده کن.
گزینه userbase روی گزینه user اعمال نمیشود.
virtual
از جدول نگاشت table برای بسط مجازی استفاده کن. قالب جدول
نامهای مستعار در table(5) شرح داده شده است.
wrapper name
از بستهبندی (wrapper) مشخصشده در mda wrapper استفاده کن.
روشهای تحویل بازپخش (relay) نیز از گزینههای اضافی پشتیبانی
میکنند:
backup به عنوان مبادلهکننده ایمیل پشتیبان عمل کن و پیامها را به
هر مبادلهکننده ایمیل با اولویت بالاتر تحویل بده.
backup mx name
به عنوان مبادلهکننده ایمیل پشتیبان عمل کن و پیامها را به
هر مبادلهکنندهای با اولویت بالاتر از مبادلهکننده مشخصشده
با نام name تحویل بده.
ca caname
برای اتصالات امن، از مرجع صدور گواهی مرتبط با caname (که
در دستورالعمل ca تعریف شده) برای اعتبارسنجی هویت سرور
استفاده کن.
helo heloname
نام heloname را به عنوان نام میزبان در طول فاز HELO به
سایر مبادلهکنندگان ایمیل معرفی کن.
helo-src
از جدول نگاشت table برای جستجوی نام میزبان منطبق با نشانی
مبدا استفاده کن تا در طول فاز HELO معرفی شود.
domain
جستجوی MX انجام نده، بلکه دامنه مقصد را در domains جستجو
کن و از آدرس relay url منطبق به عنوان میزبان بازپخش
استفاده نما.
host relay-url
جستجوی MX انجام نده، بلکه پیامها را به میزبان بازپخش شرح
داده شده در relay-url بازپخش کن. قالب relay-url عبارت
است از: [proto://[label@]]host[:port]. پروتکلهای زیر در
دسترس هستند:
smtp نشست استاندارد SMTP با STARTTLS فرصتطلبانه
(پیشفرض).
smtp+tls نشست استاندارد SMTP با STARTTLS اجباری.
smtp+notls نشست متن ساده SMTP بدون TLS.
lmtp نشست LMTP. مشخص کردن port الزامی است.
smtps نشست SMTP با TLS اجباری هنگام برقراری اتصال.
درگاه پیشفرض ۴۶۵ است.
مگر در مواردی که ذکر شده، مقدار پیشفرض port برابر ۲۵ است.
برچسب label با یک مدخل در جدول مشخصات هویتی مطابقت دارد،
همانطور که در table(5) مستند شده است. از آن با پروتکلهای
“smtp+tls” و “smtps” برای احراز هویت استفاده میشود.
گواهیهای سرور برای این پروتکلها به طور پیشفرض اعتبارسنجی
میشوند.
pki pkiname
برای اتصالات امن، از گواهی مرتبط با pkiname (که در
دستورالعمل pki تعریف شده) برای اثبات هویت کلاینت به سرور
ایمیل راه دور استفاده کن.
srs هنگام بازپخش ایمیلی که ناشی از فوروارد است، از طرح
بازنویسی فرستنده (Sender Rewriting Scheme) برای بازنویسی
نشانی فرستنده استفاده کن.
tls [no-verify]
استفاده از TLS را هنگام بازپخش الزامی کن، که به طور
پیشفرض از STARTTLS اجباری استفاده میکند. هنگامی که با یک
میزبان هوشمند (smarthost) استفاده میشود، پروتکل نباید
“smtp+notls://” باشد. اگر no-verify مشخص شود، داشتن
گواهی معتبر الزامی نیست.
protocols protostr
نسخههای پروتکل مورد استفاده برای نشستهای TLS را تعریف کن.
برای اطلاع از قالب protostr به صفحه راهنمای
tls_config_parse_protocols(3) مراجعه فرمایید.
ciphers cipherstr
فهرست رمزنگارههایی را که میتوان برای نشستهای TLS استفاده
کرد، تعریف کن. برای اطلاع از قالب cipherstr به صفحه
راهنمای tls_config_set_ciphers(3) مراجعه فرمایید.
auth
از جدول نگاشت table برای اتصال به relay-url با استفاده از
مشخصات هویتی استفاده کن. این گزینه تنها با گزینه host
قابل استفاده است. قالب جدول مشخصات هویتی در table(5) شرح
داده شده است.
mail-from mailaddr
از mailaddr به عنوان نشانی MAIL FROM در تبادل SMTP
استفاده کن.
src sourceaddr |
از رشته یا جدول فهرست sourceaddr برای نشانی IP مبدا
استفاده کن، که در دستگاههایی با چندین رابط کاربری مفید
است. اگر فهرست حاوی بیش از یک نشانی باشد، از همه آنها به
گونهای استفاده میشود که ترافیک تا حد امکان بهینه مسیریابی
شود.
admd authservid
دامنه مدیریت اداری (Administrative Management Domain) که این سرور
ایمیل متعلق به آن است. شناسه authservid به فیلترهایی که از آن
برای شناسایی یا علامتگذاری سربرگهای authentication-results
استفاده میکنند ارسال خواهد شد. در صورت حذف، مقدار پیشفرض نام
سرور خواهد بود.
bounce warn-interval delay [, delay ...]
هنگامی که خطاهای موقت تحویل باعث میشوند پیامی بیش از delay در صف
بماند، پیامهای هشدار را به فرستنده پاکت ارسال کن. هر پارامتر
delay شامل یک عدد صحیح مثبت دهدهی و یک واحد s, m, h, یا d است.
حداکثر چهار پارامتر delay را میتوان مشخص کرد. مقدار پیشفرض
"bounce warn-interval 4h" است که یک هشدار منفرد را پس از چهار
ساعت ارسال میکند.
ca caname cert cafile
پرونده گواهی مرجع صدور گواهی (CA) cafile را با مدخل ca به نام
caname مرتبط کن. مدخل ca را میتوان در قوانین listen on و action
... relay ارجاع داد.
filter chain-name chain {filter-name [, ...]}
یک زنجیره از فیلترها به نام chain-name شامل فیلترهای فهرستشده در
filter-name ثبت کن. فیلترهای موجود در یک زنجیره فیلتر به ترتیب
اعلان برای هر فازی که برای آن ثبت شدهاند اجرا میشوند. میتوان از
یک زنجیره فیلتر به جای یک فیلتر برای هر دستورالعملی به جز خود
زنجیرههای فیلتر استفاده کرد.
filter filter-name phase phase-name match conditions decision
یک فیلتر به نام filter-name ثبت کن. تصمیمی decision درباره نحوه
برخورد با ایمیل در فاز phase-name هنگام تطبیق شرایط conditions
اتخاذ میشود. فازها، شرایط تطبیق و تصمیمها در بخش MAIL FILTERING
در زیر شرح داده شدهاند.
filter filter-name proc proc-name
فیلتر "proc" به نام filter-name مبتنی بر فرایند proc-name را ثبت
کن.
filter filter-name proc-exec command
فیلتر "proc" به نام filter-name را از دستور command مطابق با API
smtpd-filters(7) ثبت و اجرا کن. اگر command با یک اسلش شروع شود
با یک مسیر مطلق اجرا میشود، در غیر این صورت از
“/usr/lib/smtpd/opensmtpd” اجرا خواهد شد.
include "pathname"
این دستورالعمل را با محتوای پرونده پیکربندی اضافی در مسیر مطلق
pathname جایگزین کن.
listen on interface [family] [options]
روی رابط شبکه interface برای اتصالات ورودی با استفاده از همان
دستور زبان ifconfig(8) گوش بده. پارامتر رابط interface همچنین
میتواند یک گروه رابط، یک نشانی IP یا یک نام دامنه باشد. گوش دادن
را میتوان به صورت اختیاری به یک خانواده نشانی خاص family محدود
کرد که میتواند inet4 یا inet6 باشد.
گزینههای options به شرح زیر هستند:
auth []
از SMTPAUTH پشتیبانی کن: کلاینتها تنها پس از احراز هویت
موفق میتوانند تبادلات SMTP را آغاز کنند. کاربران یا در
برابر مشخصات هویتی ورود عادی خود یا در برابر یک جدول
مشخصات هویتی authtable احراز هویت میشوند که قالب آن در
table(5) شرح داده شده است.
auth-optional []
از SMTPAUTH به صورت اختیاری پشتیبانی کن: کلاینتها نیازی
به احراز هویت ندارند، اما میتوانند این کار را انجام دهند.
این ویژگی به یک دستورالعمل listen on امکان میدهد تا هم
ایمیلهای ورودی را از فرستندگان غیرقابل اعتماد بپذیرد و هم
به کاربران احراز هویت شده اجازه ارسال ایمیل خروجی را بدهد
(با استفاده از match auth). این گزینه در شرایطی کاربرد
دارد که امکان گوش دادن روی یک درگاه جداگانه (معمولاً درگاه
submission، ۵۸۷) برای احراز هویت کاربران وجود ندارد.
ca caname
برای اتصالات امن، از گواهی CA مرتبط با caname (تعریفشده
در دستورالعمل ca) به عنوان گواهی CA هنگام اعتبارسنجی
گواهیهای کلاینت استفاده کن.
filter name
فیلتر name را روی اتصالات مدیریتشده توسط این شنونده اعمال
کن.
hostname hostname
از hostname در بنر خوشآمدگویی به جای نام پیشفرض سرور
استفاده کن.
hostnames
نام سرور را برای نشانیهای خاص بازنویسی کن. جدول names
حاوی یک نگاشت از نشانیهای IP به نامهای میزبان است. اگر
نشانیای که اتصال روی آن وارد میشود در نگاشت ظاهر شود، نام
میزبان مرتبط استفاده میشود.
mask-src
قسمت from را هنگام افزودن سربرگهای “Received” حذف کن.
no-dsn پسوند DSN (اعلان وضعیت تحویل) را غیرفعال کن.
pki pkiname
برای اتصالات امن، از گواهی مرتبط با pkiname (تعریفشده در
یک دستورالعمل pki) برای اثبات هویت سرور ایمیل استفاده کن.
این گزینه میتواند چندین بار برای ارائه گواهیهای جایگزین
برای SNI استفاده شود.
port [port]
به جای درگاه پیشفرض ۲۵، روی درگاه مشخصشده port گوش بده.
proxy-v2
از پروتکل PROXYv2 پشتیبانی کن و نشانی مبدا دریافت شده از
پراکسی را به طور مناسب بازنویسی نما.
received-auth
در سربرگهای “Received ،” گزارش بده که آیا نشست احراز هویت
شده بود و توسط کدام کاربر محلی.
senders [masquerade]
کاربر احراز هویت شده را در جدول نگاشت users جستجو کن تا
نشانیهای ایمیلی را که آن کاربر مجاز به ارسال ایمیل با
آنهاست بیابی. علاوه بر این، اگر گزینه masquerade ارائه
شود، سربرگ From بازنویسی میشود تا با فرستنده ارائهشده در
نشست SMTP مطابقت داشته باشد.
smtps [verify]
از SMTPS، به طور پیشفرض روی درگاه ۴۶۵، پشتیبانی کن. با
گزینه tls ناسازگار و مانعةالجمع است. با گزینه verify ،
کلاینتها برای برقراری یک نشست SMTP باید یک گواهی معتبر
نیز ارائه دهند.
tag tag
کلاینتهایی که به این شنونده متصل میشوند با برچسب مشخصشده
tag علامتگذاری میشوند.
tls از STARTTLS، به طور پیشفرض روی درگاه ۲۵، پشتیبانی کن. با
smtps ناسازگار و مانعةالجمع است.
tls-require [verify]
مشابه tls ، اما کلاینتها را مجبور میکند پیش از شروع تبادل
SMTP یک اتصال امن برقرار کنند. با گزینه verify ،
کلاینتها همچنین باید یک گواهی معتبر برای برقراری نشست
SMTP ارائه دهند.
protocols protostr
نسخههای پروتکل مورد استفاده برای نشستهای TLS را مشخص کن.
برای قالب protostr به صفحه راهنمای
tls_config_parse_protocols(3) مراجعه فرمایید.
ciphers cipherstr
فهرست رمزنگارههای مجاز برای نشستهای TLS را مشخص کن. برای
قالب cipherstr به صفحه راهنمای tls_config_set_ciphers(3)
مراجعه فرمایید.
listen on socket [options]
برای اتصالات ورودی SMTP روی سوکت دامنه یونیکس /run/smtpd.sock گوش
بده. این کار حتی در صورت عدم درج دستورالعمل، به طور پیشفرض انجام
میشود.
گزینههای options به شرح زیر هستند:
filter name
فیلتر name را روی اتصالات مدیریتشده توسط این شنونده اعمال
کن.
mask-src
قسمت from را هنگام افزودن سربرگهای “Received” حذف کن.
no-dsn پسوند DSN (اعلان وضعیت تحویل) را غیرفعال کن.
tag tag
کلاینتهای متصل به شنونده با برچسب مشخصشده tag علامتگذاری
میشوند.
match options action name
اگر حداقل یک پاکت ایمیل با گزینههای options یک دستورالعمل match
action مطابقت داشته باشد، پیام ورودی را دریافت کن، یک رونوشت در
هر پاکت تطبیقیافته قرار بده و پاکتها را به صورت اتمیک در صف ایمیل
ذخیره کن تا بعداً توسط توزیعکننده مربوطه name (که باید از قبل با
دستورالعمل action تعریف شده باشد) پردازش شوند.
گزینههای تطبیق زیر پشتیبانی میشوند و همگی قابلیت منفی شدن (با
استفاده از علامت !) دارند:
[!] for any
مشخص میکند که نشست میتواند هر مقصدی را مخاطب قرار دهد.
[!] for local
مشخص میکند که نشست میتواند هر دامنه محلی را مخاطب قرار
دهد. این حالت پیشفرض است و میتوان آن را حذف کرد.
[!] for domain [regex] domain |
مشخص میکند که نشست میتواند رشته یا جدول فهرست domain را
مخاطب قرار دهد. کلیدواژه regex در صورتی لازم است که
domain یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد.
[!] for rcpt-to [regex] recipient |
مشخص میکند که نشست میتواند رشته یا جدول فهرست recipient
را مخاطب قرار دهد. کلیدواژه regex در صورتی لازم است که
recipient یک عبارت باقاعده یا جدولی از عبارات باقاعده
باشد.
[!] from any
مشخص میکند که نشست میتواند از هر مبدایی سرچشمه بگیرد.
[!] from auth
مشخص میکند که نشست میتواند از هر کاربر احراز هویت شدهای،
بدون در نظر گرفتن نشانی IP مبدا، سرچشمه بگیرد.
[!] from auth [regex] user |
مشخص میکند که نشست میتواند از کاربر احراز هویت شده یا
فهرست کاربران user ، بدون در نظر گرفتن نشانی IP مبدا،
سرچشمه بگیرد. کلیدواژه regex در صورتی لازم است که user
یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد.
[!] from local
مشخص میکند که نشست تنها میتواند از یک نشانی IP محلی یا از
ثبتکننده محلی (local enqueuer) سرچشمه بگیرد. این حالت
پیشفرض است و میتوان آن را حذف کرد.
[!] from mail-from [regex] sender |
مشخص میکند که نشست میتواند از فرستنده یا فهرست فرستندگان
sender ، بدون در نظر گرفتن نشانی IP مبدا، سرچشمه بگیرد.
کلیدواژه regex در صورتی لازم است که sender یک عبارت
باقاعده یا جدولی از عبارات باقاعده باشد.
[!] from rdns
مشخص میکند که نشست تنها میتواند از یک نشانی IP سرچشمه
بگیرد که به یک reverse DNS تفکیک شود.
[!] from rdns [regex] hostname |
مشخص میکند که نشست تنها میتواند از یک نشانی IP سرچشمه
بگیرد که به یک reverse DNS منطبق با رشته یا رشته فهرست
hostname تفکیک شود. کلیدواژه regex در صورتی لازم است که
hostname یک عبارت باقاعده یا جدولی از عبارات باقاعده
باشد.
[!] from socket
مشخص میکند که نشست تنها میتواند از ثبتکننده محلی در صف
سرچشمه بگیرد.
[!] from src [regex] address |
مشخص میکند که نشست تنها میتواند از رشته یا جدول فهرست
address سرچشمه بگیرد که میتواند یک نشانی مشخص یا یک
زیرشبکه در قالب نشانهگذاری CIDR باشد. کلیدواژه regex در
صورتی لازم است که address یک عبارت باقاعده یا جدولی از
عبارات باقاعده باشد.
علاوه بر این، گزینههای تبادل زیر نیز میتوانند تطبیق داده شوند:
[!] auth
تبادلاتی را که احراز هویت شدهاند تطبیق میدهد.
[!] auth [regex] username |
تبادلاتی را که برای کاربر یا فهرست کاربران username احراز
هویت شدهاند تطبیق میدهد. کلیدواژه regex در صورتی لازم
است که username یک عبارت باقاعده یا جدولی از عبارات
باقاعده باشد.
[!] helo [regex] helo-name |
مشخص میکند که HELO / EHLO نشست باید با رشته یا جدول فهرست
helo-name مطابقت داشته باشد. کلیدواژه regex در صورتی
لازم است که helo-name یک عبارت باقاعده یا جدولی از عبارات
باقاعده باشد.
[!] mail-from [regex] sender |
مشخص میکند که MAIL FROM تبادل باید با رشته یا جدول فهرست
sender مطابقت داشته باشد. کلیدواژه regex در صورتی لازم
است که sender یک عبارت باقاعده یا جدولی از عبارات باقاعده
باشد.
[!] rcpt-to [regex] recipient |
مشخص میکند که RCPT TO تبادل باید با رشته یا جدول فهرست
recipient مطابقت داشته باشد. کلیدواژه regex در صورتی
لازم است که recipient یک عبارت باقاعده یا جدولی از عبارات
باقاعده باشد.
[!] tag [regex] tag
تبادلات علامتگذاریشده با برچسب مشخصشده tag را تطبیق
میدهد. کلیدواژه regex در صورتی لازم است که tag یک عبارت
باقاعده باشد.
[!] tls
مشخص میکند که تبادل باید در یک کانال TLS انجام گیرد.
match options reject
پیام ورودی را در طول گفتگوی SMTP رد کن. همان گزینههای options که
برای دستورالعمل match action پشتیبانی میشوند، در اینجا نیز معتبر
هستند.
mda wrapper name command
دستور command را با بستهبندی تحویلدهنده ایمیل به نام name مرتبط
کن. هنگامی که یک تحویل محلی یک بستهبندی را مشخص میکند، به جای آن
command مرتبط با بستهبندی اجرا خواهد شد. این دستور میتواند حاوی
مشخصکنندههای قالب باشد (نگاه کنید به FORMAT SPECIFIERS).
mta max-deferred number
هنگامی که تحویل به یک میزبان معین به دلیل خطاهای موقت معلق میشود،
حداکثر number پاکت را برای آن میزبان ذخیره (کش) کن تا به محض
موفقیتآمیز بودن تحویل دیگری به آن میزبان، بتوان آنها را تحویل
داد. مقدار پیشفرض ۱۰۰ است.
pki pkiname cert certfile
پرونده گواهی certfile را با مدخل pki به نام pkiname مرتبط کن.
مدخل pki پیکربندی یک جفتکلید را تعریف میکند که میتوان در قوانین
شنونده و اقدامات بازپخش به آن ارجاع داد.
میتوان با افزودن یک یا چند گواهی، از جمله گواهی مرجع صدور گواهی
(CA)، به certfile یک زنجیره گواهی ایجاد کرد. ایجاد گواهیها در
starttls(8) مستند شده است.
pki pkiname key keyfile
کلید واقع در keyfile را با مدخل pki به نام pkiname مرتبط کن.
pki pkiname dhe params
پارامترهای DHE را برای استفاده در مجموعههای رمزنگاری DHE با مدخل
pki به نام pkiname مشخص کن. مقادیر معتبر پارامتر عبارتند از
none, legacy, و auto. برای legacy ، یک طول کلید ثابت ۱۰۲۴ بیتی
استفاده میشود، در حالی که برای auto ، طول کلید به صورت خودکار
تعیین میگردد. مقدار پیشفرض none است که مجموعههای رمزنگاری DHE را
غیرفعال میکند.
proc proc-name command
یک فرایند خارجی به نام proc-name را از دستور command مطابق با API
smtpd-filters(7) ثبت کن. از چنین فرایندهایی میتوان برای به
اشتراک گذاشتن یک نمونه واحد بین چندین فیلتر استفاده کرد. اگر
command با یک اسلش آغاز شود با یک مسیر مطلق اجرا میشود، در غیر
این صورت از “/usr/lib/smtpd/opensmtpd” اجرا خواهد شد.
queue compression
پروندههای صف را در قالبی فشرده ذخیره کن. این کار برای صرفهجویی
در فضای دیسک مفید است.
queue encryption [key]
پروندههای صف را با EVP_aes_256_gcm(3) رمزگذاری کن. اگر هیچ کلیدی
key مشخص نشده باشد، با getpass(3) خوانده میشود. اگر به جای یک
key ، رشته stdin یا یک خط تیره منفرد (‘-’) داده شود، کلید از
ورودی استاندارد خوانده میشود.
queue ttl delay
زمان انقضای پیشفرض را برای پیامهایی که به طور موقت غیرقابل تحویل
هستند تنظیم کن، که به صورت یک عدد صحیح مثبت دهدهی به همراه یک
واحد s, m, h, یا d داده میشود. مقدار پیشفرض چهار روز (4d) است.
smtp ciphers control
رشته کنترلی control را برای SSL_CTX_set_cipher_list(3) تنظیم کن.
مقدار پیشفرض "HIGH:!aNULL:!MD5" است.
smtp limit max-mails count
تعداد پیامها را برای هر نشست به count محدود کن. مقدار پیشفرض ۱۰۰
است.
smtp limit max-rcpt count
تعداد گیرندگان را برای هر تبادل به count محدود کن. مقدار پیشفرض
۱۰۰۰ است.
smtp max-message-size size
پیامهای بزرگتر از size را رد کن، که به صورت یک عدد مثبت از بایتها
یا به عنوان رشتهای که با scan_scaled(3) تجزیه میشود مشخص میگردد.
مقدار پیشفرض "35M" است.
smtp sub-addr-delim character
هنگام تفکیک بخش محلی نشانی ایمیل محلی، کاراکتر اسکی character و
تمام کاراکترهای پس از آن را نادیده بگیر. مقدار پیشفرض ‘+’ است.
srs key [backup] secret
کلید مخفی مورد استفاده برای SRS (طرح بازنویسی فرستنده) را تنظیم
کن. گزینه backup را میتوان برای تنظیم یک کلید مخفی جهت استفاده
به عنوان جایگزین اضطراری برای SRS مشخص کرد؛ از این قابلیت میتوان
برای پیادهسازی چرخش کلیدهای SRS استفاده نمود.
srs ttl delay
مدتزمان اعتبار (TTL) را برای پاکتهای SRS تنظیم کن. پس از این
تاخیر، پاسخ بازگشتی (bounce) به نشانی SRS دور انداخته میشود تا
خطرات نشانیهای جعلشده کاهش یابد. مقدار پیشفرض چهار روز (4d) است.
table name [type:]pathname
جدولها اطلاعات پیکربندی اضافی را برای smtpd(8) در قالب فهرستها یا
نگاشتهای کلید-مقدار فراهم میکنند. قالب مدخلها بستگی به کاربرد
جدول دارد. برای مستندات جامع به table(5) مراجعه فرمایید.
هر جدول با یک نام دلخواه و یکتا name مشخص میشود.
اگر نوع type برابر db باشد، اطلاعات در پروندهای که با makemap(8)
ساخته شده ذخیره میشود؛ اگر file یا حذف شده باشد، اطلاعات در یک
پرونده متن ساده با قالبی که در table(5) شرح داده شده ذخیره
میگردد. مسیر pathname به پرونده باید مطلق باشد.
table name {value [, ...]}
به جای استفاده از یک پرونده جداگانه، یک جدول فهرست حاوی مقادیر
ایستای values دادهشده تعریف کن. جدول باید حداقل شامل یک مقدار
باشد و میتواند چندین مقدار را به صورت فهرستی جداشده با کاما
(فاصله اختیاری است) اعلان کند.
table name {key=value [, ...]}
به جای استفاده از یک پرونده جداگانه، یک جدول نگاشت حاوی جفتهای
ایستای key-value دادهشده تعریف کن. جدول باید حداقل شامل یک جفت
کلید-مقدار باشد و میتواند چندین جفت را به صورت فهرستی جداشده با
کاما (فاصله اختیاری است) اعلان کند.
فیلتر کردن ایمیل (MAIL FILTERING)
در یک گردش کار معمولی، smtpd(8) ممکن است پیامی را تنها بر اساس محتوای
پاکتها بپذیرد یا رد کند. تصمیمهای آن درباره نحوه مدیریت پیام است، نه
درباره مدیریت یک نشست فعال.
فیلتر کردن فرآیند تصمیمگیری را با مجاز ساختن smtpd(8) به توقف در هر فاز
از یک نشست SMTP، بررسی برقراری شرایط، و سپس تصمیمگیری درباره اینکه آیا
نشست اجازه پیشروی دارد یا خیر، گسترش میدهد.
با فیلتر کردن، یک نشست میتواند در هر فازی پیش از کامل شدن یک پاکت متوقف
شود. همچنین یک پیام میتواند پس از ثبت شدن رد شود، صرفنظر از اینکه پاکت
پذیرفته شده بود یا خیر.
فازهای زیر در حال حاضر پشتیبانی میشوند:
connect هنگام اتصال، پیش از نمایش بنر
helo پس از ارسال دستور HELO
ehlo پس از ارسال دستور EHLO
mail-from پس از ارسال دستور MAIL FROM
rcpt-to پس از ارسال دستور RCPT TO
data پس از ارسال دستور DATA
commit پس از ثبت کامل پیام
در هر فاز، شرایط مختلفی را میتوان تطبیق داد. دادههای fcrdns، rdns و src
در تمامی فازها در دسترس هستند، اما دادههای دیگر باید قبلاً ارسال شده باشند
تا در دسترس قرار گیرند.
fcrdns سامانه DNS معکوس تاییدشده مستقیم معتبر است
rdns نشست دارای یک DNS معکوس است
rdns نشست دارای DNS معکوس در جدول است
src نشانی مبدا در جدول موجود است
helo نام helo در جدول موجود است
auth نشست احراز هویت شده است
auth نام کاربری نشست در جدول موجود است
mail-from نشانی فرستنده در جدول موجود است
rcpt-to نشانی گیرنده در جدول موجود است
این شرایط را میتوان با افزودن علامت تعجب به ابتدای آنها منفی کرد:
!fcrdns سامانه DNS معکوس تاییدشده مستقیم نامعتبر
است
هر شرطی که از یک جدول استفاده میکند میتواند با افزودن کلیدواژه regex به
ابتدای نام جدول مشخص کند که جدول حاوی عبارات باقاعده است.
helo regex نام helo با یک regex در جدول مطابقت دارد
در نهایت، تعدادی تصمیم را میتوان اتخاذ کرد:
bypass نشست یا تبادل از فیلترها گذر میکند
disconnect message اتصال نشست همراه با پیام قطع میشود
junk نشست یا تبادل به عنوان هرزنامه علامتگذاری
میشود، یعنی یک سربرگ ‘X-Spam: yes’ به
پیامها اضافه میشود
reject message دستور همراه با پیام رد میشود
rewrite value پارامتر دستور با مقدار بازنویسی میشود
تصمیماتی که شامل یک پیام هستند مستلزم آنند که پیام طبق استانداردهای RFC
معتبر باشد، به این معنی که باید با یک کد وضعیت 4xx یا 5xx شروع شوند.
تصمیمها را میتوان در هر فازی اتخاذ کرد، اگرچه علامتگذاری به عنوان هرزنامه
(junk) تنها پیش از ثبت نهایی پیام میتواند رخ دهد.
مشخصکنندههای قالب (FORMAT SPECIFIERS)
برخی از دستورالعملهای پیکربندی از بسط پارامترهای خود در زمان اجرا
پشتیبانی میکنند. چنین دستورالعملهایی (برای نمونه action maildir, action
mda) میتوانند از مشخصکنندههای قالبی استفاده کنند که پیش از تحویل یا
بازپخش بسط مییابند. قالبهای زیر در حال حاضر پشتیبانی میشوند:
%{sender} نشانی ایمیل فرستنده، ممکن است رشته خالی باشد
%{sender.user} بخش کاربری نشانی ایمیل فرستنده، ممکن است خالی
باشد
%{sender.domain} بخش دامنه نشانی ایمیل فرستنده، ممکن است خالی
باشد
%{rcpt} نشانی ایمیل گیرنده
%{rcpt.user} بخش کاربری نشانی ایمیل گیرنده
%{rcpt.domain} بخش دامنه نشانی ایمیل گیرنده
%{dest} نشانی ایمیل گیرنده پس از بسط
%{dest.user} بخش کاربری پس از بسط
%{dest.domain} بخش دامنه پس از بسط
%{user.username} کاربر محلی
%{user.directory} دایرکتوری خانگی کاربر محلی
%{mbox.from} نام مورد استفاده در خطوط جداکننده From در mbox
%{mda} دستور mda، تنها برای بستهبندیهای mda در دسترس
است
قالبهای بسط همچنین از بسط جزئی با استفاده از نشانهگذاری اختیاری براکت با
آفست زیررشته پشتیبانی میکنند. برای نمونه، با دامنه گیرنده “example.org”:
%{rcpt.domain[0]} به “e بسط مییابد”
%{rcpt.domain[1]} به “x بسط مییابد”
%{rcpt.domain[8:]} به “org بسط مییابد”
%{rcpt.domain[-3:]} به “org بسط مییابد”
%{rcpt.domain[0:6]} به “example بسط مییابد”
%{rcpt.domain[0:-4]} به “example بسط مییابد”
علاوه بر این، اصلاحکنندهها میتوانند روی توکن اعمال شوند. برای نمونه، با
گیرنده “User+Tag@Example.org”:
%{rcpt:lowercase} به “user+tag@example.org بسط مییابد”
%{rcpt:uppercase} به “USER+TAG@EXAMPLE.ORG بسط مییابد”
%{rcpt:strip} به “User@Example.org بسط مییابد”
%{rcpt:lowercase|strip} به “user@example.org بسط مییابد”
به دلایل امنیتی، مقادیر بسطیافته پالایش میشوند و نویسههای بالقوه خطرناک
با ‘:’ جایگزین میگردند. در شرایطی که حضور آنها مطلوب باشد، میتوان
اصلاحکننده “raw” را اعمال کرد. برای نمونه، با گیرنده
“user+t?g@example.org”:
%{rcpt} به “user+t:g@example.org بسط مییابد”
%{rcpt:raw} به “user+t?g@example.org بسط مییابد”
دستورات تحویلدهنده ایمیل (MDA COMMANDS)
هنگامی که روش تحویل یک اقدام mda باشد، smtpd(8) دستور مرتبط را برای تحویل
اجرا میکند در حالی که محتوای ایمیل از طریق ورودی استاندارد ارائه میشود.
انتظار میرود که دستور تمام محتوای ایمیل را بخواند.
کد خروج دستور نتیجه تحویل را گزارش میدهد: وضعیت 0 (EX_OK) تحویل
موفقیتآمیز است؛ وضعیتهای 71 (EX_OSERR) و 75 (EX_TEMPFAIL) شکستهای موقت
هستند؛ و تمام کدهای خروج دیگر به عنوان شکست دائمی در نظر گرفته میشوند.
متغیرهای محیطی زیر تنظیم میشوند:
DOMAIN دامنه گیرنده.
EXTENSION زیرنشانی گیرنده (ممکن است تنظیم نشده باشد).
HOME دایرکتوری ورود کاربر تحویل.
LOCAL بخش محلی نشانی کاربر گیرنده.
LOGNAME نام ورود کاربر.
ORIGINAL_RECIPIENT نشانی گیرنده اصلی.
PATH تنظیمشده روی _PATH_DEFPATH. به طور سنتی
/usr/bin:/bin ، اما بسطیافته برای دربرگیری /usr/sbin
، /sbin ، /usr/X11R6/bin ، /usr/local/bin ، و
/usr/local/sbin در OpenBSD.
RECIPIENT نشانی گیرنده نهایی.
SENDER نشانی فرستنده (ممکن است خالی باشد).
SHELL تنظیمشده روی /bin/sh.
USER مترادف LOGNAME برای سازگاری با گذشته.
فایلها (FILES)
/etc/smtpd/smtpd.conf پرونده پیکربندی پیشفرض smtpd(8).
/etc/smtpd/mailname اگر این پرونده وجود داشته باشد، خط اول به عنوان
نام سرور استفاده میشود. در غیر این صورت، نام
سرور از نام میزبان محلی بازگرداندهشده توسط
gethostname(3) گرفته میشود؛ یا مستقیماً اگر یک
نام دامنه کاملاً واجد شرایط باشد، یا با بازیابی
نام متعارف مرتبط از طریق getaddrinfo(3).
/run/smtpd.sock سوکت دامنه یونیکس برای اتصالات ورودی SMTP.
/var/spool/smtpd/ دایرکتوریهای صف برای ایمیلها در حین پردازش.
مثالها (EXAMPLES)
پرونده پیشفرض smtpd.conf که همراه با OpenBSD عرضه میشود، روی رابط شبکه
loopback (lo0) گوش میدهد و امکان دریافت ایمیل از کاربران و دیمنهای روی
ماشین محلی را فراهم میسازد، و همچنین اجازه ارسال ایمیل به سرورهای راه دور
را میدهد. چندین پیکربندی پیچیدهتر در زیر ارائه شده است.
این مثال اول مشابه پیکربندی پیشفرض است، اما تمام ایمیلهای خروجی به یک
سرور SMTP راه دور بازپخش میشوند. یک پرونده اطلاعات محرمانه (secrets)
برای تعیین نام کاربری و گذرواژه مورد نیاز است:
# touch /etc/smtpd/secrets
# chmod 640 /etc/smtpd/secrets
# chown root:smtpd /etc/smtpd/secrets
# echo "bob username:password" > /etc/smtpd/secrets
پرونده smtpd.conf به این صورت خواهد بود:
table aliases file:/etc/smtpd/aliases
table secrets file:/etc/smtpd/secrets
listen on lo0
action "local_mail" mbox alias
action "outbound" relay host smtp+tls://bob@smtp.example.com \
auth
match from local for local action "local_mail"
match from local for any action "outbound"
در این مثال دوم، هدف این است که تحویل و بازپخش ایمیل تنها برای کاربرانی
مجاز باشد که میتوانند احراز هویت کنند (با استفاده از مشخصات ورود عادی
خود). یک گواهی RSA باید برای اثبات هویت سرور ارائه شود. سرور ایمیل روی
تمام رابطهایی که مسیرهای پیشفرض به آنها اشاره دارند گوش میدهد. ایمیل با
مقصد محلی به یک MDA خارجی ارسال میشود. نخست، گواهی RSA ایجاد میشود:
# openssl genrsa -out /etc/ssl/private/mail.example.com.key 4096
# openssl req -new -x509 -key /etc/ssl/private/mail.example.com.key \
-out /etc/ssl/mail.example.com.crt -days 365
# chmod 600 /etc/ssl/mail.example.com.crt
# chmod 600 /etc/ssl/private/mail.example.com.key
در مثال بالا، یک گواهی با اعتبار یک سال ایجاد شد. پرونده پیکربندی به این
صورت خواهد بود:
pki mail.example.com cert "/etc/ssl/mail.example.com.crt"
pki mail.example.com key "/etc/ssl/private/mail.example.com.key"
table aliases file:/etc/smtpd/aliases
listen on lo0
listen on egress tls pki mail.example.com auth
action mda_with_aliases mda "/path/to/mda -f -" alias
action mda_without_aliases mda "/path/to/mda -f -"
action "outbound" relay
match for local action mda_with_aliases
match from any for domain example.com action mda_without_aliases
match for any action "outbound"
match auth from any for any action "outbound"
برای سایتهایی که مایل به امضای پیامها با استفاده از DKIM هستند، مثال زیر
از opensmtpd-filter-dkimsign برای امضای DKIM استفاده میکند:
table aliases file:/etc/smtpd/aliases
filter "dkimsign" proc-exec "filter-dkimsign -d -s \
-k /etc/smtpd/dkim/private.key" user _dkimsign group _dkimsign
listen on socket filter "dkimsign"
listen on lo0 filter "dkimsign"
action "local_mail" mbox alias
action "outbound" relay
match for local action "local_mail"
match for any action "outbound"
روش دیگر این است که بسته opensmtpd-filter-rspamd میتواند برای یکپارچهسازی
با rspamd استفاده شود؛ یک دیمن شخص ثالث که چندین ویژگی ضد هرزنامه و
همچنین امضای DKIM را ارائه میدهد. علاوه بر پیکربندی خود rspamd ، این کار
مستلزم استفاده از کلیدواژه proc-exec است:
filter "rspamd" proc-exec "filter-rspamd"
سایتهایی که پیامهای غیرمحلی را میپذیرند ممکن است بتوانند با رد پیامهای
جعلی که ادعا میکنند از دامنه محلی هستند، حجم هرزنامههای دریافتی را کاهش
دهند. مثال زیر از یک جدول فهرست other-relays برای تعیین نشانیهای IP
بازپخشهایی استفاده میکند که ممکن است به طور قانونی ایمیلی با دامنه مالک
به عنوان فرستنده ارسال کنند.
table aliases file:/etc/smtpd/aliases
table other-relays file:/etc/smtpd/other-relays
listen on lo0
listen on egress
action "local_mail" mbox alias
action "outbound" relay
match for local action "local_mail"
match for any action "outbound"
match !from src mail-from "@example.com" for any \
reject
match from any for domain example.com action "local_mail"
همچنین ببینید (SEE ALSO)
mailer.conf(5), table(5), smtpd-filters(7), makemap(8), smtpd(8)
تاریخچه (HISTORY)
دیمن smtpd(8) نخستین بار در OpenBSD 4.6 ظاهر شد.
Linux 6.12.107+deb13-amd64 August 26, 2025 Linux 6.12.107+deb13-amd64