| STUNNEL(8) | stunnel TLS Proxy | STUNNEL(8) |
نام (NAME)
stunnel.pl - تونل رمزنگاری سراسری TLS/SSL برای سرویسهای شبکه
خلاصه دستور (SYNOPSIS)
- Unix: stunnel [FILE] | -fd N | -help | -version | -sockets | -options
- WIN32: stunnel [ [ -install | -uninstall | -start | -stop | -reload | -reopen | -exit ] [-quiet] [FILE] ] | -help | -version | -sockets | -options
توضیحات (DESCRIPTION)
برنامه stunnel برای کار به عنوان یک پوششدهنده رمزنگاری TLS بین کلاینتهای راه دور و سرورهای محلی (قابل راهاندازی با inetd) یا سرورهای راه دور طراحی شده است. مفهوم این است که با داشتن دیمنهای بدون پشتیبانی از TLS روی سیستم خود، میتوانید به سادگی آنها را به گونهای پیکربندی کنید که با کلاینتها از طریق کانالهای امن TLS ارتباط برقرار کنند.
stunnel میتواند برای افزودن قابلیت TLS به دیمنهای متداول inetd مانند سرورهای POP-3 و IMAP، به دیمنهای مستقل مانند NNTP، SMTP و HTTP، و حتی برای تونل کردن PPP روی سوکتهای شبکه بدون نیاز به تغییر در کد منبع استفاده شود.
گزینهها (OPTIONS)
- •
- FILE
استفاده از فایل پیکربندی مشخصشده
- •
- -fd N (فقط یونیکس)
خواندن فایل پیکربندی از توصیفگر فایل (file descriptor) مشخصشده
- •
- -help
چاپ منوی راهنمای stunnel
- •
- -version
چاپ نسخه stunnel و مقادیر پیشفرض زمان کامپایل
- •
- -sockets
چاپ گزینههای پیشفرض سوکت
- •
- -options
چاپ گزینههای پشتیبانیشده TLS
- •
- -install (فقط Windows NT و جدیدتر)
نصب سرویس NT
- •
- -uninstall (فقط Windows NT و جدیدتر)
حذف نصب سرویس NT
- •
- -start (فقط Windows NT و جدیدتر)
شروع سرویس NT
- •
- -stop (فقط Windows NT و جدیدتر)
توقف سرویس NT
- •
- -reload (فقط Windows NT و جدیدتر)
بارگذاری مجدد فایل پیکربندی سرویس در حال اجرای NT
- •
- -reopen (فقط Windows NT و جدیدتر)
باز کردن مجدد لاگ سرویس در حال اجرای NT
- •
- -exit (فقط Win32)
توقف برنامه در حال اجرا
- •
- -quiet (فقط Win32)
عدم نمایش پنجرههای پیام
فایل پیکربندی (CONFIGURATION FILE)
یک خط در فایل پیکربندی میتواند:
- خالی باشد (نادیده گرفته میشود)
- یک کامنت باشد که با نویسه `;' شروع میشود (نادیده گرفته میشود)
- یک جفت `نام_گزینه = مقدار_گزینه' باشد
- متن `[نام_سرویس]' باشد که نشاندهنده شروع تعریف یک سرویس است
پارامتر آدرس میتواند به صورتهای زیر باشد:
- شماره پورت
- یک جفت آدرس (IPv4، IPv6 یا نام دامنه) و شماره پورت جدا شده با دو نقطه
- مسیر سوکت یونیکس (فقط یونیکس)
گزینههای سراسری (GLOBAL OPTIONS)
- •
- chroot = DIRECTORY (فقط یونیکس)
پوشه ریشه کاری سیستم فایل
این گزینه پوشهای را مشخص میکند که فرآیند stunnel بلافاصله پس از مقداردهی اولیه و قبل از شروع پذیرش اتصالات، در آن محبوس (chroot) میشود. مسیرهای مشخصشده در گزینههای CApath، CRLpath، pid و exec باید درون پوشه مشخصشده در chroot قرار داشته و نسبت به آن تعیین شوند.
برخی عملکردهای سیستمعامل ممکن است به فایلهای اضافی در پوشه chroot نیاز داشته باشند:
- تفکیک تاخیری DNS معمولاً به /etc/nsswitch.conf و /etc/resolv.conf نیاز دارد
- محلیسازی منطقه زمانی در گزارشها نیازمند فایل /etc/timezone است
- برخی عملکردهای دیگر ممکن است به فایلهای دستگاهی مانند /dev/zero یا /dev/null نیاز داشته باشند
- •
- compression = deflate | zlib | zstd | brotli
انتخاب الگوریتم فشردهسازی دادههای ارسالی
پیشفرض: بدون فشردهسازی
فشردهسازی دادهها منحصراً برای پروتکل TLS 1.2 و نسخههای قدیمیتر در دسترس است. از زمان OpenSSL 1.1.0 نیاز به کاهش securityLevel به 1 دارد.
الگوریتمهای zlib، zstd و brotli در پیکربندی پیشفرض OpenSSL غیرفعال هستند.
الگوریتمهای zstd و brotli در OpenSSL 3.2 اضافه شدهاند.
فشردهسازی دادهها در برنامههایی که به مهاجم اجازه تزریق متن ساده دلخواه را میدهند یک ریسک امنیتی محسوب میشود.
الگوریتم deflate روش فشردهسازی استاندارد مطابق با RFC 1951 است.
توجه: فشردهسازی TLS میتواند حملات بازیابی متن آشکار مانند CRIME را در مواردی که دادههای تحت کنترل مهاجم همراه با دادههای محافظتشده فشرده میشوند، امکانپذیر سازد.
- •
- debug = [FACILITY.]LEVEL
میزان جزئیات لاگگیری
سطح لاگگیری را میتوان با یکی از نامها یا اعداد مشخص کرد: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). پیامهایی با سطح کمتر یا مساوی (از نظر عددی) با مقدار مشخصشده ثبت میشوند. سطح پیشفرض notice (5) است.
اگرچه استفاده از debug = debug یا debug = 7 پرجزئیاتترین گزارشها را تولید میکند، اما محتوای آنها فقط برای توسعهدهندگان stunnel مفید است. تنها در صورتی از این سطح لاگگیری استفاده کنید که توسعهدهنده stunnel هستید یا اطلاعات دقیقی را برای ارسال به پشتیبانی فنی آماده میکنید. در غیر این صورت، تلاش برای تحلیل محتوای لاگها تنها مایه سردرگمی بیشتر خواهد بود.
در صورتی که بخش (facility) مشخص نشده باشد، از مقدار پیشفرض daemon استفاده میشود. بخشها در بستر Win32 پشتیبانی نمیشوند.
بزرگی و کوچکی حروف برای سطح و بخش نادیده گرفته میشود.
- •
- EGD = EGD_PATH (فقط یونیکس)
مسیر سوکت برنامه Entropy Gathering Daemon
این گزینه مسیر سوکت برنامه Entropy Gathering Daemon را مشخص میکند که برای مقداردهی اولیه مولد شبهتصادفی کتابخانه OpenSSL به کار میرود.
- •
- engine = auto | DEVICE_ID
انتخاب موتور رمزنگاری (cryptographic engine)
پیشفرض: بدون استفاده از موتورهای رمزنگاری
بخش «مثالها» حاوی نمونه پیکربندیهایی با استفاده از موتورهای رمزنگاری است.
- •
- engineCtrl = COMMAND[:PARAMETER]
پیکربندی کنترل موتور رمزنگاری
- •
- engineDefault = TASK_LIST
فهرست وظایف OpenSSL که به موتور جاری واگذار میشوند
پارامتر یک لیست از وظایف 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 (فقط یونیکس)
حالت پیشزمینه
با فعال کردن این گزینه، stunnel به پسزمینه (daemon) منتقل نمیشود.
مقدار yes همچنین باعث میشود که پیامهای تشخیصی علاوه بر خروجیهای تعریفشده توسط گزینههای syslog و output، روی خروجی خطای استاندارد (stderr) نیز ثبت شوند.
- •
- iconActive = ICON_FILE (فقط رابط گرافیکی)
آیکون نمایش داده شده در صورت وجود اتصالات فعال به سرویس
در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است.
- •
- iconError = ICON_FILE (فقط رابط گرافیکی)
آیکون نمایش داده شده در صورتی که فایل پیکربندی معتبری بارگذاری نشده باشد
در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است.
- •
- iconIdle = ICON_FILE (فقط رابط گرافیکی)
آیکون نمایش داده شده در صورت عدم وجود اتصالات فعال به سرویس
در ویندوز، آیکون یک فایل .ico حاوی تصویری با ابعاد 16x16 پیکسل است.
- •
- log = append | overwrite
مدیریت فایل لاگ
این گزینه تعیین میکند که آیا گزارشهای جدید به انتهای فایل لاگ (مشخصشده در گزینه output) اضافه شوند یا جایگزین فایل قبلی گردند.
پیشفرض: append
- •
- output = FILE
فایلی که گزارشها به آن اضافه خواهند شد
استفاده از این گزینه موجب میشود که گزارشها به فایل مشخصشده افزوده شوند.
برای هدایت خروجی به خروجی استاندارد (به عنوان مثال برای ثبت آنها توسط برنامه splogger از بسته daemontools)، میتوانید دستگاه /dev/stdout را به عنوان پارامتر تعیین کنید.
- •
- pid = FILE (فقط یونیکس)
مسیر فایل شناسه فرآیند (PID)
اگر آرگومان خالی باشد، فایلی ایجاد نخواهد شد.
در صورت تعریف دایرکتوری chroot، مسیر pid نسبت به آن پوشه در نظر گرفته میشود.
- •
- 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 از دادههای این فایل برای مقداردهی اولیه مولد شبهتصادفی استفاده میکند.
- •
- RNDoverwrite = yes | no
بازنویسی فایل با مقادیر شبهتصادفی جدید
پیشفرض: yes (بازنویسی شود)
- •
- service = SERVICE (فقط یونیکس)
نام سرویس
نام سرویس تعیینشده به عنوان نام سرویس برای مقداردهی اولیه syslog و همچنین برای کتابخانه TCP Wrapper در حالت inetd استفاده میشود. اگرچه از نظر فنی میتوان از این گزینه در بخش سرویسها استفاده کرد، اما کاربرد واقعی آن منحصراً در گزینههای سراسری است.
پیشفرض: stunnel
- •
- setEnv = VAR_NAME=VALUE
تغییر یا افزودن یک متغیر محیطی برای فرآیندهای فرزند. اگر VAR_NAME از قبل وجود داشته باشد، مقدار آن بهروزرسانی میشود؛ در غیر این صورت یک متغیر جدید ایجاد خواهد شد. این اصلاح تنها روی فرآیندهای فرزند اجراشده اعمال میشود و بر محیط فعلی تأثیری ندارد.
- •
- syslog = yes | no (فقط یونیکس)
فعالسازی ثبت گزارش از طریق سازوکار syslog
پیشفرض: yes (فعال)
- •
- taskbar = yes | no (فقط WIN32)
فعالسازی آیکون در گوشه پایین سمت راست صفحه (ناحیه اعلانها)
پیشفرض: yes (فعال)
گزینههای سرویس (SERVICE-LEVEL OPTIONS)
هر بخش از پیکربندی سرویس با نام آن که در کروشه قرار میگیرد، آغاز میشود. نام سرویس برای کنترل دسترسی توسط کتابخانه libwrap (TCP wrappers) استفاده شده و همچنین امکان تفکیک سرویسهای مختلف را در گزارشها فراهم میکند.
اگر قرار است stunnel در حالت inetd استفاده شود، جایی که دریافت اتصال بر عهده برنامه دیگری است (معمولاً inetd، xinetd یا tcpserver)، بخش حالت INETD را در ادامه مطالعه فرمایید.
- •
- accept = [HOST:]PORT
گوش دادن به اتصالات روی آدرس و پورت مشخصشده
اگر آدرسی مشخص نشود، stunnel به طور پیشفرض روی تمام آدرسهای IPv4 رابطهای محلی گوش میدهد.
برای گوش دادن روی تمام آدرسهای IPv6 از فرمت زیر استفاده کنید:
-
accept = :::port
- •
- CAengine = CA_ENGINE_ID
بارگذاری گواهیهای معتبر مرجع صدور گواهی (CA) از یک موتور رمزنگاری
این گزینه امکان تعیین مکان فایل حاوی گواهیهای مورد استفاده توسط گزینه verifyChain یا verifyPeer را فراهم میکند.
این گزینه میتواند چندین بار در یک بخش تکرار شود.
موتورهای پشتیبانیشده در حال حاضر: pkcs11، cng.
- •
- CApath = CA_DIR
بارگذاری گواهیهای معتبر مرجع صدور گواهی از یک پوشه
این گزینه پوشهای را مشخص میکند که stunnel در صورت استفاده از گزینه verifyChain یا verifyPeer در آن به جستجوی گواهیها میپردازد. فایلهای گواهی باید دارای نامهای ویژهای به صورت XXXXXXXX.0 باشند که در آن XXXXXXXX هش رمزنگاری نمایش DER نام سوژه گواهی است.
این گزینه همچنین میتواند برای ارائه گواهی root CA که برای اعتبارسنجی صحیح منگنه OCSP (OCSP stapling) در حالت سرور ضروری است، استفاده شود.
تابع هش در OpenSSL 1.0.0 تغییر یافته است. هنگام تغییر نسخه از OpenSSL 0.x.x به 1.x.x، باید دستور c_rehash را اجرا کنید.
اگر پوشه chroot تعریف شده باشد، مسیر CApath نسبت به آن پوشه در نظر گرفته میشود.
- •
- CAfile = CA_FILE
بارگذاری گواهیهای معتبر مرجع صدور گواهی از یک فایل
این گزینه امکان تعیین مکان فایل حاوی گواهیهای مورد استفاده توسط گزینه verifyChain یا verifyPeer را فراهم میکند.
این گزینه همچنین میتواند برای ارائه گواهی root CA که برای اعتبارسنجی صحیح منگنه OCSP (OCSP stapling) در حالت سرور ضروری است، استفاده شود.
- •
- CAstore = CA_URI
بارگذاری گواهیهای معتبر مرجع صدور گواهی از منبع مشخصشده توسط URI
این گزینه امکان بارگذاری گواهیهای CA را از یک مخزن خارجی پشتیبانیشده توسط سازوکار OSSL_STORE فراهم میکند، مانند یک ماژول PKCS#11 (مانند توکن سختافزاری)، مخزن گواهی سیستم یا یک منبع شبکه.
این گزینه میتواند مستقل از CAfile و CApath استفاده شود و به طور مشابه برای اعتبارسنجی زنجیره گواهی با استفاده از گزینه verifyChain یا verifyPeer و همچنین برای اعتبارسنجی OCSP stapling در سمت سرور به کار میرود.
این گزینه نیازمند کتابخانه OpenSSL نسخه 3.0 یا جدیدتر است.
- •
- cert = CERT_FILE | URI
فایل حاوی زنجیره گواهی
این گزینه مکان فایل حاوی گواهیهای مورد استفاده توسط برنامه stunnel برای احراز هویت در برابر طرف مقابل ارتباط را مشخص میکند. فایل باید شامل زنجیره کامل گواهی از گواهی سرور/کلاینت تا گواهی خودامضاشده Root CA باشد. فایلها در قالب PEM یا P12 پشتیبانی میشوند.
وجود گواهی برای اجرای برنامه در حالت سرور الزامی است. در حالت کلاینت، گواهی اختیاری است.
گزینه cert میتواند چندین بار مشخص شود. نخستین گواهی یافتشده به عنوان گواهی سرور یا کلاینت استفاده میشود، در حالی که گواهیهای بعدی به عنوان اعضای میانی زنجیره در نظر گرفته خواهند شد. این قابلیت نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است.
در صورت استفاده از یک موتور رمزنگاری یا provider، گزینه cert امکان انتخاب شناسه (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 سوژه گواهی ارائهشده
یک بخش میتواند شامل چندین مورد از گزینه checkIP باشد. گواهیها در صورتی پذیرفته میشوند که بخش پیکربندی سوژه گواهی را بررسی نکند، یا آدرس IP گواهی ارائهشده با یکی از آدرسهای IP مشخصشده با checkIP مطابقت داشته باشد.
این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است.
- •
- ciphers = CIPHER_LIST
فهرست رمزهای مجاز برای پروتکلهای SSLv2، SSLv3، TLSv1، TLSv1.1 و TLSv1.2
این گزینه بر فهرست پارامترهای رمزنگاری برای پروتکل TLSv1.3 تأثیری ندارد.
پارامتر این گزینه فهرستی از رمزهایی است که هنگام برقراری اتصالات جدید TLS استفاده میشوند، به عنوان مثال: DES-CBC3-SHA:IDEA-CBC-MD5
- •
- ciphersuites = CIPHERSUITES_LIST
فهرست پارامترهای رمزنگاری مجاز برای پروتکل TLSv1.3
پارامتر این گزینه فهرستی از پارامترهای رمزنگاری به ترتیب اولویت است.
از نسخه OpenSSL 3.0، گزینه ciphersuites رمزهای ناشناخته را نادیده میگیرد.
گزینه ciphersuites از زمان 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 با پارامتر مشخصشده اجرا میشود. این امر صدور دستورات پیکربندی OpenSSL را از طریق فایل پیکربندی stunnel ممکن میسازد. دستورات در دسترس در صفحه راهنمای SSL_CONF_cmd(3ssl) شرح داده شدهاند.
با استفاده مکرر از دستور config میتوان گزینههای متعددی از OpenSSL را مشخص کرد.
به جای غیرفعال کردن config = Curves:list_curves، از گزینه curves برای تنظیم منحنیهای بیضوی استفاده کنید.
این گزینه نیازمند کتابخانه OpenSSL نسخه 1.0.2 یا جدیدتر است.
- •
- connect = [HOST:]PORT
اتصال به سرور راه دور روی پورت مشخصشده
اگر آدرسی مشخص نشود، stunnel به طور پیشفرض به سرور محلی متصل میشود.
برای دستیابی به دسترسیپذیری بالا یا توزیع بار میان چندین سرور، میتوان از این دستور چندین بار در یک بخش استفاده کرد.
- •
- CRLpath = CRL_DIR
پوشه فهرستهای ابطال گواهی (CRL)
این گزینه پوشهای را مشخص میکند که stunnel در آن به جستجوی فهرستهای CRL مورد استفاده توسط گزینههای verifyChain و verifyPeer، و همچنین توسط CRLcheckChain برای بررسی کامل زنجیره گواهی میپردازد. فایلهای لیست CRL باید نامهای خاصی به صورت XXXXXXXX.r0 داشته باشند که در آن XXXXXXXX مقدار هش فهرست CRL است.
تابع هش در OpenSSL 1.0.0 تغییر یافته است. هنگام تغییر نسخه از OpenSSL 0.x.x به 1.x.x باید دستور c_rehash را اجرا کنید.
اگر پوشه chroot تعریف شده باشد، مسیر CRLpath نسبت به آن پوشه در نظر گرفته میشود.
- •
- CRLfile = CRL_FILE
فایل فهرستهای ابطال گواهی (CRL)
این گزینه مکان فایل حاوی فهرستهای CRL مورد استفاده توسط گزینههای verifyChain و verifyPeer، و همچنین CRLcheckChain را برای بررسی کامل زنجیره گواهی مشخص میکند.
- •
- CRLcheckChain = yes | no
بررسی فهرستهای CRL برای زنجیره کامل گواهیهای طرف مقابل ارتباط
این گزینه نیازمند تنظیم verifyChain = yes و مشخص کردن منبع لیستهای CRL با استفاده از CRLfile یا CRLpath است.
به طور پیشفرض، لیستهای CRL تنها برای گواهی نهاد پایانی (برگ) طرف مقابل ارتباط بررسی میشوند. تنظیم CRLcheckChain = yes بررسی لیستهای CRL را برای هر گواهی در زنجیره صادرکنندگان تأییدشده نیز فعال میکند. در حالت زنجیره کامل، اگر لیست CRL صادرکننده مربوطه موجود نباشد یا منقضی یا نامعتبر باشد، اعتبارسنجی ناموفق خواهد بود.
برای زنجیرهای مانند Root CA -> Intermediate CA -> Leaf Certificate، لیست CRL صادرشده توسط Intermediate CA برای بررسی گواهی پایانی و لیست CRL صادرشده توسط Root CA برای بررسی گواهی میانی مورد نیاز است.
پیشفرض: 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
شناسه ریسه سیستمعامل، نه یکتاست (حتی در یک نمونه واحد از برنامه stunnel) و نه کوتاه. این نوع برای عیبیابی مشکلات نرمافزار یا خطاهای پیکربندی کاربرد دارد.
- •
- process
شناسه فرآیند (PID) ممکن است در حالت inetd کاربرد داشته باشد.
پیشفرض: sequential
- •
- debug = LEVEL
میزان جزئیات لاگگیری
سطح لاگگیری را میتوان با یکی از نامها یا اعداد زیر مشخص کرد: emerg (0)، alert (1)، crit (2)، err (3)، warning (4)، notice (5)، info (6) یا debug (7). پیامهایی با سطح عددی کمتر یا مساوی با سطح تعیینشده ثبت میشوند. برای دستیابی به بالاترین سطح جزئیات میتوان از گزینه debug = debug یا debug = 7 استفاده کرد. سطح پیشفرض notice (5) است.
- •
- delay = yes | no
تأخیر در تفکیک آدرس DNS مشخصشده در گزینه connect
این گزینه برای DNS پویا یا زمانی که سرویس DNS در هنگام آغاز به کار برنامه stunnel در دسترس نیست (مانند کلاینتهای VPN یا اتصالات شمارهگیری) مفید است.
اگر تفکیک هر یک از آدرسهای connect برای یک سرویس ناموفق باشد، تفکیک تاخیری DNS به طور خودکار فعال میگردد.
تفکیک تاخیری آدرس به طور خودکار گزینه failover = prio را فعال میکند.
پیشفرض: no
- •
- engineId = DEVICE_NUMBER
انتخاب موتور رمزنگاری برای سرویس
- •
- engineNum = DEVICE_NUMBER
انتخاب موتور رمزنگاری برای سرویس
دستگاهها از شماره 1 به بالا شمارهگذاری میشوند.
- •
- exec = PROGRAM_PATH
اجرای یک برنامه محلی منطبق با سوپردیمن inetd
اگر پوشه chroot تعریف شده باشد، مسیر exec نسبت به آن پوشه در نظر گرفته میشود.
روی پلتفرمهای یونیکس متغیرهای محیطی زیر مقداردهی میشوند: REMOTE_HOST، REMOTE_PORT، SSL_CLIENT_DN، SSL_CLIENT_I_DN.
- •
- execArgs = $0 $1 $2 ...
آرگومانهای ارسالی به گزینه exec شامل نام برنامه ($0)
نقلقول (quoting) در نسخه فعلی برنامه پشتیبانی نمیشود. آرگومانها با هر تعداد نویسه فاصله سفید از یکدیگر تفکیک میشوند.
- •
- failover = rr | prio
راهبرد انتخاب سرورهای تعیینشده توسط پارامترهای "connect".
- •
- rr
نوبتگردشی (round robin) - توزیع متوازن و عادلانه بار
- •
- prio
اولویت (priority) - استفاده از ترتیب گزینهها در فایل پیکربندی
پیشفرض: prio
- •
- ident = USERNAME
اعتبارسنجی نام کاربری راه دور با استفاده از پروتکل IDENT (مطابق با RFC 1413)
- •
- include = DIRECTORY
خواندن قطعات فایلهای پیکربندی از پوشه مشخصشده
فایلها به ترتیب صعودی الفبایی نامهایشان خوانده و اعمال میشوند. قاعده نامگذاری پیشنهادی برای فایلها:
برای گزینههای سراسری:
-
00-global.conf
برای گزینههای محلی سرویس:
-
01-service.conf 02-service.conf
- •
- key = KEY_FILE | URI
کلید خصوصی مربوط به گواهی مشخصشده در گزینه cert
کلید خصوصی برای احراز هویت دارنده گواهی الزامی است. از آنجا که این کلید باید محرمانه بماند، دسترسی خواندن آن باید منحصراً در اختیار مالک فایل باشد. در سیستمهای یونیکس این امر با دستور زیر حاصل میشود:
-
chmod 600 keyfile
در صورت استفاده از یک موتور رمزنگاری یا provider، گزینه key امکان انتخاب شناسه (PKCS#11 URI) کلید خصوصی مورد استفاده را فراهم میسازد.
توجه: استفاده از provider به OpenSSL نسخه 3.0 یا جدیدتر نیاز دارد.
پیشفرض: مقدار گزینه cert
- •
- libwrap = yes | no
فعال یا غیرفعال کردن استفاده از فایلهای /etc/hosts.allow و /etc/hosts.deny.
پیشفرض: no (از نسخه 5.00 به بعد)
- •
- local = HOST
آدرس IP مبدأ برای برقراری اتصالات راه دور
به طور پیشفرض، از آدرس IP خارجیترین رابط به سمت سرور مقصد استفاده میشود.
- •
- OCSP = URL
نشانی پاسخدهنده (responder) پروتکل OCSP برای اعتبارسنجی گواهی طرف مقابل
- •
- OCSPaia = yes | no
اعتبارسنجی گواهیها با استفاده از پاسخدهندههای AIA
گزینه OCSPaia امکان اعتبارسنجی گواهیها را از طریق فهرست نشانیهای اینترنتی پاسخدهندههای OCSP موجود در افزونههای AIA (دسترسی به اطلاعات مرجع - Authority Information Access) فراهم میکند.
- •
- OCSPflag = OCSP_FLAG
فلگ پاسخدهنده OCSP
فلگهای پشتیبانیشده در حال حاضر: NOCERTS، NOINTERN، NOSIGS، NOCHAIN، NOVERIFY، NOEXPLICIT، NOCASIGN، NODELEGATED، NOCHECKS، TRUSTOTHER، RESPID_KEY، NOTIME
برای مشخص کردن چندین فلگ، گزینه OCSPflag را چندین بار تکرار کنید.
- •
- OCSPnonce = yes | no
ارسال و بررسی نانس OCSP (OCSP nonce)
گزینه OCSPnonce پروتکل OCSP را در برابر حملات بازپخش (replay attacks) محافظت میکند. با توجه به بار پردازشی، افزونه נانس معمولاً تنها توسط پاسخدهندههای OCSP داخلی (مثلاً سازمانی) پشتیبانی میشود و نه عمومی.
- •
- OCSPrequire = yes | no
الزام به دریافت پاسخ قطعی از پاسخدهنده OCSP
غیرفعال کردن این گزینه امکان پذیرش اتصال را در صورت عدم دریافت پاسخ قاطع OCSP از منگنه کردن (stapling) یا درخواست مستقیم، ممکن میسازد.
پیشفرض: yes
- •
- options = SSL_OPTIONS
گزینههای کتابخانه 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 = PROTOCOL
مذاکره TLS با پروتکل کاربردی مشخصشده
این گزینه مذاکره اولیه رمزنگاری TLS را برای پروتکل کاربردی تعیینشده فعال میکند. از گزینه protocol نباید برای رمزنگاری TLS روی پورت مجزا استفاده شود.
پروتکلهای پشتیبانیشده در حال حاضر:
- •
- cifs
افزونه غیرمستند پروتکل CIFS که توسط سرور Samba پشتیبانی میشد. پشتیبانی از این افزونه در نسخه 3.0.0 سرور Samba متوقف گردید.
- •
- capwin
پشتیبانی از برنامه https://www.capwin.org
- •
- capwinctrl
پشتیبانی از برنامه https://www.capwin.org
این پروتکل تنها در حالت کلاینت پشتیبانی میشود.
- •
- connect
مذاکره RFC 2817 - Upgrading to TLS Within HTTP/1.1، بخش 5.2 - Requesting a Tunnel with CONNECT
این پروتکل تنها در حالت کلاینت پشتیبانی میشود.
- •
- imap
مذاکره RFC 2595 - Using TLS with IMAP, POP3 and ACAP
- •
- ldap
مذاکره RFC 2830 - Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
- •
- nntp
مذاکره RFC 4642 - Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)
این پروتکل تنها در حالت کلاینت پشتیبانی میشود.
- •
- pgsql
- •
- pop3
مذاکره RFC 2449 - POP3 Extension Mechanism
- •
- proxy
انتقال IP اصلی کلاینت با استفاده از نگارش 1 پروتکل HAProxy PROXY https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
- •
- smtp
مذاکره RFC 2487 - SMTP Service Extension for Secure SMTP over TLS
- •
- socks
پروتکل SOCKS در نگارشهای 4، 4a و 5 پشتیبانی میشود. پروتکل 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
هدر برای مذاکره پروتکل
در نسخه فعلی، این گزینه منحصراً در پروتکل `connect' کاربرد دارد.
- •
- protocolHost = HOST
آدرس هاست برای مذاکره پروتکل
برای پروتکل `connect'، گزینه protocolHost سرور مقصد TLS را که پروکسی باید به آن متصل شود تعیین میکند. آدرس سرور پروکسی که stunnel به آن متصل میشود باید با گزینه connect مشخص گردد.
برای پروتکل `smtp'، گزینه protocolHost مقدار دستور HELO/EHLO را که هنگام مذاکره کلاینت ارسال میشود تعیین میکند.
- •
- protocolPassword = PASSWORD
گذرواژه برای مذاکره پروتکل
این گزینه منحصراً در پروتکلهای کلاینت `connect' و `smtp' پشتیبانی میشود.
- •
- protocolUsername = USERNAME
نام کاربری برای مذاکره پروتکل
این گزینه منحصراً در پروتکلهای کلاینت `connect' و `smtp' پشتیبانی میشود.
- •
- PSKidentity = IDENTITY
شناسه کلاینت در روش PSK (کلید پیشاشتراکی)
گزینه PSKidentity میتواند در بخشهای کلاینت برای انتخاب هویت مورد استفاده در احراز هویت PSK به کار رود. این گزینه در بخشهای سرور نادیده گرفته میشود.
پیشفرض: نخستین شناسه تعریفشده در فایل PSKsecrets
- •
- PSKsecrets = FILE
فایل حاوی شناسهها و کلیدهای PSK
هر خط از فایل دارای قالب زیر است:
-
IDENTITY:KEY
کلیدهای هگزادسیمال به طور خودکار به داده دودویی تبدیل میشوند. کلید باید حداقل ۱۶ بایت باشد که در صورت هگزادسیمال معادل حداقل ۳۲ نویسه است. دسترسی خواندن یا نوشتن این فایل باید کاملاً محدود شود.
- •
- pty = yes | no (فقط یونیکس)
تخصیص شبهترمینال (pseudo-terminal) برای برنامه اجرا شده توسط گزینه `exec'
- •
- redirect = [HOST:]PORT
هدایت مجدد کلاینتی که احراز هویت آن با گواهی ناموفق بوده است
این گزینه تنها در حالت سرور عمل میکند. بخشی از مذاکرات پروتکل با گزینه redirect ناسازگار هستند.
- •
- renegotiation = yes | no
اجازه مذاکره مجدد (renegotiation) TLS
کاربردهای مذاکره مجدد TLS شامل برخی سناریوهای احراز هویت و تجدید کلیدها در اتصالات طولانیمدت است.
از سوی دیگر، این ویژگی ممکن است حمله منع سرویس (DoS) پیشپاافتادهای را با تحمیل بار پردازشی به CPU تسهیل کند:
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
همه چیز مجاز است.
- •
- سطح 1
سطح امنیتی که حداقل ۸۰ بیت امنیت را تضمین میکند. هیچ پارامتر رمزنگاری با امنیت کمتر از ۸۰ بیت مجاز به استفاده نیست. بنابراین کلیدهای RSA، DSA و DH با طول کمتر از ۱۰۲۴ بیت و همچنین کلیدهای ECC کوتاهتر از ۱۶۰ بیت و کلیه مجموعههای رمز صادراتی (export) ممنوع هستند. استفاده از SSLv2 ممنوع است. کلیه لیستهای پارامترهای رمزنگاری که از MD5 برای MAC استفاده میکنند ممنوع میباشند. از زمان OpenSSL 3.0، نسخههای TLS قدیمیتر از 1.2 غیرفعال شدهاند.
- •
- سطح 2
سطح امنیتی که ۱۱۲ بیت امنیت را تضمین میکند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۲۰۴۸ بیت و کلیدهای ECC کوتاهتر از ۲۲۴ بیت ممنوع هستند. علاوه بر ممنوعیتهای سطح ۱، استفاده از مجموعههای رمزی که از RC4 استفاده میکنند نیز ممنوع است. فشردهسازی غیرفعال است. استفاده از SSLv3 در نسخههای OpenSSL قدیمیتر از 3.0 ممنوع میباشد.
- •
- سطح 3
سطح امنیتی که ۱۲۸ بیت امنیت را تضمین میکند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۳۰۷۲ بیت و کلیدهای ECC کوتاهتر از ۲۵۶ بیت ممنوع هستند. علاوه بر ممنوعیتهای سطح ۲، استفاده از مجموعههای رمزی که رازداری رو به جلو (forward secrecy) را فراهم نمیکنند نیز ممنوع است. بلیتهای نشست (session tickets) غیرفعال هستند. نسخههای TLS قدیمیتر از 1.1 در نگارشهای OpenSSL قبل از 3.0 ممنوع میباشند.
- •
- سطح 4
سطح امنیتی که ۱۹۲ بیت امنیت را تضمین میکند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۷۶۸۰ بیت و کلیدهای ECC کوتاهتر از ۳۸۴ بیت ممنوع هستند. لیستهای پارامترهای رمزنگاری که از SHA1 برای MAC استفاده میکنند ممنوع میباشند. نسخههای TLS قدیمیتر از 1.2 در نگارشهای OpenSSL قبل از 3.0 ممنوع هستند.
- •
- سطح 5
سطح امنیتی که ۲۵۶ بیت امنیت را تضمین میکند. بر این اساس کلیدهای RSA، DSA و DH با طول کمتر از ۱۵۳۶۰ بیت و کلیدهای ECC کوتاهتر از ۵۱۲ بیت ممنوع هستند.
- •
- پیشفرض: 2
گزینه securityLevel از زمان OpenSSL 1.1.0 در دسترس است.
- •
- requireCert = yes | no
الزام ارائه گواهی کلاینت برای گزینههای verifyChain یا verifyPeer
هنگامی که گزینه requireCert روی no تنظیم شده باشد، stunnel اتصالات کلاینتهایی را که گواهی ارائه نکردهاند میپذیرد.
هر دو گزینه verifyChain = yes و verifyPeer = yes به طور خودکار مقدار requireCert را برابر yes قرار میدهند.
پیشفرض: no
- •
- setgid = GROUP_ID (فقط یونیکس)
شناسه گروه یونیکس
به عنوان گزینه سراسری: گروهی که برنامه stunnel با دسترسیهای آن اجرا خواهد شد.
به عنوان گزینه سرویس: گروه سوکت یونیکس ایجادشده توسط گزینه "accept".
- •
- setuid = USER_ID (فقط یونیکس)
شناسه کاربر یونیکس
به عنوان گزینه سراسری: کاربری که برنامه stunnel با دسترسیهای آن اجرا خواهد شد.
به عنوان گزینه سرویس: مالک سوکت یونیکس ایجادشده توسط گزینه "accept".
- •
- sessionCacheSize = CACHE_SIZE
اندازه حافظه نهان (کش) نشستهای TLS
این پارامتر حداکثر تعداد ورودیهای حافظه نهان داخلی نشست را مشخص میکند.
مقدار 0 به معنای نامحدود بودن اندازه حافظه نهان است. این مقدار برای سیستمهای عملیاتی به دلیل ریسک بروز حملات منع سرویس (DoS) از طریق اتمام حافظه RAM توصیه نمیشود.
- •
- sessionCacheTimeout = SECONDS
مدت زمان انقضای حافظه نهان نشستهای TLS
این پارامتر مدت زمان بر حسب ثانیه را مشخص میکند که پس از آن نشست TLS از حافظه نهان حذف میگردد.
- •
- sessionResume = yes | no
اجازه یا عدم اجازه برای ازسرگیری نشست (session resumption)
پیشفرض: yes
- •
- sessiond = HOST:PORT
آدرس سرور sessiond - سرور حافظه نهان نشستهای TLS
- •
- sni = SERVICE_NAME:SERVER_NAME_PATTERN (حالت سرور)
استفاده از سرویس به عنوان سرویس زیرمجموعه (سرور مجازی) برای افزونه Server Name Indication در TLS (مطابق با RFC 3546).
مقدار SERVICE_NAME به سرویس والد اشاره دارد که اتصالات کلاینتها را از طریق گزینه accept دریافت میکند. مقدار SERVER_NAME_PATTERN نام سرور مجازی را مشخص میکند. این الگو میتواند با نویسه `*' آغاز شود، به عنوان مثال: ’*.example.com". معمولاً چندین سرویس زیرمجموعه به یک سرویس والد واحد مرتبط میشوند. گزینه sni همچنین میتواند چندین بار در چارچوب یک سرویس زیرمجموعه تعریف شود.
نه سرویس والد و نه سرویس زیرمجموعه نباید در حالت کلاینت پیکربندی شوند.
گزینه connect در سرویس زیرمجموعه در صورت همراهی با گزینه protocol نادیده گرفته میشود، زیرا در این حالت اتصال به سرور راه دور پیش از مذاکره TLS برقرار میگردد.
احراز هویت با استفاده از کتابخانه libwrap دو بار انجام میپذیرد: ابتدا برای سرویس والد پس از دریافت اتصال TCP، و سپس برای سرویس زیرمجموعه در حین مذاکره TLS.
گزینه sni از زمان OpenSSL 1.0.0 در دسترس است.
- •
- sni = SERVER_NAME (حالت کلاینت)
استفاده از پارامتر به عنوان مقدار افزونه Server Name Indication در پروتکل TLS (مطابق با RFC 3546).
مقدار خالی برای پارامتر SERVER_NAME ارسال افزونه SNI را غیرفعال میسازد.
گزینه sni از زمان OpenSSL 1.0.0 در دسترس است.
- •
- socket = a|l|r:OPTION=VALUE[:VALUE]
تنظیم گزینه روی سوکت پذیرنده/محلی/راه دور
برای گزینههای linger مقادیر به صورت l_onoff:l_linger هستند. برای گزینههای time مقادیر به صورت tv_sec:tv_usec میباشند.
مثالها:
-
socket = l:SO_LINGER=1:60 تنظیم مهلت انقضای یک دقیقهای هنگام بستن سوکت محلی socket = r:SO_OOBINLINE=yes قرار دادن دادههای خارج از باند (out-of-band) مستقیماً در جریان دادههای ورودی برای سوکتهای راه دور socket = a:SO_REUSEADDR=no غیرفعال کردن استفاده مجدد از پورت (به طور پیشفرض فعال است) socket = a:SO_BINDTODEVICE=lo پذیرش اتصالات منحصراً روی رابط محلی (loopback)
- •
- 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 به طور پیشفرض غیرفعال هستند.
از زمان OpenSSL 1.1.0، تنظیم
-
sslVersion = SSL_VERSION
معادل گزینههای زیر است:
-
sslVersionMax = SSL_VERSION sslVersionMin = SSL_VERSION
- •
- sslVersionMax = SSL_VERSION
حداکثر نسخه پشتیبانیشده پروتکل TLS
نسخههای پشتیبانیشده: all، SSLv3، TLSv1، TLSv1.1، TLSv1.2، TLSv1.3
مقدار all تمامی نسخههای پروتکل را تا حداکثر نسخه پشتیبانیشده توسط کتابخانه OpenSSL فعال میسازد.
در دسترس بودن پروتکلهای خاص به نگارش OpenSSL مورد استفاده وابسته است.
گزینه sslVersionMax از زمان OpenSSL 1.1.0 در دسترس است.
پیشفرض: all
- •
- sslVersionMin = SSL_VERSION
حداقل نسخه پشتیبانیشده پروتکل TLS
نسخههای پشتیبانیشده: all، SSLv3، TLSv1، TLSv1.1، TLSv1.2، TLSv1.3
مقدار all تمامی نسخههای پروتکل را تا حداقل نسخه پشتیبانیشده توسط کتابخانه OpenSSL فعال میسازد.
در دسترس بودن پروتکلهای خاص به نگارش OpenSSL مورد استفاده وابسته است.
گزینه sslVersionMin از زمان OpenSSL 1.1.0 در دسترس است.
پیشفرض: TLSv1
- •
- stack = BYTES (به استثنای مدل FORK)
اندازه پشته پردازنده برای ریسههای ایجادشده
پشته بیش از حد بزرگ میزان مصرف حافظه مجازی را افزایش میدهد. پشته بسیار کوچک ممکن است سبب بروز اختلال در پایداری برنامه گردد.
پیشفرض: 65536 بایت (کافی برای پلتفرمهای آزمایششده)
- •
- ticketKeySecret = SECRET
کلید متقارن هگزادسیمال مورد استفاده سرور برای تضمین محرمانگی بلیتهای نشست
بلیتهای نشست تعریفشده در RFC 5077 قابلیت ارتقایافتهای برای ازسرگیری نشست ارائه میکنند که در آن نیازی به حفظ وضعیت نشست توسط سرور نیست.
استفاده همزمان از گزینههای ticketKeySecret و ticketMacSecret امکان ازسرگیری نشست را روی کلاستری از سرورها یا پس از راهاندازی مجدد سرور میسر میسازد.
کلید باید به اندازه ۱۶ یا ۳۲ بایت باشد که دقیقاً معادل ۳۲ یا ۶۴ رقم هگزادسیمال است. بایتها میتوانند به صورت اختیاری با دو نقطه از هم جدا شوند.
این گزینه منحصراً در حالت سرور عمل میکند.
گزینه ticketKeySecret از زمان OpenSSL 1.0.0 در دسترس است.
غیرفعالسازی گزینه NO_TICKET برای پشتیبانی از بلیتهای نشست در OpenSSL قدیمیتر از 1.1.1 الزامی است، اما این گزینه با redirect ناسازگار است.
- •
- ticketMacSecret = SECRET
کلید متقارن هگزادسیمال مورد استفاده سرور برای تضمین یکپارچگی بلیتهای نشست
کلید باید به اندازه ۱۶ یا ۳۲ بایت باشد که دقیقاً معادل ۳۲ یا ۶۴ رقم هگزادسیمال است. بایتها میتوانند به صورت اختیاری با دو نقطه از هم جدا شوند.
این گزینه منحصراً در حالت سرور عمل میکند.
گزینه ticketMacSecret از زمان OpenSSL 1.0.0 در دسترس است.
- •
- TIMEOUTbusy = SECONDS
مدت زمان انتظار برای دریافت دادههای مورد انتظار
- •
- TIMEOUTclose = SECONDS
مدت زمان انتظار برای اعلان close_notify (در صورتی که کلاینت MSIE است روی 0 تنظیم شود)
- •
- TIMEOUTconnect = SECONDS
مدت زمان انتظار برای برقراری اتصال
- •
- TIMEOUTidle = SECONDS
حداکثر مدت زمان مجاز برای باز نگه داشتن یک اتصال بیکار
- •
- TIMEOUTocsp = SECONDS
مدت زمان انتظار برای برقراری اتصال با سرور پاسخدهنده OCSP
- •
- transport = tcp | udp
انتخاب پروتکل لایه انتقال
مقادیر پشتیبانیشده:
- •
- tcp
پروتکل استاندارد TLS روی بستر TCP (پیشفرض).
- •
- udp
پروتکل DTLS روی بستر UDP.
هر دیتاگرام یک اتصال منطقی جدید را در چارچوب سرویس ایجاد میکند. سرور برای هر کلاینت از یک سوکت متصل مجزا استفاده کرده و کوکیهای DTLS از حملات منع سرویس توزیعشده (DDoS) بازتابی محافظت میکنند.
پیشفرض: tcp
- •
- transparent = none | source | destination | both (فقط یونیکس)
حالت پروکسی شفاف روی پلتفرمهای پشتیبانیشده
مقادیر پشتیبانیشده:
- •
- none
غیرفعال کردن پشتیبانی از پروکسی شفاف. این مقدار پیشفرض است.
- •
- source
بازنویسی آدرس مبدأ به گونهای که به نظر برسد اتصال مستقیماً از سوی کلاینت برقرار شده است، نه از برنامه stunnel.
این گزینه در حال حاضر پشتیبانی میشود در:
- •
- حالت راه دور (گزینه connect) در سامانه Linux >=2.6.28
پیکربندی نیازمند اعمال تنظیمات 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 به عنوان کاربر root و بدون گزینه setuid است.
- •
- حالت راه دور (گزینه connect) در سامانه Linux 2.2.x
این پیکربندی نیازمند کامپایل هسته لینوکس با گزینه transparent proxy است. سرویس مقصد باید روی دستگاه مجزایی مستقر باشد که مسیر دستیابی به آن از طریق سرور stunnel عبور کند.
علاوه بر این، stunnel باید به عنوان root و بدون گزینه setuid اجرا گردد.
- •
- حالت راه دور (گزینه connect) در سامانه FreeBSD >=8.0
این پیکربندی نیازمند تنظیم فایروال و مسیریابی است. برنامه stunnel باید به عنوان کاربر root و بدون گزینه 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>:<local_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
استفاده از پروکسی شفاف هم برای آدرس مبدأ و هم برای آدرس مقصد.
جهت حفظ سازگاری با نگارشهای پیشین، دو گزینه زیر نیز پشتیبانی میشوند:
- •
- yes
نام این گزینه به source تغییر یافته است.
- •
- no
نام این گزینه به none تغییر یافته است.
- •
- verify = LEVEL
اعتبارسنجی گواهی طرف مقابل ارتباط
این گزینه منسوخ شده و باید با گزینههای verifyChain و verifyPeer جایگزین گردد.
- •
- سطح 0
درخواست گواهی و نادیده گرفتن آن
- •
- سطح 1
اعتبارسنجی در صورت ارائه گواهی
- •
- سطح 2
اعتبارسنجی با گواهی نصبشده مرجع صدور گواهی (CA)
- •
- سطح 3
اعتبارسنجی با گواهی طرف مقابل که به صورت محلی نصب شده است
- •
- سطح 4
اعتبارسنجی با گواهی طرف مقابل با نادیده گرفتن زنجیره CA
- •
- پیشفرض
عدم اعتبارسنجی
- •
- verifyChain = yes | no
اعتبارسنجی زنجیره گواهیهای طرف مقابل ارتباط
برای اعتبارسنجی گواهی سرور، الزام به یک گواهی خاص با استفاده از گزینههای checkHost یا checkIP امری حیاتی است.
گواهی خودامضاشده مرجع اصلی صدور گواهی (Root CA) باید در فایل مشخصشده در گزینه CAfile یا در پوشه مشخصشده در گزینه CApath قرار داده شود.
پیشفرض: no
- •
- verifyPeer = yes | no
اعتبارسنجی گواهی طرف مقابل ارتباط
گواهی طرف مقابل باید در فایل مشخصشده در گزینه CAfile یا در پوشه مشخصشده در گزینه CApath قرار داده شود.
پیشفرض: no
کدهای بازگشت (RETURN VALUE)
برنامه stunnel در صورت موفقیت مقدار صفر و در صورت بروز خطا مقدار غیرصفر برمیگرداند.
سیگنالها (SIGNALS)
سیگنالهای زیر را میتوان برای کنترل برنامه در سیستمعاملهای یونیکس به کار برد:
- •
- SIGHUP
بارگذاری مجدد فایل پیکربندی.
برخی از گزینههای سراسری مجدداً بارگذاری نخواهند شد:
- chroot
- foreground
- pid
- setgid
- setuid
در صورت استفاده از گزینه `setuid'، برنامه stunnel قادر به بارگذاری مجدد پیکربندیهایی که از پورتهای ممتاز (<1024) استفاده میکنند نخواهد بود.
در صورت استفاده از گزینه `chroot'، برنامه stunnel کلیه فایلهای مورد نیاز (از جمله فایل پیکربندی، گواهیها، لاگ و فایل pid) را در درون پوشه مشخصشده با `chroot' جستجو خواهد کرد.
- •
- SIGUSR1
بستن و باز کردن مجدد فایل لاگ. این ویژگی میتواند در اسکریپتهای چرخش لاگ (log rotation) برنامه stunnel مورد استفاده قرار گیرد.
- •
- SIGUSR2
ثبت فهرست اتصالات فعال در فایل لاگ.
- •
- SIGTERM, SIGQUIT, SIGINT
خاتمه دادن به اجرای برنامه.
پیامد ارسال سایر سیگنالها تعریفنشده است.
مثالها (EXAMPLES)
برای رمزنگاری اتصالات به یک سرور محلی imapd میتوان از تنظیمات زیر استفاده کرد:
-
[imapd] accept = 993 exec = /usr/sbin/imapd execArgs = imapd
یا در حالت راه دور:
-
[imapd] accept = 993 connect = 143
برای فعالسازی دریافت ایمیل از طریق TLS توسط یک کلاینت ایمیل محلی از سرور imapd، کلاینت را برای دریافت ایمیل از localhost و پورت 119 تنظیم کرده و از پیکربندی زیر استفاده کنید:
-
[imap] client = yes accept = 143 connect = server:993
در ترکیب با برنامه pppd، برنامه stunnel امکان برپایی یک شبکه خصوصی مجازی (VPN) ساده را فراهم میسازد. در سمت سرور که روی پورت 2020 گوش میدهد، پیکربندی میتواند به این صورت باشد:
-
[vpn] accept = 2020 exec = /usr/sbin/pppd execArgs = pppd local pty = yes
فایل پیکربندی زیر میتواند برای اجرای برنامه stunnel در حالت inetd به کار رود. شایان توجه است که در این فایل پیکربندی هیچ بخشی با نام [نام_سرویس] وجود ندارد.
-
exec = /usr/sbin/imapd execArgs = imapd
برای پیکربندی VPN میتوان از تنظیمات کلاینت زیر استفاده کرد:
-
[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] ; سرویس والد accept = 443 cert = default.pem connect = default.internal.mydomain.com:8080 [sni1] ; سرویس زیرمجموعه ۱ sni = virtual:server1.mydomain.com cert = server1.pem connect = server1.internal.mydomain.com:8081 [sni2] ; سرویس زیرمجموعه ۲ sni = virtual:server2.mydomain.com cert = server2.pem connect = server2.internal.mydomain.com:8082 verifyPeer = yes CAfile = server2-allowed-clients.pem
نمونه پیکربندی برای احراز هویت با استفاده از کلید خصوصی ذخیرهشده در مخزن گواهی ویندوز (Windows Certificate Store، فقط ویندوز):
-
engine = capi [service] engineId = capi client = yes accept = 127.0.0.1:8080 connect = example.com:8443
در صورت استفاده از موتور CAPI، گزینه cert نباید تنظیم شود، زیرا کلید کلاینت به طور خودکار بر اساس گواهیهای CA معتبر ارائهشده توسط سرور از Certificate Store واکشی خواهد شد.
نمونه پیکربندی برای استفاده از گواهی و کلید خصوصی از دستگاه پشتیبانیشده توسط موتور 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
نمونه پیکربندی برای استفاده از گواهی و کلید خصوصی از دستگاه پشتیبانیشده توسط ارائهدهنده `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` تعیین شود.
نکات (NOTES)
محدودیتها (RESTRICTIONS)
برنامه stunnel را نمیتوان برای رمزنگاری پروتکل FTP استفاده کرد، زیرا این پروتکل برای انتقال فایلها از اتصالات اضافی با شماره پورتهای پویا استفاده میکند. با این وجود، نسخههای ویژهای از کلاینتها و سرورهای FTP وجود دارند که امکان رمزنگاری دادههای ارسالی با استفاده از پروتکل TLS را فراهم میسازند.
حالت INETD (فقط یونیکس) (INETD MODE)
در بیشتر کاربردها، stunnel خود به طور مستقل روی پورت مشخصشده در فایل پیکربندی گوش فرا داده و اتصالی را به پورت دیگری که در گزینه connect مشخص شده یا برنامه جدیدی که در گزینه exec تعیین گردیده برقرار میسازد. با این حال، برخی ترجیح میدهند از برنامه جداگانهای استفاده کنند که اتصالات را دریافت کرده و سپس برنامه stunnel را اجرا نماید. نمونههایی از این برنامهها عبارتند از inetd، xinetd و tcpserver.
یک خط نمونه در فایل /etc/inetd.conf میتواند به این صورت باشد:
-
imaps stream tcp nowait root @bindir@/stunnel stunnel @sysconfdir@/stunnel/imaps.conf
از آنجا که در این موارد اتصال روی پورت تعریفشده (در اینجا imaps) توسط برنامه دیگری (در اینجا inetd) برقرار میشود، stunnel نمیتواند از گزینه accept استفاده کند. در فایل پیکربندی نیز نباید هیچ سرویسی تعریف شود ([نام_سرویس])، زیرا این نوع پیکربندی تنها اجازه برقراری یک اتصال را میدهد. تمام گزینههای سرویس باید همراه با گزینههای سراسری قرار داده شوند. نمونهای از این پیکربندی در بخش مثالها آورده شده است.
گواهیها (CERTIFICATES)
پروتکل TLS ایجاب میکند که هر سرور خود را با یک گواهی معتبر X.509 به کلاینت متصلشونده معرفی نماید. تأیید هویت سرور بر این اساس است که نشان دهد کلید خصوصی متناظر با گواهی را در اختیار دارد. سادهترین روش برای به دست آوردن گواهی، تولید آن با استفاده از بسته نرمافزاری آزاد OpenSSL است. اطلاعات بیشتر درباره تولید گواهیها را میتوان در صفحات اینترنتی ذکر شده در ادامه یافت.
فایل .pem باید شامل کلید خصوصی و گواهی امضاشده باشد (نه درخواست گواهی). فایل حاصل باید دارای قالب زیر باشد:
-
-----BEGIN RSA PRIVATE KEY----- [کلید رمزنگاریشده] -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- [گواهی رمزنگاریشده] -----END CERTIFICATE-----
تولید اعداد تصادفی (RANDOMNESS)
برنامه stunnel نیاز به مقداردهی اولیه PRNG (مولد اعداد شبهتصادفی) دارد، زیرا پروتکل TLS برای امنیت رمزنگاری به یک منبع خوب تصادفی متکی است. منابع زیر تا زمان به دست آمدن آنتروپی کافی به ترتیب خوانده میشوند:
- محتوای فایل مشخصشده در گزینه RNDfile.
- محتوای فایل با نام تعیینشده توسط متغیر محیطی RANDFILE، در صورت تنظیم بودن آن.
- فایل .rnd قرار گرفته در پوشه خانگی کاربر، در صورتی که متغیر RANDFILE تنظیم نشده باشد.
- فایل مشخصشده در گزینه `--with-random' در هنگام پیکربندی و ساخت برنامه.
- محتوای صفحه نمایش در سیستمعامل ویندوز.
- سوکت egd، در صورتی که گزینه EGD استفاده شده باشد.
- سوکت egd مشخصشده در گزینه `--with-egd-socket' در هنگام پیکربندی برنامه.
- دستگاه /dev/urandom.
شایان توجه است که در دستگاههای مجهز به سیستمعامل ویندوز که کاربری پشت کنسول آنها کار نمیکند، محتوای صفحه نمایش به اندازه کافی متغیر نیست تا PRNG را مقداردهی کند. در این حالت باید از گزینه RNDfile برای مقداردهی مولد استفاده نمود.
فایل RNDfile باید حاوی دادههای تصادفی باشد، به این معنی که با هر بار اجرای برنامه stunnel این مقادیر باید متفاوت باشند. در صورتی که گزینه RNDoverwrite استفاده نشده باشد، این عمل به طور خودکار انجام میپذیرد. برای ایجاد دستی چنین فایلی میتوان از دستور openssl rand همراه با نسخههای امروزی بسته OpenSSL استفاده کرد.
نکته مهم دیگر این است که اگر دستگاه /dev/urandom در دسترس باشد، کتابخانه OpenSSL تمایل دارد در هنگام بررسی وضعیت مولد، PRNG را با آن تغذیه کند. در سیستمهای دارای /dev/urandom به احتمال زیاد از این دستگاه استفاده خواهد شد، با اینکه در انتهای فهرست فوق قرار دارد. این از ویژگیهای کتابخانه OpenSSL است و نه برنامه stunnel.
پارامترهای DH (DH PARAMETERS)
از نسخه 4.40، برنامه stunnel شامل پارامترهای 2048 بیتی DH درون کد منبع است. از نسخه 5.18، این مقادیر اولیه با پارامترهای موقت تولیدشده خودکار جایگزین میشوند. تولید پارامترهای DH ممکن است تا چند دقیقه به طول انجامد.
همچنین میتوان پارامترهای DH را درون فایل به همراه گواهی قرار داد که تولید پارامترهای موقت را غیرفعال میسازد:
-
openssl dhparam 2048 >> stunnel.pem
فایلها (FILES)
- •
- @sysconfdir@/stunnel/stunnel.conf
فایل پیکربندی برنامه
اشکالات (BUGS)
گزینه execArgs و خط فرمان Win32 از نقلقول (quoting) پشتیبانی نمیکنند.
همچنین ببینید (SEE ALSO)
برنامه stunnel
کتابخانه OpenSSL
نویسنده (AUTHOR)
- •
- Michał Trojnara
| 2026.07.31 | stunnel 5.80 |