| 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
در زیر شرح
داده شده
است.
actionname method [options]- هنگامی که
پردازشگر
صف، پاکتی
را از صف
ایمیل
پردازش
میکند،
اقدام
actionname را که توسط دستورالعملmatch...actionدر زمان دریافت پیام انتخاب شده است، اجرا میکند. دستورالعملactionدادههای پیکربندی را برای تلاشهای تحویل فراهم میسازد. جستجوهای لازم در زمان هر تلاش برای تحویل انجام میشوند. در نتیجه، تغییر یک دستورالعملactionیا پروندههای ارجاعشده توسط آن و راهاندازی مجدد دیمن smtpd(8) باعث اعمال تغییرات برای تلاشهای بعدی تحویل برای ارسالکننده مربوطه name میشود، حتی برای پیامهایی که پیش از تغییرات پیکربندی در صف گیر کرده بودند.پارامتر روش تحویل method میتواند یکی از موارد زیر باشد:
expand-only- تنها در صورتی پیام را بپذیر که یک روش تحویل در پرونده نامهای مستعار یا .forward مشخص شده باشد.
forward-only- تنها در صورتی پیام را بپذیر که گیرنده پس از پردازش نامهای مستعار یا پرونده forward به یک نشانی راه دور منتهی شود.
lmtpdestination [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 کاربر تحویل بده.
mdacommand- تحویل را
به یک command
محول کن که
پیام را
روی ورودی
استاندارد
خود
دریافت
میکند
(نگاه کنید
به MDA COMMANDS).
دستور command میتواند حاوی مشخصکنندههای قالب باشد که پیش از استفاده بسط مییابند (نگاه کنید به FORMAT SPECIFIERS).
relay- پیام را به یک سرور SMTP دیگر بازپخش کن.
روشهای تحویل محلی از گزینههای اضافی زیر پشتیبانی میکنند:
alias<table>- از جدول نگاشت table برای بسط aliases(5) استفاده کن.
ttln{s|m|h|d}- مدت زمانی را که یک پیام میتواند در صف بماند مشخص کن.
userusername- نام
کاربری
username را
برای
انجام
تحویل
مشخص کن که
با
getpwnam(3)
جستجو
میشود.
این گزینه برای میزبانی مجازی که در آن یک نام کاربری واحد مسئول مدیریت تحویل برای همه کاربران مجازی است به کار میرود.
این گزینه با روش تحویل
mboxقابل استفاده نیست.تنها پرونده .forward کاربر تحویل پردازش خواهد شد.
userbase<table>- از جدول
نگاشت table
برای
جستجوی
کاربران
به جای
تابع
getpwnam(3)
استفاده
کن.
گزینه
userbaseروی گزینهuserاعمال نمیشود. virtual<table>- از جدول نگاشت table برای بسط مجازی استفاده کن. قالب جدول نامهای مستعار در table(5) شرح داده شده است.
wrappername- از
بستهبندی
(wrapper)
مشخصشده
در
mda wrapperاستفاده کن.
روشهای تحویل بازپخش (relay) نیز از گزینههای اضافی پشتیبانی میکنند:
backup- به عنوان مبادلهکننده ایمیل پشتیبان عمل کن و پیامها را به هر مبادلهکننده ایمیل با اولویت بالاتر تحویل بده.
backup mxname- به عنوان مبادلهکننده ایمیل پشتیبان عمل کن و پیامها را به هر مبادلهکنندهای با اولویت بالاتر از مبادلهکننده مشخصشده با نام name تحویل بده.
cacaname- برای
اتصالات
امن، از
مرجع صدور
گواهی
مرتبط با
caname (که در
دستورالعمل
caتعریف شده) برای اعتبارسنجی هویت سرور استفاده کن. heloheloname- نام heloname را به عنوان نام میزبان در طول فاز HELO به سایر مبادلهکنندگان ایمیل معرفی کن.
helo-src<table>- از جدول نگاشت table برای جستجوی نام میزبان منطبق با نشانی مبدا استفاده کن تا در طول فاز HELO معرفی شود.
domain<domains>- جستجوی MX انجام نده، بلکه دامنه مقصد را در domains جستجو کن و از آدرس relay url منطبق به عنوان میزبان بازپخش استفاده نما.
hostrelay-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” برای احراز هویت استفاده میشود. گواهیهای سرور برای این پروتکلها به طور پیشفرض اعتبارسنجی میشوند.
pkipkiname- برای
اتصالات
امن، از
گواهی
مرتبط با
pkiname (که در
دستورالعمل
pkiتعریف شده) برای اثبات هویت کلاینت به سرور ایمیل راه دور استفاده کن. srs- هنگام بازپخش ایمیلی که ناشی از فوروارد است، از طرح بازنویسی فرستنده (Sender Rewriting Scheme) برای بازنویسی نشانی فرستنده استفاده کن.
tls[no-verify]- استفاده
از TLS را
هنگام
بازپخش
الزامی
کن، که به
طور
پیشفرض
از STARTTLS
اجباری
استفاده
میکند.
هنگامی که
با یک
میزبان
هوشمند (smarthost)
استفاده
میشود،
پروتکل
نباید “smtp+notls://”
باشد. اگر
no-verifyمشخص شود، داشتن گواهی معتبر الزامی نیست. protocolsprotostr- نسخههای پروتکل مورد استفاده برای نشستهای TLS را تعریف کن. برای اطلاع از قالب protostr به صفحه راهنمای tls_config_parse_protocols(3) مراجعه فرمایید.
cipherscipherstr- فهرست رمزنگارههایی را که میتوان برای نشستهای TLS استفاده کرد، تعریف کن. برای اطلاع از قالب cipherstr به صفحه راهنمای tls_config_set_ciphers(3) مراجعه فرمایید.
auth<table>- از جدول
نگاشت table
برای
اتصال به
relay-url با
استفاده
از مشخصات
هویتی
استفاده
کن. این
گزینه
تنها با
گزینه
hostقابل استفاده است. قالب جدول مشخصات هویتی در table(5) شرح داده شده است. mail-frommailaddr- از mailaddr به عنوان نشانی MAIL FROM در تبادل SMTP استفاده کن.
srcsourceaddr | <sourceaddr>- از رشته یا جدول فهرست sourceaddr برای نشانی IP مبدا استفاده کن، که در دستگاههایی با چندین رابط کاربری مفید است. اگر فهرست حاوی بیش از یک نشانی باشد، از همه آنها به گونهای استفاده میشود که ترافیک تا حد امکان بهینه مسیریابی شود.
admdauthservid- دامنه مدیریت اداری (Administrative Management Domain) که این سرور ایمیل متعلق به آن است. شناسه authservid به فیلترهایی که از آن برای شناسایی یا علامتگذاری سربرگهای authentication-results استفاده میکنند ارسال خواهد شد. در صورت حذف، مقدار پیشفرض نام سرور خواهد بود.
bouncewarn-intervaldelay [, delay ...]- هنگامی که
خطاهای
موقت تحویل
باعث
میشوند
پیامی بیش
از delay در
صف بماند،
پیامهای
هشدار را به
فرستنده
پاکت ارسال
کن. هر
پارامتر
delay شامل
یک عدد صحیح
مثبت دهدهی
و یک واحد
s,m,h, یاdاست. حداکثر چهار پارامتر delay را میتوان مشخص کرد. مقدار پیشفرض "bouncewarn-interval4h" است که یک هشدار منفرد را پس از چهار ساعت ارسال میکند. cacanamecertcafile- پرونده
گواهی مرجع
صدور گواهی
(CA) cafile را با
مدخل ca به
نام caname
مرتبط کن.
مدخل ca را
میتوان در
قوانین
listen onوaction ... relayارجاع داد. filterchain-namechain{filter-name [, ...]}- یک زنجیره از فیلترها به نام chain-name شامل فیلترهای فهرستشده در filter-name ثبت کن. فیلترهای موجود در یک زنجیره فیلتر به ترتیب اعلان برای هر فازی که برای آن ثبت شدهاند اجرا میشوند. میتوان از یک زنجیره فیلتر به جای یک فیلتر برای هر دستورالعملی به جز خود زنجیرههای فیلتر استفاده کرد.
filterfilter-namephasephase-namematchconditions decision- یک فیلتر به نام filter-name ثبت کن. تصمیمی decision درباره نحوه برخورد با ایمیل در فاز phase-name هنگام تطبیق شرایط conditions اتخاذ میشود. فازها، شرایط تطبیق و تصمیمها در بخش MAIL FILTERING در زیر شرح داده شدهاند.
filterfilter-nameprocproc-name- فیلتر "proc" به نام filter-name مبتنی بر فرایند proc-name را ثبت کن.
filterfilter-nameproc-execcommand- فیلتر "proc" به نام filter-name را از دستور command مطابق با API smtpd-filters(7) ثبت و اجرا کن. اگر command با یک اسلش شروع شود با یک مسیر مطلق اجرا میشود، در غیر این صورت از “/usr/lib/smtpd/opensmtpd” اجرا خواهد شد.
include"pathname"- این دستورالعمل را با محتوای پرونده پیکربندی اضافی در مسیر مطلق pathname جایگزین کن.
listen oninterface [family] [options]- روی رابط
شبکه interface
برای
اتصالات
ورودی با
استفاده از
همان دستور
زبان
ifconfig(8)
گوش بده.
پارامتر
رابط interface
همچنین
میتواند
یک گروه
رابط، یک
نشانی IP یا
یک نام
دامنه باشد.
گوش دادن را
میتوان به
صورت
اختیاری به
یک خانواده
نشانی خاص
family محدود
کرد که
میتواند
inet4یاinet6باشد.گزینههای options به شرح زیر هستند:
auth[<authtable>]- از SMTPAUTH پشتیبانی کن: کلاینتها تنها پس از احراز هویت موفق میتوانند تبادلات SMTP را آغاز کنند. کاربران یا در برابر مشخصات هویتی ورود عادی خود یا در برابر یک جدول مشخصات هویتی authtable احراز هویت میشوند که قالب آن در table(5) شرح داده شده است.
auth-optional[<authtable>]- از SMTPAUTH به
صورت
اختیاری
پشتیبانی
کن:
کلاینتها
نیازی به
احراز
هویت
ندارند،
اما
میتوانند
این کار را
انجام
دهند. این
ویژگی به
یک
دستورالعمل
listen onامکان میدهد تا هم ایمیلهای ورودی را از فرستندگان غیرقابل اعتماد بپذیرد و هم به کاربران احراز هویت شده اجازه ارسال ایمیل خروجی را بدهد (با استفاده ازmatch auth). این گزینه در شرایطی کاربرد دارد که امکان گوش دادن روی یک درگاه جداگانه (معمولاً درگاه submission، ۵۸۷) برای احراز هویت کاربران وجود ندارد. cacaname- برای
اتصالات
امن، از
گواهی CA
مرتبط با
caname
(تعریفشده
در
دستورالعمل
ca) به عنوان گواهی CA هنگام اعتبارسنجی گواهیهای کلاینت استفاده کن. filtername- فیلتر name را روی اتصالات مدیریتشده توسط این شنونده اعمال کن.
hostnamehostname- از hostname در بنر خوشآمدگویی به جای نام پیشفرض سرور استفاده کن.
hostnames<names>- نام سرور را برای نشانیهای خاص بازنویسی کن. جدول names حاوی یک نگاشت از نشانیهای IP به نامهای میزبان است. اگر نشانیای که اتصال روی آن وارد میشود در نگاشت ظاهر شود، نام میزبان مرتبط استفاده میشود.
mask-src- قسمت from را هنگام افزودن سربرگهای “Received” حذف کن.
no-dsn- پسوند DSN (اعلان وضعیت تحویل) را غیرفعال کن.
pkipkiname- برای
اتصالات
امن، از
گواهی
مرتبط با
pkiname
(تعریفشده
در یک
دستورالعمل
pki) برای اثبات هویت سرور ایمیل استفاده کن. این گزینه میتواند چندین بار برای ارائه گواهیهای جایگزین برای SNI استفاده شود. port[port]- به جای درگاه پیشفرض ۲۵، روی درگاه مشخصشده port گوش بده.
proxy-v2- از پروتکل PROXYv2 پشتیبانی کن و نشانی مبدا دریافت شده از پراکسی را به طور مناسب بازنویسی نما.
received-auth- در سربرگهای “Received ،” گزارش بده که آیا نشست احراز هویت شده بود و توسط کدام کاربر محلی.
senders<users> [masquerade]- کاربر
احراز
هویت شده
را در جدول
نگاشت users
جستجو کن
تا
نشانیهای
ایمیلی را
که آن
کاربر
مجاز به
ارسال
ایمیل با
آنهاست
بیابی.
علاوه بر
این، اگر
گزینه
masqueradeارائه شود، سربرگ From بازنویسی میشود تا با فرستنده ارائهشده در نشست SMTP مطابقت داشته باشد. smtps[verify]- از SMTPS، به
طور
پیشفرض
روی درگاه
۴۶۵،
پشتیبانی
کن. با
گزینه
tlsناسازگار و مانعةالجمع است. با گزینهverify ،کلاینتها برای برقراری یک نشست SMTP باید یک گواهی معتبر نیز ارائه دهند. tagtag- کلاینتهایی که به این شنونده متصل میشوند با برچسب مشخصشده tag علامتگذاری میشوند.
tls- از STARTTLS، به
طور
پیشفرض
روی درگاه
۲۵،
پشتیبانی
کن. با
smtpsناسازگار و مانعةالجمع است. tls-require[verify]- مشابه
tls ،اما کلاینتها را مجبور میکند پیش از شروع تبادل SMTP یک اتصال امن برقرار کنند. با گزینهverify ،کلاینتها همچنین باید یک گواهی معتبر برای برقراری نشست SMTP ارائه دهند. protocolsprotostr- نسخههای پروتکل مورد استفاده برای نشستهای TLS را مشخص کن. برای قالب protostr به صفحه راهنمای tls_config_parse_protocols(3) مراجعه فرمایید.
cipherscipherstr- فهرست رمزنگارههای مجاز برای نشستهای TLS را مشخص کن. برای قالب cipherstr به صفحه راهنمای tls_config_set_ciphers(3) مراجعه فرمایید.
listen onsocket[options]- برای
اتصالات
ورودی SMTP روی
سوکت دامنه
یونیکس
/run/smtpd.sock گوش
بده. این
کار حتی در
صورت عدم
درج
دستورالعمل،
به طور
پیشفرض
انجام
میشود.
گزینههای options به شرح زیر هستند:
matchoptionsactionname- اگر حداقل
یک پاکت
ایمیل با
گزینههای
options یک
دستورالعمل
matchactionمطابقت داشته باشد، پیام ورودی را دریافت کن، یک رونوشت در هر پاکت تطبیقیافته قرار بده و پاکتها را به صورت اتمیک در صف ایمیل ذخیره کن تا بعداً توسط توزیعکننده مربوطه name (که باید از قبل با دستورالعملactionتعریف شده باشد) پردازش شوند.گزینههای تطبیق زیر پشتیبانی میشوند و همگی قابلیت منفی شدن (با استفاده از علامت !) دارند:
- [
!]for any - مشخص میکند که نشست میتواند هر مقصدی را مخاطب قرار دهد.
- [
!]for local - مشخص میکند که نشست میتواند هر دامنه محلی را مخاطب قرار دهد. این حالت پیشفرض است و میتوان آن را حذف کرد.
- [
!]for domain[regex] domain | <domain> - مشخص
میکند که
نشست
میتواند
رشته یا
جدول
فهرست domain
را مخاطب
قرار دهد.
کلیدواژه
regexدر صورتی لازم است که domain یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]for rcpt-to[regex] recipient | <recipient> - مشخص
میکند که
نشست
میتواند
رشته یا
جدول
فهرست
recipient را
مخاطب
قرار دهد.
کلیدواژه
regexدر صورتی لازم است که recipient یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]from any - مشخص میکند که نشست میتواند از هر مبدایی سرچشمه بگیرد.
- [
!]from auth - مشخص میکند که نشست میتواند از هر کاربر احراز هویت شدهای، بدون در نظر گرفتن نشانی IP مبدا، سرچشمه بگیرد.
- [
!]from auth[regex] user | <user> - مشخص
میکند که
نشست
میتواند
از کاربر
احراز
هویت شده
یا فهرست
کاربران
user ، بدون
در نظر
گرفتن
نشانی IP
مبدا،
سرچشمه
بگیرد.
کلیدواژه
regexدر صورتی لازم است که user یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]from local - مشخص میکند که نشست تنها میتواند از یک نشانی IP محلی یا از ثبتکننده محلی (local enqueuer) سرچشمه بگیرد. این حالت پیشفرض است و میتوان آن را حذف کرد.
- [
!]from mail-from[regex] sender | <sender> - مشخص
میکند که
نشست
میتواند
از
فرستنده
یا فهرست
فرستندگان
sender ، بدون
در نظر
گرفتن
نشانی IP
مبدا،
سرچشمه
بگیرد.
کلیدواژه
regexدر صورتی لازم است که sender یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]from rdns - مشخص میکند که نشست تنها میتواند از یک نشانی IP سرچشمه بگیرد که به یک reverse DNS تفکیک شود.
- [
!]from rdns[regex] hostname | <hostname> - مشخص
میکند که
نشست تنها
میتواند
از یک
نشانی IP
سرچشمه
بگیرد که
به یک reverse DNS
منطبق با
رشته یا
رشته
فهرست
hostname
تفکیک شود.
کلیدواژه
regexدر صورتی لازم است که hostname یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]from socket - مشخص میکند که نشست تنها میتواند از ثبتکننده محلی در صف سرچشمه بگیرد.
- [
!]from src[regex] address | <address> - مشخص
میکند که
نشست تنها
میتواند
از رشته یا
جدول
فهرست address
سرچشمه
بگیرد که
میتواند
یک نشانی
مشخص یا یک
زیرشبکه
در قالب
نشانهگذاری
CIDR باشد.
کلیدواژه
regexدر صورتی لازم است که address یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد.
علاوه بر این، گزینههای تبادل زیر نیز میتوانند تطبیق داده شوند:
- [
!]auth - تبادلاتی را که احراز هویت شدهاند تطبیق میدهد.
- [
!]auth[regex] username | <username> - تبادلاتی
را که برای
کاربر یا
فهرست
کاربران
username
احراز
هویت
شدهاند
تطبیق
میدهد.
کلیدواژه
regexدر صورتی لازم است که username یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]helo[regex] helo-name | <helo-name> - مشخص
میکند که HELO
/ EHLO نشست
باید با
رشته یا
جدول
فهرست
helo-name
مطابقت
داشته
باشد.
کلیدواژه
regexدر صورتی لازم است که helo-name یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]mail-from[regex] sender | <sender> - مشخص
میکند که MAIL
FROM تبادل
باید با
رشته یا
جدول
فهرست sender
مطابقت
داشته
باشد.
کلیدواژه
regexدر صورتی لازم است که sender یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]rcpt-to[regex] recipient | <recipient> - مشخص
میکند که RCPT
TO تبادل
باید با
رشته یا
جدول
فهرست
recipient
مطابقت
داشته
باشد.
کلیدواژه
regexدر صورتی لازم است که recipient یک عبارت باقاعده یا جدولی از عبارات باقاعده باشد. - [
!]tag[regex] tag - تبادلات
علامتگذاریشده
با برچسب
مشخصشده
tag را
تطبیق
میدهد.
کلیدواژه
regexدر صورتی لازم است که tag یک عبارت باقاعده باشد. - [
!]tls - مشخص میکند که تبادل باید در یک کانال TLS انجام گیرد.
- [
matchoptionsreject- پیام ورودی
را در طول
گفتگوی SMTP رد
کن. همان
گزینههای
options که
برای
دستورالعمل
matchactionپشتیبانی میشوند، در اینجا نیز معتبر هستند. mdawrappername command- دستور command را با بستهبندی تحویلدهنده ایمیل به نام name مرتبط کن. هنگامی که یک تحویل محلی یک بستهبندی را مشخص میکند، به جای آن command مرتبط با بستهبندی اجرا خواهد شد. این دستور میتواند حاوی مشخصکنندههای قالب باشد (نگاه کنید به FORMAT SPECIFIERS).
mtamax-deferrednumber- هنگامی که تحویل به یک میزبان معین به دلیل خطاهای موقت معلق میشود، حداکثر number پاکت را برای آن میزبان ذخیره (کش) کن تا به محض موفقیتآمیز بودن تحویل دیگری به آن میزبان، بتوان آنها را تحویل داد. مقدار پیشفرض ۱۰۰ است.
pkipkinamecertcertfile- پرونده
گواهی certfile
را با مدخل pki
به نام pkiname
مرتبط کن.
مدخل pki
پیکربندی
یک
جفتکلید
را تعریف
میکند که
میتوان در
قوانین
شنونده و
اقدامات
بازپخش به
آن ارجاع
داد.
میتوان با افزودن یک یا چند گواهی، از جمله گواهی مرجع صدور گواهی (CA)، به certfile یک زنجیره گواهی ایجاد کرد. ایجاد گواهیها در starttls(8) مستند شده است.
pkipkinamekeykeyfile- کلید واقع در keyfile را با مدخل pki به نام pkiname مرتبط کن.
pkipkinamedheparams- پارامترهای
DHE را برای
استفاده در
مجموعههای
رمزنگاری DHE
با مدخل pki به
نام pkiname
مشخص کن.
مقادیر
معتبر
پارامتر
عبارتند از
none,legacy, وauto. برایlegacy ،یک طول کلید ثابت ۱۰۲۴ بیتی استفاده میشود، در حالی که برایauto ،طول کلید به صورت خودکار تعیین میگردد. مقدار پیشفرضnoneاست که مجموعههای رمزنگاری DHE را غیرفعال میکند. procproc-name command- یک فرایند خارجی به نام proc-name را از دستور command مطابق با API smtpd-filters(7) ثبت کن. از چنین فرایندهایی میتوان برای به اشتراک گذاشتن یک نمونه واحد بین چندین فیلتر استفاده کرد. اگر command با یک اسلش آغاز شود با یک مسیر مطلق اجرا میشود، در غیر این صورت از “/usr/lib/smtpd/opensmtpd” اجرا خواهد شد.
queuecompression- پروندههای صف را در قالبی فشرده ذخیره کن. این کار برای صرفهجویی در فضای دیسک مفید است.
queueencryption[key]- پروندههای
صف را با
EVP_aes_256_gcm(3)
رمزگذاری
کن. اگر هیچ
کلیدی key
مشخص نشده
باشد، با
getpass(3)
خوانده
میشود. اگر
به جای یک
key ، رشته
stdinیا یک خط تیره منفرد (‘-’) داده شود، کلید از ورودی استاندارد خوانده میشود. queuettldelay- زمان
انقضای
پیشفرض را
برای
پیامهایی
که به طور
موقت
غیرقابل
تحویل
هستند
تنظیم کن،
که به صورت
یک عدد صحیح
مثبت دهدهی
به همراه یک
واحد
s,m,h, یاdداده میشود. مقدار پیشفرض چهار روز (4d) است. smtpcipherscontrol- رشته کنترلی control را برای SSL_CTX_set_cipher_list(3) تنظیم کن. مقدار پیشفرض "HIGH:!aNULL:!MD5" است.
smtp limitmax-mailscount- تعداد پیامها را برای هر نشست به count محدود کن. مقدار پیشفرض ۱۰۰ است.
smtp limitmax-rcptcount- تعداد گیرندگان را برای هر تبادل به count محدود کن. مقدار پیشفرض ۱۰۰۰ است.
smtpmax-message-sizesize- پیامهای بزرگتر از size را رد کن، که به صورت یک عدد مثبت از بایتها یا به عنوان رشتهای که با scan_scaled(3) تجزیه میشود مشخص میگردد. مقدار پیشفرض "35M" است.
smtpsub-addr-delimcharacter- هنگام
تفکیک بخش
محلی نشانی
ایمیل
محلی،
کاراکتر
اسکی character و
تمام
کاراکترهای
پس از آن را
نادیده
بگیر. مقدار
پیشفرض
‘
+’ است. srskey[backup] secret- کلید مخفی
مورد
استفاده
برای SRS (طرح
بازنویسی
فرستنده) را
تنظیم کن.
گزینه
backupرا میتوان برای تنظیم یک کلید مخفی جهت استفاده به عنوان جایگزین اضطراری برای SRS مشخص کرد؛ از این قابلیت میتوان برای پیادهسازی چرخش کلیدهای SRS استفاده نمود. srsttldelay- مدتزمان اعتبار (TTL) را برای پاکتهای SRS تنظیم کن. پس از این تاخیر، پاسخ بازگشتی (bounce) به نشانی SRS دور انداخته میشود تا خطرات نشانیهای جعلشده کاهش یابد. مقدار پیشفرض چهار روز (4d) است.
tablename [type:]pathname- جدولها
اطلاعات
پیکربندی
اضافی را
برای
smtpd(8) در
قالب
فهرستها
یا
نگاشتهای
کلید-مقدار
فراهم
میکنند.
قالب
مدخلها
بستگی به
کاربرد
جدول دارد.
برای
مستندات
جامع به
table(5)
مراجعه
فرمایید.
هر جدول با یک نام دلخواه و یکتا name مشخص میشود.
اگر نوع type برابر
dbباشد، اطلاعات در پروندهای که با makemap(8) ساخته شده ذخیره میشود؛ اگرfileیا حذف شده باشد، اطلاعات در یک پرونده متن ساده با قالبی که در table(5) شرح داده شده ذخیره میگردد. مسیر pathname به پرونده باید مطلق باشد. tablename {value [, ...]}- به جای استفاده از یک پرونده جداگانه، یک جدول فهرست حاوی مقادیر ایستای values دادهشده تعریف کن. جدول باید حداقل شامل یک مقدار باشد و میتواند چندین مقدار را به صورت فهرستی جداشده با کاما (فاصله اختیاری است) اعلان کند.
tablename {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 <table> | نشست دارای DNS معکوس در جدول است |
| src <table> | نشانی مبدا در جدول موجود است |
| helo <table> | نام helo در جدول موجود است |
| auth | نشست احراز هویت شده است |
| auth <table> | نام کاربری نشست در جدول موجود است |
| mail-from <table> | نشانی فرستنده در جدول موجود است |
| rcpt-to <table> | نشانی گیرنده در جدول موجود است |
این شرایط را میتوان با افزودن علامت تعجب به ابتدای آنها منفی کرد:
| !fcrdns | سامانه DNS معکوس تاییدشده مستقیم نامعتبر است |
هر شرطی که از یک جدول استفاده میکند میتواند با افزودن کلیدواژه regex به ابتدای نام جدول مشخص کند که جدول حاوی عبارات باقاعده است.
| helo regex <table> | نام 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 <aliases> action "outbound" relay host smtp+tls://bob@smtp.example.com \ auth <secrets> 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 <aliases> 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 <domain> -s <selector> \ -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 <aliases> 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 <aliases>
action "outbound" relay
match for local action "local_mail"
match for any action "outbound"
match !from src <other-relays> 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 ظاهر شد.
| August 26, 2025 | Linux 6.12.107+deb13-amd64 |