TSOCKS(8) System Manager's Manual TSOCKS(8)

tsocks - کتابخانه‌ای برای رهگیری اتصالات خروجی شبکه و تغییر مسیر آن‌ها از طریق کارساز SOCKS

مقدار LD_PRELOAD را برای بارگذاری کتابخانه تنظیم کنید و سپس برنامه‌ها را طبق روال معمول به کار ببرید.

دستور نحوی برای بارگذاری پیش‌فرض اجباری کتابخانه در پوسته‌های مختلف در زیر آمده است:

پوسته‌های Bash، Ksh و Bourne:

export LD_PRELOAD=/lib/libtsocks.so

پوسته C Shell:

setenv LD_PRELOAD=/lib/libtsocks.so

این فرایند را می‌توان با استفاده از اسکریپت tsocks(1) برای یک دستور یا برای همهٔ دستورهای یک نشست پوسته (برای کاربران پوسته‌های Bash، Bourne و Korn) خودکار کرد.

همچنین می‌توانید tsocks را به گونه‌ای پیکربندی کنید که تمام فرایندها به طور خودکار از آن استفاده کنند؛ این یک پیکربندی بسیار مفید است. برای اطلاعات بیشتر در مورد این شیوهٔ پیکربندی، بخش هشدارها و نکات مهم (CAVEATS) در همین صفحه راهنما را ببینید.

tsocks کتابخانه‌ای برای امکان‌پذیر ساختن پیش‌کاری شفاف SOCKS است. این کتابخانه تابع معمولی connect() را پوشش می‌دهد. هنگامی که تلاشی برای برقراری اتصال صورت می‌گیرد، به پروندهٔ پیکربندی (که در زمان کامپایل مشخص می‌شود اما پیش‌فرض آن /etc/tsocks.conf است) مراجعه کرده و مشخص می‌کند که آیا نشانی IP تعیین‌شده محلی است یا خیر. اگر محلی نباشد، کتابخانه اتصال را به کارساز SOCKS مشخص‌شده در پروندهٔ پیکربندی هدایت می‌کند. سپس اتصال را با کارساز SOCKS برقرار کرده و آن را به برنامهٔ فراخواننده بازمی‌گرداند.

tsocks برای استفاده در ماشین‌هایی طراحی شده است که با دیواره آتش از اینترنت جدا شده‌اند. این ابزار نیاز به کامپایل مجدد برنامه‌هایی مانند lynx یا telnet را برطرف می‌کند تا بتوانند از طریق SOCKS به اینترنت دسترسی پیدا کنند. عملکرد آن بسیار شبیه به پشته‌های TCP/IP سازگار با SOCKS در سایر پلتفرم‌ها است.

بیشتر آرگومان‌های tsocks در پروندهٔ پیکربندی ارائه می‌شوند (محل این پرونده در زمان کامپایل با آرگومان --with-conf=<file> تعیین می‌شود اما پیش‌فرض آن /etc/tsocks.conf است). ساختار این پرونده در tsocks.conf(8) مستند شده است.

برخی از گزینه‌های پیکربندی را می‌توان در زمان اجرا با استفاده از متغیرهای محیطی زیر مشخص کرد:

این متغیر محیطی مسیر پیش‌فرض پروندهٔ پیکربندی tsocks را لغو می‌کند. اگر برنامه‌ای که tsocks در آن قرار دارد دارای بیت setuid باشد، این متغیر نادیده گرفته می‌شود. علاوه بر این، در زمان ساخت می‌توان با آرگومان --disable-envconf برای اسکریپت پیکربندی، این متغیر محیطی را از کد tsocks حذف کرد.
این متغیر محیطی سطح خروجی اشکال‌زدایی تولیدشده توسط tsocks را تنظیم می‌کند (خروجی اشکال‌زدایی در قالب خروجی روی خطای استاندارد یا stderr ارسال می‌شود). اگر این متغیر موجود نباشد، سطح لاگ‌گیری به طور پیش‌فرض روی 0 تنظیم است که نشان می‌دهد تنها پیام‌های خطا باید نمایش داده شوند. تنظیم آن روی مقادیر بالاتر باعث می‌شود tsocks پیام‌های بیشتری در توصیف کارهای خود تولید کند. در صورت تنظیم روی -1، tsocks هیچ پیام خطا یا اشکال‌زدایی نمایش نخواهد داد. این حالت تنها زمانی لازم است که خروجی tsocks با عملکرد برنامه‌ای که در آن تعبیه شده تداخل داشته باشد. خروجی پیام‌ها را می‌توان در زمان ساخت با مشخص کردن گزینهٔ --disable-debug به طور دائمی از tsocks حذف کرد.
این گزینه می‌تواند برای تغییر مسیر خروجی tsocks (که معمولاً به خطای استاندارد فرستاده می‌شود) به یک پرونده استفاده شود. اگر برنامه‌ای که tsocks در آن تعبیه شده دارای بیت setuid باشد، این متغیر نادیده گرفته می‌شود. برای برنامه‌هایی که خروجی tsocks با عملکرد عادی آن‌ها تداخل دارد، این گزینه عموماً بهتر از غیرفعال کردن کامل پیام‌ها (با TSOCKS_DEBUG = -1) است.
از این متغیر محیطی می‌توان برای تعیین نام کاربری در هنگام درخواست احراز هویت کارسازهای SOCKS نسخه ۵ استفاده کرد. این متغیر، نام کاربری پیش‌فرضی را که می‌توان با استفاده از default_user در پروندهٔ پیکربندی مشخص کرد لغو می‌کند؛ برای اطلاعات بیشتر tsocks.conf(8) را ببینید. این متغیر برای کارسازهای نسخه ۴ پروتکل SOCKS نادیده گرفته می‌شود.
از این متغیر محیطی می‌توان برای تعیین گذرواژه در هنگام درخواست احراز هویت کارسازهای SOCKS نسخه ۵ استفاده کرد. این متغیر، گذرواژه پیش‌فرضی را که می‌توان با استفاده از default_pass در پروندهٔ پیکربندی مشخص کرد لغو می‌کند؛ برای اطلاعات بیشتر tsocks.conf(8) را ببینید. این متغیر برای کارسازهای نسخه ۴ پروتکل SOCKS نادیده گرفته می‌شود.

tsocks در حالت عادی قادر به ارسال پرس‌وجوهای DNS از طریق کارساز SOCKS نیست، زیرا نسخه ۴ پروتکل SOCKS بر روی TCP کار می‌کند و DNS به طور معمول از پروتکل UDP بهره می‌برد. با این حال، نسخه ۱.۵ به بالا روشی برای اجبار پرس‌وجوهای DNS به استفاده از TCP ارائه می‌دهند که این امر امکان هدایت آن‌ها از طریق پروکسی را فراهم می‌سازد. این گزینه تنها در زمان کامپایل قابل فعال‌سازی است؛ لطفاً برای اطلاعات بیشتر به پروندهٔ INSTALL مراجعه کنید.

tsocks در صورت بروز مشکل در پروندهٔ پیکربندی یا مذاکره با کارساز SOCKS، در صورتی که متغیر محیطی TSOCKS_DEBUG روی -1 تنظیم نشده باشد و در زمان کامپایل نیز گزینهٔ --disable-debug مشخص نشده باشد، پیام‌های خطا تولید کرده و آن‌ها را در خطای استاندارد (stderr) چاپ می‌کند. این خروجی ممکن است با برنامه‌هایی که خطای استاندارد را هدایت می‌کنند تداخل ایجاد کند.

tsocks در پیکربندی بالا قادر به ارائهٔ خدمات پروکسی SOCKS برای برنامه‌های دارای بیت setuid یا برنامه‌هایی که از پوسته اجرا نمی‌شوند نخواهد بود. می‌توانید تمام برنامه‌ها را با قرار دادن مسیر libtsocks در پروندهٔ /etc/ld.so.preload مجبور به استفاده از LD_PRELOAD کنید. لطفاً اطمینان حاصل کنید که در صورت انجام این کار، مسیر کامل کتابخانه را به درستی در این پرونده وارد کرده‌اید. اگر آن را اشتباه وارد کنید، قادر به انجام هیچ کاری با سیستم نخواهید بود و مجبور می‌شوید سیستم را با یک دیسک نجات راه‌اندازی کرده و آن پرونده را حذف کنید (یا برنامهٔ saveme را امتحان کنید؛ برای اطلاعات بیشتر پروندهٔ INSTALL را ببینید). این یک ***هشدار جدی*** است، لطفاً بسیار دقت فرمایید. همچنین اطمینان یابید که کتابخانه در سیستم‌فایل ریشه قرار دارد، زیرا اگر دایرکتوری آن در زمان بوت در دسترس نباشد، اختلال اساسی در کل سیستم رخ خواهد داد.

tsocks تنها می‌تواند اتصالات خروجی TCP را از پروکسی عبور دهد.

tsocks با سوکت‌های ناهمگام (asynchronous) به درستی کار نمی‌کند (هرچند با سوکت‌های غیرمسدودکننده کار می‌کند). رفع این اشکال بسیار دشوار خواهد بود و به نظر می‌رسد تقاضایی نیز برای آن وجود ندارد (هیچ برنامهٔ شناخته‌شده‌ای را سراغ ندارم که از سوکت‌های ناهمگام استفاده کند).

tsocks در پیاده‌سازی نسخه ۵ پروتکل SOCKS به طور کامل منطبق بر استانداردهای RFC نیست؛ این ابزار تنها از روش‌های احراز هویت «نام کاربری و گذرواژه» یا «بدون احراز هویت» پشتیبانی می‌کند. استاندارد RFC مشخص کرده است که GSSAPI باید در هر پیاده‌سازی منطبق پشتیبانی شود. من این را پیاده‌سازی نکرده‌ام، آیا کسی تمایل به کمک دارد؟

tsocks می‌تواند کتابخانه تحلیل نام libc را وادار به استفاده از پروتکل TCP برای پرس‌وجوهای نام کند؛ در صورت انجام این کار، این عمل بدون در نظر گرفتن محلی بودن یا نبودن DNS مورد پرس‌وجو اعمال می‌شود. این کار سربار ایجاد می‌کند و تنها باید در مواقع نیاز استفاده شود.

tsocks از قابلیت‌های بارگذار پویای فرمت ELF برای رهگیری فراخوانی‌های پویای توابع از برنامه‌های تعبیه‌شده استفاده می‌کند. در نتیجه، این ابزار نمی‌تواند کنش‌های برنامه‌های اجرایی پیوند ایستا (statically linked)، برنامه‌های اجرایی غیر ELF، یا برنامه‌های اجرایی را که مستقیماً از طریق تلهٔ فراخوانی سیستمی یا از طریق روال syscall() فراخوانی سیستمی انجام می‌دهند، رهگیری کند.

/etc/tsocks.conf
پروندهٔ پیکربندی پیش‌فرض tsocks

tsocks.conf(5), tsocks(1)

Shaun Clowes (delius@progsoc.uts.edu.au)

حق نشر ۲۰۰۰ Shaun Clowes

ابزار tsocks و مستندات آن را می‌توان تحت شرایط و ضوابط نسخهٔ ۲ پروانه عمومی همگانی گنو (GPL)، همان‌طور که توسط بنیاد نرم‌افزارهای آزاد (کمبریج، ماساچوست، ایالات متحده آمریکا) منتشر شده است، آزادانه کپی کرد.

این مستندات بر اساس مستندات logwrites (یک رهگیر دیگر برای کتابخانه‌های مشترک) نوشته شده است. یک خط کد از آن در tsocks استفاده شده و بخش زیادی از مستندات نیز برگرفته از آن است :) پروژه logwrites توسط adam@yggdrasil.com (Adam J. Richter) نوشته شده و از نشانی زیر قابل دریافت است:
ftp.yggdrasil.com/pub/dist/pkg

Shaun Clowes