STUNNEL(8) stunnel TLS Proxy STUNNEL(8)

stunnel - پروکسی بارگذاری TLS و متعادل‌کننده بار

  • Unix: stunnel [FILE] | -fd N | -help | -version | -sockets | -options
  • WIN32: stunnel [ [ -install | -uninstall | -start | -stop | -reload | -reopen | -exit ] [-quiet] [FILE] ] | -help | -version | -sockets | -options

برنامه stunnel به گونه‌ای طراحی شده است که به عنوان یک پوشش (wrapper) رمزنگاری TLS میان کلاینت‌های دوردست و سرورهای محلی (قابل اجرا توسط inetd) یا سرورهای راه دور عمل کند. ایده اصلی این است که در صورت داشتن دیمن‌های بدون پشتیبانی از TLS روی سیستم خود، می‌توانید به سادگی آنها را به شکلی تنظیم کنید که از طریق کانال‌های امن TLS با کلاینت‌ها ارتباط برقرار نمایند.

از stunnel می‌توان برای افزودن قابلیت TLS به دیمن‌های متداول Inetd مانند سرورهای POP-2، POP-3 و IMAP، به دیمن‌های مستقل مانند NNTP، SMTP و HTTP، و نیز در تونل‌سازی PPP روی سوکت‌های شبکه بدون نیاز به تغییر در کد منبع استفاده کرد.

این محصول شامل نرم‌افزار رمزنگاری نوشته‌شده توسط Eric Young است (eay@cryptsoft.com)

•
FILE

استفاده از فایل پیکربندی مشخص‌شده

•
-fd N (فقط یونیکس)

خواندن فایل پیکربندی از توصیف‌گر فایل (file descriptor) مشخص‌شده

•
-help

چاپ منوی راهنمای stunnel

•
-version

چاپ نسخه stunnel و پیش‌فرض‌های زمان کامپایل

•
-sockets

چاپ گزینه‌های پیش‌فرض سوکت

•
-options

چاپ گزینه‌های پشتیبانی‌شده‌ی TLS

•
-install (فقط ویندوز NT و جدیدتر)

نصب سرویس NT

•
-uninstall (فقط ویندوز NT و جدیدتر)

حذف سرویس NT

•
-start (فقط ویندوز NT و جدیدتر)

راه‌اندازی سرویس NT

•
-stop (فقط ویندوز NT و جدیدتر)

توقف سرویس NT

•
-reload (فقط ویندوز NT و جدیدتر)

بارگذاری مجدد فایل پیکربندی سرویس NT در حال اجرا

•
-reopen (فقط ویندوز NT و جدیدتر)

بازگشایی مجدد فایل گزارش سرویس NT در حال اجرا

•
-exit (فقط Win32)

خروج از نسخه در حال اجرای stunnel

•
-quiet (فقط Win32)

عدم نمایش هرگونه کادر پیام (message box)

هر خط از فایل پیکربندی می‌تواند یکی از موارد زیر باشد:

  • یک خط خالی (نادیده گرفته می‌شود).
  • یک کامنت که با `;' آغاز می‌شود (نادیده گرفته می‌شود).
  • یک جفت `option_name = option_value'.
  • عبارت `[service_name]' که آغازگر تعریف یک سرویس است.

پارامتر آدرس یک گزینه می‌تواند یکی از موارد زیر باشد:

  • یک شماره پورت.
  • یک جفت آدرس IP (IPv4، IPv6 یا نام دامنه) و شماره پورت جداشده با دو‌نقطه.
  • مسیر یک سوکت یونیکس (فقط یونیکس).

•
chroot = DIRECTORY (فقط یونیکس)

دایرکتوری برای chroot کردن پردازه stunnel

گزینه chroot پردازه stunnel را درون یک محیط ایزوله (chroot jail) نگه می‌دارد. گزینه‌های CApath، CRLpath، pid و exec درون این محیط قرار می‌گیرند و مسیرهای آنها باید نسبت به دایرکتوری مشخص‌شده با chroot باشند.

چندین تابع سیستم‌عامل نیز به قرار گرفتن فایل‌هایشان در محیط ایزوله chroot نیاز دارند، به عنوان مثال:

  • حل‌کننده با تأخیر نام‌ها (Delayed resolver) معمولاً به /etc/nsswitch.conf و /etc/resolv.conf نیاز دارد.
  • زمان محلی در فایل‌های گزارش به /etc/timezone نیاز دارد.
  • برخی عملکردهای دیگر ممکن است به دستگاه‌ها نیاز داشته باشند، مانند /dev/zero یا /dev/null.
•
compression = deflate | zlib | zstd | brotli

انتخاب الگوریتم فشرده‌سازی داده‌ها

پیش‌فرض: بدون فشرده‌سازی (no compression)

فشرده‌سازی داده‌ها فقط برای TLS 1.2 و قبل از آن در دسترس است. در صورت کامپایل با OpenSSL 1.1.0 و جدیدتر، نیازمند کاهش securityLevel به 1 است.

الگوریتم‌های zlib، zstd و brotli در پیکربندی پیش‌فرض OpenSSL غیرفعال هستند.

الگوریتم‌های zstd و brotli در OpenSSL 3.2 اضافه شدند.

فشرده‌سازی داده‌ها در برنامه‌هایی که به مهاجم اجازه تزریق متن آشکار انتخابی (chosen plaintext) را می‌دهند، یک ریسک امنیتی به شمار می‌رود.

روش Deflate روش استاندارد فشرده‌سازی است که در RFC 1951 توصیف شده است.

هشدار: فشرده‌سازی TLS می‌تواند حملات بازیابی متن آشکار (مانند CRIME) را در شرایطی که داده‌های تحت کنترل مهاجم به همراه اطلاعات محرمانه فشرده می‌شوند، امکان‌پذیر سازد.

•
debug = [FACILITY.]LEVEL

سطح گزارش‌گیری و اشکال‌زدایی

مقدار سطح یکی از نام‌ها یا شماره‌های سطوح syslog است: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). تمامی گزارش‌های سطح مشخص‌شده و کلیه سطوح با مقدار عددی کمتر از آن نمایش داده خواهند شد.

سطح debug = debug (یا معادل آن <debug = 7>) پرجزئیات‌ترین خروجی گزارش را تولید می‌کند. این سطح گزارش‌گیری صرفاً برای فهم توسعه‌دهندگان stunnel طراحی شده است و نه کاربران عادی. لطفاً تنها زمانی از سطح debug استفاده کنید که توسط یک توسعه‌دهنده stunnel درخواست شده باشد، یا زمانی که قصد دارید سردرگم شوید.

سطح پیش‌فرض گزارش‌گیری notice (5) است.

از تسهیلات (facility) بخش `daemon' در syslog استفاده خواهد شد مگر اینکه نام تسهیلاتی تعیین گردد. (تسهیلات در Win32 پشتیبانی نمی‌شوند.)

بزرگی و کوچکی حروف برای هر دو مقدار تسهیلات و سطوح نادیده گرفته می‌شود.

•
EGD = EGD_PATH (فقط یونیکس)

مسیر سوکت دیمن جمع‌آوری آنتروپی (Entropy Gathering Daemon)

سوکت Entropy Gathering Daemon برای تغذیه تولیدکننده اعداد تصادفی OpenSSL استفاده می‌شود.

•
engine = auto | ENGINE_ID

انتخاب موتور رمزنگاری سخت‌افزاری یا نرم‌افزاری

پیش‌فرض: رمزنگاری صرفاً نرم‌افزاری

برای مشاهده پیکربندی engine جهت استفاده از گواهی و کلید خصوصی متناظر از یک دستگاه رمزنگاری، بخش مثال‌ها را ببینید.

•
engineCtrl = COMMAND[:PARAMETER]

کنترل موتور سخت‌افزاری

•
engineDefault = TASK_LIST

تنظیم وظایف OpenSSL واگذارشده به موتور جاری

این پارامتر یک فهرست جداشده با کاما از وظایفی را که باید به موتور جاری واگذار شوند مشخص می‌کند.

در صورت پشتیبانی موتور، وظایف زیر ممکن است در دسترس باشند: ALL، RSA، DSA، ECDH، ECDSA، DH، RAND، CIPHERS، DIGESTS، PKEY، PKEY_CRYPTO، PKEY_ASN1.

•
fips = yes | no

فعال یا غیرفعال کردن حالت FIPS 140-2.

این گزینه به شما امکان می‌دهد در صورتی که stunnel با پشتیبانی از FIPS 140-2 کامپایل شده باشد، از ورود به حالت FIPS صرف‌نظر کنید.

پیش‌فرض: no (از نسخه 5.00)

•
foreground = yes | quiet | no (فقط یونیکس)

حالت پیش‌زمینه

ماندن در پیش‌زمینه (انشعاب یا fork نکند).

با پارامتر yes علاوه بر مقصدهای مشخص‌شده با syslog و output، لاگ‌ها را در stderr نیز ثبت می‌کند.

پیش‌فرض: background در حالت دیمن

•
iconActive = ICON_FILE (فقط واسط گرافیکی)

آیکون واسط گرافیکی برای نمایش در هنگام وجود اتصالات برقرارشده

در پلتفرم ویندوز این پارامتر باید یک فایل .ico حاوی یک تصویر ۱۶ در ۱۶ پیکسل باشد.

•
iconError = ICON_FILE (فقط واسط گرافیکی)

آیکون واسط گرافیکی برای نمایش در زمانی که هیچ پیکربندی معتبری بارگذاری نشده باشد

در پلتفرم ویندوز این پارامتر باید یک فایل .ico حاوی یک تصویر ۱۶ در ۱۶ پیکسل باشد.

•
iconIdle = ICON_FILE (فقط واسط گرافیکی)

آیکون واسط گرافیکی برای نمایش در زمانی که هیچ اتصال برقرارشده‌ای وجود ندارد

در پلتفرم ویندوز این پارامتر باید یک فایل .ico حاوی یک تصویر ۱۶ در ۱۶ پیکسل باشد.

•
log = append | overwrite

نحوه مدیریت فایل گزارش

این گزینه به شما اجازه می‌دهد تعیین کنید که آیا فایل گزارش (مشخص‌شده با گزینه output) هنگام باز شدن یا بازگشایی مجدد، افزوده (append) شود یا رونویسی (overwrite) گردد.

پیش‌فرض: append

•
output = FILE

افزودن پیام‌های گزارش به یک فایل

از دستگاه /dev/stdout می‌توان برای ارسال پیام‌های لاگ به خروجی استاندارد استفاده کرد (برای مثال جهت ثبت آنها با ابزار splogger مربوط به daemontools).

•
pid = FILE (فقط یونیکس)

محل فایل شناسه پردازه (pid)

اگر آرگومان خالی باشد، هیچ فایل pid ساخته نخواهد شد.

مسیر pid در صورت تعیین، نسبت به دایرکتوری chroot سنجیده می‌شود.

•
provider = PROVIDER_ID

شناسه ارائه‌دهنده (provider) مورد استفاده را مشخص می‌کند. PROVIDER_ID یک شناسه یکتا است که به یک ارائه‌دهنده خدمات رمزنگاری خاص اشاره دارد.

این گزینه نیازمند OpenSSL 3.0 یا جدیدتر است.

•
providerParameter = PROVIDER_ID:PARAMETER=VALUE

یک پارامتر خاص را برای ارائه‌دهنده داده‌شده تنظیم می‌کند. PROVIDER_ID ارائه‌دهنده را مشخص کرده، PARAMETER نام پارامتر و VALUE مقدار آن است. این گزینه امکان سفارشی‌سازی پیکربندی ارائه‌دهنده خدمات رمزنگاری انتخاب‌شده را فراهم می‌کند.

این گزینه نیازمند OpenSSL 3.5 یا جدیدتر است.

•
RNDbytes = BYTES

تعداد بایت‌های خوانده‌شده از فایل‌های سید تصادفی

•
RNDfile = FILE

مسیر فایل حاوی داده‌های سید تصادفی

کتابخانه OpenSSL ابتدا از داده‌های این فایل برای دانه‌بندی (seed) تولیدکننده اعداد تصادفی استفاده خواهد کرد.

•
RNDoverwrite = yes | no

رونویسی فایل‌های سید تصادفی با داده‌های تصادفی جدید

پیش‌فرض: yes

•
service = SERVICE (فقط یونیکس)

نام سرویس stunnel

نام سرویس مشخص‌شده برای syslog و به عنوان نام سرویس در حالت inetd برای TCP Wrappers استفاده می‌شود. اگرچه این گزینه از نظر فنی در بخش‌های سرویس نیز قابل تعیین است، اما تنها در گزینه‌های عمومی سودمند است.

پیش‌فرض: stunnel

•
setEnv = VAR_NAME=VALUE

تغییر یا افزودن یک متغیر محیطی برای پردازه‌های فرزند. اگر VAR_NAME از قبل وجود داشته باشد، مقدار آن به‌روز خواهد شد؛ در غیر این صورت، یک متغیر جدید ایجاد می‌شود. این تغییر فقط بر پردازه‌های فرزند ایجادشده اعمال می‌شود و بر محیط فعلی تأثیری ندارد.

•
syslog = yes | no (فقط یونیکس)

فعال‌سازی ثبت گزارش از طریق syslog

پیش‌فرض: yes

•
taskbar = yes | no (فقط WIN32)

فعال‌سازی آیکون نوار وظیفه (taskbar)

پیش‌فرض: yes

هر بخش پیکربندی با نام یک سرویس درون براکت‌های قلاب‌شکل آغاز می‌شود. نام سرویس برای کنترل دسترسی libwrap (همان TCP Wrappers) استفاده می‌شود و به شما امکان می‌دهد سرویس‌های stunnel را در فایل‌های گزارش خود تشخیص دهید.

توجه داشته باشید که اگر می‌خواهید stunnel را در حالت inetd اجرا کنید (که در آن یک سوکت شبکه توسط سروری مانند inetd، xinetd یا tcpserver در اختیار آن قرار می‌گیرد)، باید بخش حالت INETD (INETD MODE) را در ادامه مطالعه نمایید.

•
accept = [HOST:]PORT

پذیرش اتصالات روی نشانی مشخص‌شده

اگر هیچ میزبانی مشخص نشود، به طور پیش‌فرض روی تمامی نشانی‌های IPv4 میزبان محلی گوش می‌دهد.

برای گوش دادن روی تمامی نشانی‌های IPv6 از دستور زیر استفاده کنید:

accept = :::PORT
•
CAengine = ENGINE-SPECIFIC_CA_CERTIFICATE_IDENTIFIER

بارگذاری یک گواهی CA معتبر از یک موتور رمزنگاری (engine)

گواهی‌های CA بارگذاری‌شده به همراه گزینه‌های verifyChain و verifyPeer استفاده خواهند شد.

استفاده از چندین گزینه CAengine در یک بخش سرویس منفرد مجاز است.

موتورهای پشتیبانی‌شده فعلی: pkcs11، cng.

•
CApath = CA_DIRECTORY

بارگذاری گواهی‌های معتبر CA از یک دایرکتوری

گواهی‌های CA بارگذاری‌شده به همراه گزینه‌های verifyChain و verifyPeer استفاده خواهند شد. توجه داشته باشید که گواهی‌های موجود در این پوشه باید با فرمت XXXXXXXX.0 نام‌گذاری شوند که در آن XXXXXXXX مقدار هش از موضوع (subject) کدگذاری‌شده DER گواهی است.

از این پارامتر می‌توان برای ارائه گواهی CA ریشه مورد نیاز جهت اعتبارسنجی منگنه کردن OCSP (OCSP stapling) در حالت سرور نیز استفاده کرد.

الگوریتم هش در OpenSSL 1.0.0 تغییر یافته است. هنگام ارتقا از OpenSSL 0.x.x به OpenSSL 1.x.x یا جدیدتر، اجرای دستور c_rehash روی این دایرکتوری الزامی است.

مسیر CApath در صورت تعیین، نسبت به دایرکتوری chroot محاسبه می‌شود.

•
CAfile = CA_FILE

بارگذاری گواهی‌های معتبر CA از یک فایل

گواهی‌های CA بارگذاری‌شده به همراه گزینه‌های verifyChain و verifyPeer استفاده خواهند شد.

از این پارامتر می‌توان برای ارائه گواهی CA ریشه مورد نیاز جهت اعتبارسنجی منگنه کردن OCSP در حالت سرور نیز استفاده کرد.

•
CAstore = URI_CA

بارگذاری گواهی‌های معتبر CA از منبعی که با یک URI مشخص شده است

این گزینه امکان بارگذاری گواهی‌های CA را از منابع خارجی پشتیبانی‌شده توسط چارچوب OSSL_STORE، مانند ماژول PKCS#11 (مثلاً توکن سخت‌افزاری)، مخزن گواهی سیستم، یا یک منبع راه دور فراهم می‌سازد.

این گزینه را می‌توان به صورت مستقل از CAfile و CAdir به کار برد، و به طور مشابه گواهی‌های مورد استفاده verifyChain یا verifyPeer و نیز اعتبارسنجی منگنه کردن OCSP در حالت سرور را فراهم می‌کند.

این گزینه نیازمند OpenSSL 3.0 یا جدیدتر است.

•
cert = CERT_FILE | URI

نام فایل زنجیره گواهی (certificate chain)

این پارامتر فایلی را مشخص می‌کند که حاوی گواهی‌های مورد استفاده stunnel برای احراز هویت خود در برابر کلاینت یا سرور راه دور است. این فایل باید شامل کل زنجیره گواهی باشد که از گواهی واقعی سرور/کلاینت آغاز شده و به گواهی خودامضاشده‌ی CA ریشه ختم می‌شود. این فایل باید با فرمت PEM یا P12 باشد.

وجود زنجیره گواهی در حالت سرور الزامی و در حالت کلاینت اختیاری است.

گزینه cert را می‌توان چندین بار تعیین کرد. اولین گواهی ارائه‌شده به عنوان گواهی سرور یا کلاینت استفاده می‌شود، در حالی که گواهی‌های بعدی به عنوان عناصر میانی زنجیره در نظر گرفته می‌شوند. این قابلیت نیازمند OpenSSL نسخه 1.0.2 یا جدیدتر است.

در صورت فعال بودن یک موتور یا ارائه‌دهنده سخت‌افزاری، از این پارامتر به عنوان شناسه گواهی (PKCS#11 URI) نیز استفاده می‌شود.

نکته: استفاده از provider نیازمند OpenSSL 3.0 یا جدیدتر است

•
checkEmail = EMAIL

اعتبارسنجی نشانی ایمیل در موضوع گواهی طرف مقابل (موجودیت انتهایی یا برگ)

در صورتی که بررسی موضوع گواهی تعیین نشده باشد، یا نشانی ایمیل گواهی طرف مقابل با هر یک از نشانی‌های مشخص‌شده با checkEmail مطابقت داشته باشد، گواهی‌ها پذیرفته می‌شوند.

تعیین چندین گزینه checkEmail در یک بخش سرویس مجاز است.

این گزینه نیازمند OpenSSL 1.0.2 یا جدیدتر است.

•
checkHost = HOST

اعتبارسنجی نام میزبان در موضوع گواهی طرف مقابل (موجودیت انتهایی یا برگ)

در صورتی که بررسی موضوع گواهی تعیین نشده باشد، یا نام میزبان گواهی طرف مقابل با هر یک از نام‌های میزبان مشخص‌شده با checkHost مطابقت داشته باشد، گواهی‌ها پذیرفته می‌شوند.

تعیین چندین گزینه checkHost در یک بخش سرویس مجاز است.

این گزینه نیازمند OpenSSL 1.0.2 یا جدیدتر است.

•
checkIP = IP

اعتبارسنجی نشانی IP در موضوع گواهی طرف مقابل (موجودیت انتهایی یا برگ)

در صورتی که بررسی موضوع گواهی تعیین نشده باشد، یا نشانی IP گواهی طرف مقابل با هر یک از نشانی‌های IP مشخص‌شده با checkIP مطابقت داشته باشد، گواهی‌ها پذیرفته می‌شوند.

تعیین چندین گزینه checkIP در یک بخش سرویس مجاز است.

این گزینه نیازمند OpenSSL 1.0.2 یا جدیدتر است.

•
ciphers = CIPHER_LIST

انتخاب رمزهای مجاز TLS (نسخه TLSv1.2 و قبل از آن)

این گزینه تأثیری بر مجموعه‌رمزهای (ciphersuites) نسخه TLSv1.3 ندارد.

فهرستی جداشده با دو‌نقطه از رمزهای مجاز در اتصال TLS، به عنوان مثال DES-CBC3-SHA:IDEA-CBC-MD5.

•
ciphersuites = CIPHERSUITES_LIST

انتخاب مجموعه‌رمزهای مجاز TLSv1.3

فهرستی جداشده با دو‌نقطه از نام مجموعه‌رمزهای TLSv1.3 به ترتیب اولویت.

گزینه ciphersuites در صورت کامپایل با OpenSSL 3.0 یا جدیدتر، رمزهای ناشناخته را نادیده می‌گیرد.

این گزینه نیازمند OpenSSL 1.1.1 یا جدیدتر است.

پیش‌فرض: TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256

•
client = yes | no

حالت کلاینت (سرویس راه دور از TLS استفاده می‌کند)

پیش‌فرض: no (حالت سرور)

•
config = COMMAND[:PARAMETER]

دستور پیکربندی OpenSSL

دستور پیکربندی OpenSSL با پارامتر مشخص‌شده اجرا می‌شود. این امر اجازه می‌دهد هر دستور پیکربندی از درون فایل پیکربندی stunnel فراخوانی شود. دستورات پشتیبانی‌شده در صفحه راهنمای SSL_CONF_cmd(3ssl) شرح داده شده‌اند.

می‌توان از چندین خط config برای تعیین چندین دستور پیکربندی استفاده کرد.

به جای فعال کردن config = Curves:list_curves، از گزینه curves برای پشتیبانی از منحنی‌های بیضوی استفاده کنید.

این گزینه نیازمند OpenSSL 1.0.2 یا جدیدتر است.

•
connect = [HOST:]PORT

اتصال به یک نشانی راه دور

اگر هیچ میزبانی مشخص نشود، میزبان به طور پیش‌فرض localhost خواهد بود.

تعیین چندین گزینه connect در یک بخش سرویس مجاز است. اگر میزبان به چندین نشانی حل شود و/یا چندین گزینه connect تعیین شده باشد، نشانی راه دور با استفاده از الگوریتم نوبت‌گردشی (round-robin) انتخاب می‌شود.

•
CRLpath = DIRECTORY

دایرکتوری فهرست‌های ابطال گواهی (CRL)

این پوشه‌ای است که stunnel هنگام استفاده از گزینه‌های verifyChain و verifyPeer و با CRLcheckChain برای بررسی کامل زنجیره CRL، در آن به دنبال CRLها می‌گردد. توجه داشته باشید که CRLهای موجود در این پوشه باید با فرمت XXXXXXXX.r0 نام‌گذاری شوند که XXXXXXXX مقدار هش از CRL است.

الگوریتم هش در OpenSSL 1.0.0 تغییر کرده است. هنگام ارتقا از OpenSSL 0.x.x به OpenSSL 1.x.x اجرای c_rehash روی این دایرکتوری ضروری است.

مسیر CRLpath در صورت تعیین، نسبت به دایرکتوری chroot سنجیده می‌شود.

•
CRLfile = CRL_FILE

فایل فهرست‌های ابطال گواهی (CRL)

این فایل شامل چندین CRL است که به همراه گزینه‌های verifyChain و verifyPeer، و با CRLcheckChain برای بررسی کامل زنجیره CRL استفاده می‌شود.

•
CRLcheckChain = yes | no

بررسی CRLها برای کل زنجیره گواهی طرف مقابل

این گزینه نیازمند verifyChain = yes و یکی از دو گزینه CRLfile یا CRLpath است.

به طور پیش‌فرض، بررسی CRL تنها برای گواهی انتهایی (برگ) طرف مقابل انجام می‌شود. با تنظیم CRLcheckChain = yes، بررسی CRL علاوه بر آن برای تمامی گواهی‌های موجود در زنجیره صادرکننده تأییدشده نیز صورت می‌پذیرد. حالت زنجیره کامل (Full-chain) در صورت مفقود بودن، منقضی شدن یا نامعتبر بودن CRL صادرکننده، ارتباط را قطع می‌کند (fail closed).

برای زنجیره‌ای مانند Root CA -> Intermediate CA -> Leaf، یک CRL ارائه‌شده توسط میانی برای گواهی برگ، و یک CRL ارائه‌شده توسط ریشه برای گواهی میانی مورد نیاز است.

پیش‌فرض: no

•
curves = list

منحنی‌های ECDH جداشده با `:'

نکته: این گزینه تنها برای سوکت‌های حالت سرور پشتیبانی می‌شود.

برای نسخه‌های OpenSSL قدیمی‌تر از 1.1.1 تنها نام یک منحنی مجاز است.

برای دریافت فهرست منحنی‌های پشتیبانی‌شده از دستور زیر استفاده کنید:

openssl ecparam -list_curves

پیش‌فرض:

X25519:P-256:X448:P-521:P-384 (OpenSSL 1.1.1 یا جدیدتر)
prime256v1 (OpenSSL قدیمی‌تر از 1.1.1)
•
logId = TYPE

نوع شناسه اتصال

این شناسه به شما امکان می‌دهد ورودی‌های گزارش تولیدشده برای هر یک از اتصالات را از یکدیگر تشخیص دهید.

انواع پشتیبانی‌شده فعلی:

•
sequential

شناسه عددی ترتیبی تنها درون یک نمونه منفرد از stunnel یکتا است، اما بسیار فشرده است. این نوع برای تحلیل دستی لاگ‌ها بسیار مناسب است.

•
unique

این شناسه حرفی-عددی به صورت سراسری یکتا است، اما از شماره ترتیبی طولانی‌تر است. این نوع برای تحلیل خودکار لاگ‌ها بیشترین کاربرد را دارد.

•
thread

شناسه ریسه (thread) سیستم‌عامل نه یکتا است (حتی درون یک نمونه منفرد stunnel) و نه کوتاه. این گزینه برای اشکال‌زدایی مشکلات نرم‌افزاری یا خطاهای پیکربندی بیشترین فایده را دارد.

•
process

شناسه پردازه (PID) سیستم‌عامل ممکن است در حالت inetd مفید باشد.

پیش‌فرض: sequential

•
debug = LEVEL

سطح گزارش‌گیری و اشکال‌زدایی

سطح یکی از نام‌ها یا شماره‌های سطوح syslog است: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). تمامی گزارش‌های سطح مشخص‌شده و کلیه سطوح با مقدار عددی کمتر از آن نمایش داده خواهند شد. پیش‌فرض برابر notice (5) است.

اگرچه سطح debug = debug یا debug = 7 پرجزئیات‌ترین خروجی را تولید می‌کند، اما تنها برای استفاده توسعه‌دهندگان stunnel در نظر گرفته شده است. لطفاً فقط در صورتی از این مقدار استفاده کنید که توسعه‌دهنده باشید، یا قصد داشته باشید گزارش‌های خود را برای پشتیبانی فنی ما ارسال نمایید. در غیر این صورت، لاگ‌های تولیدشده قطعاً گیج‌کننده خواهند بود.

•
delay = yes | no

به تأخیر انداختن جستجوی DNS برای گزینه connect

این گزینه برای DNS پویا (Dynamic DNS)، یا زمانی که DNS هنگام راه‌اندازی stunnel در دسترس نیست (VPN کاربران سیار، پیکربندی‌های dial-up) بسیار سودمند است.

حالت جستجوگر با تأخیر (Delayed resolver) به طور خودکار زمانی فعال می‌شود که stunnel هنگام راه‌اندازی در حل نام هر یک از مقصدهای connect برای یک سرویس با شکست روبرو شود.

حالت جستجوگر با تأخیر باعث اعمال اجباری failover = prio می‌شود.

پیش‌فرض: no

•
engineId = ENGINE_ID

انتخاب شناسه موتور برای این سرویس

•
engineNum = ENGINE_NUMBER

انتخاب شماره موتور برای این سرویس

شماره‌گذاری موتورها از 1 آغاز می‌شود.

•
exec = EXECUTABLE_PATH

اجرای یک برنامه محلی از نوع inetd

مسیر exec در صورت تعیین، نسبت به دایرکتوری chroot سنجیده می‌شود.

متغیرهای محیطی زیر روی پلتفرم‌های یونیکس تنظیم می‌شوند: REMOTE_HOST، REMOTE_PORT، SSL_CLIENT_DN، SSL_CLIENT_I_DN.

•
execArgs = $0 $1 $2 ...

آرگومان‌های exec شامل نام برنامه ($0)

کوتیشن‌گذاری در حال حاضر پشتیبانی نمی‌شود. آرگومان‌ها با مقدار دلخواهی از فاصله خالی از یکدیگر تفکیک می‌شوند.

•
failover = rr | prio

راهبرد بازگشت از خرابی (Failover) برای چندین مقصد "connect".

•
rr

نوبت‌گردشی (round robin) - توزیع بار عادلانه

•
prio

اولویت - استفاده از ترتیبی که در فایل پیکربندی مشخص شده است

پیش‌فرض: prio

•
ident = USERNAME

استفاده از بررسی نام کاربری IDENT (RFC 1413)

•
include = DIRECTORY

شامل کردن تمامی بخش‌های فایل پیکربندی موجود در DIRECTORY

فایل‌ها به ترتیب صعودی الفبایی نام‌هایشان وارد می‌شوند. قاعده نام‌گذاری پیشنهادی برای فایل‌ها به این صورت است:

برای گزینه‌های عمومی:

00-global.conf

برای گزینه‌های محلی سطح سرویس:

01-service.conf
02-service.conf
•
key = KEY_FILE | URI

کلید خصوصی برای گواهی مشخص‌شده با گزینه cert

برای احراز هویت مالک گواهی به یک کلید خصوصی نیاز است. از آنجا که این فایل باید محرمانه باقی بماند، فقط باید توسط مالکش قابل خواندن باشد. روی سیستم‌های یونیکس می‌توانید از دستور زیر استفاده کنید:

chmod 600 keyfile

در صورت فعال بودن یک موتور رمزنگاری یا ارائه‌دهنده سخت‌افزاری، از این پارامتر به عنوان شناسه کلید خصوصی (PKCS#11 URI) نیز استفاده می‌شود.

نکته: ارائه‌دهنده (provider) نیازمند OpenSSL 3.0 یا جدیدتر است

پیش‌فرض: مقدار گزینه cert

•
libwrap = yes | no

فعال یا غیرفعال کردن استفاده از /etc/hosts.allow و /etc/hosts.deny.

پیش‌فرض: no (از نسخه 5.00)

•
local = HOST

به طور پیش‌فرض، نشانی IP رابط خروجی به عنوان مبدأ برای اتصالات راه دور استفاده می‌شود. از این گزینه برای مقیدسازی (bind) یک نشانی IP محلی ایستا به جای آن استفاده کنید.

•
OCSP = URL

انتخاب پاسخ‌دهنده OCSP برای اعتبارسنجی گواهی طرف مقابل (موجودیت انتهایی یا برگ)

•
OCSPaia = yes | no

اعتبارسنجی گواهی‌ها با پاسخ‌دهندگان OCSP مندرج در AIA آنها

این گزینه به stunnel امکان می‌دهد گواهی‌ها را با فهرستی از نشانی‌های اینترنتی پاسخ‌دهنده OCSP که از افزونه AIA (دسترسی به اطلاعات مرجع یا Authority Information Access) آنها استخراج شده است، اعتبارسنجی کند.

•
OCSPflag = OCSP_FLAG

مشخص کردن پرچم پاسخ‌دهنده OCSP

می‌توان از چندین OCSPflag برای تعیین چندین پرچم استفاده کرد.

پرچم‌های پشتیبانی‌شده در حال حاضر: NOCERTS، NOINTERN، NOSIGS، NOCHAIN، NOVERIFY، NOEXPLICIT، NOCASIGN، NODELEGATED، NOCHECKS، TRUSTOTHER، RESPID_KEY، NOTIME

•
OCSPnonce = yes | no

ارسال و اعتبارسنجی افزونه nonce مربوط به OCSP

این گزینه از پروتکل OCSP در برابر حملات بازپخش (replay attacks) محافظت می‌کند. به دلیل بار پردازشی محاسباتی آن، افزونه nonce معمولاً فقط در پاسخ‌دهنده‌های داخلی (مانند شبکه‌های سازمانی) پشتیبانی می‌شود، و نه در پاسخ‌دهنده‌های عمومی OCSP.

•
OCSPrequire = yes | no

الزام به دریافت یک پاسخ قاطع از سوی OCSP

غیرفعال کردن این گزینه اجازه برقراری ارتباط را می‌دهد حتی اگر هیچ پاسخ قاطعی از طریق منگنه‌سازی (stapling) و درخواست مستقیم به پاسخ‌دهنده OCSP دریافت نشده باشد.

پیش‌فرض: yes

•
options = SSL_OPTIONS

گزینه‌های کتابخانه OpenSSL

پارامتر، نام گزینه OpenSSL است همان‌گونه که در راهنمای SSL_CTX_set_options(3ssl) توصیف شده است، اما بدون پیشوند SSL_OP_. دستور stunnel -options گزینه‌هایی را که در ترکیب کنونی stunnel و کتابخانه OpenSSL مورد استفاده برای ساخت آن مجاز هستند فهرست می‌کند.

می‌توان از چندین خط options برای مشخص کردن چندین گزینه استفاده کرد. نام گزینه می‌تواند با یک خط تیره ("-") پیشوند شود تا آن گزینه غیرفعال گردد.

برای مثال، برای سازگاری با پیاده‌سازی ناقص TLS در Eudora، می‌توان از گزینه زیر استفاده کرد:

options = DONT_INSERT_EMPTY_FRAGMENTS

پیش‌فرض:

options = NO_SSLv2
options = NO_SSLv3

در صورت کامپایل با OpenSSL 1.1.0 یا جدیدتر، به جای غیرفعال کردن نگارش‌های خاصی از پروتکل TLS، از گزینه sslVersionMax یا sslVersionMin استفاده کنید.

•
protocol = PROTO

پروتکل لایه کاربرد برای مذاکره TLS

این گزینه مذاکره اولیه و وابسته به پروتکل رمزنگاری TLS را فعال می‌کند. گزینه protocol نباید همراه با رمزنگاری TLS روی یک پورت جداگانه استفاده شود.

پروتکل‌های پشتیبانی‌شده در حال حاضر:

•
cifs

افزونه اختصاصی (بدون مستندات رسمی) از پروتکل CIFS که در Samba پیاده‌سازی شده بود. پشتیبانی از این افزونه در Samba 3.0.0 متوقف گردید.

•
capwin

https://www.capwin.org پشتیبانی از برنامه

•
capwinctrl

https://www.capwin.org پشتیبانی از برنامه

این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود.

•
connect

بر پایه بخش 5.2 از RFC 2817 - ارتقا به TLS درون HTTP/1.1 - درخواست یک تونل با CONNECT

این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود.

•
imap

بر پایه RFC 2595 - استفاده از TLS با IMAP، POP3 و ACAP

•
ldap

بر پایه RFC 2830 - پروتکل سبک‌وزن دسترسی به دایرکتوری (نگارش 3): افزونه امنیت لایه انتقال

•
nntp

بر پایه RFC 4642 - استفاده از امنیت لایه انتقال (TLS) با پروتکل انتقال اخبار شبکه (NNTP)

این پروتکل تنها در حالت کلاینت پشتیبانی می‌شود.

•
pgsql
•
pop3

بر پایه RFC 2449 - سازوکار افزونه‌های POP3

•
proxy

ارسال نشانی IP اصلی کلاینت با پروتکل HAProxy PROXY نگارش 1 https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

•
smtp

بر پایه RFC 2487 - افزونه سرویس SMTP برای SMTP امن بر بستر TLS

•
socks

نگارش‌های 4، 4a و 5 از SOCKS پشتیبانی می‌شوند. خود پروتکل SOCKS درون لایه رمزنگاری TLS کپسوله‌سازی می‌شود تا از نشانی مقصد نهایی محافظت شود.

https://www.openssh.com/txt/socks4.protocol

https://www.openssh.com/txt/socks4a.protocol

دستور BIND در پروتکل SOCKS پشتیبانی نمی‌شود. پارامتر USERID نادیده گرفته می‌شود.

برای نمونه فایل‌های پیکربندی VPN مبتنی بر رمزنگاری SOCKS به بخش مثال‌ها مراجعه کنید.

•
protocolAuthentication = AUTHENTICATION

نوع احراز هویت برای مذاکرات پروتکل

در حال حاضر این گزینه فقط در پروتکل‌های سمت کلاینت `connect' و `smtp' پشتیبانی می‌شود.

انواع احراز هویت پشتیبانی‌شده برای پروتکل `connect' عبارتند از `basic' یا `ntlm'. نوع احراز هویت پیش‌فرض `connect' برابر `basic' است.

انواع احراز هویت پشتیبانی‌شده برای پروتکل `smtp' عبارتند از `plain' یا `login'. نوع احراز هویت پیش‌فرض `smtp' برابر `plain' است.

•
protocolDomain = DOMAIN

دامنه برای مذاکرات پروتکل

در حال حاضر این گزینه فقط در پروتکل سمت کلاینت `connect' پشتیبانی می‌شود.

•
protocolHeader = HEADER

سرآیند (header) برای مذاکرات پروتکل

در حال حاضر این گزینه فقط در پروتکل سمت کلاینت `connect' پشتیبانی می‌شود.

•
protocolHost = ADDRESS

نشانی میزبان برای مذاکرات پروتکل

برای مذاکرات پروتکل `connect'، گزینه protocolHost مقدار HOST:PORT سرور نهایی TLS را که پروکسی باید به آن متصل شود مشخص می‌نماید. سرور پروکسی که مستقیماً توسط stunnel به آن متصل می‌شود باید با گزینه connect مشخص گردد.

برای مذاکرات پروتکل `smtp'، گزینه protocolHost مقدار کلاینت SMTP HELO/EHLO را کنترل می‌کند.

•
protocolPassword = PASSWORD

گذرواژه برای مذاکرات پروتکل

در حال حاضر این گزینه فقط در پروتکل‌های سمت کلاینت `connect' و `smtp' پشتیبانی می‌شود.

•
protocolUsername = USERNAME

نام کاربری برای مذاکرات پروتکل

در حال حاضر این گزینه فقط در پروتکل‌های سمت کلاینت `connect' و `smtp' پشتیبانی می‌شود.

•
PSKidentity = IDENTITY

شناسه PSK برای کلاینت PSK

از PSKidentity می‌توان در کلاینت‌های stunnel برای انتخاب شناسه PSK مورد استفاده جهت احراز هویت بهره برد. این گزینه در بخش‌های سرور نادیده گرفته می‌شود.

پیش‌فرض: اولین شناسه مشخص‌شده در فایل PSKsecrets.

•
PSKsecrets = FILE

فایل حاوی شناسه‌های PSK و کلیدهای متناظر آنها

هر خط از فایل در قالب زیر است:

IDENTITY:KEY

کلیدهای هگزادسیمال به صورت خودکار به فرمت دودویی تبدیل می‌شوند. طول کلیدها باید حداقل 16 بایت باشد که مستلزم حداقل 32 نویسه هگزادسیمال است. این فایل نباید برای عموم کاربران قابل خواندن یا نوشتن باشد.

•
pty = yes | no (فقط یونیکس)

تخصیص یک شبه‌ترمینال (pseudoterminal) برای گزینه `exec'

•
redirect = [HOST:]PORT

تغییر مسیر اتصالات کلاینت TLS در صورت شکست در احراز هویت مبتنی بر گواهی

این گزینه فقط در حالت سرور کار می‌کند. برخی مذاکرات پروتکل نیز با گزینه redirect ناسازگار هستند.

•
renegotiation = yes | no

پشتیبانی از مذاکره مجدد TLS (renegotiation)

کاربردهای مذاکره مجدد TLS شامل برخی سناریوهای احراز هویت یا تعویض مجدد کلید در اتصالات طولانی‌مدت است.

از سوی دیگر این ویژگی می‌تواند حمله منع سرویس (DoS) از طریق مصرف شدید پردازنده را تسهیل کند:

https://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html

لطفاً توجه داشته باشید که غیرفعال کردن مذاکره مجدد TLS این مسئله را به طور کامل رفع نمی‌کند.

پیش‌فرض: yes (در صورت پشتیبانی OpenSSL)

•
reset = yes | no

تلاش برای استفاده از پرچم TCP RST جهت اعلام خطا

این گزینه روی برخی پلتفرم‌ها پشتیبانی نمی‌شود.

پیش‌فرض: yes

•
retry = yes | no | DELAY

اتصال مجدد یک بخش connect+exec پس از قطع شدن آن

مقدار DELAY تعداد میلی‌ثانیه‌ها پیش از تلاش مجدد را مشخص می‌کند. "retry = yes" همان اثر "retry = 1000" را دارد.

پیش‌فرض: no

•
securityLevel = LEVEL

تنظیم سطح امنیت

معنای هر سطح در زیر توصیف شده است:

•
سطح 0 (level 0)

همه چیز مجاز است.

•
سطح 1 (level 1)

سطح امنیت متناظر با حداقل 80 بیت امنیت است. هر پارامتری که امنیتی کمتر از 80 بیت ارائه دهد حذف می‌گردد. در نتیجه کلیدهای RSA، DSA و DH کوتاه‌تر از 1024 بیت و کلیدهای ECC کوتاه‌تر از 160 بیت ممنوع هستند. کلیه مجموعه‌رمزهای صادراتی (export cipher suites) ممنوع هستند چرا که همگی کمتر از 80 بیت امنیت دارند. نسخه 2 پروتکل SSL ممنوع است. هرگونه مجموعه‌رمز که از MD5 برای MAC استفاده کند نیز ممنوع است. علاوه بر این، پروتکل‌های SSLv3، TLS 1.0 و TLS 1.1 همگی در OpenSSL 3.0 و جدیدتر غیرفعال هستند.

•
سطح 2 (level 2)

سطح امنیت روی 112 بیت امنیت تنظیم می‌شود. در نتیجه کلیدهای RSA، DSA و DH کوتاه‌تر از 2048 بیت و کلیدهای ECC کوتاه‌تر از 224 بیت ممنوع هستند. علاوه بر موارد مستثنی در سطح 1، هرگونه مجموعه‌رمز که از RC4 استفاده کند نیز ممنوع است. فشرده‌سازی غیرفعال است. نسخه 3 پروتکل SSL نیز برای نگارش‌های OpenSSL قدیمی‌تر از 3.0 مجاز نیست.

•
سطح 3 (level 3)

سطح امنیت روی 128 بیت امنیت تنظیم می‌شود. در نتیجه کلیدهای RSA، DSA و DH کوتاه‌تر از 3072 بیت و کلیدهای ECC کوتاه‌تر از 256 بیت ممنوع هستند. علاوه بر موارد مستثنی در سطح 2، مجموعه‌رمزهایی که رازداری پیشرو (forward secrecy) را ارائه نمی‌دهند ممنوع هستند. بلیت‌های نشست (Session tickets) غیرفعال هستند. نگارش‌های TLS پایین‌تر از 1.1 برای نسخه‌های OpenSSL قدیمی‌تر از 3.0 مجاز نیستند.

•
سطح 4 (level 4)

سطح امنیت روی 192 بیت امنیت تنظیم می‌شود. در نتیجه کلیدهای RSA، DSA و DH کوتاه‌تر از 7680 بیت و کلیدهای ECC کوتاه‌تر از 384 بیت ممنوع هستند. مجموعه‌رمزهایی که از SHA1 برای MAC استفاده می‌کنند ممنوع هستند. نگارش‌های TLS پایین‌تر از 1.2 برای نسخه‌های OpenSSL قدیمی‌تر از 3.0 مجاز نیستند.

•
سطح 5 (level 5)

سطح امنیت روی 256 بیت امنیت تنظیم می‌شود. در نتیجه کلیدهای RSA، DSA و DH کوتاه‌تر از 15360 بیت و کلیدهای ECC کوتاه‌تر از 512 بیت ممنوع هستند.

•
پیش‌فرض: 2

گزینه securityLevel تنها در صورت کامپایل با OpenSSL 1.1.0 و جدیدتر در دسترس است.

•
requireCert = yes | no

الزام به ارائه گواهی کلاینت برای verifyChain یا verifyPeer

با تنظیم requireCert روی no، سرور stunnel اتصالات کلاینت‌هایی را که گواهی ارائه نکرده‌اند می‌پذیرد.

هر دو گزینه verifyChain = yes و verifyPeer = yes مستلزم requireCert = yes هستند.

پیش‌فرض: no

•
setgid = GROUP (فقط یونیکس)

شناسه گروه یونیکس (GID)

به عنوان گزینه عمومی: اجرای setgid() به گروه مشخص‌شده در حالت دیمن و پاک کردن تمامی گروه‌های دیگر.

به عنوان گزینه سطح سرویس: تنظیم گروه سوکت یونیکس مشخص‌شده با "accept".

•
setuid = USER (فقط یونیکس)

شناسه کاربر یونیکس (UID)

به عنوان گزینه عمومی: اجرای setuid() به کاربر مشخص‌شده در حالت دیمن.

به عنوان گزینه سطح سرویس: تنظیم مالک سوکت یونیکس مشخص‌شده با "accept".

•
sessionCacheSize = NUM_ENTRIES

اندازه حافظه موقت (کش) نشست‌ها

گزینه sessionCacheSize حداکثر تعداد مدخل‌های حافظه موقت داخلی نشست‌ها را مشخص می‌کند.

می‌توان از مقدار 0 برای اندازه نامحدود استفاده کرد. به دلیل خطر حمله منع سرویس (DoS) از طریق تخلیه حافظه، این مقدار برای محیط‌های عملیاتی پیشنهاد نمی‌شود.

•
sessionCacheTimeout = TIMEOUT

مهلت زمانی حافظه موقت نشست‌ها

این مقدار، تعداد ثانیه‌های نگهداری نشست‌های کش‌شده‌ی TLS است.

•
sessionResume = yes | no

مجاز یا غیرمجاز بودن ازسرگیری نشست (session resumption)

پیش‌فرض: yes

•
sessiond = HOST:PORT

نشانی سرور کش TLS متعلق به sessiond

•
sni = SERVICE_NAME:SERVER_NAME_PATTERN (حالت سرور)

استفاده از سرویس به عنوان یک سرویس ثانویه (سرور مجازی مبتنی بر نام) برای افزونه Server Name Indication (SNI) در TLS (RFC 3546).

شناسه SERVICE_NAME سرویس اصلی را مشخص می‌کند که اتصالات کلاینت را با گزینه accept می‌پذیرد. عبارت SERVER_NAME_PATTERN نام میزبان مورد نظر برای تغییر مسیر را مشخص می‌نماید. الگو می‌تواند با نویسه `*' آغاز شود، برای مثال `*.example.com'. معمولاً چندین سرویس ثانویه برای یک سرویس اصلی واحد مشخص می‌شوند. گزینه sni را می‌توان بیش از یک بار درون یک سرویس ثانویه واحد نیز تعریف کرد.

این سرویس و همچنین سرویس اصلی نمی‌توانند در حالت کلاینت پیکربندی شوند.

گزینه connect در سرویس ثانویه هنگام مشخص شدن گزینه protocol نادیده گرفته می‌شود، چرا که protocol پیش از دست‌تکانی TLS به میزبان راه دور متصل می‌گردد.

بررسی‌های Libwrap (فقط یونیکس) دو بار انجام می‌شوند: یک بار با نام سرویس اصلی پس از پذیرش اتصال TCP، و یک بار با نام سرویس ثانویه در طول دست‌تکانی TLS.

گزینه sni تنها در صورت کامپایل با OpenSSL 1.0.0 و جدیدتر در دسترس است.

•
sni = SERVER_NAME (حالت کلاینت)

استفاده از پارامتر به عنوان مقدار افزونه TLS Server Name Indication (RFC 3546).

خالی گذاشتن SERVER_NAME ارسال افزونه SNI را غیرفعال می‌کند.

گزینه sni تنها در صورت کامپایل با OpenSSL 1.0.0 و جدیدتر در دسترس است.

•
socket = a|l|r:OPTION=VALUE[:VALUE]

تنظیم یک گزینه روی سوکت پذیرش (accept)، محلی (local) یا راه دور (remote)

مقادیر گزینه linger به صورت l_onof:l_linger هستند. مقادیر مربوط به زمان به صورت tv_sec:tv_usec می‌باشند.

مثال‌ها:

socket = l:SO_LINGER=1:60
    set one minute timeout for closing local socket
socket = r:SO_OOBINLINE=yes
    place out-of-band data directly into the
    receive data stream for remote sockets
socket = a:SO_REUSEADDR=no
    disable address reuse (enabled by default)
socket = a:SO_BINDTODEVICE=lo
    only accept connections on loopback interface
•
sslVersion = SSL_VERSION

انتخاب نگارش پروتکل TLS

نگارش‌های پشتیبانی‌شده: all, SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

در دسترس بودن پروتکل‌های خاص به کتابخانه OpenSSL لینک‌شده بستگی دارد. نگارش‌های قدیمی‌تر OpenSSL از TLSv1.1، TLSv1.2 و TLSv1.3 پشتیبانی نمی‌کنند. نگارش‌های جدیدتر OpenSSL از SSLv2 پشتیبانی نمی‌کنند.

پروتکل‌های منسوخ‌شده SSLv2 و SSLv3 در حال حاضر به طور پیش‌فرض غیرفعال هستند.

تنظیم گزینه

sslVersion = SSL_VERSION

در صورت کامپایل با OpenSSL 1.1.0 و جدیدتر، معادل گزینه‌های زیر است:

sslVersionMax = SSL_VERSION
sslVersionMin = SSL_VERSION
•
sslVersionMax = SSL_VERSION

حداکثر نگارش‌های پشتیبانی‌شده پروتکل

نگارش‌های پشتیبانی‌شده: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

مقدار all نگارش‌های پروتکل را تا بالاترین نگارش پشتیبانی‌شده توسط کتابخانه OpenSSL لینک‌شده فعال می‌کند.

در دسترس بودن پروتکل‌های خاص به کتابخانه OpenSSL پیوندشده بستگی دارد.

گزینه sslVersionMax تنها در صورت کامپایل با OpenSSL 1.1.0 و جدیدتر در دسترس است.

پیش‌فرض: all

•
sslVersionMin = SSL_VERSION

حداقل نگارش‌های پشتیبانی‌شده پروتکل

نگارش‌های پشتیبانی‌شده: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

مقدار all نگارش‌های پروتکل را تا پایین‌ترین نگارش پشتیبانی‌شده توسط کتابخانه OpenSSL پیوندشده فعال می‌کند.

در دسترس بودن پروتکل‌های خاص به کتابخانه OpenSSL پیوندشده بستگی دارد.

گزینه sslVersionMin تنها در صورت کامپایل با OpenSSL 1.1.0 و جدیدتر در دسترس است.

پیش‌فرض: TLSv1

•
stack = BYTES (به جز مدل FORK)

اندازه پشته (stack) پردازنده برای ریسه‌های ایجادشده

اندازه پشته بیش از حد برای ریسه‌ها مصرف حافظه مجازی را افزایش می‌دهد. اندازه ناکافی پشته ممکن است موجب فروپاشی (crash) برنامه گردد.

پیش‌فرض: 65536 بایت (کافی برای تمامی پلتفرم‌های آزمایش‌شده توسط ما)

•
ticketKeySecret = SECRET

کلید متقارن هگزادسیمال مورد استفاده برای حفاظت از محرمانگی بلیت نشست (session ticket)

بلیت‌های نشست تعریف‌شده در RFC 5077 قابلیت بهبودیافته‌ای برای ازسرگیری نشست ارائه می‌دهند، به طوری که نگهداری وضعیت هر نشست در حافظه موقت سمت سرور الزامی نخواهد بود.

ترکیب گزینه‌های ticketKeySecret و ticketMacSecret امکان ازسرگیری یک نشست مذاکره‌شده را روی گره‌های دیگر خوشه (cluster) یا پس از راه‌اندازی مجدد سرور فراهم می‌کند.

طول کلید باید 16 یا 32 بایت باشد، که دقیقاً معادل 32 یا 64 رقم هگزادسیمال است. می‌توان به صورت اختیاری از دو‌نقطه بین بایت‌های دوحرفی هگزادسیمال استفاده کرد.

این گزینه فقط در حالت سرور کار می‌کند.

گزینه ticketKeySecret تنها در صورت کامپایل با OpenSSL 1.0.0 و جدیدتر در دسترس است.

برای پشتیبانی از ticket در نسخه‌های OpenSSL قدیمی‌تر از 1.1.1، غیرفعال کردن گزینه NO_TICKET الزامی است، اما توجه داشته باشید که این گزینه با گزینه redirect ناسازگار است.

•
ticketMacSecret = SECRET

کلید متقارن هگزادسیمال مورد استفاده برای حفاظت از یکپارچگی بلیت نشست

طول کلید باید 16 یا 32 بایت باشد، که دقیقاً معادل 32 یا 64 رقم هگزادسیمال است. می‌توان به صورت اختیاری از دو‌نقطه بین بایت‌های دوحرفی هگزادسیمال استفاده کرد.

این گزینه فقط در حالت سرور کار می‌کند.

گزینه ticketMacSecret تنها در صورت کامپایل با OpenSSL 1.0.0 و جدیدتر در دسترس است.

•
TIMEOUTbusy = SECONDS

زمان انتظار برای داده‌های مورد انتظار

•
TIMEOUTclose = SECONDS

زمان انتظار برای close_notify (برای MSIE دارای اشکال روی 0 تنظیم شود)

•
TIMEOUTconnect = SECONDS

زمان انتظار برای اتصال به یک میزبان راه دور

•
TIMEOUTidle = SECONDS

مدت زمان باز نگه داشتن یک اتصال بیکار (idle)

•
TIMEOUTocsp = SECONDS

زمان انتظار برای اتصال به یک پاسخ‌دهنده OCSP

•
transport = tcp | udp

انتخاب پروتکل لایه انتقال

مقادیر پشتیبانی‌شده:

•
tcp

استفاده از TLS استاندارد روی TCP (پیش‌فرض).

•
udp

استفاده از DTLS روی UDP.

هر دیتاگرام یک اتصال منطقی جدید را درون سرویس باز می‌کند. سرور برای هر کلاینت از یک سوکت متصل مجزا استفاده می‌نماید و کوکی‌های DTLS از حملات انعکاسی DDoS جلوگیری می‌کنند.

پیش‌فرض: tcp

•
transparent = none | source | destination | both (فقط یونیکس)

فعال‌سازی پشتیبانی از پروکسی شفاف (transparent proxy) روی پلتفرم‌های منتخب

مقادیر پشتیبانی‌شده:

•
none

غیرفعال‌سازی پشتیبانی از پروکسی شفاف. این مقدار پیش‌فرض است.

•
source

بازنویسی نشانی به گونه‌ای که دیمن پوشش‌یافته به نظر برسد از دستگاه کلاینت TLS متصل می‌شود به جای ماشینی که stunnel روی آن اجرا می‌شود.

این گزینه در حال حاضر در موارد زیر در دسترس است:

•
حالت راه دور (گزینه connect) روی Linux >=2.6.28

این پیکربندی مستلزم اجرای stunnel با دسترسی ریشه (root) و بدون گزینه setuid است.

این پیکربندی نیازمند تنظیمات زیر برای iptables و مسیریابی است (احتمالاً در /etc/rc.local یا فایلی معادل):

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter

stunnel نیز باید با دسترسی ریشه و بدون گزینه setuid اجرا گردد.

•
حالت راه دور (گزینه connect) روی Linux 2.2.x

این پیکربندی نیازمند آن است که هسته با گزینه transparent proxy کامپایل شده باشد. سرویس متصل‌شده باید روی یک میزبان مجزا نصب شود. مسیریابی به سمت کلاینت‌ها باید از طریق سیستم stunnel عبور کند.

stunnel نیز باید با دسترسی ریشه و بدون گزینه setuid اجرا شود.

•
حالت راه دور (گزینه connect) روی FreeBSD >=8.0

این پیکربندی نیازمند تنظیمات اضافی فایروال و مسیریابی است. stunnel نیز باید با دسترسی ریشه و بدون گزینه setuid اجرا گردد.

•
حالت محلی (گزینه exec)

این پیکربندی از طریق پیش‌بارگذاری کتابخانه مشترک libstunnel.so کار می‌کند. متغیر محیطی _RLD_LIST روی Tru64، و متغیر LD_PRELOAD روی سایر پلتفرم‌ها استفاده می‌شود.

•
destination

به جای گزینه connect از مقصد اصلی استفاده می‌شود.

یک بخش سرویس برای مقصد شفاف ممکن است به این شکل باشد:

[transparent]
client = yes
accept = <stunnel_port>
transparent = destination

این پیکربندی برای کارکرد به تنظیمات iptables نیاز دارد، احتمالاً در /etc/rc.local یا فایل معادل آن.

برای یک مقصد اتصال که روی همان میزبان نصب شده است:

/sbin/iptables -t nat -I OUTPUT -p tcp --dport <redirected_port> \
    -m ! --uid-owner <stunnel_user_id> \
    -j DNAT --to-destination <local_ip>:<stunnel_port>

برای یک مقصد اتصال که روی یک میزبان راه دور نصب شده است:

/sbin/iptables -I INPUT -i eth0 -p tcp --dport <stunnel_port> -j ACCEPT
/sbin/iptables -t nat -I PREROUTING -p tcp --dport <redirected_port> \
    -i eth0 -j DNAT --to-destination <local_ip>:<stunnel_port>

گزینه مقصد شفاف در حال حاضر تنها روی لینوکس پشتیبانی می‌شود.

•
both

استفاده همزمان از هر دو حالت پروکسی شفاف source و destination.

دو گزینه موروثی و قدیمی نیز برای سازگاری رو به عقب پشتیبانی می‌شوند:

•
yes

نام این گزینه به source تغییر یافته است.

•
no

نام این گزینه به none تغییر یافته است.

•
verify = LEVEL

اعتبارسنجی گواهی طرف مقابل

این گزینه منسوخ شده و باید با گزینه‌های verifyChain و verifyPeer جایگزین گردد.

•
سطح 0 (level 0)

درخواست زنجیره گواهی طرف مقابل و نادیده گرفتن آن.

•
سطح 1 (level 1)

اعتبارسنجی زنجیره گواهی طرف مقابل در صورت حضور آن.

•
سطح 2 (level 2)

اعتبارسنجی زنجیره گواهی طرف مقابل.

•
سطح 3 (level 3)

اعتبارسنجی زنجیره گواهی طرف مقابل و گواهی طرف مقابل (برگ) در برابر گواهی نصب‌شده به صورت محلی.

•
سطح 4 (level 4)

نادیده گرفتن زنجیره گواهی طرف مقابل و صرفاً اعتبارسنجی گواهی برگ طرف مقابل در برابر گواهی محلی.

•
پیش‌فرض

بدون اعتبارسنجی (No verify).

•
verifyChain = yes | no

اعتبارسنجی زنجیره گواهی طرف مقابل از گواهی CA ریشه به بعد

برای اعتبارسنجی گواهی سرور، ضروری است که یک گواهی خاص با checkHost یا checkIP نیز الزام گردد.

گواهی خودامضاشده‌ی CA ریشه باید در فایل مشخص‌شده با CAfile یا در دایرکتوری مشخص‌شده با CApath ذخیره شود.

پیش‌فرض: no

•
verifyPeer = yes | no

اعتبارسنجی گواهی طرف مقابل (موجودیت انتهایی یا برگ)

گواهی برگ طرف مقابل باید در فایل مشخص‌شده با CAfile یا در دایرکتوری مشخص‌شده با CApath ذخیره شود.

پیش‌فرض: no

stunnel در صورت موفقیت مقدار صفر و در صورت بروز خطا مقداری غیر صفر برمی‌گرداند.

از سیگنال‌های زیر می‌توان برای کنترل stunnel در محیط یونیکس استفاده کرد:

•
SIGHUP

بارگذاری مجدد اجباری فایل پیکربندی.

برخی از گزینه‌های عمومی دوباره بارگذاری نخواهند شد:

  • chroot
  • foreground
  • pid
  • setgid
  • setuid

استفاده از گزینه `setuid' همچنین مانع از مقید شدن stunnel به پورت‌های ممتاز (<1024) در زمان بارگذاری مجدد پیکربندی می‌شود.

هنگامی که گزینه `chroot' استفاده می‌شود، stunnel تمام فایل‌های خود را (شامل فایل پیکربندی، گواهی‌ها، فایل گزارش و فایل pid) درون محیط ایزوله chroot جستجو خواهد کرد.

•
SIGUSR1

بستن و بازگشایی مجدد فایل گزارش stunnel. از این قابلیت می‌توان برای چرخش فایل‌های لاگ (log rotation) استفاده کرد.

•
SIGUSR2

ثبت فهرست اتصالات فعال در گزارش.

•
SIGTERM, SIGQUIT, SIGINT

خاموش کردن و توقف کامل stunnel.

نتیجه ارسال هرگونه سیگنال دیگر به سرور نامشخص و تعریف‌نشده است.

به منظور ارائه کپسوله‌سازی TLS برای سرویس محلی imapd خود، از دستورات زیر استفاده کنید:

[imapd]
accept = 993
exec = /usr/sbin/imapd
execArgs = imapd

یا در حالت راه دور:

[imapd]
accept = 993
connect = 143

برای اینکه کلاینت ایمیل محلی شما بتواند به یک سرویس imapd مجهز به TLS روی سروری دیگر متصل شود، کلاینت ایمیل را برای اتصال به پورت 119 روی localhost پیکربندی کرده و از نمونه زیر استفاده نمایید:

[imap]
client = yes
accept = 143
connect = servername:993

اگر می‌خواهید برای دیمن pppd خود روی پورت 2020 تونل‌سازی ایجاد کنید، از نمونه‌ای شبیه به این استفاده کنید:

[vpn]
accept = 2020
exec = /usr/sbin/pppd
execArgs = pppd local
pty = yes

اگر قصد دارید از stunnel در حالت inetd برای راه‌اندازی پردازه imapd خود استفاده کنید، از این stunnel.conf استفاده نمایید. توجه داشته باشید که نباید هیچ بخش [service_name] وجود داشته باشد.

exec = /usr/sbin/imapd
execArgs = imapd

برای راه‌اندازی VPN مبتنی بر SOCKS، سرویس کلاینت زیر را پیکربندی کنید:

[socks_client]
client = yes
accept = 127.0.0.1:1080
connect = vpn_server:9080
verifyPeer = yes
CAfile = stunnel.pem

پیکربندی متناظر روی میزبان vpn_server به این صورت است:

[socks_server]
protocol = socks
accept = 9080
cert = stunnel.pem
key = stunnel.key

حال پیکربندی خود را روی ماشین کلاینت با دستور زیر آزمایش کنید:

curl --socks4a localhost http://www.example.com/

یک نمونه از پیکربندی SNI در حالت سرور:

[virtual]
; primary service
accept = 443
cert =  default.pem
connect = default.internal.mydomain.com:8080
[sni1]
; secondary service 1
sni = virtual:server1.mydomain.com
cert = server1.pem
connect = server1.internal.mydomain.com:8081
[sni2]
; secondary service 2
sni = virtual:server2.mydomain.com
cert = server2.pem
connect = server2.internal.mydomain.com:8082
verifyPeer = yes
CAfile = server2-allowed-clients.pem

نمونه‌ای از پیکربندی پیشرفته موتور رمزنگاری که امکان احراز هویت با کلیدهای خصوصی ذخیره‌شده در مخزن گواهی ویندوز را فراهم می‌کند (فقط ویندوز). با موتور CAPI نیازی به انتخاب دستی کلید کلاینت نخواهید داشت. کلید کلاینت به صورت خودکار بر اساس فهرست CAهای مورد اعتماد سرور انتخاب می‌شود.

engine = capi
[service]
engineId = capi
client = yes
accept = 127.0.0.1:8080
connect = example.com:8443

نمونه‌ای از پیکربندی پیشرفته موتور رمزنگاری جهت استفاده از گواهی و کلید خصوصی متناظر از یک موتور pkcs11:

engine = pkcs11
engineCtrl = MODULE_PATH:opensc-pkcs11.so
engineCtrl = PIN:123456
[service]
engineId = pkcs11
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=MyCert
key = pkcs11:token=MyToken;object=MyKey

نمونه‌ای از پیکربندی پیشرفته موتور رمزنگاری جهت استفاده از گواهی و کلید خصوصی متناظر از یک توکن SoftHSM:

engine = pkcs11
engineCtrl = MODULE_PATH:softhsm2.dll
engineCtrl = PIN:12345
[service]
engineId = pkcs11
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=KeyCert

نمونه‌ای از پیکربندی پیشرفته ارائه‌دهنده (provider) جهت استفاده از گواهی و کلید خصوصی متناظر از یک ارائه‌دهنده `pkcs11prov`:

نکته: نیازمند OpenSSL 3.0 یا جدیدتر است

setEnv = PKCS11_MODULE_PATH=opensc-pkcs11.dll
setEnv = PKCS11_PIN:123456
provider = pkcs11prov
[service]
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=MyCert
key = pkcs11:token=MyToken;object=MyKey

نکته: نیازمند OpenSSL 3.5 یا جدیدتر است

provider = pkcs11prov
providerParameter = pkcs11prov:pkcs11_module=opensc-pkcs11.dll
providerParameter = pkcs11prov:pin=123456
[service]
client = yes
accept = 127.0.0.1:8080
connect = example.com:843
cert = pkcs11:token=MyToken;object=MyCert
key = pkcs11:token=MyToken;object=MyKey

در ویندوز، کتابخانه PKCS#11 باید در دایرکتوری `ossl-modules` قرار گیرد، یا مسیر کامل و مطلق آن در پارامتر `PKCS11_MODULE_PATH` یا `pkcs11_module` ارائه شود.

به دلیل ماهیت پروتکل FTP که از چندین پورت برای انتقال داده‌ها استفاده می‌کند، نمی‌توان از stunnel برای دیمن FTP استفاده کرد. با این وجود، نگارش‌های مجهز به TLS برای دیمن‌های FTP و telnet موجود هستند.

متداول‌ترین کاربرد stunnel گوش دادن روی یک پورت شبکه و برقراری ارتباط یا با یک پورت جدید از طریق گزینه connect، یا با یک برنامه جدید از طریق گزینه exec است. با این حال یک حالت ویژه زمانی رخ می‌دهد که بخواهید برنامه‌ای دیگر اتصالات ورودی را بپذیرد و stunnel را اجرا کند، برای مثال با inetd، xinetd یا tcpserver.

برای مثال، اگر خط زیر را در inetd.conf داشته باشید:

imaps stream tcp nowait root @bindir@/stunnel stunnel @sysconfdir@/stunnel/imaps.conf

در این موارد، برنامه با سبک inetd مسئول مقیدسازی سوکت شبکه (در بالا imaps) و تحویل آن به stunnel هنگام دریافت اتصال است. بنابراین نباید هیچ گزینه accept در stunnel تعریف شده باشد. تمام گزینه‌های سطح سرویس باید در بخش گزینه‌های عمومی قرار گیرند، و هیچ بخش [service_name] وجود نخواهد داشت. برای مشاهده نمونه‌های پیکربندی به بخش مثال‌ها (EXAMPLES) مراجعه فرمایید.

هر دیمن مجهز به TLS باید یک گواهی معتبر X.509 به طرف مقابل ارائه دهد. همچنین برای رمزگشایی داده‌های ورودی به یک کلید خصوصی نیاز دارد. ساده‌ترین روش برای به دست آوردن گواهی و کلید، تولید آنها با بسته رایگان OpenSSL است. می‌توانید اطلاعات بیشتری درباره تولید گواهی‌ها در صفحات فهرست‌شده در زیر بیابید.

فایل .pem باید شامل کلید خصوصی رمزگذاری‌نشده و یک گواهی امضاشده (نه یک درخواست گواهی یا CSR) باشد. بنابراین فایل باید به این صورت باشد:

-----BEGIN RSA PRIVATE KEY-----
[encoded key]
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
[encoded certificate]
-----END CERTIFICATE-----

stunnel برای اینکه TLS بتواند از تصادفی‌سازی مناسبی بهره‌مند شود، نیاز دارد تولیدکننده اعداد شبه‌تصادفی (PRNG) را مقداردهی اولیه (seed) کند. منابع زیر به ترتیب بارگذاری می‌شوند تا داده‌های تصادفی کافی گردآوری شود:

  • فایل مشخص‌شده با فلگ RNDfile.
  • فایل مشخص‌شده با متغیر محیطی RANDFILE، در صورت تنظیم.
  • فایل .rnd در دایرکتوری خانگی شما، در صورتی که RANDFILE تنظیم نشده باشد.
  • فایل مشخص‌شده با `--with-random' در زمان کامپایل.
  • محتویات صفحه نمایش در صورت اجرا روی ویندوز.
  • سوکت egd مشخص‌شده با پرچم EGD.
  • سوکت egd مشخص‌شده با `--with-egd-sock' در زمان کامپایل.
  • دستگاه /dev/urandom.

توجه داشته باشید که در رایانه‌های ویندوزی فاقد تعامل کاربر با کنسول (حرکات ماوس، ایجاد پنجره‌ها و غیره) محتویات صفحه نمایش تنوع کافی برای تأمین آنتروپی ندارند و باید یک فایل تصادفی برای استفاده با فلگ RNDfile ارائه دهید.

توجه داشته باشید که فایل مشخص‌شده با پرچم RNDfile باید حاوی داده‌های تصادفی باشد -- این بدان معناست که در هر بار اجرای stunnel باید شامل اطلاعات متفاوتی باشد. این کار به طور خودکار انجام می‌شود مگر اینکه از فلگ RNDoverwrite استفاده شده باشد. اگر مایلید این فایل را به صورت دستی به‌روزرسانی کنید، دستور openssl rand در نسخه‌های اخیر OpenSSL سودمند خواهد بود.

نکته مهم: در صورت در دسترس بودن /dev/urandom، کتابخانه OpenSSL معمولاً هنگام بررسی وضعیت تصادفی، PRNG را با آن مقداردهی اولیه می‌کند. روی سیستم‌های دارای /dev/urandom به احتمال قوی OpenSSL از آن استفاده خواهد کرد، حتی اگر در انتهای فهرست فوق قرار گرفته باشد. این رفتار مربوط به OpenSSL است و نه stunnel.

نگارش 4.40 و جدیدتر stunnel شامل پارامترهای 2048 بیتی سخت‌کدشده (hardcoded) برای DH است. از نگارش 5.18 stunnel، این پارامترهای ثابت هر 24 ساعت یک بار با پارامترهای موقت DH که به صورت خودکار تولید می‌شوند جایگزین می‌گردند. تولید پارامترهای DH ممکن است چند دقیقه طول بکشد.

همچنین می‌توان پارامترهای ایستا برای DH را در فایل گواهی تعیین کرد که در این صورت تولید خودکار پارامترهای موقت DH غیرفعال می‌شود:

openssl dhparam 2048 >> stunnel.pem

•
@sysconfdir@/stunnel/stunnel.conf

فایل پیکربندی stunnel

گزینه execArgs و خط فرمان Win32 از کوتیشن‌گذاری (quoting) پشتیبانی نمی‌کنند.

•
https://www.stunnel.org

برنامه stunnel

•
https://openssl-library.org

کتابخانه OpenSSL

•
Michał Trojnara
2026.07.31 stunnel 5.80