هدف از نوشتن این پست، همانگونه که از عنوان بر میآید، بررسی نحوهی عملکرد سیستمهای فیلترینگ و همچنین سیستمهای گریز از فیلتر (پروکسی/فیلترشکن/ویپیان) است. اما پیش از شیرجه رفتن در بطن موضوع، لازم است با مقدماتی در مورد اینترنت و وبسایتها و نرمافزارهای مرتبط با اینترنت، بخش فنی را آغاز کنیم.
همهی ما بارها در اینترنت به وبسایتهای مختلفی سرکشی کرده ایم و از محتوای مفید و یا زیانبار و خانمان سوز آنها استفاده کردهایم، اما با این حال تعداد محدودی از ما با آنچه زیر لباس مرورگر در جریان است آشنا هستیم. از حسن اتفاق قرار است به کمک این نگاره، تعداد محدود مذکور افزایش پیدا کنند.
بخش اول: ایجاد یک وبسایت :: Domain, Host
هر وبسایت با خرید یک دامنه (domain) و یک هاست (host - تلفظ صحیح "هُست" است) و اتصال آنها به یکدیگر زندگیاش را آغاز میکند. به عنوان مثال یک توسعه دهندهی وب در ابتدا به یک فروشندهی دامنه مانند ایران سرور یا هاستایران مراجعه میکند و دامنه دلخواه خود را درخواست میکند. این سرویس دهندهها در ابتدا آزاد بودن آن دامنه را بررسی میکنند (یعنی قبلا توسط شخص دیگری خریداری نشده باشد) و پس از آن چنانچه دامنه آزاد بود، اطلاعات هویتی درخواست دهنده را دریافت میکنند (نام، نامخانوادگی، شماره شناسنامه، عکس کارت ملی و ...) و پس از تایید آنها و واریز هزینهی دامنه، دامنهی درخواست شده را به نام توسعه دهندهی متقاضی ثبت میکنند و یک صفحهی تنظیم DNS Server برای آن دامنه به وی میدهند. دامنهی خریداری شده تنها به عنوان نام وبسایت میباشد و نیاز است اطلاعات وبسایت نظیر متنها و عکسها و ... جایی ذخیره شود. بنابرین در گام بعدی، توسعه دهنده به یک فروشنده هاست مراجعه میکند. هاست در واقع یک رایانهی همیشه روشن است که اطلاعات وبسایت روی آن قرار میگیرد (با نام سرور نیز شناخته میشود). هر دو سایت معرفی شده در قبل به عنوان فروشنده هاست نیز فعالیت میکنند. برای خرید هاست نیازی به ارائهی اطلاعات هویتی نیست و توسعه دهنده تنها با مشخص کردن مشخصات هاست مورد نیاز خود (نظیر سیستمعامل، حجم هارد مورد نیاز برای اطلاعات وبسایت، مقدار رم و سی پی یو، پهنای باند و ...) اقدام به خریداری هاست مینماید. در قبال این خرید، فروشنده به توسعهدهنده یک پنل کنترلی (یا همان cpanel که با یک آدرس IP و یک شماره پورت به همراه نام کاربری و گذرواژه مشخص میشود) و در بعضی موارد یک نام کاربری و گذرواژه برای اتصال ssh به آن سرور در اختیار توسعه دهنده قرار میدهد. علاوه بر این، فروشنده یک یا دو آدرس به عنوان DNS Server های خودش به توسعه دهنده اعلام میکند و توسعه دهنده باید این مقادیر را در صفحهی تنظیماتی که فروشندهی دامنه به وی داده بود وارد نماید. توسعه دهنده همچنین باید آدرس دامنهی خریداری شده را در اختیار host قرار دهد تا هم در DNS Server های خود ثبت کند و هم بتواند درخواستهای وبسایتهای مختلف روی یک host را از هم تفکیک کند.
در زیر به عنوان نمونه تصویر صفحهی تنظیم DNS Server یک دامنه را مشاهده میکنیم.
بنابراین به صورت خلاصه تا این مرحله توسعهدهنده عملیاتهای زیر را انجام داده است:
- یک دامنه خریداری کرده است تا به عنوان نام وبسایت خود استفاده کند. (به عنوان مثال 0x01.ir)
- یک هاست خریداری کرده است تا فایلهای وبسایت خود را روی آن قرار دهد.
- از صفحهی مدیریت هاست مقادیر DNS Server هاست را دریافت و همچنین در صفحهی تنظیمات، نام دامنهی خود ثبت کرده است.
- در صفحهی تنظیمات دامنه، مقادیر DNS Server گام قبل را ثبت کرده است.
بخش دوم: آغاز ارتباط :: IP, DNS Server
فرض را بر این میگذاریم عملیات بخش قبل انجام شده است و حالا کاربری برای اولین بار درون نوار آدرس مرورگر خود، آدرس وبسایت 0x01.ir را وارد میکند و کلید Enter را میفشارد. چه اتفاقی رخ میدهد؟ همانطور که میدانیم همهی ارتباطات درون اینترنت بر اساس پروتکل IP انجام میشود. بر اساس این پروتکل برای ارتباط با هر node در شبکه نیاز است که مقدار آدرس IP آن را داشته باشیم. بنابرین در اولین گام نام دامنهی ما باید به نحوی به آدرس IP مربوط به Host تبدیل شود. پروتکلی که وظیفهی این تبدیل را بر عهده دارد DNS یا Domain Name System نام دارد. بنابراین در این زمان مرورگر یک بسته از نوع DNS Query به DNS Server تنظیم شده روی آن رایانه (معمولا 8.8.8.8 یا 4.2.2.4) ارسال میکند. اما DNS Server گوگل یا همان 8.8.8.8 از کجا آدرس IP وبسایت 0x01.ir را میداند؟
در بخش اول گفتیم که توسعه دهنده، مقادیر DNS Server ارائه دهنده ی هاست خود را در صفحهی تنظیمات ارائه دهندهی دامنه، ذخیره میکند. ارائه دهندهی دامنه این مقادیر را به عنوان "سرور تبدیل دامنه به آی پی" برای آن دامنه در جدولی ثبت میکند. همچنین گفتیم توسعه دهنده، نام دامنهی خود را به ارائه دهندهی هاست اعلام میکند. ارائه دهندهی هاست نیز نام دریافتی را در جدولی به مقدار IP فروخته شده به آن توسعه دهنده Map میکند.
بستهی DNS Query دریافت شده در سرور 8.8.8.8 توسط نرم افزار روی این سرویس بررسی میشود. نرم افزار مقدار 0x01.ir را از بسته استخراج میکند و در جدولی به دنبال آدرس IP آن میگردد. از آنجایی که این نرم افزار از آدرس IP وبسایت 0x01.ir بی اطلاع است، درخواستی به سرور DNS مربوط به دامنههای ir. ارسال میکند و آدرس را از آن جویا میشود. سرور ir. نیز مقدار IP این دامنه را نمیداند ولی میداند که DNS Server آن دامنه دارای آدرس ns39.sample.com و ns40.sample.com است. بنابرین درخواست را به این سرورها ارجاع میدهد. یکی از این سرورها در نهایت مقدار IP دامنهی 0x01.ir را باز میگرداند و این مقدار به مرورگر رسیده و مرورگر در این مرحله آمادهی ارسال درخواست کاربر به وبسایت یادداشت شده در نوار آدرس است.
توجه: سرورهای DNS با توجه به نحوهی Configuration اعمال شده روی آنها، ممکن است به صورتهای مختلفی (iterative یا recursive) عمل کنند. جزئیات آنها در پست جداگانهای بررسی خواهد شد.
تا این مرحله ممکن است سوالات زیر برای شما مطرح شده باشد:
چه کسی حق ثبت DNS Server برای یک دامنه دارد؟ اگر به اشتباه DNS Server نامعتبری برای یک دامنه ثبت شود چه میشود؟
پاسخ:
تنها مالک دامنه میتواند DNS Server برای دامنهی خود ثبت کند. درصورتی که به اشتباه مقدار نامعتبری تنظیم شود یا کاربر دیگری با دسترسی به صفحهی تنظیمات مقدار دیگری تنظیم نماید، ممکن است در پاسخ به DNS Query دامنهی شما که مرورگر آن را ارسال میکند یا هیچ آدرس IPی باز نگردد و یا این که آدرس IP سرور دیگری بازگردد. یکی از روشهایی که هکرها برای انجام حمله به یک وبسایت استفاده میکنند، تغییر همین DNS Serverها در صفحهی تنظیمات دامنه مورد حمله است.
با توجه به این که "دامنه" در نهایت توسط مرورگر به کمک DNS به IP تبدیل شد، اساسا چه نیازی به دامنه است؟ آیا یک وبسایت نمیتواند دامنه نداشته باشد؟
پاسخ:
حق با شماست. اساسا نیازی به این نیست که یک وبسایت دارای دامنه باشد و وبسایتها میتوانند بدون داشتن دامنه و صرفا به کمک یک هاست وجود داشته باشند. برای بازدید از این وبسایت ها باید در نوار آدرس به جای نوشتن نام دامنه، آدرس IP هاست وبسایت را وارد نماییم. با این حال از آنجایی که به خاطر سپردن آدرسهای IP دشوار است (مثلا 216.58.213.238)، توسعه دهندگان غالبا برای وبسایت خود یک دامنه نیز تهیه میکنند.
توجه: پاراگراف فوق تنها برای وبسایتهایی معتبر است که دارای هاست اختصاصی یا همان Dedicate هستند. چنانچه وبسایت شما به همراه چند وبسایت دیگر دارای هاست اشتراکی باشد، با وارد کردن آدرس IP هاست داخل مرورگر نمیتوانید به وبسایت خود دسترسی داشته باشید. در این حالت نیاز است کارهای دیگری نیز انجام دهید که در پست جداگانهای جزئیات آن را بیان میکنیم.
آیا یک وبسایت میتواند چند دامنه داشته باشد؟ آیا میتواند چند هاست داشته باشد؟ آیا چند وبسایت میتوانند یک هاست داشته باشند؟
- در پاسخ به DNS Query آن دامنه، هر بار آدرس IP یکی از هاستها بازگردانده میشود تا به این نحو حجم ترافیک کاربران بین هاستهای مختلف تقسیم شود. در این حالت لازم است به صورت منظم هاستهای مختلف با یکدیگر Sync شوند و همگی وضعیت کاملا یکسانی داشته باشند تا از دید کاربر تفاوتی بین آنها احساس نشود.
- درخواستهای اصلی کاربر مثل احراز هویت و رای دهی یا ... همگی به یک هاست واحد ارسال میشوند، ولی آن هاست واحد، برای بارگذاری فایلهای حجیم مانند عکس یا ویدیو، آدرس هاستهای مختلفی را به کاربران خود باز میگرداند. (این حالت با مفهوم CDN مرتبط است و در آینده به آن خواهیم پرداخت). در این حالت نیز لازم است هاستهای فایلها با یکدیگر به صورت منظم Sync شوند.
- فیلد Host درون Header بستههای درخواست HTTP
- فیلد SNI بستهی Client Hello از ترافیک HTTPS
علت احراز هویت متقاضی هنگام درخواست خرید دامنه چیست؟ آیا دامنه و هاست رایگان هم وجود دارد؟
پاسخ:
دامنهها و هاستهای رایگان به وفور در اینترنت یافت میشوند. تفاوت یک دامنهی رایگان و یک دامنهی غیررایگان در میزان اعتبار، گیرایی/رسمی بودن آن و مجوزهای مالکیت و استفاده از آن است. تفاوت هاستهای رایگان با هاستهای غیررایگان نیز غالبا در مشخصات سخت افزاری سرور هاست و جوازهای استفاده از فایلها و همچنین مالکیت آن هاست است. به عبارت دیگر شما حقی مبنی بر مالکیت یک دامنه یا هاست رایگان ندارید و تنها به عنوان کاربر آنها شناخته میشوید. علت احراز هویت متقاضی درخواست خرید دامنههای غیر رایگان نیز در ثبت مالکیت و همچنین پیگیریهای قضایی در صورت انجام تخلف نهفته است.