Оддий DNS жавоблари ҳеч қандай имзо билан ҳимояланмаган, шунинг учун ҳужумчи резолвер кешига сохта жавоб жойлаб, фойдаланувчини бошқа серверга йўналтириши назарий жиҳатдан мумкин. DNSSEC бу муаммони криптографик имзолар орқали ҳал қилади: ҳар бир жавоб зона калити билан имзоланади, резолвер эса имзони ота зонадан бошлаб текширади. Бу кучли ҳимоя, аммо у хатоларни кечирмайди. Нотўғри DS ёзуви ёки муддати ўтган имзо доменни текширувчи резолверлардан фойдаланадиган барча фойдаланувчилар учун бутунлай очилмайдиган қилиб қўяди.
Ишонч занжири қандай қурилади
DNSSEC'нинг моҳияти ишонч занжиридир. Илдиз зона .uz каби юқори даражали зонанинг калитини тасдиқлайди, юқори даражали зона эса сизнинг доменингиз калитини тасдиқлайди. Домен зонасида DNSKEY ёзувлари, яъни очиқ калитлар ва ҳар бир ёзув тўплами учун RRSIG имзолари жойлашади. Ота зонада эса DS ёзуви туради: у сизнинг калитингизнинг хеши бўлиб, "бу доменнинг ҳақиқий калити шу" деган тасдиқни беради. DS ёзуви ота зонага регистратор орқали юборилади, шунинг учун DNSSEC икки жойда созланади: DNS хостингда ва домен рўйхатга олинган жойда.
Одатда икки турдаги калит ишлатилади. KSK, яъни калитларни имзоловчи калит, фақат DNSKEY тўпламини имзолайди ва унинг хеши DS сифатида ота зонага берилади. ZSK эса зонадаги бошқа ёзувларни имзолайди ва тез-тез алмаштирилиши мумкин. Замонавий созламаларда битта умумий калит, яъни CSK ишлатиш ҳам кенг тарқалган.
Бошлашдан олдин нимани аниқлаш керак
Биринчидан, DNS хизматингиз зонани имзолай олиши керак. Кўплаб бошқариладиган DNS хизматларида бу битта тугма билан ёқилади ва хизмат сизга DS маълумотларини кўрсатади. Ўз серверингизда эса BIND, Knot ёки PowerDNS каби дастур имзолашни бажаради. Иккинчидан, домен зонаси ва регистратор DS ёзувини қабул қилиши керак. Доменингиз sayt.uz'да бўлса, DS ёзувини қўшиш имкониятини кабинетдан ёки техник ёрдам орқали аниқланг. Учинчидан, калит алгоритмини танланг: ҳозир энг кўп тавсия этиладигани 13-algoritm, яъни ECDSAP256SHA256, у қисқа имзолар беради ва кенг қўллаб-қувватланади.
Тўғри тартиб: аввал имзо, кейин DS
Энг муҳим қоида тартибга оид. Аввал зона имзоланади ва DNSKEY ёзувлари эълон қилинади. Сўнгра резолверлар янги калитларни кўриши учун камида DNSKEY TTL'и қадар кутилади. Шундан кейингина DS ёзуви ота зонага қўшилади. Агар тартиб тескари бўлса, яъни DS бор-у зона ҳали имзоланмаган бўлса, текширувчи резолверлар жавобни сохта деб ҳисоблайди ва SERVFAIL қайтаради.
BIND 9.18 ва ундан янги версияларда имзолаш сиёсат орқали автоматлаштирилади. Қуйидаги созлама калитларни яратади, зонани имзолайди ва имзоларни муддати тугашидан олдин янгилаб туради:
zone "example.uz" {
type primary;
file "/var/lib/bind/db.example.uz";
dnssec-policy default;
inline-signing yes;
};
Қайта юклагандан кейин ҳолатни текширинг ва KSK файли асосида DS ёзувини ҳосил қилинг. Калит файли номидаги рақам, яъни калит теги, сизда бошқача бўлади:
rndc reconfig
rndc dnssec -status example.uz
dig @127.0.0.1 example.uz DNSKEY +multi
dnssec-dsfromkey -2 /var/lib/bind/Kexample.uz.+013+12345.key
Натижа қуйидаги кўринишда бўлади. Регистраторга одатда тўртта қиймат киритилади: калит теги, алгоритм, хеш тури ва хешнинг ўзи. Хеш тури 2 SHA-256'ни билдиради.
example.uz. IN DS 12345 13 2 3F1A...C9D2
DS ота зонада пайдо бўлгандан кейин BIND'га буни билдириш керак, шунда у калит алмаштириш жараёнини тўғри давом эттиради: rndc dnssec -checkds published example.uz.
Ишлаётганини қандай текшириш
Текшириш учун DNSSEC'ни текширадиган очиқ резолверга сўров юборинг. Жавоб сарлавҳасидаги ad байроғи имзо муваффақиятли текширилганини билдиради. delv воситаси эса натижани аниқ сўз билан ёзади.
dig @8.8.8.8 example.uz A +dnssec
dig example.uz DS +short
delv @1.1.1.1 example.uz A
Агар оддий сўров SERVFAIL қайтарса-ю, +cd байроғи, яъни текширувни ўчириш билан жавоб келса, муаммо аниқ DNSSEC'да: dig @8.8.8.8 example.uz A +cd. Занжирни визуал кўриш учун DNSViz каби онлайн таҳлил воситалари ҳам қулай, улар қайси бўғин узилганини кўрсатади.
Энг кўп учрайдиган хатолар
Биринчи ва энг хавфли хато DNS хостингни алмаштиришда юз беради. Масалан, Бухородаги хусусий мактаб сайтини янги провайдерга кўчиришди, NS серверларни ўзгартиришди, лекин эски DS ёзувини олиб ташлашни унутишди. Янги провайдер зонани имзоламаган эди ёки бошқа калит билан имзолаган эди, натижада текширувчи резолверлар орқали келган ота-оналар сайтни оча олмади, бошқалар эса муаммони сезмади. Шу сабабли хато узоқ вақт аниқланмай қолди. Тўғри тартиб: аввал DS олиб ташланади, DS TTL'и қадар кутилади, кейин NS алмаштирилади ва янги жойда DNSSEC қайтадан ёқилади.
Иккинчи хато муддати ўтган имзолардир. RRSIG имзолари чекланган муддатга берилади ва доимий янгиланиб туриши керак. Агар имзолаш дастури тўхтаб қолса ёки қўлда бир марта имзоланган зона кейин янгиланмаса, бир неча ҳафтадан кейин домен очилмай қолади. Учинчи хато DS ва калит мос келмаслиги: регистраторга ZSK хеши киритилган, алгоритм рақами нотўғри танланган ёки калит алмаштирилганда янги DS қўшилмаган. Тўртинчиси эса сервердаги нотўғри вақт, чунки имзолар вақт оралиғи билан текширилади ва соат орқада ёки олдинда бўлса янги имзолар яроқсиз кўринади.
DNSSEC'ни хавфсиз ўчириш
Ўчириш ҳам ёқиш каби тартибга боғлиқ, фақат тескари йўналишда. Аввал регистратор орқали DS ёзуви олиб ташланади. Кейин ота зонадаги DS TTL'и ва резолверлар кеши тозаланиши учун камида бир-икки кун кутилади. Фақат шундан кейин зонадаги имзолаш ўчирилади. Бу оралиқда зона имзоланган ҳолда қолиши зарар қилмайди, аксинча, DS ҳали кешда турган резолверлар учун сайт очилишини таъминлайди.