.\"- .\" SSLsplit - transparent SSL/TLS interception .\" https://www.roe.ch/SSLsplit .\" .\" Copyright (c) 2009-2019, Daniel Roethlisberger . .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: .\" 1. Redistributions of source code must retain the above copyright notice, .\" this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright notice, .\" this list of conditions and the following disclaimer in the documentation .\" and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .TH "sslsplit" "1" "2023-10-22" "sslsplit 0.5.5" "SSLsplit" .SH "نام (NAME)" sslsplit \- رهگیری شفاف SSL/TLS .SH "خلاصه دستور (SYNOPSIS)" .na .B sslsplit [\fB-kCKqwWOPZdDgGsrRxeumjplLSFXYyTIMiab\fP] \fB-c\fP \fIpem\fP \fIproxyspecs\fP [...] .br .B sslsplit [\fB-kCKqwWOPZdDgGsrRxeumjplLSFXYyTIMiab\fP] \fB-c\fP \fIpem\fP \fB-t\fP \fIdir\fP \fIproxyspecs\fP [...] .br .B sslsplit [\fB-OPZwWdDgGsrRxeumjplLSFXYyTIMiab\fP] \fB-t\fP \fIdir\fP \fIproxyspecs\fP [...] .br .B sslsplit [\fB-kCKwWOPZdDgGsrRxeumjplLSFXYyTIMi\fP] -f \fIconffile\fP .br .B sslsplit -E .br .B sslsplit -V .br .B sslsplit -h .br .ad .SH "توضیحات (DESCRIPTION)" ابزار SSLsplit ابزاری برای حملات مرد میانی (MitM) علیه اتصالات شبکه‌ای رمزنگاری‌شده با SSL/TLS است. این ابزار به منظور استفاده در جرم‌یابی شبکه، تحلیل امنیت برنامه‌ها و آزمون نفوذپذیری طراحی شده است. .LP ابزار SSLsplit به گونه‌ای طراحی شده است که اتصالاتی را که با استفاده از یک موتور ترجمه نشانی شبکه (NAT) به سمت آن بازهدایت شده‌اند، به طور شفاف خاتمه دهد. سپس SSLsplit اتصال SSL/TLS را خاتمه داده و اتصال SSL/TLS جدیدی به نشانی مقصد اصلی برقرار می‌کند، در حالی که تمامی داده‌های ردوبدل‌شده را ثبت می‌نماید. علاوه بر عملکرد مبتنی بر NAT، ابزار SSLsplit از مقصدهای ایستا و استفاده از نام سرور مشخص‌شده توسط SNI به عنوان مقصد بالادستی نیز پشتیبانی می‌کند. ابزار SSLsplit صرفاً یک پروکسی شفاف است و نمی‌تواند به عنوان یک پروکسی HTTP یا SOCKS که در مرورگر تنظیم می‌شود عمل کند. برای جزئیات بیشتر در مورد حالت‌های مختلف عملکرد، بخش‌های موتورهای نات (NAT ENGINES) و مشخصات پروکسی (PROXY SPECIFICATIONS) را در ادامه ببینید. .LP ابزار SSLsplit از اتصالات سادهٔ TCP، سادهٔ SSL، HTTP و HTTPS بر روی هر دو پروتکل IPv4 و IPv6 پشتیبانی می‌کند. این ابزار همچنین توانایی ارتقای پویای TCP ساده به SSL را به منظور پشتیبانی عمومی از SMTP STARTTLS و سازوکارهای ارتقای مشابه دارد. ابزار SSLsplit به طور کامل از Server Name Indication (SNI) پشتیبانی می‌کند و قادر است با کلیدهای RSA، DSA و ECDSA و مجموعه‌های رمزنگاری DHE و ECDHE کار کند. بسته به نسخهٔ OpenSSL، ابزار SSLsplit از SSL 3.0، TLS 1.0، TLS 1.1 و TLS 1.2 و به صورت اختیاری از SSL 2.0 نیز پشتیبانی می‌کند. .LP برای اتصالات SSL و HTTPS، ابزار SSLsplit گواهی‌های X509v3 جعلی را به صورت بی‌درنگ ایجاد و امضا می‌کند و مشخصات گواهی اصلی سرور از جمله موضوع DN، افزونهٔ subjectAltName و سایر ویژگی‌ها را شبیه‌سازی می‌نماید. ابزار SSLsplit این قابلیت را دارد که به جای تولید گواهی‌های جعلی، از گواهی‌های موجود که کلید خصوصی آن‌ها در دسترس است استفاده کند. SSLsplit از گواهی‌های CN با پیشوند NULL پشتیبانی می‌کند، اما در غیر این صورت هیچ‌گونه اکسپلویتی علیه آسیب‌پذیری‌های خاص اعتبارسنجی گواهی در پشته‌های SSL/TLS پیاده‌سازی نمی‌کند. .LP ابزار SSLsplit تعدادی سازوکار دفاعی در برابر سازوکارهایی که به طور معمول مانع از حملات مرد میانی می‌شوند یا آن‌ها را دشوارتر می‌سازند، پیاده کرده است. این ابزار می‌تواند درخواست‌های OCSP را به روشی عمومی رد کند. برای اتصالات HTTP و HTTPS، ابزار SSLsplit سرآیندها را دستکاری می‌کند تا از پین‌کردن کلید عمومی توسط سرور (HPKP) جلوگیری کند، محدودیت‌های امنیت سخت‌گیرانهٔ انتقال (HSTS) را بی‌اثر سازد، از اعمال شفافیت گواهی (Expect-CT) اجتناب ورزد و از جابه‌جایی به پروتکل‌های QUIC/SPDY، HTTP/2 یا WebSockets جلوگیری نماید (Upgrade، Alternate Protocols). فشرده‌سازی، کدگذاری‌ها و اتصال پایدار (keep-alive) در پروتکل HTTP غیرفعال می‌شوند تا گزارش‌ها خواناتر باشند. .LP گزینه‌های گزارش‌گیری شامل فایل‌های سنتی ثبت اتصال و محتوای SSLsplit و همچنین فایل‌های PCAP و آینه‌سازی (mirroring) ترافیک رمزگشایی‌شده به یک رابط شبکه است. علاوه بر این، گواهی‌ها، master secretها و اطلاعات فرآیندهای محلی نیز می‌توانند ثبت شوند. .LP به منظور به حداکثر رساندن شانس تفکیک موفقیت‌آمیز یک اتصال، SSLsplit به طور پیش‌فرض گواهی‌های سرور بالادستی را اعتبارسنجی نمی‌کند. در عوض، تمامی گواهی‌ها از جمله گواهی‌های خودامضاشده پذیرفته می‌شوند و در صورتی که نام میزبان مورد انتظار اعلام‌شده در SNI در گواهی سرور موجود نباشد، به گواهی‌های جعلیِ پویا اضافه خواهد شد. .LP ابزار SSLsplit به طور خودکار هیچ ترافیک شبکه‌ای را بازهدایت نمی‌کند. برای پیاده‌سازی عملی یک حمله، باید ترافیک را به سیستمی که \fBsslsplit\fP را اجرا می‌کند هدایت کنید. گزینه‌های پیش روی شما شامل اجرای \fBsslsplit\fP بر روی یک مسیریاب معتبر، جعل ARP (ARP spoofing)، جعل ND (ND spoofing)، مسموم‌سازی DNS (DNS poisoning)، راه‌اندازی یک نقطهٔ دسترسی سرکش (مثلاً با استفاده از حالت hostap)، کابل‌کشی مجدد فیزیکی، پیکربندی مخرب VLAN یا تزریق مسیر، ویرایش فایل /etc/hosts و موارد دیگر است. .SH "گزینه‌ها (OPTIONS)" .TP .B \-a \fIpemfile\fP استفاده از گواهی کلاینت از \fIpemfile\fP هنگامی که سرور مقصد یک گواهی کلاینت درخواست می‌کند. .B \-A \fIpemfile\fP استفاده از کلید خصوصی، گواهی و زنجیرهٔ گواهی از فایل PEM با نام \fIpemfile\fP به عنوان گواهی برگ (leaf certificate) به جای تولید گواهی برگ به صورت بی‌درنگ. فایل PEM باید شامل یک کلید خصوصی منفرد، یک گواهی منفرد و به صورت اختیاری گواهی‌های CA میانی و ریشه جهت استفاده به عنوان زنجیرهٔ گواهی باشد. هنگام استفاده از \fB-t\fP، ابزار SSLsplit ابتدا تلاش می‌کند از گواهی منطبقی که از \fIcertdir\fP بارگذاری شده است استفاده کند. اگر \fB-t\fP نیز استفاده شود و یک اتصال با هر گواهی در دایرکتوری مشخص‌شده با گزینهٔ \fB-t\fP مطابقت داشته باشد، آن گواهی منطبق استفاده خواهد شد و نسبت به گواهی مشخص‌شده با \fB-A\fP اولویت خواهد داشت. .TP .B \-b \fIpemfile\fP استفاده از کلید خصوصی کلاینت از \fIpemfile\fP هنگامی که سرور مقصد یک گواهی کلاینت درخواست می‌کند. .TP .B \-c \fIpemfile\fP استفاده از گواهی CA از \fIpemfile\fP برای امضای گواهی‌های جعلیِ ساخته‌شده به صورت بی‌درنگ. اگر \fIpemfile\fP همچنین حاوی کلید خصوصی منطبق CA باشد، آن نیز بارگذاری می‌شود، در غیر این صورت باید با گزینهٔ \fB-k\fP ارائه شود. اگر \fIpemfile\fP همچنین حاوی پارامترهای گروه دیفی-هلمن (Diffie-Hellman) باشد، آن‌ها نیز بارگذاری می‌شوند، در غیر این صورت می‌توان آن‌ها را با گزینهٔ \fB-g\fP ارائه کرد. اگر \fB-t\fP نیز داده شده باشد، SSLsplit تنها زمانی گواهی جعلی ایجاد می‌کند که هیچ گواهی منطبقی در دایرکتوری گواهی ارائه‌شده وجود نداشته باشد. .TP .B \-C \fIpemfile\fP استفاده از گواهی‌های CA موجود در \fIpemfile\fP به عنوان گواهی‌های اضافه در زنجیرهٔ گواهی. این گزینه در صورتی لازم است که CA مشخص‌شده با \fB-k\fP و \fB-c\fP یک زیر-مرجع (sub-CA) باشد، که در این حالت تمامی گواهی‌های CA میانی و گواهی CA ریشه باید در زنجیرهٔ گواهی گنجانده شوند. .TP .B \-d جدا شدن از TTY و اجرا به عنوان دیمن (daemon)، و ثبت پیام‌های خطا در syslog به جای خروجی خطای استاندارد. .TP .B \-D اجرا در حالت اشکال‌زدایی (debug) و ثبت مقادیر زیادی از اطلاعات اشکال‌زدایی در خروجی خطای استاندارد. این گزینه همچنین اجرای پیش‌زمینه را تحمیل کرده و نمی‌تواند همراه با \fB-d\fP استفاده شود. .TP .B \-e \fIengine\fP استفاده از \fIengine\fP به عنوان موتور NAT پیش‌فرض برای \fIproxyspecs\fP فاقد موتور NAT صریح، نشانی مقصد ایستا یا حالت SNI. \fIengine\fP می‌تواند هر یک از موتورهای NAT پشتیبانی‌شده توسط سیستم باشد، همان‌طور که توسط \fB-E\fP بازگردانده می‌شود. .TP .B \-E فهرست کردن تمامی موتورهای NAT پشتیبانی‌شده و موجود در سیستم و سپس خروج. برای فهرستی از موتورهای NAT که در حال حاضر توسط SSLsplit پشتیبانی می‌شوند، بخش موتورهای نات (NAT ENGINES) را ببینید. .TP .B \-f \fIconffile\fP خواندن پیکربندی از \fIconffile\fP. .TP .B \-F \fIlogspec\fP ثبت محتوای اتصال در فایل‌های گزارش جداگانه با مشخصات مسیر داده‌شده (بخش مشخصات گزارش (LOG SPECIFICATIONS) را در ادامه ببینید). برای هر اتصال، یک فایل گزارش نوشته خواهد شد که شامل داده‌های ارسالی در هر دو جهت خواهد بود. اطلاعات مربوط به اتصال فقط در نام فایل گنجانده می‌شود. تنها یکی از گزینه‌های \fB-F\fP، \fB-L\fP و \fB-S\fP می‌تواند استفاده شود (گزینهٔ آخر اعمال می‌شود). .TP .B \-g \fIpemfile\fP استفاده از پارامترهای گروه دیفی-هلمن از \fIpemfile\fP برای مجموعه‌های رمزنگاری دیفی-هلمن کوتاه‌عمر (EDH/DHE). اگر \fB-g\fP داده نشود، SSLsplit ابتدا تلاش می‌کند پارامترهای DH را از فایل‌های PEM ارائه‌شده توسط \fB-K\fP، \fB-k\fP یا \fB-c\fP بارگذاری کند. اگر هیچ پارامتر DH در فایل‌های کلید یافت نشود، پارامترهای گروه پیش‌ساخته به طور خودکار استفاده می‌شوند. گزینهٔ \fB-g\fP تنها در صورتی در دسترس است که SSLsplit با نسخه‌ای از OpenSSL ساخته شده باشد که از مجموعه‌های رمزنگاری دیفی-هلمن پشتیبانی کند. .TP .B \-G \fIcurve\fP استفاده از خم نام‌برده با \fIcurve\fP برای مجموعه‌های رمزنگاری دیفی-هلمن خم بیضوی کوتاه‌عمر (ECDHE). اگر \fB-G\fP داده نشود، یک خم پیش‌فرض (\fBprime256v1\fP) به طور خودکار استفاده خواهد شد. گزینهٔ \fB-G\fP تنها در صورتی در دسترس است که SSLsplit با نسخه‌ای از OpenSSL ساخته شده باشد که از مجموعه‌های رمزنگاری دیفی-هلمن خم بیضوی پشتیبانی کند. .TP .B \-h نمایش راهنمای استفاده و خروج. .TP .B \-i یافتن فرآیند محلی مالک اتصال برای هر اتصال. این گزینه اطلاعات فرآیند نظیر pid، مالک:گروه (owner:group) و مسیر فایل اجرایی را برای اتصالاتی که از همان سیستم SSLsplit سرچشمه می‌گیرند در دسترس گزارش اتصال قرار داده و دستورالعمل‌های مشخصه مسیر مربوطه در \fB-F\fP را فعال می‌سازد. گزینهٔ \fB-i\fP در Mac OS X و FreeBSD موجود است؛ پشتیبانی از سایر پلتفرم‌ها هنوز پیاده‌سازی نشده است..TP .B \-I \fIif\fP آینه‌کردن (Mirror) محتوای اتصال به صورت بسته‌های شبیه‌سازی‌شده به رابط \fIif\fP با نشانی مقصد مشخص‌شده توسط \fB-T\fP. اگر SSLsplit بدون پشتیبانی از آینه‌کردن کامپایل شده باشد، این گزینه در دسترس نخواهد بود. .TP .B \-j \fIjaildir\fP تغییر دایرکتوری ریشه به \fIjaildir\fP با استفاده از chroot(2) پس از باز کردن فایل‌ها. توجه داشته باشید که این کار بر \fIproxyspecs\fPهای \fBsni\fP تأثیر می‌گذارد. بسته به سیستم‌عامل شما، برای اینکه تحلیل نام کار کند، لازم است فایل‌هایی مانند \fB/etc/resolv.conf\fP را به \fIjaildir\fP رونوشت کنید. استفاده از proxyspecهای \fBsni\fP به تحلیل نام وابسته است. برخی سیستم‌عامل‌ها نیازمند وجود گره‌های دستگاهی ویژه مانند \fB/dev/null\fP درون زندان (jail) هستند. برای جزئیات بیشتر، مستندات سیستم خود را بررسی کنید. .TP .B \-k \fIpemfile\fP استفاده از کلید خصوصی CA از \fIpemfile\fP برای امضای گواهی‌های جعل‌شده به صورت درلحظه (on-the-fly). اگر \fIpemfile\fP حاوی گواهی CA منطبق نیز باشد، آن هم بارگذاری می‌شود؛ در غیر این صورت باید با \fB-c\fP ارائه گردد. اگر \fIpemfile\fP همچنین حاوی پارامترهای گروه Diffie-Hellman باشد، آن‌ها نیز بارگذاری می‌شوند؛ در غیر این صورت می‌توان آن‌ها را با \fB-g\fP مشخص کرد. اگر \fB-t\fP نیز داده شده باشد، SSLsplit تنها زمانی اقدام به جعل گواهی می‌کند که هیچ گواهی منطبقی در دایرکتوری گواهی ارائه‌شده وجود نداشته باشد. .TP .B \-K \fIpemfile\fP استفاده از کلید خصوصی از \fIpemfile\fP برای گواهی‌های برگ (leaf certificates) جعل‌شده به صورت درلحظه. اگر \fB-K\fP داده نشود، SSLsplit یک کلید تصادفی RSA با طول ۲۰۴۸ بیت تولید خواهد کرد. .TP .B \-l \fIlogfile\fP ثبت لاگ اتصالات در \fIlogfile\fP به صورت یک خط به ازای هر اتصال، شامل نشانی‌ها، درگاه‌ها و در صورت وجود، برخی اطلاعات HTTP و SSL. ارسال سیگنال SIGUSR1 باعث بازگشایی مجدد \fIlogfile\fP خواهد شد. .TP .B \-L \fIlogfile\fP ثبت محتوای اتصال در \fIlogfile\fP. لاگ محتوا شامل قالبی قابل‌تجزیه به همراه داده‌های منتقل‌شده خواهد بود که سرآیندهایی برای شناسایی اتصال و طول داده‌های هر قطعهٔ ثبت‌شده در ابتدای آن قرار دارد. ارسال سیگنال SIGUSR1 باعث بازگشایی مجدد \fIlogfile\fP خواهد شد. تنها یکی از گزینه‌های \fB-F\fP، \fB-L\fP و \fB-S\fP می‌تواند استفاده شود (آخرین گزینه اعمال می‌گردد). .TP .B \-m هنگام کاهش امتیازها با استفاده از \fB-u\fP، گروه اصلیِ هدف را با تنظیم روی \fIgroup\fP بازنویسی می‌کند. .TP .B \-M \fIlogfile\fP ثبت کلیدهای اصلی (master keys) در \fIlogfile\fP در قالب SSLKEYLOGFILE طبق تعریف موزیلا. ثبت کلیدهای اصلی در این قالب، امکان رمزگشایی ترافیک SSL/TLS را با استفاده از Wireshark فراهم می‌سازد. توجه داشته باشید که برخلاف مرورگرهایی که این قابلیت را پیاده‌سازی کرده‌اند، تنظیم متغیر محیطی SSLKEYLOGFILE هیچ تأثیری بر SSLsplit ندارد. ارسال سیگنال SIGUSR1 باعث بازگشایی مجدد \fIlogfile\fP خواهد شد. .TP .B \-O رد کردن تمام درخواست‌های پروتکل برخط وضعیت گواهی (OCSP) روی تمام \fIproxyspecs\fP و برای همه کارسازهای OCSP با پاسخ OCSP از نوع \fBtryLater\fP، که باعث می‌شود کلاینت‌های OCSP موقتاً حتی گواهی‌های ابطال‌شده را نیز بپذیرند. درخواست‌های HTTP در صورتی به عنوان درخواست‌های OCSP تلقی می‌شوند که متد \fBGET\fP باشد و URI حاوی یک ساختار نحوی معتبر OCSPRequest ASN.1 قابل‌تجزیه توسط OpenSSL باشد، یا اینکه متد \fBPOST\fP بوده و \fBContent-Type\fP برابر با \fBapplication/ocsp-request\fP باشد. برای مؤثر بودن این حالت، SSLsplit باید ترافیک ارسالی به درگاه مورد استفاده توسط کارساز OCSP را مدیریت کند. به طور خاص، SSLsplit باید طوری پیکربندی شود که ترافیک تمام درگاه‌های مورد استفاده توسط کارسازهای OCSP گواهی‌های هدف در \fIcertdir\fP مشخص‌شده با \fB-t\fP را دریافت نماید. .TP .B \-p \fIpidfile\fP نوشتن شناسه فرایند (PID) در \fIpidfile\fP و خودداری از اجرا در صورتی که \fIpidfile\fP از پیش توسط فرایند دیگری در حال استفاده باشد. .TP .B \-P عبور مستقیم (Passthrough) اتصالات SSL/TLS که امکان شکافتن آن‌ها وجود ندارد، به جای قطع کردن (drop) آن‌ها. اتصالات زمانی شکافته نمی‌شوند که گزینه‌های \fB-c\fP و \fB-k\fP داده نشده باشند و سایت با هیچ‌یک از گواهی‌های بارگذاری‌شده از طریق \fB-t\fP تطابق نداشته باشد، یا اینکه اتصال به کارساز اصلی خطاهای SSL/TLS صادر کند. به طور مشخص، این حالت زمانی رخ می‌دهد که سایت درخواست گواهی کلاینت کند. در این موقعیت‌ها، عبور مستقیم با \fB-P\fP منجر به ارائه خدمات بدون وقفه به کلاینت‌ها می‌شود، در حالی که در صورت لزوم جلوگیری از اتصالات نظارت‌نشده، قطع کردن اتصال جایگزین امن‌تری است. حالت عبور مستقیم در حال حاضر روی خطاهای SSL/TLS در اتصال از سمت کلاینت اعمال نمی‌شود، زیرا تلاش مجدد برای اتصال از کلاینت به سادگی ممکن نیست. به طور مشخص، گزینه \fB-P\fP در حال حاضر برای کلاینت‌هایی که گواهی‌های جعلی را نمی‌پذیرند کار نمی‌کند. .TP .B \-q \fIcrlurl\fP تنظیم نقطه توزیع لیست ابطال گواهی (CDP) به نشانی \fIcrlurl\fP روی گواهی‌های برگ جعل‌شده. برخی کلاینت‌ها، نظیر برخی برنامه‌های .NET، گواهی‌هایی را که فاقد CDP باشند رد می‌کنند. هنگام استفاده از \fB-q\fP، باید یک CRL خالی که توسط گواهی و کلید CA ارائه‌شده با \fB-c\fP و \fB-k\fP امضا شده است ایجاد کرده و آن را در \fIcrlurl\fP در دسترس قرار دهید. .TP .B \-r \fIproto\fP اجبار نسخه پروتکل SSL/TLS در هر دو سمت کلاینت و کارساز به \fIproto\fP از طریق انتخاب سازنده متد OpenSSL مربوطه به جای SSLv23_method() پیش‌فرض که از تمام نسخه‌های پروتکل پشتیبانی می‌کند. این گزینه هنگام تحلیل ترافیک به کارسازی که فقط از نسخه خاصی از SSL/TLS پشتیبانی می‌کند و مذاکره پروتکل مناسبی را پیاده‌سازی نکرده است، کاربرد دارد. بسته به گزینه‌های ساخت و نسخه OpenSSL مورد استفاده، مقادیر زیر برای \fIproto\fP پذیرفته می‌شوند: \fBssl2\fP، \fBssl3\fP، \fBtls10\fP، \fBtls11\fP و \fBtls12\fP. توجه داشته باشید که پشتیبانی از SSL 2.0 به طور پیش‌فرض کامپایل نشده است، زیرا برخی کارسازها پیام‌های SSL 2.0 Client Hello را به درستی پردازش نمی‌کنند. .TP .B \-R \fIproto\fP غیرفعال کردن نسخه پروتکل SSL/TLS به نام \fIproto\fP در هر دو سمت کلاینت و کارساز با از کار انداختن پروتکل‌های مربوطه در OpenSSL. برای غیرفعال کردن چند نسخه پروتکل، می‌توان گزینه \fB-R\fP را چند بار مشخص کرد. اگر \fI-r\fP نیز داده شده باشد، غیرفعال کردن سایر نسخه‌های پروتکل هیچ تأثیری نخواهد داشت. غیرفعال کردن نسخه‌های پروتکل هنگام تحلیل ترافیک به کارسازی که برخی نسخه‌های پروتکل را به درستی مدیریت نمی‌کند، یا برای بررسی رفتار با نسخه‌های مختلف پروتکل مفید است. بسته به گزینه‌های ساخت و نسخه OpenSSL مورد استفاده، مقادیر زیر برای \fIproto\fP پذیرفته می‌شوند: \fBssl2\fP، \fBssl3\fP، \fBtls10\fP، \fBtls11\fP و \fBtls12\fP. توجه داشته باشید که پشتیبانی از SSL 2.0 به طور پیش‌فرض کامپایل نشده است، زیرا برخی کارسازها پیام‌های SSL 2.0 Client Hello را به درستی پردازش نمی‌کنند. .TP .B \-s \fIciphers\fP استفاده از مشخصات رمزهای (ciphers) OpenSSL برای اتصالات SSL/TLS کارساز و کلاینت. اگر \fB-s\fP داده نشود، فهرست رمزهای \fBALL:-aNULL\fP استفاده می‌شود. معمولاً پیاده‌سازی‌های SSL/TLS امن‌ترین مجموعه‌های رمز را انتخاب می‌کنند، نه سریع‌ترین آن‌ها را. با تعیین یک فهرست رمز مناسب در OpenSSL، می‌توان مجموعه رمزها را به الگوریتم‌های سریع محدود کرد، یا مجموعه‌های رمز \fBeNULL\fP را افزود. توجه داشته باشید برای اینکه اتصالات با موفقیت برقرار شوند، مجموعه‌های رمز SSLsplit باید حداقل شامل یک مجموعه رمز باشند که هم توسط کلاینت و هم توسط کارساز هر اتصال پشتیبانی شود. برای جزئیات بیشتر درباره چگونگی ساخت فهرست‌های رمز OpenSSL، به ciphers(1) مراجعه کنید. .TP .B \-S \fIlogdir\fP ثبت محتوای اتصال در فایل‌های لاگ جداگانه ذیل \fIlogdir\fP. برای هر اتصال، یک فایل لاگ نوشته خواهد شد که شامل داده‌های منتقل‌شده در هر دو جهت است. اطلاعات مربوط به اتصال فقط در نام فایل گنجانده می‌شود. تنها یکی از گزینه‌های \fB-F\fP، \fB-L\fP و \fB-S\fP می‌تواند استفاده شود (آخرین گزینه اعمال می‌گردد). .TP .B \-t \fIcertdir\fP استفاده از کلید خصوصی، گواهی و زنجیره گواهی از فایل‌های PEM موجود در \fIcertdir\fP برای اتصالات به نام‌های میزبان منطبق با گواهی‌های مربوطه، به جای استفاده از گواهی‌های جعل‌شده به صورت درلحظه. یک فایل PEM منفرد باید حاوی یک کلید خصوصی، یک گواهی، و در صورت نیاز گواهی‌های میانی و ریشه CA جهت استفاده به عنوان زنجیره گواهی باشد. هنگام استفاده از \fB-t\fP، ابتدا SSLsplit تلاش می‌کند از گواهی منطبق بارگذاری‌شده از \fIcertdir\fP استفاده کند. اگر \fB-A\fP نیز داده شده باشد، در صورتی که تطابقی در \fIcertdir\fP یافت نشود، کلید، گواهی و زنجیره گواهی پیش‌فرض از فایل PEM ارائه‌شده با گزینه \fB-A\fP استفاده می‌شود. در غیر این صورت، اگر گزینه‌های \fB-c\fP و \fB-k\fP نیز داده شده باشند، برای سایت‌هایی که با هیچ‌یک از نام‌های مشترک (Common Names) در گواهی‌های بارگذاری‌شده از \fIcertdir\fP مطابقت ندارند، گواهی‌ها به صورت درلحظه جعل خواهند شد. در غیر این صورت، اتصالاتی که با هیچ گواهی تطابق نداشته باشند قطع می‌شوند، یا در صورت تعیین \fB-P\fP، بدون شکافتن SSL/TLS به صورت مستقیم عبور داده خواهند شد. .TP .B \-T \fIaddr\fP آینه‌کردن محتوای اتصال به صورت بسته‌های شبیه‌سازی‌شده به نشانی مقصد \fIaddr\fP روی رابط مشخص‌شده با \fB-I\fP. در حال حاضر فقط نشانی‌های مقصد IPv4 پشتیبانی می‌شوند. اگر SSLsplit بدون پشتیبانی از آینه‌کردن کامپایل شده باشد، این گزینه در دسترس نخواهد بود. .TP .B \-u \fIuser\fP کاهش امتیازات پس از باز کردن سوکت‌ها و فایل‌ها از طریق تنظیم شناسه‌های کاربری واقعی، مؤثر و ذخیره‌شده روی \fIuser\fP و بارگذاری گروه‌های اصلی و فرعی مربوطه. اگر \fB-u\fP داده نشود، SSLsplit در صورت نابرابری EUID با UID (سناریوی بیت setuid)، امتیازات را به UID ذخیره‌شده کاهش می‌دهد، یا در صورت اجرا با امتیازات کامل \fBroot\fP (یعنی EUID == UID == 0)، آن را به \fBnobody\fP تنزل خواهد داد. کاربر \fIuser\fP باید مجوز برقراری اتصالات خروجی TCP و در برخی پیکربندی‌ها، انجام تحلیل DNS را داشته باشد. کاهش امتیازات موجب فعال‌سازی جداسازی امتیاز (privilege separation) می‌شود که برای برخی گزینه‌ها مانند فایل‌های لاگ جداگانه به ازای هر اتصال، تأخیر به همراه دارد. با استفاده از \fB-u root\fP، می‌توان SSLsplit را بدون کاهش امتیازات به عنوان کاربر ریشه اجرا کرد. به دلیل وجود یک باگ در نرم‌افزارهای شرکت اپل، \fB-u\fP نمی‌تواند همراه با proxyspecهای \fBpf\fP در Mac OS X استفاده شود. .TP .B \-x \fIengine\fP استفاده از موتور (engine) نرم‌افزار OpenSSL با شناسه \fIengine\fP به عنوان موتور پیش‌فرض. موتور باید در اکوسیستم OpenSSL تحت شناسه تعیین‌شده در دسترس باشد؛ به این معنی که باید از پیکربندی سراسری OpenSSL بارگذاری شده باشد. اگر \fIengine\fP یک مسیر مطلق باشد، به عنوان مسیر کتابخانه پیوند پویای موتور تفسیر شده و صرف نظر از پیکربندی سراسری OpenSSL، از طریق مسیر بارگذاری خواهد شد. این گزینه تنها در صورتی در دسترس است که برنامه در برابر نسخه‌ای از OpenSSL با قابلیت پشتیبانی از engine کامپایل شده باشد. .TP .B \-X \fIpcapfile\fP ثبت محتوای اتصال در \fIpcapfile\fP در قالب PCAP، همراه با سرآیندهای شبیه‌سازی‌شده TCP، IP و Ethernet. ارسال سیگنال SIGUSR1 باعث بازگشایی مجدد \fIpcapfile\fP خواهد شد. تنها یکی از گزینه‌های \fB-X\fP، \fB-Y\fP و \fB-y\fP می‌تواند استفاده شود (آخرین گزینه اعمال می‌گردد). .TP .B \-Y \fIpcapdir\fP ثبت محتوای اتصال در فایل‌های PCAP جداگانه ذیل \fIpcapdir\fP. برای هر اتصال، یک فایل PCAP مجزا نوشته خواهد شد. تنها یکی از گزینه‌های \fB-X\fP، \fB-Y\fP و \fB-y\fP می‌تواند استفاده شود (آخرین گزینه اعمال می‌گردد). .TP .B \-y \fIpcapspec\fP ثبت محتوای اتصال در فایل‌های PCAP جداگانه با الگوی مسیر مشخص‌شده (بخش «مشخصات لاگ» در ادامه را ببینید). برای هر اتصال، یک فایل PCAP جداگانه نوشته خواهد شد. تنها یکی از گزینه‌های \fB-X\fP، \fB-Y\fP و \fB-y\fP می‌تواند استفاده شود (آخرین گزینه اعمال می‌گردد). .TP .B \-V نمایش نسخه و اطلاعات ویژگی‌های کامپایل‌شده و خروج از برنامه..TP .B \-w \fIgendir\fP کلیدها و گواهی‌های تولیدشده را در فایل‌های جداگانه در \fIgendir\fP می‌نویسد. برای کلیدها، شناسهٔ کلید به عنوان نام فایل استفاده می‌شود که شامل درهم‌سازی SHA-1 از رشتهٔ بیتی ASN.1 کلید عمومی است، همان‌طور که توسط افزونهٔ subjectKeyIdentifier در گواهی‌ها ارجاع داده شده است. برای گواهی‌ها، اثرانگشت‌های SHA-1 گواهی اصلی و گواهی استفاده‌شده (جعلی) ترکیب می‌شوند تا نام فایل را تشکیل دهند. توجه داشته باشید که فقط گواهی‌های به‌تازگی تولیدشده روی دیسک نوشته می‌شوند. .TP .B \-W \fIgendir\fP مشابه \fB-w\fP، اما همچنین گواهی‌های اصلی و گواهی‌هایی را که به‌تازگی تولید نشده‌اند (مانند مواردی که از طریق \fB-t\fP بارگذاری شده‌اند) می‌نویسد. .TP .B \-Z فشرده‌سازی SSL/TLS را در تمام اتصال‌ها غیرفعال می‌کند. این گزینه زمانی مفید است که عامل محدودکنندهٔ شما CPU باشد، نه پهنای باند شبکه. گزینهٔ \fB-Z\fP تنها در صورتی در دسترس است که SSLsplit در برابر نسخه‌ای از OpenSSL کامپایل شده باشد که از غیرفعال‌سازی فشرده‌سازی پشتیبانی کند. .SH "مشخصات پراکسی (PROXY SPECIFICATIONS)" مشخصات پراکسی (\fIproxyspecs\fP) شامل نوع اتصال، آدرس شنود و آدرس هدایتِ ایستا (static forward) یا سازوکار تفکیک آدرس (موتور NAT، جستجوی DNS مبتنی بر SNI) است: .LP .na \fBhttps\fP \fIlistenaddr port\fP [\fInat-engine\fP|\fIfwdaddr port\fP|\fBsni\fP \fIport\fP] .br \fBssl\fP \fIlistenaddr port\fP [\fInat-engine\fP|\fIfwdaddr port\fP|\fBsni\fP \fIport\fP] .br \fBhttp\fP \fIlistenaddr port\fP [\fInat-engine\fP|\fIfwdaddr port\fP] .br \fBtcp\fP \fIlistenaddr port\fP [\fInat-engine\fP|\fIfwdaddr port\fP] .br \fBautossl\fP \fIlistenaddr port\fP [\fInat-engine\fP|\fIfwdaddr port\fP] .ad .TP \fBhttps\fP رهگیری SSL/TLS به همراه رمزگشایی پروتکل HTTP، از جمله حذف هدرهای پاسخ HPKP، HSTS، Upgrade و Alternate Protocol. این حالت در حال حاضر WebSockets و HTTP/2 را متوقف می‌کند. .TP \fBssl\fP رهگیری SSL/TLS بدون رمزگشایی پروتکل لایه‌های پایین‌تر؛ با محتوای رمزگشایی‌شدهٔ اتصال به عنوان یک جریان نامفهوم (مات) از بایت‌ها رفتار شده و تغییری در آن ایجاد نمی‌شود. .TP \fBhttp\fP اتصال TCP ساده بدون SSL/TLS، به همراه رمزگشایی پروتکل HTTP، از جمله حذف هدرهای پاسخ HPKP، HSTS، Upgrade و Alternate Protocol. این حالت در حال حاضر WebSockets و HTTP/2 را متوقف می‌کند. .TP \fBtcp\fP اتصال TCP ساده بدون SSL/TLS و بدون هرگونه رمزگشایی پروتکل لایه‌های پایین‌تر؛ با محتوای رمزگشایی‌شدهٔ اتصال به عنوان یک جریان نامفهوم از بایت‌ها رفتار شده و تغییری در آن ایجاد نمی‌شود. .TP \fBautossl\fP اتصال TCP ساده تا زمانی که پیام Client Hello مربوط به SSL/TLS در جریان بایت‌ها ظاهر شود، سپس ارتقای خودکار به رهگیری SSL/TLS صورت می‌گیرد. این ویژگی یک پشتیبانی عمومی و مستقل از پروتکل از STARTTLS است که ممکن است به اشتباه بر روی توالی‌های بایتی مشابه پیام‌های Client Hello فعال شود، حتی اگر هیچ دستور واقعیِ STARTTLS صادر نشده باشد. .TP .I listenaddr port آدرس IPv4 یا IPv6 و پورت یا نام سرویس برای شنود. این همان آدرس و پورتی است که موتور NAT باید اتصال‌ها را به آن بازهدایت کند. .TP .I nat-engine موتور NAT برای پرس‌وجو جهت تعیین آدرس و پورت مقصد اصلیِ اتصال‌های بازهدایت‌شدهٔ شفاف. اگر هیچ موتوری مشخص نشود، از موتور پیش‌فرض استفاده می‌شود، مگر اینکه با \fB-e\fP لغو شود. هنگام استفاده از یک موتور NAT، \fBsslsplit\fP باید روی همان سیستمی اجرا شود که قوانین NAT ترافیک را به سمت \fBsslsplit\fP بازهدایت می‌کنند. برای دیدن فهرستی از موتورهای NAT پشتیبانی‌شده، بخش NAT ENGINES را ببینید. .TP .I fwdaddr port آدرس مقصد ایستا، IPv4 یا IPv6، به همراه پورت یا نام سرویس. وقتی از این حالت استفاده شود، اتصال‌ها به آدرس سرور و پورت ارائه‌شده فوروارد می‌شوند. اگر \fIfwdaddr\fP یک نام میزبان (hostname) باشد، به یک آدرس IP تفکیک خواهد شد. .TP \fBsni\fP \fIport\fP استفاده از نام میزبان SNI (Server Name Indication) ارسال‌شده توسط کلاینت در پیام Client Hello در SSL/TLS برای تعیین آدرس IP سروری که باید به آن متصل شد. این قابلیت تنها برای \fIproxyspecs\fPهای \fBssl\fP و \fBhttps\fP کار می‌کند و به یک پورت یا نام سرویس به عنوان آرگومان نیاز دارد. از آنجا که این سازوکار نیازمند جستجوهای DNS است، ترجیح بر این است که از جستجوهای موتور NAT استفاده شود (بالا را ببینید)، مگر زمانی که انجام آن ممکن نباشد؛ مانند زمانی که هیچ موتور NAT پشتیبانی‌شده‌ای وجود ندارد یا هنگام اجرای \fBsslsplit\fP روی سیستمی متفاوت از سیستمی که قوانین NAT هدایت اتصال‌ها را انجام می‌دهند. توجه داشته باشید که هنگام استفاده از \fB-j\fP به همراه \fBsni\fP، ممکن است لازم باشد \fIjaildir\fP را آماده کنید تا تفکیک نام از داخل دایرکتوری chroot کار کند. .SH "مشخصات گزارش‌گیری (LOG SPECIFICATIONS)" مشخصات گزارش‌گیری از صفر یا چند رهنمود به سبک printf تشکیل شده‌اند؛ نویسه‌های معمولی مستقیماً در مسیر خروجی قرار می‌گیرند. دستور SSLsplit در حال حاضر از رهنمودهای زیر پشتیبانی می‌کند: .TP .I %T زمان اتصال اولیه به عنوان برچسب زمانی ISO 8601 UTC. .TP .I %d میزبان و پورت مقصد که با یک ویرگول از یکدیگر جدا شده‌اند؛ در آدرس‌های IPv6 به جای دونقطه از خط زیر (underscore) استفاده می‌شود. .TP .I %D میزبان مقصد؛ در آدرس‌های IPv6 به جای دونقطه از خط زیر استفاده می‌شود. .TP .I %p پورت مقصد. .TP .I %s میزبان و پورت مبدأ که با یک ویرگول از یکدیگر جدا شده‌اند؛ در آدرس‌های IPv6 به جای دونقطه از خط زیر استفاده می‌شود. .TP .I %S میزبان مبدأ؛ در آدرس‌های IPv6 به جای دونقطه از خط زیر استفاده می‌شود. .TP .I %q پورت مبدأ. .TP .I %x نام فرایند محلی. نیازمند استفاده از گزینهٔ \fB-i\fP است. اگر اطلاعات فرایند در دسترس نباشد، این رهنمود از مسیر خروجی حذف خواهد شد. .TP .I %X مسیر کامل فرایند محلی. نیازمند استفاده از گزینهٔ \fB-i\fP است. اگر اطلاعات فرایند در دسترس نباشد، این رهنمود از مسیر خروجی حذف خواهد شد. .TP .I %u نام کاربری یا شناسهٔ عددی کاربر (uid) فرایند محلی. نیازمند استفاده از گزینهٔ \fB-i\fP است. اگر اطلاعات فرایند در دسترس نباشد، این رهنمود از مسیر خروجی حذف خواهد شد. .TP .I %g نام گروه یا شناسهٔ عددی گروه (gid) فرایند محلی. نیازمند استفاده از گزینهٔ \fB-i\fP است. اگر اطلاعات فرایند در دسترس نباشد، این رهنمود از مسیر خروجی حذف خواهد شد. .TP .I %% نویسهٔ لفظی '%'. .LP.SH "موتورهای نَت (NAT ENGINES)" در حال حاضر SSLsplit از موتورهای NAT زیر پشتیبانی می‌کند: .TP .B pf بازهدایت‌های NAT از نوع \fBrdr\fP/\fBrdr-to\fP در فیلتر بسته‌ی اوپن‌بی‌اس‌دی (pf)، که در FreeBSD، NetBSD و Mac OS X نیز دردسترس است. به‌طور کامل پشتیبانی می‌شود، از جمله IPv6. توجه داشته باشید که SSLsplit برای خواندن نیاز به مجوز باز کردن \fB/dev/pf\fP دارد، که به‌طور پیش‌فرض به این معنی است که باید با امتیازات دسترسی \fBroot\fP اجرا شود. با فرض رابط ورودی \fBem0\fP، ابتدا در نحو قدیمی (FreeBSD، Mac OS X)، سپس در نحو جدید (+OpenBSD 4.7): .LP .RS .nf \fBrdr pass on em0 proto tcp from 2001:db8::/64 to any port 80 \\ -> ::1 port 10080\fP \fBrdr pass on em0 proto tcp from 2001:db8::/64 to any port 443 \\ -> ::1 port 10443\fP \fBrdr pass on em0 proto tcp from 192.0.2.0/24 to any port 80 \\ -> 127.0.0.1 port 10080\fP \fBrdr pass on em0 proto tcp from 192.0.2.0/24 to any port 443 \\ -> 127.0.0.1 port 10443\fP .fi .RE .LP .RS .nf \fBpass in quick on em0 proto tcp from 2001:db8::/64 to any \\ port 80 rdr-to ::1 port 10080\fP \fBpass in quick on em0 proto tcp from 2001:db8::/64 to any \\ port 443 rdr-to ::1 port 10443\fP \fBpass in quick on em0 proto tcp from 192.0.2.0/24 to any \\ port 80 rdr-to 127.0.0.1 port 10080\fP \fBpass in quick on em0 proto tcp from 192.0.2.0/24 to any \\ port 443 rdr-to 127.0.0.1 port 10443\fP .fi .RE .TP .B ipfw سوکت‌های divert فایروال آی‌پی فری‌بی‌اس‌دی (IPFW)، همچنین دردسترس در Mac OS X. درسترس در FreeBSD و OpenBSD با استفاده از \fBdivert-to\fP در pf. به‌طور کامل در FreeBSD و OpenBSD پشتیبانی می‌شود، از جمله IPv6. در Mac OS X به دلیل نسخه بسیار قدیمی IPFW گنجانده‌شده، تنها از IPv4 پشتیبانی می‌کند. ابتدا در نحو IPFW، سپس در نحو \fBdivert-to\fP در pf: .LP .RS .nf \fBipfw add fwd ::1,10080 tcp from 2001:db8::/64 to any 80\fP \fBipfw add fwd ::1,10443 tcp from 2001:db8::/64 to any 443\fP \fBipfw add fwd 127.0.0.1,10080 tcp from 192.0.2.0/24 to any 80\fP \fBipfw add fwd 127.0.0.1,10443 tcp from 192.0.2.0/24 to any 443\fP .fi .RE .LP .RS .nf \fBpass in quick on em0 proto tcp from 2001:db8::/64 to any \\ port 80 divert-to ::1 port 10080\fP \fBpass in quick on em0 proto tcp from 2001:db8::/64 to any \\ port 443 divert-to ::1 port 10443\fP \fBpass in quick on em0 proto tcp from 192.0.2.0/24 to any \\ port 80 divert-to 127.0.0.1 port 10080\fP \fBpass in quick on em0 proto tcp from 192.0.2.0/24 to any \\ port 443 divert-to 127.0.0.1 port 10443\fP .fi .RE .TP .B ipfilter ابزار IPFilter (ipfilter، ipf)، دردسترس در بسیاری از سیستم‌ها، از جمله FreeBSD، NetBSD، Linux و Solaris. توجه داشته باشید که SSLsplit برای خواندن نیاز به مجوز باز کردن \fB/dev/ipnat\fP دارد، که به‌طور پیش‌فرض به این معنی است که باید با امتیازات دسترسی \fBroot\fP اجرا شود. تنها به دلیل محدودیت‌های رابط ioctl(2) مربوط به SIOCGNATL از IPv4 پشتیبانی می‌کند. با فرض رابط ورودی \fBbge0\fP: .LP .RS .nf \fBrdr bge0 0.0.0.0/0 port 80 -> 127.0.0.1 port 10080\fP \fBrdr bge0 0.0.0.0/0 port 443 -> 127.0.0.1 port 10443\fP .fi .RE .TP .B netfilter سامانه netfilter لینوکس با استفاده از هدف REDIRECT در iptables. از لینوکس نسخه v3.8-rc1 به‌طور کامل از جمله IPv6 پشتیبانی می‌شود؛ در کرنل‌های قدیمی‌تر به دلیل محدودیت‌های رابط getsockopt(2) مربوط به SO_ORIGINAL_DST، تنها از IPv4 پشتیبانی می‌کند. .LP .RS .nf \fBiptables -t nat -A PREROUTING -s 192.0.2.0/24 \\ -p tcp --dport 80 \\ -j REDIRECT --to-ports 10080\fP \fBiptables -t nat -A PREROUTING -s 192.0.2.0/24 \\ -p tcp --dport 443 \\ -j REDIRECT --to-ports 10443\fP \fB# please contribute a tested ip6tables config\fP .fi .LP توجه داشته باشید که SSLsplit تنها در صورتی قادر به پذیرش اتصالات ورودی است که به نشانی IP صحیح (برای مثال 192.0.2.1) یا روی تمام رابط‌ها (0.0.0.0) متصل (bind) شود. هدف REDIRECT از نشانی رابط محلیِ رابط ورودی به‌عنوان نشانی IP مقصد، یا از 127.0.0.1 برای بسته‌های تولیدشده محلی استفاده می‌کند. .RE .TP .B tproxy سامانه netfilter لینوکس با استفاده از هدف TPROXY در iptables همراه با ترفندهای جدول مسیریابی (routing table) جهت امکان‌پذیر ساختن شروع ترافیک غیرمحلی روی سوکت‌های محلی. به‌طور کامل پشتیبانی می‌شود، از جمله IPv6. .LP .RS .nf \fBip -f inet6 rule add fwmark 1 lookup 100\fP \fBip -f inet6 route add local default dev lo table 100\fP \fBip6tables -t mangle -N DIVERT\fP \fBip6tables -t mangle -A DIVERT -j MARK --set-mark 1\fP \fBip6tables -t mangle -A DIVERT -j ACCEPT\fP \fBip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT\fP \fBip6tables -t mangle -A PREROUTING -s 2001:db8::/64 \\ -p tcp --dport 80 \\ -j TPROXY --tproxy-mark 0x1/0x1 --on-port 10080\fP \fBip6tables -t mangle -A PREROUTING -s 2001:db8::/64 \\ -p tcp --dport 443 \\ -j TPROXY --tproxy-mark 0x1/0x1 --on-port 10443\fP \fBip -f inet rule add fwmark 1 lookup 100\fP \fBip -f inet route add local default dev lo table 100\fP \fBiptables -t mangle -N DIVERT\fP \fBiptables -t mangle -A DIVERT -j MARK --set-mark 1\fP \fBiptables -t mangle -A DIVERT -j ACCEPT\fP \fBiptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT\fP \fBiptables -t mangle -A PREROUTING -s 192.0.2.0/24 \\ -p tcp --dport 80 \\ -j TPROXY --tproxy-mark 0x1/0x1 --on-port 10080\fP \fBiptables -t mangle -A PREROUTING -s 192.0.2.0/24 \\ -p tcp --dport 443 \\ -j TPROXY --tproxy-mark 0x1/0x1 --on-port 10443\fP .fi .LP توجه داشته باشید که فیلترینگ مسیر بازگشت (rp_filter) نیز باید روی رابط‌هایی که ترافیک بازهدایت‌شده توسط TPROXY را مدیریت می‌کنند غیرفعال شود. .RE.SH "سیگنال‌ها (SIGNALS)" یک \fBsslsplit\fP در حال اجرا، سیگنال‌های SIGINT و SIGTERM را برای خاموش‌سازی تمیز (clean shutdown) و SIGUSR1 را برای بازگشایی مجدد فایل‌های لاگ تک‌فایلی (مانند \fB-l\fP، \fB-L\fP و \fB-X\fP) می‌پذیرد. روش استاندارد برای چرخش لاگ‌ها (log rotation) یا پس‌پردازش آن‌ها این است که نام فایل لاگ فعال را تغییر دهید، سیگنال SIGUSR1 را به PID موجود در فایل PID تعیین‌شده توسط \fB-p\fP ارسال کنید، کمی به SSLsplit زمان بدهید تا پس از بستن فایل قدیمی بافرها را خالی کند (flush)، و سپس فایل لاگ تغییرنام‌یافته را پس‌پردازش کنید. فایل‌های لاگ به ازای هر اتصال (مانند \fB-S\fP و \fB-F\fP) مجدداً بازگشایی نمی‌شوند زیرا نام فایل آن‌ها مختص همان اتصال است. .SH "وضعیت خروج (EXIT STATUS)" پردازهٔ \fBsslsplit\fP در خاموش‌سازی معمول (SIGINT، SIGTERM) با وضعیت 0، و در خاموش‌سازی کنترل‌شده بر اساس دریافت یک سیگنال دیگر مانند SIGHUP، با مقدار 128 + شمارهٔ سیگنال خارج می‌شود. وضعیت خروج در بازهٔ 1..127 نشان‌دهندهٔ شرایط خطا است. .SH "مثال‌ها (EXAMPLES)" مطابق با نمونه‌های پیکربندی موتور NAT در بالا، رهگیری HTTP و HTTPS روی IPv4 و IPv6 با استفاده از گواهی‌های جعلی به کمک کلید خصوصی مرجع صدور گواهی \fBca.key\fP و گواهی \fBca.crt\fP، ثبت رویدادهای اتصال در \fBconnect.log\fP و داده‌های اتصال در فایل‌های جداگانه زیر مسیر \fB/tmp\fP (اگر چندین موتور در سیستم شما در دسترس است، برای انتخاب موتور مناسب \fB-e\fP \fInat-engine\fP را اضافه کنید): .LP .nf \fBsslsplit -k ca.key -c ca.crt -l connect.log -S /tmp \\ https ::1 10443 https 127.0.0.1 10443 \\ http ::1 10080 http 127.0.0.1 10080\fP .fi .LP اگر از موتور netfilter لینوکس همراه با هدف REDIRECT در iptables استفاده می‌شود، شنود روی آدرس IP صحیح (مثلاً 192.0.2.1) یا روی همهٔ رابط‌ها (0.0.0.0) اهمیت دارد، در غیر این صورت SSLsplit قادر به پذیرش اتصال‌های ورودی نخواهد بود. .LP رهگیری IMAP/IMAPS با استفاده از همان تنظیمات: .LP .nf \fBsslsplit -k ca.key -c ca.crt -l connect.log -S /tmp \\ ssl ::1 10993 ssl 127.0.0.1 10993 \\ tcp ::1 10143 tcp 127.0.0.1 10143\fP .fi .LP یک پیکربندی هدفمندتر، فقط برای HTTPS، با استفاده از فایل‌های گواهی/زنجیره/کلید از مسیر \fB/path/to/cert.d\fP و هدایت ایستا به \fBwww.example.org\fP به‌جای پرس‌وجو از موتور NAT: .LP .nf \fBsslsplit -t /path/to/cert.d -l connect.log -S /tmp \\ https ::1 10443 www.example.org 443 \\ https 127.0.0.1 10443 www.example.org 443\fP .fi .LP همان مثال اولیه، ولی با استفاده از مشخصات پراکسی (proxyspecs) سادهٔ ssl و tcp برای جلوگیری از دستکاری سرایندها، و ثبت وقایع در یک فایل PCAP واحد برای پس‌پردازش با یک ابزار خارجی. برای تسهیل چرخش لاگ از طریق SIGUSR1، گزینهٔ \fB-p\fP نیز داده شده است تا ابزارها یا اسکریپت‌های خارجی چرخش لاگ بتوانند PID را از فایل PID بخوانند. .LP .nf \fBsslsplit -k ca.key -c ca.crt -X log.pcap -p /var/run/sslsplit.pid \\ ssl ::1 10443 ssl 127.0.0.1 10443 \\ tcp ::1 10080 tcp 127.0.0.1 10080\fP .fi .LP همان مثال اولیه، ولی با گزینه‌های SSL بهینه‌شده برای سرعت از طریق غیرفعال‌سازی فشرده‌سازی، انتخاب تنها مجموعه‌های رمزنگاری (cipher suites) سریع و استفاده از یک کلید خصوصی از پیش‌محاسبه‌شدهٔ \fBleaf.key\fP برای گواهی‌های جعلی. بیشترین افزایش سرعت با انتخاب الگوریتم‌های سریع و اندازه‌های کلید کوچک برای کلیدهای خصوصی CA و گواهی انتهایی (leaf) به دست می‌آید. دستور \fBopenssl speed\fP را برای بررسی کارایی الگوریتم‌ها روی سیستم خود اجرا کنید. توجه داشته باشید که ممکن است کلاینت‌ها از همهٔ الگوریتم‌ها و اندازه‌های کلید پشتیبانی نکنند. همچنین برخی از کلاینت‌ها در مورد مجموعه‌های رمزنگاری که ضعیف می‌دانند به کاربران هشدار می‌دهند. .LP .nf \fBsslsplit -Z -s NULL:RC4:AES128:-DHE -K leaf.key \\ -k ca.key -c ca.crt -l connect.log -S /tmp \\ https ::1 10443 https 127.0.0.1 10443 \\ http ::1 10080 http 127.0.0.1 10080\fP .fi .LP همان مثال اولیه، ولی در حال اجرا به‌صورت دیمن (daemon) تحت کاربر \fBsslsplit\fP و نوشتن فایل PID: .LP .nf \fBsslsplit -d -p /var/run/sslsplit.pid -u sslsplit \\ -k ca.key -c ca.crt -l connect.log -S /tmp \\ https ::1 10443 https 127.0.0.1 10443 \\ http ::1 10080 http 127.0.0.1 10080\fP .fi .LP برای تولید کلید خصوصی CA با نام \fBca.key\fP و گواهی \fBca.crt\fP با استفاده از OpenSSL: .LP .nf \fBcat >x509v3ca.cnf <<'EOF'\fP [ req ] distinguished_name = reqdn [ reqdn ] [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always \fBEOF\fP \fBopenssl genrsa -out ca.key 2048\fP \fBopenssl req -new -nodes -x509 -sha256 -out ca.crt -key ca.key \\ -config x509v3ca.cnf -extensions v3_ca \\ -subj '/O=SSLsplit Root CA/CN=SSLsplit Root CA/' \\ -set_serial 0 -days 3650\fP .fi .SH "نکات (NOTES)" نرم‌افزار SSLsplit به دلیل معماری چندنخی و رویدادمحور بر پایهٔ libevent، و با بهره‌گیری از جایگزین‌های خاص سکو برای ()select نظیر kqueue، قادر است تعداد نسبتاً بالایی از شنوندگان (listeners) و اتصال‌ها را مدیریت کند. نخ اصلی، شنوندگان و مدیریت سیگنال‌ها را بر عهده دارد؛ در حالی که تعدادی نخ کارگر (worker threads) معادل دو برابر تعداد هسته‌های CPU برای مدیریت اتصالات واقعی در پایه‌های رویداد مجزا، از جمله پردازش‌های سنگین SSL/TLS روی CPU، استفاده می‌شوند. .LP در انتخاب ساختارهای دادهٔ پربازده برای حافظهٔ پنهان گواهی‌ها و نشست‌های SSL دقت بالایی صورت گرفته است. ثبت لاگ‌ها در نخ‌های مجزای نویسنده بر دیسک پیاده‌سازی شده تا اطمینان حاصل شود که نخ‌های مدیریت رویداد سوکت روی I/O دیسک مسدود (block) نمی‌شوند. پرس‌وجوهای DNS به‌صورت ناهمگام انجام می‌شوند. نرم‌افزار SSLsplit از ذخیره‌سازی نشست‌های SSL در حافظهٔ پنهان هر دو طرف برای به حداقل رساندن دست‌تکانی‌های (handshakes) کامل SSL استفاده می‌کند، اما حتی با این وجود، عامل محدودکننده در مدیریت اتصالات SSL، محاسبات واقعی اعداد بزرگ (bignum) است. .LP برای دستیابی به کارایی بالا و تاخیر اندک، و هنگامی که SSLsplit به‌عنوان root یا در حالت تفکیک دسترسی (privilege separation) اجرا می‌شود، از گزینه‌هایی که نیازمند فراخوانی یک عملیات ممتاز از طریق سازوکار تفکیک دسترسی برای هر اتصال هستند خودداری کنید. این موارد در حال حاضر شامل همهٔ انواع لاگ به ازای هر اتصال هستند: ثبت محتوا در فایل به ازای هر جریان در پوشه یا مشخصهٔ فایل (\fB-F\fP، \fB-S\fP)، ثبت محتوا در PCAP به ازای هر جریان در پوشه یا مشخصهٔ فایل (\fB-Y\fP، \fB-y\fP)، و گواهی‌های تولیدشده یا همهٔ گواهی‌ها در فایل‌های موجود در پوشه (\fB-w\fP، \fB-W\fP). در عوض، در صورت امکان از گزینه‌های تک‌فایلی متناظر استفاده کنید. هرچند توصیه نمی‌شود، اما این امکان وجود دارد که هنگام اجرا به‌عنوان کاربر ریشه (root)، با استفاده از \fB-u root\fP از تفکیک پیش‌فرض دسترسی‌ها صرف‌نظر کنید و بدین ترتیب تفکیک دسترسی را به طور کامل دور بزنید..SH "همچنین ببینید (SEE ALSO)" sslsplit.conf(5), openssl(1), ciphers(1), speed(1), pf(4), ipfw(8), iptables(8), ip6tables(8), ip(8), hostapd(8), arpspoof(8), parasite6(8), yersinia(8), .I https://www.roe.ch/SSLsplit .SH "نویسندگان (AUTHORS)" برنامه SSLsplit توسط Daniel Roethlisberger نوشته شده است. در حال حاضر SSLsplit توسط Daniel Roethlisberger و Soner Tari نگهداری می‌شود. افراد زیر در ارائه کد یا مستندات، به ترتیب زمانی اولین مشارکت خود، همکاری داشته‌اند: Steve Wills, Landon Fuller, Wayne Jensen, Rory McNamara, Alexander Neumann, Adam Jacob Muller, Richard Poole, Maciej Kotowicz, Eun Soo Park, Christian Groschupp, Alexander Savchenkov, Soner Tari, Petr Vanek, Hilko Bengen, Philip Duldig, Levente Polyak, Nick French, Cihan Komecoglu و Sergey Pinaev. پروژه SSLsplit شامل کارهایی است که با حمایت مالی HackerOne انجام شده است. .SH "گزارش باگ‌ها (BUGS)" برای ارسال گزارش باگ‌ها یا وصله‌ها از GitHub استفاده کنید: .LP .RS .I https://github.com/droe/sslsplit .RE .LP