Loading...

امنیت · 8 دقیقه مطالعه

مسدودسازی بر اساس ASN و کشور: قطع یک شبکه، نه یک آدرس

مسدودکردن یک آدرس IP فقط یک ماشین را تا وقتی همان آدرس را دارد متوقف می‌کند. بیشتر ترافیکی که ارزش مسدودکردن دارد این‌طور کار نمی‌کند: یک scraper به‌محض اینکه آدرس قدیمی را مسدود کنید یک آدرس جدید اجاره می‌کند — اما آن را از همان provider اجاره می‌کند، و آن provider یک عدد واحد است. این راهنما توضیح می‌دهد ASN چیست، چگونه آن را پشت یک درخواست پیدا کنید، کِی مسدودسازی کشور پاسخ بهتری است، و چگونه هر دو را در cdn.com.tr بدون قفل‌کردن مشتریان واقعی راه‌اندازی کنید.

به‌روزرسانی

مسدودسازی بر اساس ASN و کشور: قطع یک شبکه، نه یک آدرس

ASN واقعاً چیست

اینترنت یک شبکه نیست. ده‌ها هزار شبکه است، که هرکدام را کسی اداره می‌کند که تصمیم می‌گیرد ترافیک چگونه وارد و خارج شود. هرکدام از این شبکه‌ها یک عدد دارند — Autonomous System Number خودشان — و هر آدرس IP عمومی در هر لحظه دقیقاً به یکی از آن‌ها تعلق دارد.

آن عدد همان واحد مفید است. یک شرکت هاستینگ ممکن است صدها هزار آدرس داشته باشد که در بازه‌هایی پخش شده‌اند که به‌نظر بی‌ربط به هم می‌رسند، اما همه زیر یک ASN یا چند تا قرار دارند. یک اپراتور موبایل همین کار را برای مشترکینش می‌کند. پس وقتی می‌پرسید «این درخواست واقعاً از کجا می‌آید»، آدرس به شما می‌گوید کدام ماشین، و ASN به شما می‌گوید کدام سازمان آن ماشین را روی اینترنت گذاشته.

همین تفاوت کل ارزش ماجراست. یک کلاینت سوءاستفاده‌گر می‌تواند به‌سادگی آدرسش را عوض کند — یک دکمه در کنسول کلاد است، و لیست IPای که با دقت ساخته‌اید ظرف یک ساعت کهنه می‌شود. عوض‌کردن ASN یعنی عوض‌کردن تأمین‌کننده.

پیداکردن شبکهٔ پشت یک درخواست

از یک آدرس در لاگ‌هایتان شروع می‌کنید و آن را به یک شبکه تبدیل می‌کنید. سریع‌ترین راه یک whois query است.

یک آدرس، یک lookup، یک شبکه

# Team Cymru's whois service: address -> ASN, network name, country
whois -h whois.cymru.com " -v 203.0.113.10"

خواندن پاسخ پیش از عمل‌کردن به آن

این lookup به شما ASN، سازمان دارندهٔ آن و کشوری که در آن ثبت شده را می‌دهد. bgp.he.net همان اطلاعات را در مرورگر به‌علاوهٔ هر بازه‌ای که آن شبکه اعلام می‌کند نشان می‌دهد، که پیش از مسدودکردن هرچیزی ارزش یک نگاه را دارد: اگر سازمان یک ISP مصرف‌کنندهٔ بزرگ باشد، اندازهٔ فضای آدرسش این را بلافاصله روشن می‌کند.

lookup را روی چند آدرس انجام دهید، نه یکی. یک الگو فقط وقتی الگو حساب می‌شود که همان ASN بارها برگردد. اگر پنجاه آدرس متخلف به پنجاه شبکهٔ متفاوت نگاشت شوند، شما با providerای روبه‌رو نیستید که بتوانید مسدودش کنید — با یک botnet روبه‌رویید، و یک rate limit یا یک قانون WAF بسیار بهتر از هر لیستی به کارتان می‌آید.

به اینکه ترافیک چه چیزی درخواست می‌کند هم نگاه کنید. یک شبکهٔ واحد که هر شب کل کاتالوگ محصولتان را می‌کشد یک scraper است. همان شبکه که یک URL به‌ازای هر مشتری می‌گیرد یکپارچه‌سازی کسی است، و مسدودکردنش یک تماس تلفنی به بار می‌آورد نه یک بهبود بی‌سروصدا.

IP، ASN، کشور: سه سؤال متفاوت

این‌ها سه سطح قدرت یک ابزار نیستند. به چیزهای متفاوتی پاسخ می‌دهند، و انتخاب اشتباه همان چیزی است که باعث می‌شود یک مسدودسازی درنهایت بیشتر از خودِ سوءاستفاده هزینه داشته باشد.

مسدودسازی IP به «این ماشین دقیق یک مشکل است» پاسخ می‌دهد. ذاتاً دقیق و موقت است: از آن برای یک host سوءاستفاده‌گر مشخص، یک حملهٔ درحال‌وقوع، یا وقتی هنوز دارید می‌فهمید الگو چیست استفاده کنید.

مسدودسازی ASN به «هیچ‌چیز مشروعی از این شبکه به من نمی‌رسد» پاسخ می‌دهد. این اغلب دربارهٔ providerهای هاستینگ و کلاد درست است — مشتریان شما از ISPها و اپراتورهای موبایل مرور می‌کنند، درحالی‌که scraperها، اسکنرهای آسیب‌پذیری و اسکریپت‌های credential-stuffing روی سرورهای اجاره‌ای اجرا می‌شوند. مسدودکردن شبکهٔ پشت آن‌ها در برابر تغییر آدرسشان هم دوام می‌آورد، که همان چیزی است که یک مسدودسازی IP نمی‌تواند بکند.

مسدودسازی کشور به «ما این بازار را سرویس نمی‌دهیم» پاسخ می‌دهد. خشن‌ترین این سه است و تنها موردی که یک قاعدهٔ کسب‌وکاری را بیان می‌کند نه یک مشاهدهٔ فنی: فروشگاهی که به دو کشور ارسال می‌کند، سرویسی زیر مجوزی که به یکی محدود است. به‌تنهایی به‌عنوان یک کنترل امنیتی ضعیف است، چون یک مهاجم در چند ثانیه از یک سرور جای دیگری عبور می‌کند و یک مشتری واقعی که مسافرت رفته این کار را نمی‌کند.

غریزه‌ای که کار می‌کند: یک کشور را برای دلایل کسب‌وکاری مسدود کنید، یک ASN را برای دلایل رفتاری، و یک IP را تا وقتی هنوز دارید تصمیم می‌گیرید با کدام‌یک از آن دو روبه‌رویید.

کاری که edge با لیست می‌کند

هر دو لیست در edge اجرا می‌شوند، که همین است که ارزانشان می‌کند. edge آدرس بازدیدکننده را با استفاده از یک پایگاه‌دادهٔ محلی — GeoLite2 از MaxMind، که به‌صورت خودکار روی edge nodeهای ما تازه می‌شود — به یک کشور و یک ASN حل می‌کند، پس هیچ lookupای روی شبکه در مسیر درخواست نیست و چیزی نیست که شما مجبور باشید به‌روز نگه دارید.

اگر آدرس با یک لیست مطابقت داشته باشد، درخواست همان‌جا با یک صفحهٔ 403 برندشده که یک Reference ID دارد پاسخ داده می‌شود. origin شما هرگز اتصال را نمی‌بیند: هیچ workerای اشغال نمی‌شود، هیچ queryای به دیتابیس زده نمی‌شود، هیچ bandwidthای از سرور شما مصرف نمی‌شود. این همان تفاوت میان مسدودسازی در edge و مسدودسازی داخل اپلیکیشن شماست، و دلیل اینکه این مسدودسازی دقیقاً وقتی مهم است، زیر بار، دوام می‌آورد.

Reference ID بیشتر از ظاهرش اهمیت دارد. وقتی کسی به شما می‌گوید نمی‌تواند به سایتتان برسد، آن ID همان چیزی است که با آن درخواست دقیق او را در لاگ‌ها پیدا می‌کنید و به‌جای یک بعدازظهر حدس‌زدن، می‌گویید «شبکهٔ شما روی blocklist است».

راه‌اندازی در پنل

در پنل Delivery rules → Security presets را باز کنید — /management/cdn/advanced-management. دو manager کنار هم آنجا نشسته‌اند: Country Blacklist Manager و ASN Blacklist Manager.

برای یک کشور، آن را از لیست انتخاب کنید و ذخیره کنید. برای یک شبکه، ASN را به‌صورت یک عدد ساده وارد کنید: 12735، نه AS12735؛ چند شبکه در یک لیست جداشده با کاما می‌روند (12735, 47331). لیست تا 200 مدخل جا دارد، و 0 عمداً رد می‌شود — پانوشت‌های زیر را ببینید.

بعد با چیزی که واقعاً از شبکهٔ مسدودشده می‌آید تأیید کنید، نه از اتصال خودتان: یک host داخل آن کلاد، یک proxy، یا یک همکار روی آن carrier. نتیجهٔ درست همان صفحهٔ 403 برندشده از آنجاست، و یک 200 معمولی از همه‌جای دیگر. مسدودسازی به‌قدری بی‌سروصداست که ممکن است شما را فریب دهد فکر کنید کار نکرده، چون درخواست خودتان تقریباً هرگز از شبکه‌ای که تازه مسدود کرده‌اید نیست.

انجامش از طریق API

هر دو لیست از طریق REST API با یک bearer token در دسترس‌اند، که همان چیزی است که می‌خواهید اگر آن‌ها را در version control نگه می‌دارید یا به سیستم تشخیص سوءاستفادهٔ خودتان وصل می‌کنید. فراخوانی update لیست را دقیقاً به همان چیزی که می‌فرستید تنظیم می‌کند، پس اول آن را بخوانید و کل لیست را بفرستید نه فقط اضافه‌شده را.

لیست فعلی را بخوانید، بعد جایگزینش کنید

# what is on the list now
curl -s -H "Authorization: Bearer $TOKEN" \
  https://cdn.com.tr/api/accounts/<account-uuid>/asn_blacklist

# replace it with exactly these two networks
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"listType":"blacklist","asns":[12735,47331]}' \
  https://cdn.com.tr/api/accounts/<account-uuid>/asn_blacklist_update

پانوشت‌هایی که تعیین می‌کنند این ایدهٔ خوبی است یا نه

ISPهای مصرف‌کننده و اپراتورهای موبایل میلیون‌ها آدم هستند. ASN یک اپراتور موبایل واحد می‌تواند سهم بزرگی از گوشی‌های یک کشور را پوشش دهد. مسدودکردنش یک مهاجم را مسدود نمی‌کند؛ یک بخش از بازار را مسدود می‌کند، و تیکت‌های پشتیبانی کلمهٔ ASN را ذکر نخواهند کرد.

CDNها، VPNها و proxyهای سازمانی origin واقعی را پنهان می‌کنند. وقتی یک درخواست از طریق یک CDN دیگر یا یک VPN می‌رسد، ASNای که می‌بینید متعلق به آن واسطه است. مسدودکردنش هرکسی را که از آن سرویس استفاده می‌کند حذف می‌کند، شامل مشتریان حریم‌خصوصی‌دوست و کارمندان دورکار روی VPN شرکت.

ASNهای هاستینگ ترافیکی را هم که می‌خواهید حمل می‌کنند. webhookهای پرداخت، uptime monitorها، پیش‌نمایش‌های لینک از اپ‌های چت، یکپارچه‌سازی‌های شریک و crawlerهای موتور جست‌وجو، همه روی سرورهای اجاره‌ای اجرا می‌شوند. پیش از مسدودکردن یک provider کلاد به‌طور کامل، بفهمید کدام‌یک از یکپارچه‌سازی‌های خودتان آنجا زندگی می‌کند.

ASN 0 قابل مسدودشدن نیست. این چیزی است که پایگاه‌داده وقتی یک آدرس به هیچ شبکهٔ شناخته‌شده‌ای نگاشت نمی‌شود برمی‌گرداند، پس اصلاً یک شبکه نیست — مسدودکردنش یعنی مسدودکردن «هرچیزی که نتوانستیم شناسایی کنیم». ترافیکی که به آن resolve می‌شود باید با رفتار مدیریت شود، با یک rate limit یا یک قانون WAF، نه با یک لیست.

شبکه‌ها دست‌به‌دست می‌شوند. یک ASN توصیف دائمی این نیست که چه کسی پشتش است. لیستی که کسی دو سال است بازبینی‌اش نکرده لیستی است که دیگر آن را نمی‌فهمید.

یک ترتیب عاقلانه برای تشدید

وقتی چیزی سوءاستفاده‌گرانه ظاهر می‌شود، سراغ ارزان‌ترین کنترلی بروید که با شکل مشکل جور است — و اول شکل را صادقانه توصیف کنید: چند آدرس، چند شبکه، با چه سرعتی، و چه چیزی درخواست می‌کنند.

همان توصیف ابزار را انتخاب می‌کند. درخواست‌های زیاد از کلاینت‌های کم یک rate limit است. درخواست‌های بدخیم‌به‌نظر، هرقدر هم کم، یک قانون WAF است. حجم عظیم از همه‌جا یک‌باره جذب DDoS است. فقط ترافیک پیوسته و عمدی از یک شبکهٔ قابل‌شناسایی یک مسدودسازی ASN است — و بازاری که تصمیم گرفته‌اید سرویس ندهید یک مسدودسازی کشور است.

بعد مسدودسازی را باریک‌ترین حالتی که کار می‌کند بسازید، بنویسید چرا اضافه‌اش کردید، و یک هفته بعد ببینید چه هزینه‌ای برایتان داشته. مدخلی که هیچ دلیلی کنارش ثبت نشده همان چیزی است که دوسال دیگر هیچ‌کس جرأت حذفش را ندارد، و هر blocklist در نهایت این‌ها را انباشته می‌کند.

پرسش‌های پرتکرار

چطور ASN یک آدرس IP را پیدا کنم؟

سرویس whois تیم Cymru را با آدرس query کنید، یا آن را در مرورگر روی bgp.he.net جست‌وجو کنید. هر دو ASN، سازمان دارندهٔ آن و بازه‌هایی که اعلام می‌کند را به شما می‌دهند. چند آدرس را چک کنید نه یکی — یک lookup تنها به شما می‌گوید یک ماشین کجاست، نه اینکه آیا الگویی هست که ارزش مسدودکردن داشته باشد.

آیا مسدودکردن یک کشور امنیت خوبی است؟

به‌تنهایی نه. یک قاعدهٔ کسب‌وکاری را بیان می‌کند — ما این بازار را سرویس نمی‌دهیم — و این کار را خوب انجام می‌دهد. به‌عنوان یک دفاع ضعیف است: یک مهاجم یک سرور جایی که اجازه می‌دهید اجاره می‌کند و ظرف چند دقیقه برمی‌گردد، درحالی‌که مشتری شما که مسافرت رفته قفل می‌شود و راهی برای توضیح‌دادن ندارد.

آیا یک مسدودسازی ASN جلوی یک مهاجم مصمم را می‌گیرد؟

به‌جای پایان‌دادن به مشکل، هزینه را بالا می‌برد. در برابر scraperها، اسکنرها و اسکریپت‌های credential-stuffing که روی سرورهای اجاره‌ای ارزان اجرا می‌شوند بسیار مؤثر است، چون جابه‌جاشدن یعنی پیداکردن یک provider جدید. در برابر یک botnet روی اتصال‌های خانگی هیچ کار مفیدی نمی‌کند — آن درخواست‌ها از هزاران ISP معمولی می‌آیند، و فقط رفتار می‌تواند آن‌ها را از هم تشخیص دهد.

بازدیدکنندهٔ مسدودشده واقعاً چه می‌بیند؟

یک صفحهٔ 403 برندشده با یک Reference ID، که توسط edge سرو می‌شود. نه یک timeout است و نه یک خطای مرورگر، پس کسی که به اشتباه مسدود شده می‌تواند دقیقاً بگوید چه دید، و Reference ID شما را مستقیم به درخواست او در لاگ‌ها می‌رساند.

آیا می‌توانم شبکه‌های ناشناخته، یا ASN 0 را مسدود کنم؟

نه. ASN 0 همان چیزی است که پایگاه‌داده وقتی یک آدرس به هیچ شبکه‌ای که بشناسد تعلق ندارد گزارش می‌کند، پس یک سازمان نیست که بتوانید مسدودش کنید — یک شکاف در داده است. درخواست‌هایی که آنجا فرود می‌آیند کار rate limiting یا یک قانون WAFاند، که قضاوتشان بر اساس کاری است که کلاینت می‌کند نه اینکه از کجا می‌آید.

آیا ممکن است تصادفاً Google یا payment providerم را مسدود کنم؟

بله، و این رایج‌ترین راهی است که یک لیست ASN آسیب می‌رساند. crawlerها، uptime monitorها، webhookهای پرداخت و پیش‌نمایش‌های لینک اپ‌های چت همگی از شبکه‌های کلاد سرچشمه می‌گیرند. پیش از مسدودکردن یک provider هاستینگ، چک کنید کدام‌یک از یکپارچه‌سازی‌های خودتان آنجا اجرا می‌شود — و بعد از ذخیره، مراقب یکپارچه‌سازیای باشید که بی‌سروصدا فراخوانی‌کردن را متوقف می‌کند.