امنیت

DNSSEC چیست و آیا باید فعالش کنیم؟

اگر بعد از فعال‌سازی DNSSEC سایتتان از دسترس خارج شد یا رزولورها پاسخ نمی‌دهند، مشکل معمولاً امضای منقضی است. راهنمای عملی تشخیص و رفع.

امنیت

سایت بالا نمی‌آید، اما نه از سمت سرور وب. dig روی سرور خودتان جواب درست می‌دهد، ولی از بیرون SERVFAIL می‌گیرید و هیچ لاگی در Apache یا Nginx نیست. اگر این الگو را دیده‌اید و اخیراً DNSSEC را روی دامنه فعال کرده‌اید، احتمال زیادی وجود دارد که زنجیرهٔ اعتماد جایی شکسته باشد، نه اینکه سرورتان خراب شده باشد.

DNSSEC مجموعه‌ای از رکوردهای امضاشده است که به رزولور اجازه می‌دهد مطمئن شود پاسخی که از DNS گرفته دست‌کاری نشده. بدون آن، هر کسی در مسیر می‌تواند پاسخ را عوض کند و کاربر را به IP خودش بفرستد. با آن، پاسخ یا معتبر است یا اصلاً پذیرفته نمی‌شود. همین «یا اصلاً پذیرفته نمی‌شود» است که کار را سخت می‌کند.

حملهٔ جعل DNS در عمل چه شکلی است

فرض کنید مهاجم روی مسیر بین کاربر و رزولور نشسته باشد. کاربر bank.example.ir را می‌پرسد، مهاجم پاسخ جعلی با TTL بالا می‌فرستد و IP سرور خودش را جایگزین می‌کند. کاربر گواهی SSL معتبر هم می‌بیند، چون مهاجم می‌تواند برای همان دامنه از یک CA معتبر گواهی بگیرد اگر کنترل DNS را در دست بگیرد. اینجا هیچ‌کدام از ابزارهای معمول امنیتی چیزی نشان نمی‌دهند.

DNSSEC این را با امضای دیجیتال می‌بندد. هر رکورد با کلید خصوصی زون امضا می‌شود و رزولور با کلید عمومی که از والدش گرفته، امضا را بررسی می‌کند. اگر امضا نخورد، پاسخ دور انداخته می‌شود.

زنجیرهٔ اعتماد از کجا شروع می‌شود

از ریشه. ریشهٔ DNS کلید عمومی TLD را امضا می‌کند، TLD کلید دامنهٔ شما را، و دامنهٔ شما رکوردهای خودش را. این زنجیره با رکورد DS در والد گره می‌خورد. اگر آن رکورد DS اشتباه باشد یا حذف شود، کل زنجیره می‌شکند و رزولورهای اعتبارسنج پاسخ شما را رد می‌کنند.

راه‌اندازی: از تولید کلید تا انتشار DS

اگر از BIND استفاده می‌کنید، ترتیب کار مهم است. اول کلیدها را بسازید، بعد زون را امضا کنید، بعد DS را به ثبت‌کننده بدهید. اگر DS را قبل از آماده بودن زون منتشر کنید، سایت برای همهٔ رزولورهای اعتبارسنج ناپدید می‌شود.

dnssec-keygen -a ECDSAP256SHA256 -f KSK example.ir
dnssec-keygen -a ECDSAP256SHA256 example.ir
dnssec-signzone -o example.ir -k Kexample.ir.+013+12345 db.example.ir

خروجی dnssec-signzone یک فایل زون امضاشده است که باید جایگزین فایل قبلی شود. رکوردهای RRSIG و DNSKEY به‌طور خودکار اضافه می‌شوند. حالا با dig بررسی کنید:

dig +dnssec example.ir A @1.1.1.1
dig DS example.ir @a.root-servers.net

در پاسخ اول باید RRSIG ببینید و فلگ ad در بخش هدر. اگر ad نیامد، اعتبارسنجی رد شده. در پاسخ دوم باید رکورد DS با الگوریتم و هش درست باشد.

رکورد DS را دستی چک کنید

ثبت‌کننده‌ها اینجا زیاد اشتباه می‌کنند. مقدار DS باید دقیقاً با خروجی dnssec-dsfromkey بخواند. یک کاراکتر جابه‌جا یعنی شکست کامل. برای بررسی سریع از ابزارهای بررسی DNS و شبکه استفاده کنید و نتیجه را با خروجی محلی مقایسه کنید.

این‌جا اشتباه می‌کنند: کلید تمدیدشده و سایتی که ناپدید می‌شود

رایج‌ترین فاجعه‌ای که دیده‌ام این است: تیم DNSSEC را فعال می‌کند، همه‌چیز کار می‌کند، و شش ماه بعد سایت یک‌شبه از دسترس خارج می‌شود. علت؟ امضای RRSIG منقضی شده و کسی زون را دوباره امضا نکرده.

نشانه‌اش این است: سایت از بعضی شبکه‌ها باز می‌شود و از بعضی نه. کاربران با ISPهای مختلف رفتار متفاوت می‌بینند. dig روی سرور خودتان سالم است، ولی dig @8.8.8.8 پاسخ SERVFAIL می‌دهد. اگر لاگ رزولور را ببینید، پیام signature expired یا no valid RRSIG می‌بینید. اینجا هیچ‌کس به DNS شک نمی‌کند، چون «دیروز کار می‌کرد».

راه‌حل ساختاری، امضای خودکار است. BIND 9.16 به بعد با dnssec-policy این کار را می‌کند:

dnssec-policy default {
    keys {
        ksk lifetime P1Y algorithm ECDSAP256SHA256;
        zsk lifetime P3M algorithm ECDSAP256SHA256;
    };
};

با این تنظیم، BIND خودش کلیدها را می‌چرخاند و زون را دوباره امضا می‌کند. ولی حتی با این هم باید هشدار بدهید. یک مانیتور ساده روی انقضای RRSIG بگذارید و اگر کمتر از هفت روز مانده بود، هشدار بگیرید.

هزینهٔ واقعی DNSSEC: بزرگ‌تر از یک تیک در پنل

DNSSEC رایگان نیست، حتی وقتی پول نمی‌دهید. هزینه‌اش زمان و پیچیدگی عملیاتی است. سه چیز را باید بپذیرید:

  • پاسخ‌های DNS بزرگ‌تر می‌شوند. یک پاسخ امضاشده می‌تواند از 512 بایت رد شود و به TCP یا EDNS0 نیاز پیدا کند. اگر فایروال شما UDP fragment را می‌اندازد، سایت برای بعضی کاربران باز نمی‌شود.
  • هر تغییر رکورد باید دوباره امضا شود. اگر زون را دستی امضا می‌کنید، این یک قدم اضافه در هر دیپلوی است.
  • خطاها بی‌رحمانه‌اند. یک رکورد اشتباه در DNS معمولاً یعنی «آن ساب‌دامین کار نمی‌کند». با DNSSEC یعنی «کل دامنه کار نمی‌کند».

اگر تیم شما یک نفر است و DNS را دستی مدیریت می‌کند، پیشنهاد من این است: DNSSEC را فعال نکنید تا وقتی امضای خودکار و مانیتورینگ انقضا داشته باشید. اگر ثبت‌کننده‌تان امضای خودکار ارائه می‌دهد و می‌توانید هشدار انقضا تنظیم کنید، فعالش کنید. برای سایت‌های بانکی، پرداخت، یا هر جایی که جعل DNS خسارت مستقیم دارد، DNSSEC اجباری است.

بررسی سلامت و پایش مداوم

بعد از راه‌اندازی، سه چیز را مرتب چک کنید. اول، اعتبارسنجی از چند رزولور عمومی:

dig +dnssec +multi example.ir @8.8.8.8
dig +dnssec +multi example.ir @9.9.9.9
dig +trace example.ir

دوم، تاریخ انقضای امضاها. با dig +dnssec مقدار RRSIG شامل زمان انقضا است. سوم، وضعیت خود سرویس‌های زیرساخت. اگر DNS روی سرور خودتان میزبانی می‌شود، از وضعیت لحظه‌ای سرویس‌ها و سطح خدمات و آپ‌تایم غافل نشوید، چون DNSSEC روی DNS ناپایدار فقط خطا را سریع‌تر نشان می‌دهد.

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

اگر میزبانی DNS را به کسی می‌سپارید، مطمئن شوید امضای خودکار و هشدار انقضا دارد. خدمات امنیت سرورنت این لایه را پوشش می‌دهد، ولی حتی با میزبانی مدیریت‌شده هم باید بدانید DS کجا ثبت شده و چه کسی مسئول چرخش کلید است.

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

آیا DNSSEC جلوی حمله DDoS را می‌گیرد؟

نه. DNSSEC فقط اصالت و یکپارچگی پاسخ DNS را تضمین می‌کند و هیچ ربطی به حجم ترافیک ندارد. برای مقابله با حجم حمله به لایه‌های دیگر نیاز دارید؛ محافظت در برابر DDoS موضوع جداگانه‌ای است. حتی می‌شود گفت DNSSEC در بعضی سناریوها بار را بیشتر می‌کند، چون پاسخ‌های بزرگ‌تر و درخواست‌های TCP بیشتر می‌شوند.

اگر DNSSEC را اشتباه تنظیم کنم چه اتفاقی می‌افتد؟

سایت برای همهٔ رزولورهایی که اعتبارسنجی می‌کنند از دسترس خارج می‌شود. این شامل Google DNS، Cloudflare و اکثر ISPهای بزرگ است. کاربرانی که رزولور غیراعتبارسنج استفاده می‌کنند ممکن است سایت را ببینند، که تشخیص را سخت‌تر می‌کند. برگشت‌پذیری سریع داشته باشید: حذف رکورد DS از والد، زنجیره را قطع می‌کند و معمولاً در چند ساعت مشکل را حل می‌کند.

چطور بفهمم DNSSEC روی دامنه‌ام درست کار می‌کند؟

با dig +dnssec example.ir @1.1.1.1 و بررسی فلگ ad در هدر پاسخ. اگر ad بود، اعتبارسنجی موفق است. اگر SERVFAIL گرفتید، زنجیره شکسته است. برای بررسی دقیق‌تر، رکورد DS والد را با خروجی dnssec-dsfromkey مقایسه کنید و تاریخ انقضای RRSIG را چک کنید.

آیا فعال کردن DNSSEC سرعت سایت را کم می‌کند؟

تأثیرش روی سرعت بارگذاری صفحه ناچیز است، چون DNS فقط یک بار در هر نشست resolve می‌شود. ولی پاسخ‌های بزرگ‌تر می‌توانند در شبکه‌های با MTU پایین باعث retry و تأخیر شوند. اگر کاربران شما روی شبکه‌های موبایل ضعیف هستند، این را در تست لحاظ کنید. عدد واقعی معمولاً چند میلی‌ثانیه است، نه بیشتر.

قبل از هر چیز، همین امروز تاریخ انقضای RRSIG دامنه‌تان را چک کنید. اگر کمتر از دو هفته مانده و امضای خودکار ندارید، این تنها کاری است که باید انجام دهید.

پشتیبانی سرورنت

تیم فنی و تحریریه‌ی سرورنت — تخصص در زیرساخت، شبکه و میزبانی وب.

خدمات امنیت
اشتراک‌گذاری:

دیدگاه‌ها ۰

هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!

دیدگاه خود را بنویسید

سرویس مرتبط

خدمات امنیت

تست نفوذ توسط متخصصان دارای مدرک OSCP، امن‌سازی زیرساخت و مانیتورینگ امنیتی ۲۴ ساعته — گزارش‌هایی که مدیر می‌فهمد و مهندس اجرا می‌کند.