چگونه دامنه‌های مخرب و تبلیغاتی را با DNS مسدود کنیم؟

اگر این روزها از افزونه‌های ضد تبلیغات و پاپ آپ بر روی مرورگر خود استفاده نمی‌کنید، وقت آن فرا رسیده است که هرچه سریع‌تر طعم شیرین تجربه دنیایی از وب بدون هرگونه تبلیغات را بچشید! ? ?افزونه‌هایی مانند uBlock Origin و Adblock Plus و AdGuard به شما کمک می‌کنند که تبلیغات مزاحم و آزاردهنده بی‌کاربرد وب‌سایت‌ها مختلف را تنها با 1 کلیک برای همیشه مسدود کنید.افزونه uBlock Origin، معروف‌ترین افزونه حذف تبلیغاتبهترین این افزونه‌ها هم uBlock Origin می‌باشد، و در صورتی که از افزونه‌ای به‌غیر این سه استفاده می‌کنید، می‌توانید ویژگی‌های این دو را مقایسه کنید و تجربه‌ای از مصرف منابع بهینه و برتری مسدودسازی تبلیغات توسط uBlock Origin را کسب کنید.من در گذشته، کدی مخصوص وبلاگ‌های سرویس‌دهی رایگان نوشته بودم که با نصب بر روی وبلاگ نویسنده، از نمایش این تبلیغات جلوگیری می‌کرد. اما در بیشتر مواقع، استفاده از افزونه‌ی ضد تبلیغات بر روی مرورگر نه‌تنها ساده‌تر و آسان‌تر می‌باشد، بلکه جامع‌تر و کاربردی تر نیز هست.چرا باید از ریشه با استفاده از DNS، دامنه‌های تبلیغات و مخرب را مسدود کنیم؟ ?استفاده از افزونه‌های مسدودسازی تبلیغات نیز گاهی به‌تنهایی کافی‌نیست و یا در مواردی، مانند استفاده در گوشی موبایل، تلویزیون‌های هوشمند و کنسول‌های بازی به‌طور کلی اصلاً امکان‌پذیر نیست.به‌عنوان مثال، حتماً‌ شما هم بر روی گوشی اندروید و iOS خود بازی‌هایی نصب کرده‌اید که پر از تبلیغات مزاحم هستند و حتی با اینکه نیازی به ارتباط به اینترنت ندارند، در صورت ارتباط با اینترنت بلافاصله اقدام به نمایش این تبلیغات می‌کنند.حتی ممکن است بر روی رایانه و این دستگاه‌ها سهواً دامنه‌ای را باز کنید که منجر به آلوده شدن سیستم‌شما به ویروس‌ها، باج افزار ها و دامنه‌های مخرب شود.در چنین شرایطی، استفاده از نرم‌افزارهای DNS server که دارای قابلیت مسدود سازی کلی دامنه‌های تبلیغات و مخرب را دارند، می‌تواند بسیار مفید و کمک کننده واقع شود. زیرا با مسدود کردن دائمی این دامنه‌های آزار دهنده، از اتصال نرم‌افزارها به طور کلی به سایت‌های نامفید جلوگیری می‌کنید!با توجه به اینکه بسیار از کاربران و توسعه‌دهندگان تاکنون آشنایی با این سازوکار پیدا نکرده اند، قصد دارم که کمی به‌صورت تکنیکال به نحوه کارکرد این راهکار اشاره کنم.در صورتی که به نحوه کارکرد چندان علاقه‌ای ندارید، می‌توانید قسمت بعدی را دنبال نمایید که به نحوه راه‌اندازی و استفاده از این نرم‌افزار ها می‌پردازد. (در آینده منتشر خواهد شد).نرم‌افزار معروف Pi-hole که بر روی سیستم‌عامل های لینوکس و مک نصب می‌گرددتصویری که در بالا مشاهده می‌کنید، لوگوی نرم‌افزار بسیار معروفی به نام Pi-hole می‌باشد (که شبیه به کلمه Blackhole یا سیاهچاله می‌باشد.) چراکه Pi-hole مانند یک سیاهچاله، تمامی دامنه‌های مخرب را به تله می‌اندازد!این نرم‌افزار ابتدا جهت اجرا بر روی مینی کامپیوتر (یا رایانه‌های کوچک) به نام رزبری پای ایجاد شد، رایانه‌ای کوچک، اما قدرتمند که در دستان شما جا می‌شود و می‌تواند طیف گسترده‌ای از نرم‌افزار ها را اجرا کند. هرچند شما می‌توانید این نرم‌افزار را روی هر کامپیوتر لینوکسی، توسط راهنمای این صفحه اجرا کنید.(? راستی، خود رزبری پای، تاپیک بسیار جالبی است که در اینجا به آن پرداخته شده، و می‌تواند برای شما کاربردی واقع شود! تاریخچه رزبری پای هم اینجا هست.)اما برای دوستانی که از ویندوز استفاده می‌کنند، یا تمایل به استفاده از سرور های آماده دارند هم نرم‌افزار هایی مانند Simple DNSCrypt وجود دارد که با یک محیط گرافیکی ساده، امکان بستن این دامین ها را فراهم می‌کنند.من شخصاً نرم‌افزار DNSCrypt-proxy را مستقیماً بر روی سرور شخصی‌ام نصب کرده‌ام، و از آن در خانه و محیط کار استفاده می‌کنم. این نرم‌افزار قابلیت‌های فوق‌العاده جالبی نیز به‌غیر از مسدود سازی دامنه‌ها دارد که در قسمت بعدی نوشته، به آن خواهم پرداخت.می‌توانید از هرکدام برنامه‌های DNS server برای راه‌اندازی این سیستم استفاده کنید، یا حتی از ارائه دهندگان DNS ای که لیست مسدودی را اعمال کرده‌اند استفاده نمایید.برای دوستانی که علاقه‌مند هستند که مسدود کردن از روش دامنه دقیقاً به چه‌صورت عمل می‌کنه، توضیحات فنی در ارتباط با نحوه سازوکار این روش رو شرح میدم.در مثال های زیر، از دامنه doubleclick.net استفاده کردم که یک دامنه تبلیغات واقعی و آزار دهنده هست.? نکته: دامنه نامبرده، یکی از دامنه‌های تبلیغاتی Google است که به طور گسترده در صفحات وب، اپلیکیشن‌ها و تقریباً هر جایی که فکرش را بکنید حضور دارد، گاهی اوقات به‌صورت نامحسوس و مخفیانه در پس‌زمینه برنامه‌ها! در نتیجه، مسدود کردن این دامنه (و تمامی ساب‌دامنه‌های تحت آن) از طری این روش بسیار مفید است.تفاوت Domain Blocking با URL Blocking چیست: به طور کلی، درخواست‌های HTTP هنگام ارسال نیاز به به‌دست آوردن آدرس آی‌پی سرور مورد نظر را دارند؛ به عنوان مثال زمانی که دامنه doubleclick.net را بخواهیم باز نماییم لازم است که ابتدا آدرس آی‌پی 142.250.185.206 توسط DNS Server بازگردانی شود.زمانی که این درخواست HTTP توسط مرورگر ایجاد شده باشد (به‌عنوان مثال توسط URL زیر)، امکان این وجود دارد که توسط افزونه uBlockOrigin، نسبت به جلوگیری از ارتباط با دامنه و یا آدرس URL فراخوانی شده اقدام کنیم:Example: http://doubleclick.net/foo/bar ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ ˜˜˜˜˜˜˜ ↑ ↑ Domain name ───────────┘ │ │ │ Path ─────────────────────────────┘ در صورتی که این درخواست از جایی به‌جز مرورگر ایجاد شده باشد (به‌عنوان مثال، اپلیکیشن موبایل، کنسول بازی، تلویزین هوشمند و...)، معمولاً امکان نصب افزونه uBlockOrigin و مشابه آن وجود ندارد -- در نتیجه، امکان مسدود نمودن دامنه‌های تبلیغاتی به این شکل نیز سلب می‌گردد.در چنین شرایطی، می‌توان از DNS سروری به غیر از سرور ارائه شده توسط ISP و یا 8.8.8.8 و 4.2.2.4 رایج استفاده کرد.نرم‌افزار هایی مانند AdGuard Home، Pi-hole و DNScrypt-proxy ابن قابلیت را دارند که به‌صورت local، از ارائه آی‌پی به درخواست دامنه‌های تبلیغاتی جلوگیری نمایند، و به این‌صورت دامنه‌های Adware، Tracking، Malware و غیره، پیش از این‌که به افزونه‌های مرورگر برسند اگر به‌صورت عامیانه بیان کنم، از بیخ بلاک شوند.? نکته: این مکانیزم مسدود سازی معمولاً هم جامع‌تر هست، و هم مؤثر تر. من شخصاً هر دو متد (افزونه و مسدود کردن دامنه) را با هم استفاده می‌کنم، که یک مزیت آن این است که در دستگاه‌هایی که فاقد قابلیت استفاده از uBlockOrigin هستند نیز می‌توان به‌راحتی از دسترسی به این نوع دامنه‌ها جلوگیری کرد.? نکته: کمپانی هایی نظیر Cloudflare، به‌غیر از ارائه سرور های DNS اصلی (مانند 1.1.1.1)، آدرس‌های فرعی‌ای نیز ارائه می‌دهند که ویژگی‌شان این است که برخی از انواع دامنه‌های مخرب را مسدود می‌کنند (اما نه همه را).به‌عنوان مثال، این DNS دامنه‌های Malware و یا Adult را بلاک می‌کند -- اما متأسفانه دامنه های Advertising و Tracking را مسدود نمی‌کند.https://1.1.1.1/family/به‌طور کلی، اگر می‌دانیم که دامنه‌ای مانند doubleclick.net تبلیغاتی است و کاربردی به غیر از این هم نداره، بهتر هست که دامنه به طور کلی مسدود بشه، حتی با اینکه افزونه‌هایی مانند uBlockOrigin همزمان قسمت‌هایی یا کل این دامنه‌رو در مرورگر مسدود کرده باشه.فرمت فایل Block List جهت مسدود کردن دامنه‌ها به چه‌صورتی هست؟معمولاً جهت مسدود کردن دامنه‌ها از این روش کافی است که لیستی از دامنه‌های مورد نظر را به‌صورت متنی و بدون چیز اضافه‌ای به نرم‌افزار ارائه دهید، مثلاً:example.com badwebsite.com doubleclick.netاما شاید فرمت دیگری را نیز قبلاً مشاهده کرده باشید که مانند لیست بالا است، با این تفاوت که هر خط پیشوندی مانند 0.0.0.0 یا 127.0.0.1 در ابتدای آن دارد. مثلاً:0.0.0.0 example.com 0.0.0.0 badwebsite.com 0.0.0.0 doubleclick.netدر ارتباط با اینکه کدام یک از این دو فرمت جهت ارائه به نرم‌افزار لازم است، این مورد بستگی به نحوه کار برنامه مورد‌نظر دارد.نرم‌افزار هایی مانند Pi-hole و DNScrypt-proxy نیازی به اشاره 0.0.0.0 در ابتدای entry ندارند (و در حقیقت نبایستی این‌کار انجام گردد، و تنها ارائه نام دامنه در هر خط -- مانند مثال اول -- کافی است.)علت اینکه پیشوند 0.0.0.0 یا 127.0.0.1 را در ابتدای خطوط بعضی از فرمت‌ها مشاهده می‌کنید، این است که از فایل hosts سیستم‌عامل، برخی اوقات به‌جای نرم‌افزار های مناسب این کار (که در بالا به‌آن اشاره شد) استفاده می کنند.فایل hosts چیست، در کجا قرار گرفته و چه کاربردی دارد؟فایل hosts بر روی سیستم‌عامل، فایل خاصی می‌باشد که از آن پیش از ارتباط به DNS Server جهت دریافت آدرس آی‌پی سایت مورد نظر استفاده می‌شود و از این ترفند می‌توان استفاده نمود تا به‌جای نصب این دسته از نرم‌افزار ها، سیستم‌عامل مستقیماً آدرس آی‌پی مورد نظر را بازگردانی نماید.به زبان ساده‌تر، در صورتی که اسم یک دامنه را در فایل hosts قرار دهیم، سیستم‌عامل دیگر برای بدست آوردن آی‌پی آن دامنه کاری به DNS تنظیم شده ندارد؛ پس با این روش می‌توان تعدادی از دامنه ها را مسدود کرد.? نکته: فایل hosts بر روی تمامی سیستم‌عامل های رایج وجود دارد! ویندوز، لینوکس، مک، اندروید و...فقط مسیر قرار گیری فایل در هر سیستم‌عاملی متفاوت هست و ممکنه دسترسی برای ویرایش کردنش رو نداشته باشید.به عنوان مثال در این مورد:12.34.56.78 example.testبا قرار گیری این خط در فایل hosts سیستم‌عامل باعث می‌گردد که فرامینی نظیر `ping example.test` و `nslookup example.test`، آدرس آی پی `12.34.56.78` را برای این دامنه بازگردانی نمایند.(توجه: شما می‌توانید هم با دستور ping و هم با دستور nslookup جهت بدست آوردن آی‌پی یک سرور اقدام کنید!)اکنون با استفاده از آدرس آی‌پی `0.0.0.0` (که یک آدرس غیر معتبر می‌باشد) می‌توان از دسترسی به دامنه‌ها جلوگیری کرد، زیر به‌جای آدرس آی‌پی سرور مورد نظر، این آدرس توسط سیستم‌عامل بازگردانی می‌شود.(در گذشته از آدرس `127.0.0.1` که آدرس localhost یا loopback بوده نیز استفاده می‌شده که به‌دلایلی این کار درست نیست و استفاده از آدرس 0.0.0.0 برای این مضمون معمولاً توصیه می‌گردد.)حال برخی از لیست‌ها بر روی GitHub نسخه شامل این پیشوند را (جهت راحتی کاربر) ارائه می‌دهند که بدون نیاز به تغییرات دیگر، می‌توان مستقیماً از آن استفاده نمود تا دامنه‌های مورد نظر بلاک گردد.من به دو دلیل این کار را توصیه نمی‌کنم:1- استفاده از نرم‌افزار هایی مانند Pi-hole و DNScrypt-proxy معمولاً بهتر است از استفاده از فایل hosts2- در صورتی که شخصی نیاز و یا تمایل به استفاده از فایل hosts داشته باشد با برنامه‌هایی نظیر Domains to Hosts converter می‌توان به‌راحتی این پیشوند را قرار داد.ضمناً استفاده از فایل hosts ایراد دیگری دارد و آن این است که تنها دامنه اشاره شده به‌صورت کامل مسدود می‌گردد، و هیچ ساب دامنه‌ای از آن با این روش بلاک نمی‌گردد که قطعاً جهت بلاک نمودن بسیار از دامنه‌هایی که مختص تبلیغات هستند، کار مناسبی نیست.سطح بلاک نمودن توسط دامنهدر ارتباط با این مورد، دو نکته حائز اهمیت می‌باشد:1. نرم‌افزارهای نامبرده (Pihole, DNScrypt-proxy, AdGuard Home) و غیره این توانایی را دارند (و معمولاً به‌صورت پیش‌فرض نیز این‌طور تنظیم شده اند) که دامنه و تمامی ساب دامنه‌های آن را مسدود نمایند. به‌طور مثال:Domain: doubleclick.net Blocks: *.doubleclick.netexample 1: foo.doubleclick.net example 2: foo.bar.doubleclick.netدر نتیجه ارائه لیست برای این دسته از نرم‌افزار ها، لازم به ارائه ساب‌دامنه نمی‌باشد و Top-level domain جهت بلاک نمودن تمامی ساب دامنه‌های مذکور کافی است.همانطور که در بالا ذکر شد، استفاده از فایل hosts سیستم‌عامل فاقد قابلیت مسدود سازی این دسته از ساب‌دامنه‌ها است.2. به‌طور کلی، استفاده از Hosts/Domain Blocking به منزله این است که از بازگردانی آی‌پی سرور مقصد جلوگیری می‌شود. این مسئله به‌صورت باینری عمل می‌کند (یا دامنه بلاک است؛ یا خیر) و در نتیجه، کلیه آدرس URL های میزبانی شده بر روی دامنه مورد نظر یا همگی مسدود خواهند شد، یا قابل دسترس خواهند بود.با توجه به اینکه مسیر URL مورد نظر به‌هیچ‌عنوان به سرور DNS ارسال نمی‌گردند (چون نیازی به این‌کار هم نیست) در نتیجه سرور DNS نمی‌تواند بر بلاک نمودن تنها بخشی از آن دامنه تأثیر گذار باشد. به عبارت دیگر:doubleclick.net/some/path/tobe/blockedدر این مثال، در زوش بلاک دامنه، نمی‌توان مسیر `some/path/tobe/blocked/` را به صورت جداگانه تشخیص داد و آن را مسدود نمود.در نتیجه این روش زمانی مفید واقع می‌شود که قصد بلاک کل دامنه را داشته باشیم، و در نتیجه برای بلاک نمودن یک مسیر استفاده نمی‌شود -- در نتیجه، مواردی که شامل مسیر URL هستند در لیست‌های مسدود سازی دامنه قرار نمی‌گیرند.? یک نکته جالب (Fun fact): ابزار های مرتبط به کرک و کیجن معمولاً لازم دارند که از دسترسی نرم‌افزار کرک شده به دامنه‌ی سایت سازنده جلوگیری نمایند، تا از از کار افتادن برنامه جلوگیری شود.یک راه حل ساده و مؤثر که در این مورد رایج می‌باشد استفاده از همین فایل hosts سیستم‌عامل می‌باشد، زیرا این فایل بر روی همه سیستم‌عامل‌ها موجود است، نیاز به تغییرات خاصی ندارد و اعمال آن نیز بسیار ساده می‌باشد.به‌طوری که چنانچه از سیستم‌عامل ویندوز استفاده می‌نمایید، می‌توانید فایل hosts خود را باز نمایید و به احتمال قوی چندین خط را مشاهده خواهید نمود که مرتبط به همین مسئله activation نرم‌افزارهای پولی می‌باشد.C:\Windows\System32\drivers\etc\hostsدریافت لیست‌های مسدودسازی دامنهبر روی GitHub، لیست‌های بسیار وجود دارند که جهت مسدود سازی دامنه‌ها از این روش ارائه شده اند.علاوه بر لیست‌های موجود، من هم تعدادی لیست منتشر کرده ام که تحت عنوان additional-hosts در لینک زیر می‌توانید مشاهده و استفاده نمایید:https://github.com/DRSDavidSoft/additional-hostsچند نکته در ارتباط با فرمت لیست‌های من:- با توجه به موارد اشاره شده، بنده تصمیم گرفتم که پیشوند `0.0.0.0` و `127.0.0.1` را در لیست خود نگنجانم.- با توجه به پشتیبانی اکثر نرم‌افزارهای DNS server از قابلیت مسدود سازی ساب دامنه، من می‌توانستم که ساب‌دامین‌ها را به‌طور کلی از لیست خود حذف کنم، اما به دلیل اینکه می‌توان از لیست بنده در فایل hosts نیز استفاده برد (پس از انجام تغییرات ذکر شده) تصمیم‌گرفتم که ساب‌دامنه‌های مهم را علی‌رغم redundent بودن، لحاظ کنم.- یکی از لیست‌های بنده additional-hosts/activation است که مانند کاری که برنامه‌های کرک و کیجن می‌کنند جهت جلوگیری از از کار افتادن کرک برنامه‌های پولی طرح شده، و بخشی از آن نیز بر مبنای فایل‌های hosts رایج جمع آوری شده است.از اینکه تا اینجای نوشته همراه من بودید از شما متشکرم، و در قسمت بعدی نوشته به نحوه راه‌اندازی و استفاده از این سیستم خواهم پرداخت. چنانچه پرسشی دارید خوشحال می‌شوم که پاسخ دهم، و امیدوارم مطالبی که نوشتم برای شما مفید واقع شده باشد!