SSLH(8) SSLH(8)

sslh - تفکیک‌کننده پروتکل‌های شبکه

sslh [-Fconfig file] [-t num] [--transparent] [-p listening address [-p listening address ...] [--tls target address for TLS] [--ssh target address for SSH] [--openvpn target address for OpenVPN] [--http target address for HTTP] [--xmpp target address for XMPP] [--tinc target address for TINC] [--anyprot default target address] [--on-timeout protocol name] [-u username] [-C chroot] [-P pidfile] [-v n] [-i] [-V] [-f] [-n]

برنامه sslh اتصالات را روی درگاه‌های مشخص‌شده می‌پذیرد و آن‌ها را بر اساس آزمایش‌های انجام‌شده روی نخستین بسته داده ارسال‌شده توسط کلاینت دوردست، به جلو هدایت می‌کند.

آزمایش‌های کاوش برای پروتکل‌های HTTP، TLS، SSH، OpenVPN، tinc و XMPP پیاده‌سازی شده‌اند و هر پروتکل دیگری که بتوان آن را با استفاده از یک عبارت منظم آزمایش کرد، قابل شناسایی است. یک کاربرد متداول، امکان ارائه چندین سرویس روی درگاه ۴۴۳ است (مثلاً برای اتصال به SSH از درون فایروال شرکتی، که تقریباً هرگز درگاه ۴۴۳ را مسدود نمی‌کند) در حالی که همچنان HTTPS روی آن درگاه ارائه می‌شود.

از این رو sslh به عنوان یک تفکیک‌کننده پروتکل یا یک تابلوی تقسیم عمل می‌کند. نام آن از عملکرد اولیه‌اش برای ارائه هم‌زمان SSH و HTTPS روی یک درگاه گرفته شده است.

یکی از معایب sslh این است که سرورها دیگر آدرس IP اصلی کلاینت را نمی‌بینند، زیرا اتصال از طریق sslh هدایت می‌شود.

به همین دلیل، sslh را می‌توان با libwrap کامپایل کرد تا دسترسی‌های تعریف‌شده در /etc/hosts.allow و /etc/hosts.deny را بررسی کند. سرویس‌های Libwrap را می‌توان با استفاده از پرونده پیکربندی تعریف کرد.

می‌توان یک پرونده پیکربندی را در اختیار sslh قرار داد. آرگومان‌های خط فرمان بر تنظیمات پرونده ارجحیت دارند. ابزار sslh از libconfig برای تجزیه پرونده پیکربندی استفاده می‌کند، بنابراین قالب کلی پرونده در http://www.hyperrealm.com/libconfig/libconfig_manual.html نشان داده شده است. لطفاً برای قالب خاص به پرونده پیکربندی نمونه ارائه‌شده با sslh مراجعه کنید (گزینه‌ها همان نام‌های خط فرمان را دارند، به جز فهرست درگاه‌های شنود و فهرست پروتکل‌ها).

پرونده پیکربندی امکان تعیین پروتکل‌ها را با استفاده از عبارات منظم فراهم می‌کند: فهرستی از عبارات منظم به عنوان پارامتر regex_patterns داده می‌شود و اگر نخستین بسته دریافتی از کلاینت با هر یک از این عبارات مطابقت داشته باشد، sslh به آن پروتکل متصل می‌شود.

هنگام دریافت یک اتصال ورودی، sslh نخستین بایت‌های ارسال‌شده توسط کلاینت متصل‌شونده را می‌خواند. سپس پروتکل را به ترتیبی که در خط فرمان (یا پرونده پیکربندی) مشخص شده است کاوش می‌کند. بنابراین گزینه --anyprot همواره باید در آخر استفاده شود، زیرا همیشه موفق می‌شود و پروتکل‌های بعدی هرگز آزمایش نخواهند شد.

اگر هیچ داده‌ای توسط کلاینت ارسال نشود، در نهایت مهلت زمانی sslh به پایان می‌رسد و به پروتکل مشخص‌شده با --on-timeout، یا در صورت مشخص نشدن به ssh متصل می‌شود.

به عنوان یک برنامه امنیتی/احراز هویت، sslh وقایع را در تسهیلات LOG_AUTH ثبت می‌کند، با اولویت LOG_INFO برای اتصالات عادی و LOG_ERR برای خرابی‌ها.

استفاده از filename به عنوان پرونده پیکربندی. اگر گزینه‌های دیگر خط فرمان مشخص شوند، تنظیمات پرونده پیکربندی را لغو خواهند کرد.
مهلت زمانی پیش از هدایت اتصال به پروتکل مهلت زمانی (که معمولاً باید SSH باشد). پیش‌فرض ۲ ثانیه است.
نام پروتکلی که پس از اتمام دوره مهلت زمانی به آن متصل می‌شود. حالت پیش‌فرض هدایت به نخستین پروتکل مشخص‌شده است. معمولاً تعیین 'ssh' به عنوان پروتکل مهلت زمانی منطقی است، زیرا مشخصات SSH مشخص نمی‌کند چه کسی باید ابتدا صحبت کند و تعداد زیادی از کلاینت‌های SSH منتظر می‌مانند تا سرور بنر خود را ارسال کند.
باعث می‌شود sslh به عنوان یک پیشکار شفاف عمل کند، یعنی سرویس گیرنده آدرس IP اصلی کلاینت را می‌بیند. این ویژگی فقط روی لینوکس کار می‌کند و شامل تنظیمات iproute2 است. در برخی موارد تنظیمات iptables/nftables نیز مورد نیاز است. برای اطلاعات بیشتر به README یا https://github.com/ftasnetamot/sslh/blob/2014-08-16--close-filehandles-with-detach/doc/simple_transparent_proxy.md مراجعه کنید.
رابط و درگاهی که باید روی آن شنود کند، مثلاً foobar:443، که در آن foobar نام یک رابط است (معمولاً آدرس IP که اتصال اینترنت به آن ختم می‌شود).

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

رابط و درگاهی که اتصال SSL به آن هدایت می‌شود، معمولاً localhost:443.

توجه داشته باشید که می‌توانید sslh را طوری تنظیم کنید که روی ext_ip:443 شنود کند و httpd روی localhost:443: این کار به کلاینت‌های داخل شبکه شما اجازه می‌دهد تا مستقیماً به httpd متصل شوند.

همچنین، sslh دست‌تکانی‌های TLS را کاوش می‌کند و اتصال کلاینت‌هایی را که درخواست SSLv2 دارند رد می‌کند. این رفتار مطابق با RFC6176 است که استفاده از SSLv2 را ممنوع می‌کند. اگر می‌خواهید SSLv2 را بپذیرید، به‌جای آن از --anyprot استفاده کنید.

رابط و درگاهی که اتصالات SSH به آن هدایت می‌شوند، معمولاً localhost:22.
رابط و درگاهی که اتصالات OpenVPN به آن هدایت می‌شوند، معمولاً localhost:1194.
رابط و درگاهی که اتصالات XMPP به آن هدایت می‌شوند، معمولاً localhost:5222.
رابط و درگاهی که اتصالات HTTP به آن هدایت می‌شوند، معمولاً localhost:80.
رابط و درگاهی که اتصالات tinc به آن هدایت می‌شوند، معمولاً localhost:655.

این قابلیت آزمایشی است. اگر از این ویژگی استفاده می‌کنید، لطفاً نتایج را گزارش دهید (حتی اگر به درستی کار می‌کند!).

رابط و درگاهی که در صورت عدم یافتن پروتکل دیگر، اتصال به آن هدایت می‌شود. از آنجا که sslh پروتکل‌ها را به ترتیبی که در خط فرمان مشخص شده امتحان می‌کند، این گزینه باید در آخر مشخص شود. اگر هیچ پیش‌فرضی مشخص نشود، sslh پروتکل‌های ناشناخته را به نخستین پروتکل مشخص‌شده هدایت می‌کند.
لغو تمام پرگویی‌ها. برای تمام زیرگزینه‌های پرگویی به example.cfg مراجعه کنید.
عدم تلاش برای وضوح نام‌های میزبان: گزارش‌ها حاوی آدرس‌های IP خواهند بود. این گزینه بیشتر در صورتی مفید است که DNS سیستم کند باشد و گونه sslh-select را اجرا کنید، زیرا درخواست‌های DNS تمام اتصالات را معلق نگه می‌دارند.
چاپ نسخه sslh.
نیاز به اجرا تحت نام کاربری مشخص‌شده دارد.
نیاز به اجرا تحت محیط chroot مشخص‌شده دارد.
پرونده‌ای را برای نوشتن PID سرور اصلی مشخص می‌کند.
اجرا به عنوان یک سرور inetd. گزینه‌های -P (پرونده PID)، -p (آدرس شنود) و -u (کاربر) نادیده گرفته می‌شوند.
اجرا در پیش‌زمینه. سرور فرآیند جدید ایجاد نخواهد کرد و به پایانه متصل باقی می‌ماند. پیام‌هایی که معمولاً به syslog ارسال می‌شوند به stderr نیز فرستاده خواهند شد.
اجرا در پس‌زمینه. در صورتی که در پرونده پیکربندی تنظیم شده باشد، گزینه foreground را لغو می‌کند.

/etc/init.d/sslh
اسکریپت راه‌اندازی. کنش‌های استاندارد start، stop و restart پشتیبانی می‌شوند.
/etc/default/sslh
پیکربندی سرور. این‌ها متغیرهای محیطی هستند که توسط اسکریپت راه‌اندازی بارگذاری شده و به عنوان آرگومان‌های خط فرمان به sslh ارسال می‌شوند. برای توضیح مفصل درباره متغیرهای مورد استفاده sslh به بخش گزینه‌ها مراجعه کنید.

جدیدترین نسخه از طریق https://github.com/yrutschle/sslh در دسترس است. در آنجا می‌توانید اسناد به‌روزتر و مفصل‌تری بیابید.

نوشته شده توسط Yves Rutschle.

2026-04-21 2.3.1-1