۱۳۸۸ آبان ۱۶, شنبه

چگونه یک برنامه را ساکسیفای کنیم؟

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

ssh -D 9999 user@remotehost

نسخه های اخیر OpenSSH همگی از SOCKSv5 هم پشتیبانی می کنند، پس شما محدود به فقط TCP (مشکل v4) نیستید، چون v5 از UDP نیز پشتیبانی می کند.
اگر تمامی منابعی که دسترسی شما به هردلیلی به آنها مسدود شده محدود به منابع موجود در وب می باشد، خوب همین حالا هم مشکل شما برطرف شده، چون اکثر مرورگرهای وب جدید از SOCKS Proxy به خوبی پشتیبانی می کنند.

اما اگر مثلا قصد Check out کردن یک Subversion repository موجود برروی Google Code را داشته باشید چکار می کنید؟

به برنامه هایی که از SOCKS Proxy پشتیبانی نمی کنند باید به زور این امکان را اضافه کرد!

هنگامی که شما برنامه ایی را اجرا می کنید بخشی از سیستم عامل شما به نام «پیوندده پویا» تمامی Shared Libraries مورد نیاز برای اجرای آن برنامه را بارگیری کرده و آنها را پیوند می دهد. متداول ترین Shared library مورد استفاده در لینوکس ld-linux.so هست. با استفاده از دستور زیر مشاهده می کنید که svn نیز از آن استفاده می کند:

ldd `which svn`

یکی از خصوصیات این Shared library این هست که می تواند با توجه به یک سری متغیرهای محیطی عملکرد خود را تغییر دهد، یکی از این متغیرهای محیطی LD_PRELOAD هست. LD_PRELOAD به بارگیر دستور میدهد که کتابخانه هایی دیگر علاوه بر آنها که هنگام کامپایل برنامه مشخص شده اند را نیز بارگیری کند.

پس ساده ترین راه برای اینکه برنامه ها را مجبور به استفاده از SOCKS Proxy کنید، این است که یک کتابخانه خاص را از طریق LD_PRELOAD بارگیری کرده و به آن کتابخانه اجازه دهید تمامی سیستم کالهای مربوط به شبکه را مدیریت کند.

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

نحوه‌ی پیکربندی:
/etc/socks/tsocks.conf:
server = 127.0.0.1
server_port = 9999

حالا تنها کافیست که در ابتدای فرمانی که قصد اجرای آن را دارید یک tsocks اضافه کنید، همین! مثلا:

tsocks wget http://www.example.com/foo/bar.tgz

یکی از مهمترین مشکلات tsocks اینه که آخرین به روزرسانیش مربوط میشه به ۷ سال قبل. در آخرین نسخه tsocks امکان استفاده از DNS های Tor هم وجود دارد، پیشنهاد من این است که این امکان را غیرفعال کنید.

نحوه‌ی پیکربندی:
~/.proxychains/proxychains.conf:
[ProxyList]
socks5 127.0.0.1 9999

حالا تنها کافیست که در ابتدای فرمانی که قصد اجرای آن را دارید یک proxychains اضافه کنید، همین! مثلا:

proxychains svn checkout http://closure-library.googlecode.com/svn/trunk/ closure-library

من به شخصه proxychains را به tsocks ترجیح میدهم.

فقط یک نکته دیگر:
با توجه به توضیحاتی که در مورد متغیرهای محیطی و اثر آنها بر ld-linux.so در ابتدا داده شد، حدس این موضوع که اضافه کردن tsocks یا proxychains به ابتدای فرامین تنها LD_PRELOAD را برابر مقداری مناسب قرار می دهند چندان سخت نیست. پس اگر می خواهید تمامی فرامین بدون اضافه کردن tsocks یا proxychains از سرور SOCKS شما استفاده کنند، تنها کافیست در ابتدای نشست مقادیر مناسب را به LD_PRELOAD بدهید، مثلا:

export LD_PRELOAD=/usr/lib/libproxychains.so

از حالا تا پایان نشست نیازی به اضافه کردن proxychains به ابتدای فرامین ندارید.

توجه داشته باشید هم tsocks و هم proxychains امکانات مدیریتی بسیار زیادی را ازطریق فایل پیکربندی در اختیار شما قرار می دهند، اینکه مثلا تنها ارتباطات به مکانهایی مشخص از سرور SOCKS استفاده کنند و ... فایل پیکربندی نمونه همراه با این بسته ها را مشاهده کنید.

۳ نظر:

  1. با سلام
    می خواستم بدانم چگونه می توانم در ویندوز و با استفاده از slik svn و proxy u96 hc از امکانات googlecode.com استفاده کنم.
    سپاس گذارم.

    پاسخحذف
  2. سلام
    من هم از ssh tunnel و proxychains استفاده میکنم.
    ولی این اواخر مشکل پیدا کردم. کانکشن هایی که از طریق تونل هستند بشدت کند هستند طوری که حتی یک صفحه‌ی معمولی چند دقیقه طول میکشه باز بشه. که فکر میکنم به فیلترینگ مربوط میشه. قبلا فقط توی مناسبت‌های خاص این مشکل پیش می اومد اما الان دو هفته ای میشه که دائمی شده. راه حلی براش سراغ نداری؟

    پاسخحذف
  3. سلام
    استاد گل کاشتی بازم. خیلی عالی بود.

    پاسخحذف