یک بستهی کامل از دستورات میکروتیک در ادامه ارائه خواهیم کرد، که هم HTTP و هم HTTPS را (تا حد ممکن) برای دامنه و همه سابدامنههای dl-files.com و نیز دو سابدامنهی مشخصشده مسدود کند. چون نسخهی RouterOS شما مشخص نیست برای ما، دو حالت جنرال و پیش فرض را در این مقاله پوشش خواهیم داد: دستورات عمومی (که روی v6 و v7 کار خواهد کرد) + یک rule ویژهی SNI که فقط در RouterOS v7 قابلاستفاده است (اگر v7 دارید از اون استفاده کنید، در غیر این صورت روشهای جایگزین همینه).
پیشفرضها/نکات مهم قبل از اجرا
-
اگر کلاینتها مستقیم از DNS عمومی (مثلاً 8.8.8.8) استفاده کنند، باید دسترسیشان به DNSهای خارجی را مسدود کنیم تا DNS sinkhole/resolve ما کار کنه — در ادامه دستورات لازم برای انجام این کار را خواهیم آورد.
-
اگر این دامنه روی CDN باشه و آیپیهای آن مشترک با سایتهای سالم دیگری باشند، بلاک آیپی ممکن است به سرویسهای دیگر لطمه بزند. لذا در این صورت ترکیب DNS sinkhole + SNI (در v7) بهترین نتیجه را خواهد داد.
-
تمام کدها را در ترمینال میکروتیک (Winbox/SSH) اجرا کنید. قبل از
dropکردن میتوانید باaction=rejectیاlogتست کنید.
1) اضافه کردن رکوردهای DNS static (DNS sinkhole)
این قسمت وقتی مؤثر است که کلاینتها از میکروتیک بهعنوان DNS استفاده کنند.
/ip dns static add name=dl-files.com address=0.0.0.0 comment="block dl-files root"/ip dns static add name=remotesupport.dl-files.com address=0.0.0.0 comment="block remotesupport"/ip dns static add name=licenseapi.dl-files.com address=0.0.0.0 comment="block licenseapi"/ip dns static add name=www.dl-files.com address=0.0.0.0 comment="block www (if present)"توضیح: اینها پاسخ DNS را به 0.0.0.0 هدایت میکنند و بعبارتی دیگر صفحه/اتصال باز نخواهد شد.
2) جلوگیری از استفادهی کلاینتها از DNS بیرونی (اجبار به استفاده از DNS روتر)
اگر میخواهید مطمئن باشید همه DNSها از روتر عبور کنند (مهم برای اثر DNS sinkhole):
اگر خودتون DNS خاصی را میخواهید allow کنید (مثلاً resolver محلی)، باید قبل از این ruleها برای آن allow بزنید (مثلاً allow از IP شبکه به روتر).
3) لایهی فایروال — بلاک بر اساس IP (dynamic address-list)
حال باید اسکریپتی بسازیم که دامنهها را resolve کند، آیپیها را به address-list اضافه کند و rule فایروال ترافیک به آنها را drop کند.
ابتدا یک address-list و rule drop:
حالا اسکریپت آپدیتکننده (نام اسکریپت و دامنهها قابل تغییرند):
Download script code in the text files (swift)
و یک scheduler برای اجرای هر 10 دقیقه:
توضیح: این اسکریپت سعی میکند آیپیها را از DNS cache بردارد (اگر قبلاً رزولو شده باشند) و اگر پیدا نشد از :resolve استفاده میکند. آیپیها را با timeout 1d اضافه میکند تا بهصورت دورهای تجدید شوند.
4) بلاک میزبان در HTTP (Host header) — برای پورت 80
یک layer7 پروتکل تعریف میکنیم که Host header شامل dl-files.com را بگیرد و بعد ترافیک HTTP را drop کنیم (این روش سابدامینها را هم میگیرد).
ابتدا layer7:
سپس یک rule:
نکته: layer7 ممکن است بار پردازشی CPU روی روتر ایجاد کند؛ اگر تعداد کاربران زیاد است، مراقب بار باش.
5) بلاک SNI برای HTTPS (پیشنهاد شده — فقط RouterOS v7)
اگر RouterOS v7 دارید، میتونید از tls-host در rule فایروال استفاده کنید تا TLS SNI را چک کرده و نام میزبانهای مشخصشده را بلاک کنی (ایدهآل برای HTTPS).
مثال (یک rule برای هر hostname یا چند rule جدا):
اگر میکروتیک شما tls-host را پشتیبانی نمیکند، از ترکیب DNS sinkhole + address-list استفاده کنید (اسکریپت بالا ↑ ) یا از پروکسی SSL inspection بهره بگیرین (پیچیدهتر، نیاز به CA و cert).
6) نمونه ترتیب کاملِ وارد کردن (ترتیب پیشنهادی اجرا)
-
اضافه کردن DNS staticها (بخش 1).
-
اضافه کردن layer7 و rule HTTP (بخش 4).
-
اضافه کردن ruleهای drop برای پورت 53 خارجی (بخش 2) — مواظب باش که اگر خودت DNS خارجی نیاز داری، قبل از این allow بذار.
-
اضافه کردن address-list و rule drop (بخش 3). سپس اسکریپت و scheduler را فعال کن.
-
اگر RouterOS v7 داری، اضافه کن ruleهای
tls-host(بخش 5). -
مانیتور لاگ / connection tracking تا مطمئن بشی چیزهای مطلوب بلاک شدهاند و چیزهای دیگر آسیب نبینند.
7) تست و دیباگ
-
برای تست DNS sinkhole از یک کلاینت داخل شبکه:
-
nslookup dl-files.comیاdig dl-files.comباید 0.0.0.0 یا پاسخ نامعتبر نشون بده.
-
-
برای تست HTTP: از curl داخل شبکه:
-
curl -v http://dl-files.comباید قطع یا ریجکت شود.
-
-
برای تست HTTPS: اگر v7 و tls-host اضافه کردی،
openssl s_client -connect dl-files.com:443 -servername dl-files.comباید connection قطع یا بلاک شود (یا handshake به درستی رد شود). -
لاگها را چک کن:
/log printیا برای فایروال باaction=logیک rule موقت قرار بده تا ببینی درخواستها match میخورند یا نه.
8) هشدار نهایی و پیشنهادات
-
این بسته باید در اکثر سناریوها مؤثر باشد، اما اگر کاربرها از VPN یا DNS-over-HTTPS/TLS استفاده کنند (یا اپلیکیشنهایی که SNI را ارسال نمیکنند)، ممکن است نیاز به قواعد اضافی (مثلاً بلاک کردن VPN ها/پورتها یا DPI) داشته باشید.