Posts Tagged ‘سرور چند سایتی’

نحوه فیلترینگ در ایران و نقاط ضعف آن

Written by AbiusX on . Posted in شبکه, علمی, کامپیوتر

بروزرسانی (۲۰۱۴):از سال ۲۰۱۳ این روش به صورت تجاری تحت نرم افزار irboost.com در آمده است که بالاترین سرعت رفع فیلتر، کمترین هزینه و راحتترین روش استفاده را دارد.
این نرم افزار در حال حاضر مورد استفاده بیش از ۵۰۰۰ نفر می‌باشد (برای مدت بیش از یک سال)

امشب برای راه‌اندازی چندنوع پراکسی با تکنولوژی‌های مختلف، مجبور شدم نحوه کارکرد سیستم فیلترینگ ایران رو بررسی کنم و به نتایج خیلی جالبی رسیدم که خوبه شما هم بدونید :

اولا که فیلترینگ تنها بر روی وب (یعنی پروتکل‌های HTTP , HTTPs) پیاده شده و هیچ پروتکل دیگری فیلتر نیست، در حالی که فیلترینگی که آمریکا به دلیل محرومیت بر ایران اعمال کرده تمام پروتکل‌ها رو شامل می‌شه. اما قبل از اینکه ادامه فرآیند فیلترینگ رو بدونیم، لازمه بدونیم که چگونه یک سایت بر روی کامپیوتر ما لود می‌شه.

فرآیند بارگزاری یک سایت

به عنوان مثال فرض کنید آدرس www.facebook.com/profile/abiusx رو در کاوشگر وب خودتون وارد کردید (Internet Explorer یا Mozilla Firefox). کاوشگر شما این آدرس رو به آدرس کاملی که شما حوصله تایپش رو نداشتید تبدیل می‌کنه:

http://www.facebook.com/profile/abiusx

این آدرس نوع پروتکل رو نیز در بر داره (که پیش فرض وب هست) و به کاوشگر اجازه می‌ده نحوه باز کردن اون رو تشخیص بده. قبل از هر کاری، کاوشگر وب باید بدونه www.facebook.com بر روی کدوم کامپیوتر سرور روی اینترنت قرار داره، یعنی شماره اون کامپیوتر رو بدونه. این فرآیند توسط پروتکل زیرساختی DNS انجام می‌گیره که آدرس‌ها رو به شماره تبدیل می‌کنه.

نکته مهمی که بعدا به اون بر خواهیم خورد اینه که DNS ماهیت پرسش و پاسخی داره، یعنی کامپیوتر شما از کامپیوتر دیگری در شبکه (که معمولا ISP یا همون سرویس دهنده اینترنتتون هست) سوال می‌کنه که این آدرس شماره اش چنده؟ و پاسخ می‌گیره. بسیاری از فیلترینگ‌ها در دنیا در همین مرحله پیاده می‌شن، یعنی کامپیوتر بالادست به شما پاسخ می‌ده که این آدرسش 10.10.34.34 هست (آدرس کامپیوتری که صفحه فیلترینگ روش قرار داره)، اما اینگونه فیلترینگ به سادگی قابل رفع هست. کافیه شما یک کامپیوتر خارج از ایران رو به عنوان DNS خودتون مشخص کنید، مثلا 4.2.2.4 رو در تنظیمات اتصال به شبکه به عنوان آدرس کامپیوتر DNS خودتون وارد کنید و نگذارید که اتوماتیک مشخص شه. از این پس سوالات  DNS شما از این کامپیوتر پرسیده می‌شه و قاعدتا پاسخ‌های اون هم واقعی هستند و صفحه فیلترینگ نیستند.

همچنین باید توجه کرد که هر کامپیوتری در شبکه (اینترنت) که معمولا یک شماره داره، ممکنه یک یا چند سایت رو روی خودش سرویس دهی کنه. معمولا سایت‌های کوچک و کم مشتری بر روی کامپیوترهایی با چند سایت دیگر مشترک هستند، سایت‌های معمولی و پربازدید بر روی یک سرور اختصاصی با یک شماره هستند و سایت‌های معروف بر روی چندین سرور مختلف به صورت همزمان سرویس‌دهی می‌شوند.

برای درک این نسخه، برنامه ترمینال (Command Prompt) خود را باز کنید و دستورات زیر را وارد نمایید :

nslookup www.google.com

دستور فوق چندین شماره برمی‌گرداند، زیرا سایت گوگل بر روی چندین سرور مختلف سرویس دهی می‌شود

nslookup www.etebaran.ir

دستور فوق تنها یک شماره برمی‌گرداند زیرا این سایت بر روی یک سرور قرار دارد.

nslookup www.abiusx.com

nslookup www.etebaran.com

هر دوی دستورات زیر یک آدرس برمی‌گردانند، زیرا هردو سایت بالا بر روی یک کامپیوتر سرو می‌شوند.

پس از اینکه کاوشگر شماره کامپیوتر مقصد رو به دست آورد، یک اتصال شبکه از نوع TCP بر روی پورت ۸۰ (پورت مخصوص وب) برقرار می‌کنه و یک درخواست از نوع HTTP ارسال می‌کنه که جناب کامپیوتر مقصد، من فلان صفحه شمارو می‌خوام. قالب این درخواست متنی به صورت زیره :

GET http://www.facebook.com/profile/abiusx HTTP/1.1
Host: www.facebook.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:5.0.1) Gecko/20100101 Firefox/5.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Cookie: PHPSESSID=9PmTx2exnapZfHmnegR9MsiPb2C00aDc6
If-Modified-Since: Sat, 30 Jul 2011 15:21:45 GMT
Cache-Control: max-age=0

این درخواست HTTP دارای اطلاعات خاصی است. برخی از خط‌های آن اختیاریست و برخی خط‌ها هم در بعضی درخواست‌ها وجود دارد که اینجا نیست. خط اول نوع درخواست (GET)، آدرس آن و نسخه پروتکل (1.1)‌ را معین می‌سازد. این خط مهمترین خط است و برای سرور مقصد همین یک خط به عنوان درخواست کفایت می‌کند تا بداند چه چیزی را باید به ما تحویل دهد.

در خط دوم، سایت مورد نظر ذکر می‌شود. این خط توسط سرور وب استفاده می‌شود تا اگر چند سایت بر روی سرور قرار دارد، تشخیص دهد که کدامیک از آنها را باید نمایش دهد. لذا اگر تنها یک سایت بر روی سرور باشد، این خط کارایی ندارد. این خط جزو استاندارد HTTP است و باید همواره ذکر شود.

خط‌های بعدی نوع کاوشگر مبدا و سیستم عامل و زبان‌های قابل فهم و زمان و غیره را مشخص می‌کند تا سرور مقصد بر اساس آنها صفحه مناسب را ارائه دهد. این خط‌ها تنها برای کاوشگران حرفه‌ای وب مهم هستند.

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

 HTTP/1.1 200 OK
 Date: Mon, 23 May 2005 22:38:34 GMT
 Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
 Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
 Etag: "3f80f-1b6-3e1cb03b"
 Accept-Ranges: bytes
 Content-Length: 438
 Connection: close
 Content-Type: text/html; charset=UTF-8

این پاسخ نمایانگر مشخصات سرور و وضعیت پاسخ است که توسط کاوشگر ما پردازش می‌شود. در ادامه این سرآیند، معمولا حجم انبوهی داده به قالب HTML (زبان ارائه وب) پیوست شده است که متن است، ولی توسط چشم انسان به سادگی قابل فهم نیست ولی توسط برنامه کاوشگر وب قابل درک است. کاوشگر وب این داده را پردازش می‌کند و در قالب صفحات وب بر روی صفحه رسم می‌کند تا کاربر آنها را مرور کند.

نکته‌ای قابل توجه آنست که در میانه پردازش این داده، کاوشگر گاهی مجددا به آدرسی دیگر (مثل آدرس یک تصویر یا یک تکه صوت یا اسکریپت) بر می‌خورد و مجددا به همان سرور درخواستی ارسال می‌کند تا آن تکه داده را نیز دریافت کند و در رسم صفحه به کار بگیرد.

چگونگی فیلترینگ

یک فیلترینگ خوب، باید در مراحل مختلف بر روی درخواست و پاسخ اعمال شود. ابتدا اینکه در مرحله DNS باید پاسخ مقتضی برگرداند، که البته به راحتی قابل رفع است. سپس در مرحله درخواست باید خط اول و دوم را بررسی کند و آدرس سایت مقصد را استخراج کند و بر اساس آن تشخیص دهد که فیلتر شده است یا خیر. اگر فیلتری شده بود، پاسخ HTTP از نوع انتقال صفحه ( 301 Redirect)‌ به آدرس صفحه فیلترینگ را به جای آدرس اصلی برگرداند.

در مرحله سوم باید بر اساس محتوای داده بازگشتی از سایت مقصد، تصمیم بگیرد که آنرا نگه دارد یا با انتقال تغییر دهد. اینکار از نظر پردازش بسیار هزینه‌بر است زیرا باید یک برنامه پیچیده تمام داده را مطالعه و پردازش کند و الگو‌های مورد نظر را تطبیق دهد، ولی معمول‌ترین روشیست که استفاده می‌شود.

در ایران فیلترینگ تنها در فاز دوم (تشخیص آدرس از سرآیند) آنهم به صورت ناقص صورت می‌گیرد، یعنی تنها سرآیند Host بررسی می‌شود و آدرس آن با لیست فیلترینگ تطبیق یک به یک داده می‌شود، به همین دلیل بود که مثلا تا مدت بسیاری آدرس ww.facebook.com برای دسترسی به فیس بوک قابل استفاده بود.

راه ساده عبور از فیلترینگ

از آنجایی که تنها سرآیند Host در درخواست ما بررسی می‌شود و آدرس می‌تواند در خط اول درخواست جای گیرد و Host به کلی حذف شود (یا با آدرس سایتی بی مورد جایگزین شود)، راه بسیار ساده‌ای برای رفع فیلترینگ سایت‌هایی که سرور اختصاصی دارند وجود دارد. البته سایت‌هایی که با دیگر سایت‌ها در یک سرور مشترک هستند نیاز به Host دارند تا سرورشان تشخیص دهد کدام سایت درخواست شده است و مثلا همین سایت بنده را با اعمال این راه‌حل نمی‌توانید مرور کنید.

قبل از توضیح روش اعمال، فرآیند زیر را انجام دهید تا بیشتر با جزئیات کار آشنا شوید:

  1. ترمینال (Command Prompt) خود را اجرا نمایید و دستور زیر را وارد کنید
  2. telnet facebook.com 80
  3. دستور فوق یک اتصال به سرور موجود در facebook.com بر روی پورت 80 ایجاد می‌کند (همان کاری که کاوشگر می‌کند). پس از برقرار اتصال پیامی مبنی بر آماده بودن ارسال اطلاعات به شما می‌دهد. حال باید درخواست HTTP را وارد کرد.
  4. GET /profile/abiusx HTTP/1.1
  5. Host: www.facebook.com
  6. پس از وارد کردن این دو خط، دوبار کلید Enter را فشار دهید. پس از چند لحظه پاسخ بر روی صفحه ظاهر خواهد شد :
HTTP/1.1 403 Forbidden

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1256"><title>LCT4-3
</title></head><body><iframe src="http://10.10.34.34?type=Invalid Site&policy=MainPolicy " style="width: 100%; height: 100%" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" vspace="0" hspace="0"></iframe></body></html>

کد نتیجه 403 یعنی عدم اجازه دسترسی، به همراه بدنه‌ای که کاوشگر شمارا به سایتی در آدرس http://10.10.34.34 هدایت می‌کند به عنوان پاسخ ارسال شده است (در زبان HTML) با کمی مرور متن پاسخ این اطلاعات مشخص است. اکنون فرآیند زیر را انجام دهید تا پاسخ فیلتر نشود :

  1. ترمینال خود را باز نمایید و دستور زیر را وارد کنید :
  2. telnet facebook.com 80
  3. پس از برقرار اتصال تک خط درخواست زیر را وارد کرده، دوبار کلید Enter را بزنید:
  4. GET http://www.facebook.com/profile/abiusx HTTP/1.1
  5. پاسخی به صورت زیر خواهد داد، که یعنی صفحه‌ای که شما می‌خواهید در آدرس دیگری قرار دارد (از آنجایی که نوع کاوشگر را مشخص نکرده‌اید، فیس بوک فکر می‌کند نوع خاصی از تلفن همراه هستید که صفحه آن آدرس خاصی دارد). آن آدرس را مجددا درخواست کنید و دوبار Enter بزنید:
  6. GET http://www.facebook.com/common/browser.php HTTP/1.1
  7. حجم نسبتا زیادی اطلاعات در قالب HTML خروجی داده می‌شود که همان صفحه فیس بوک است.
HTTP/1.1 302 Found
Location: http://www.facebook.com/common/browser.php
Content-Type: text/html; charset=utf-8
X-FB-Server: 10.27.60.111
Date: Sun, 31 Jul 2011 03:05:00 GMT
Content-Length: 0

انجام این فرآیند به صورت دستی بسیار دشوار است، و همچنین خروجی HTML برای انسان قابل فهم نیست. اما این مکانیزم را به سادگی می‌توانید در مرورگرهای قدرتمند پیاده کنید. به عنوان مثال در مرورگر Firefox افزونه Modify Headers را نصب کنید. پس از اتمام نصب و راه‌اندازی مجدد مرورگر، از منوی Tools صفحه تنظیمات آنرا باز کنید. در فیلد های موجود Action را معادل Filter و Header name را معادل Host قرار داده، کلید Add را فشار دهید. اکنون فیلتر اضافه شده در لیست را انتخاب کرده، کلید Enable را فشار دهید تا چراغ کنار آن سبز شود.

حال به آدرس www.abiusx.com مراجعه کنید. با پیام خطای سرور مواجه خواهید شد، زیرا نتوانسته تشخیص دهد کدام سایت روی آنرا خواسته‌اید. اما اگر به سایت www.facebook.com مراجعه نمایید مشاهده می‌کنید که مشکلی وجود ندارد و سایت بدون مشکل باز می‌شود. (البته توجه داشته باشید که برخی از تصاویر، به دلیل قرار داشتن بر روی سرورهای چندسایتی، بار نخواهند شد).

پس از اینکه از سایت‌های مورد نظر (که قبلا فیلتر بودند)‌ دیدن کردید، می‌توانید مجددا از پنجره تنظیمات Modify Headers، فیلتر را انتخاب کرده آنرا غیر فعال کنید.