-
-
Notifications
You must be signed in to change notification settings - Fork 743
مفاهیم پایه
از آنجا که ممکن است بعضی از مفاهیم استفاده شده در مطالب این ویکی و همینطور دنیای پروکسیها برای افراد زیادی ناآشنا باشند؛ در این مطلب سعی میشود این موارد به زبان ساده توضیح داده شوند.
پروتکل پایه اینترنت است و شالودهٔ ارتباط اطلاعاتی برای وب جهانگستر است که در آن مستندات ابرمتن شامل ابرپیوند به سایر منابعی اند که کاربر به راحتی میتواند به عنوان مثال با یک کلیک ماوس یا با تپ بر روی صفحه نمایش در یک مرورگر وب به آنها دسترسی داشته باشد. این پروتکل از یک url یا نشانی وب برای آدرسدهی استفاده میکند و این آدرسها را دامنه میگوییم که در ادامه تعریف میشوند. پروتکل Http از Handshaking به منظور ارسال و دریافت اطلاعات استفاده میکند. در این روش برای شروع و پایان عملیات تبادل اطلاعات بین سرور و کلاینت، چندین درخواست و پاسخ رد و بدل میشود. تصور کنید که کلاینت (مرورگر) فردی است که قصد دارد اطلاعات مربوط به یک سایت را دریافت کند. در ابتدا باید درخواستی با این هدف به سرور آن سایت ارسال کند. سپس باید صبر کند، تا از طرف سرور پاسخی برای درخواستش دریافت کند. در صورتی که اطلاعات خواسته شده در سرور موجود باشند، پاسخی مبنی بر موافقت ارسال اطلاعات برای شخص ارسال میشود. سپس بار دیگر از طرف کلاینت پیامی مبنی بر درخواست دادههای اطلاعاتی به سرور فرستاده میشود. در این مرحله سرور پیام را دریافت کرده و دادههای درخواست شده را در بستههای اطلاعاتی کوچکتری تقسیم میکند. در نهایت این بستهها توسط پروتکل Handshaking پشت سر هم و به ترتیب برای شخص ارسال میشوند. ارتباط بین کلاینت و سرور در این پروتکل معمولا از طریق پورت ۸۰ انجام میشود.
این پروتکل در حقیقت نسخه امنیتی پروتکل http است. به دلیل اینکه اطلاعات و دادهها در پروتکل HTTP رمزگذاری نمیشوند، به راحتی قابل هک و سو استفاده است. بر این اساس اگر کسی مانند سرویس دهنده اینترنت به مسیر تبادل اطلاعات دسترسی داشته باشد به راحتی میتواند اطلاعاتی که در حال رد و بدل شدن هستند را مشاهده کند. اما در https اطلاعات رد و بدل شده بین وبسایت و کاربر، به صورت رمزنگاری شده منتقل میشوند. یعنی حتی اگر کسانی بتوانند به اطلاعات رد و بدل شده در سایت دسترسی پیدا کنند، نمیتوانند از محتوای آن سو استفاده کنند. زیرا این اطلاعات به صورت رمزنگاری شده هستند و فقط توسط کسی قابل مشاهده خواهند بود که کلید رمزگشایی آنها را داشته باشد. از یکی از دو پروتکل SSL یا TLS برای رمزگذاری ارتباطات استفاده می کند که در ادامه توضیح داده خواهند شد.
به زبان خیلی ساده در تعریف دامنه چیست باید گفت همان آدرسی که در مرورگر خود برای ورود به هر سایتی وارد میکنید دامنه است. دامنهها از طریق آیپی به میزبانی وبسایت شما متصل میشوند. هر سرور با یک آدرس آیپی در دنیای اینترنت شناخته میشود. آدرس آیپی ها از طریق سرویسی به نام DNS یا Domain Name System روی دامنه شما تعریف میشوند.
این پروتکل اطلاعات را با استفاده از کلیدهای خصوصی و عمومی رمزنگاری (Encrypt) میکند. اطلاعات رمزگذاری شده توسط این پروتکل در سمت دیگر رمزگشایی (Decrypt) می شوند. امنیت در این پروتکل در مبدا و مقصد اطلاعات حفظ میشود، یعنی در هر دو طرف، فرایند رمزنگاری و رمزگشایی انجام می گیرد. وب سایت هایی که از این پروتکل جهت رمزگذاری دادهها استفاده می کنند، معمولا از طریق پروتکل HTTPS با کلاینتها ارتباط برقرار می کنند. برای داشتن یک ارتباط امن در بستر پروتکل HTTPS برای سایت خود، نیاز به تهیه یک گواهی معتبر ssl دارید. در این پروتکل اطلاعات تبادل شده بین سرور و کلاینت رمزگذاری می شوند؛ بر این اساس این اطلاعات توسط شخص سوم قابل مشاهده نخواهند بود. البته همچنان دسترسی به این دادهها امکان پذیر است، اما با توجه به اینکه آنها رمزگذاری شده اند، برای مشاهده دادههای آن ها، نیازمند رمزگشایی هستند.رمزگشایی این داده بدون کلید مورد استفاده در نشست (session) ارتباطی امن امکان پذیر نیست. بنابراین، این پروتکل عملاً غیرقابل نفوذ است.
یک پروتکل امنیتی است بر پایه پروتکل SSL ایجاد شده است. TLS نسخه بهبود یافته پروتکل SSL است که اگر چه تفاوتهای خیلی کمی با SSL دارد، اما تقریبا بخش عمده آن یکسان مانده است. البته TLS از الگوریتم رمز نگاری قویتری نسبت به پروتکل SSL استفاده میکند و در ایجاد کلید عمومی و احراز هویت کردن پیام ها، TLS امنتر و کارامدتر از SSL عمل میکند. به بیان دقیقتر، TLS پروتکلی است که برای رمزگذاری ارتباطات مبتنی بر وب، بین یک کلاینت و یک سرور، با استفاده از مجموعهای از الگوریتمهای رمزنگاری(uTLS, alpn, allowInsecure)، استفاده میشود. مهم: «شناسایی کاربر بر اساس فیلدهای پیام در طی TLS Handshaking است.»
با تجزیه و تحلیل ترافیک TLS، فیلترچی میتواند حدس بزند که کاربر به کدام وبسایت سر میزند و اطلاعات سرور(آیپی، لوکیشن و...)چیست. مواردی که باید بهدقت انجام بدهیم، تا بهشکل صحیحی از الگوریتمهای TLS استفاده کنیم و فیلترچی نتواند نام دامنه(SNI) را ببیند.
uTLS: استفاده از فینگرپرینت اختصاصی مرورگر. «برای جلوگیری از تکیه بر یک فینگرپرینت و بروز خطاهای احتمالی، استفاده از چندین اثر انگشت، Randomized، توصیه میشود.»
alpn: پروتکل گفتوگوی بین کلاینت و سرور را از پیش تعیین میکند، در نتیجه بارگذاری اطلاعات و رمزگذاری TLS را سرعت میبخشد.
allowInsecure: مانع استفاده از گواهیهای جعلی میشود.
تنظیماتی که می بایست درباره کانکشن ها در نظر داشت:
uTLS = randomized
alpn = h2,http/1.1
allowInsecure = false
نکته: تنظیمات این ٣ مورد میتونه با توجه به نوع کانفیگ و وضعیت اینترنت متفاوت باشه.