راه اندازی DNSSEC در سرور BIND DNS، مهمترین موردی است که شما باید اطلاعات لازم برای راهاندازی آن را داشته باشید، در زاگریو به بررسی تخصصی این موضوع مهم خواهیم پرداخت.
DNS و DNSSEC به چه معناست؟
میدانیم که DNS یک پروتکل برای تبدیل نام دامنهها به IP addressهای آنهاست، اما چگونه میتوان از صحت IP آدرس بازگشتی مطمئن شد؟ آیا ممکن است که یک هکر DNS را آلوده نماید و IP آدرسی بازگشت دهد که کاربر را به یک سایت مخرب بفرستد، با اینکه نامی که در آدرس بار مرورگر نشان میدهد صحیح است؟
در اینجا ما از افزونه امنیتی DNS با نام DNSSEC استفاده میکنیم که هدف آن حفظ امنیت DNS است. DNSSEC با استفاده از PKI ( کلید عمومی) تمام سوابق منابع DNS (A ،MX ،CNAME و …) بررسی میکند و اکنون DNS میتواند با فعال کردن DNS resolverهایی مانند Google Public DNS صحت dns مورد نظر از لحاظ IP آدرس و دیگر مشخصه ها را با رکوردهای DNSKEY بررسی نماید.
DNSSEC Resource Records
Resource Record (RR)ها دارای اطلاعات خاصی از دامین میباشند. بعضی از رکوردهای عمومی A دارای اطلاعاتی مانند IP address دامنه، بعضی از AAAA دارای اطلاعات IPv6 و MX دارای اطلاعات Mail server دامنه میباشند.
لیست کامل RRها را میتوانید در این صفحه مشاهده نمایید.
DNSSEC به تعدادی RR نیاز دارد:
DNSKEY کلید عمومی را که DNS resolverها برای تأیید استفاده می کنند، در خود نگه می دارد.
RRSIG برای هریک از RR وجود دارد و حاوی امضای دیجیتالی رکورد است.
DS – Delegation Signer این رکورد در نام سرورهای TLD وجود دارد. اگر ZAGRIO.COM را در نظر بگیریم. TLD همان .com است nameserver شامل a.gtld-servers.net
تا m.gtld-servers.net
میباشد.
راهاندازی
Domain Name: zagrio.com
برای این منظور شما از نام دامنه خود استفاده نمایید.
Master Nameserver:
IP Address: 1.1.1.1
Hostname: master.zagrio.com
OS: Debian 7
Slave Nameserver:
IP Address: 2.2.2.2
Hostname: slave.zagrio.com
OS: CentOS
محل فایلها و نام آنها
نام فایلهای شما و محل ذخیرسازی آنها بر اساس نوع توزیع لینوکسی که استفاده میکنید ممکن است، متفاوت باشد.
Debian/Ubuntu
نام سرویس:
bind9
فایل اصلی پیکربندی:
/etc/bind/named.conf.options
Zone names file:
/etc/bind/named.conf.local
Default zone file location:
/var/cache/bind/
CentOS/Fedora
Sنام سرویس:
named
فایل اصلی پیکربندی و zone names file:
/etc/named.conf
Default zone file location:
/var/named/
این نامها و محلها اگر از bind-chroot
استفاده میکنید ممکن است متفاوت باشند.
پیکربندی DNSSEC Master
DNSSEC را میتوان با اضافه کردن دستور العملهای پیکربندی در options{ }
فعال نمود.
nano /etc/bind/named.conf.options
1 2 3 |
dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; |
ممکن است تعدادی از این فرامین در توزیع لینوکسی شما از قبل وجود داشته باشند.
با دستور زیر به zone file خود بروید:
1 |
cd /var/cache/bind |
و با دستور زیر Zone Signing Key(ZSK) را بسازید.
1 |
dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com |
اگر haveged را نصب کرده باشید برای ایجاد این key فقط چند ثانیه لازم است. در غیر این صورت زمان بیشتی طول خواهد کشید. خروجی به شکل زیر است:
1 2 3 |
root@master:/var/cache/bind# dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE zagrio.com Generating key pair..................+++ .............+++ Kexample.com.+007+40400 |
با دستور زیر نیز میتوانید Key Signing Key(KSK) را بسازید:
1 |
dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com |
نمونه خروجی به شکل زیر است:
1 2 3 |
root@master:/var/cache/bind# dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com Generating key pair......................++ .............................................................................................................................................................................................................++ Kexample.com.+007+62910 |
دایرکتوری حالا 4 key دارد. ما public key را هم اضافه کردیم که دارای DNSKEY در zone است، حلقه زیر این کار را برای ما انجام میدهد.
1 2 3 4 |
for key in `ls Kexample.com*.key` do echo "\$INCLUDE $key">> example.com.zone done |
با کامند زیر dnssec-signzone
را نشانه گذاری و sign مینماییم.
1 |
dnssec-signzone -3 <salt> -A -N INCREMENT -o <zonename> -t <zonefilename> |
salt را با یک چیز رندم عوض کنید نمونه خروجی شما مانند زیر خواهد بود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
root@master:/var/cache/bind# dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o example.com -t example.com.zone Verifying the zone using the following algorithms: NSEC3RSASHA1. Zone signing complete: Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked example.com.zone.signed Signatures generated: 14 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Signing time in seconds: 0.046 Signatures per second: 298.310 Runtime in seconds: 0.056 |
یک عبارت string شانزده کاراکتری باید به جای salt وارد شود مانند کامند زیر:
1 |
head -c 1000 /dev/random | sha1sum | cut -b 1-16 |
با کامند زیر یک فایل با نام example.com.zone.signed
میسازیم که رکوردهای RRSIG در ن جای دارند.
1 |
nano /etc/bind/named.conf.local |
تنظیمات فایل را در بخش zone { }
تغییر دهید.
1 2 3 4 5 6 |
zone "example.com" IN { type master; file "example.com.zone.signed"; allow-transfer { 2.2.2.2; }; allow-update { none; }; }; |
فایل را ذخیره کنید و bind را دوباره بارگذاری نمایید.
1 |
service bind9 reload |
بررسی کنید که آیا DNSKEY از dig بر یک سرور مشابه استفاده مینماید.
1 |
dig DNSKEY example.com. @localhost +multiline |
نمونه خروجی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
root@master:/var/cache/bind# dig DNSKEY example.com. @localhost +multiline ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> DNSKEY example.com. @localhost +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43986 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;example.com. IN DNSKEY ;; ANSWER SECTION: example.com. 86400 IN DNSKEY 256 3 7 ( AwEAActPMYurNEyhUgHjPctbLCI1VuSj3xcjI8QFTpdM 8k3cYrfwB/WlNKjnnjt98nPmHv6frnuvs2LKIvvGzz++ kVwVc8uMLVyLOxVeKhygDurFQpLNNdPumuc2MMRvV9me fPrdKWtEEtOxq6Pce3DW2qRLjyE1n1oEq44gixn6hjgo sG2FzV4fTQdxdYCzlYjsaZwy0Kww4HpIaozGNjoDQVI/ f3JtLpE1MYEb9DiUVMjkwVR5yH2UhJwZH6VVvDOZg6u6 YPOSUDVvyofCGcICLqUOG+qITYVucyIWgZtHZUb49dpG aJTAdVKlOTbYV9sbmHNuMuGt+1/rc+StsjTPTHU= ) ; key id = 40400 example.com. 86400 IN DNSKEY 257 3 7 ( AwEAAa2BE0dAvMs0pe2f+D6HaCyiFSHw47BA82YGs7Sj qSqH3MprNra9/4S0aV6SSqHM3iYZt5NRQNTNTRzkE18e 3j9AGV8JA+xbEow74n0eu33phoxq7rOpd/N1GpCrxUsG kK4PDkm+R0hhfufe1ZOSoiZUV7y8OVGFB+cmaVb7sYqB RxeWPi1Z6Fj1/5oKwB6Zqbs7s7pmxl/GcjTvdQkMFtOQ AFGqaaSxVrisjq7H3nUj4hJIJ+SStZ59qfW3rO7+Eqgo 1aDYaz+jFHZ+nTc/os4Z51eMWsZPYRnPRJG2EjJmkBrJ huZ9x0qnjEjUPAcUgMVqTo3hkRv0D24I10LAVQLETuw/ QOuWMG1VjybzLbXi5YScwcBDAgtEpsQA9o7u6VC00DGh +2+4RmgrQ7mQ5A9MwhglVPaNXKuI6sEGlWripgTwm425 JFv2tGHROS55Hxx06A416MtxBpSEaPMYUs6jSIyf9cjB BMV24OjkCxdz29zi+OyUyHwirW51BFSaOQuzaRiOsovM NSEgKWLwzwsQ5cVJBEMw89c2V0sHa4yuI5rr79msRgZT KCD7wa1Hyp7s/r+ylHhjpqrZwViOPU7tAGZ3IkkJ2SMI e/h+FGiwXXhr769EHbVE/PqvdbpcsgsDqFu0K2oqY70u SxnsLB8uVKYlzjG+UIoQzefBluQl ) ; key id = 62910 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Nov 27 18:18:30 2013 ;; MSG SIZE rcvd: 839 |
برای وجود رکورد RRSIG آن را بررسی کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
dig A example.com. @localhost +noadditional +dnssec +multiline ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> A example.com. @localhost +noadditional +dnssec +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32902 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 5 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 86400 IN A 93.184.216.119 example.com. 86400 IN RRSIG A 7 2 86400 20131227171405 ( 20131127171405 40400 example.com. JCoL8L7As1a8CXnx1W62O94eQl6zvVQ3prtNK7BWIW9O lir/4V+a6c+0tbt4z4lhgmb0sb+qdvqRnlI7CydaSZDb hlrJA93fHqFqNXw084YD1gWC+M8m3ewbobiZgBUh5W66 1hsVjWZGvvQL+HmobuSvsF8WBMAFgJgYLg0YzBAvwHIk 886be6vbNeAltvPl9I+tjllXkMK5dReMH40ulgKo+Cwb xNQ+RfHhCQIwKgyvL1JGuHB125rdEQEVnMy26bDcC9R+ qJNYj751CEUZxEEGI9cZkD44oHwDvPgF16hpNZGUdo8P GtuH4JwP3hDIpNtGTsQrFWYWL5pUuuQRwA== ) ;; AUTHORITY SECTION: example.com. 86400 IN NS master.example.com. example.com. 86400 IN NS slave.example.com. example.com. 86400 IN RRSIG NS 7 2 86400 20131227171405 ( 20131127171405 40400 example.com. hEGzNvKnc3sXkiQKo9/+ylU5WSFWudbUc3PAZvFMjyRA j7dzcVwM5oArK5eXJ8/77CxL3rfwGvi4LJzPQjw2xvDI oVKei2GJNYekU38XUwzSMrA9hnkremX/KoT4Wd0K1NPy giaBgyyGR+PT3jIP95Ud6J0YS3+zg60Zmr9iQPBifH3p QrvvY3OjXWYL1FKBK9+rJcwzlsSslbmj8ndL1OBKPEX3 psSwneMAE4PqSgbcWtGlzySdmJLKqbI1oB+d3I3bVWRJ 4F6CpIRRCb53pqLvxWQw/NXyVefNTX8CwOb/uanCCMH8 wTYkCS3APl/hu20Y4R5f6xyt8JZx3zkZEQ== ) ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 28 00:01:06 2013 ;; MSG SIZE rcvd: 1335 |
پیکربندی Master Server به پایان رسیده است.
پیکربندی DNSSEC Slave
برای این منظور نیاز است خطهای زیر را به فایل کانفیگ اضافه نمایید.
1 2 3 |
dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; |
و تنظیمات file
را در zone { }
تغییر دهید.
1 2 3 4 5 6 |
zone "example.com" IN { type slave; file "example.com.zone.signed"; masters { 1.1.1.1; }; allow-notify { 1.1.1.1; }; }; |
BIND را دوباره بارگذاری کنید.
1 |
service named reload |
بررسی کنید که آیا فایل جدیدی از .signed
داخل ZONE وجود دارد یا خیر.
1 2 3 4 |
[root@slave ~]# ls -l /var/named/slaves/ total 16 -rw-r--r-- 1 named named 472 Nov 27 17:25 example.com.zone -rw-r--r-- 1 named named 9180 Nov 27 18:29 example.com.zone.signed |
این بخش هم تمام شد و میتوانید مانند بخش بالا با dig آن را بررسی نمایید.
پیکربندی رکوردهای DS با استفاده از register
وقتی که کامند dnssec-signzone
را خارج از فایل های .signed
zone اجرا میکنید. یک فایل با نام dsset-zagrio.com
نیز ساخته میشود. که این فایل شامل رکوردهای DS میشود.
1 2 3 |
root@master:/var/cache/bind# cat dsset-example.com. example.com. IN DS 62910 7 1 1D6AC75083F3CEC31861993E325E0EEC7E97D1DD example.com. IN DS 62910 7 2 198303E265A856DE8FE6330EDB5AA76F3537C10783151AEF3577859F FFC3F59D |
اینها در کنترل پنل رجیستر دامین وارد شدهاند. تصاویر زیر این روند را برای سایت GoDaddy نشان میدهد.
وارد کنترل پنل رجیستر دامنهی خود شوید. دامنه خود را انتخاب کنید. گزینه manage DS records را انتخاب کنید.
این ها نیز بکاپ ما در dsset-example.com
میباشد.
DS record 1:
Key tag: 62910
Algorithm: 7
Digest Type: 1
Digest: 1D6AC75083F3CEC31861993E325E0EEC7E97D1DD
DS record 2:
Key tag: 62910
Algorithm: 7
Digest Type: 2
Digest: 198303E265A856DE8FE6330EDB5AA76F3537C10783151AEF3577859FFFC3F59D
رکورد دوم dsset-example.com
دارای اسپیس داخل digest میباشد. ولی زمانی که آن را import کنید باید آن را حذف نمایید.
چند دقیقه طول میکشد تا تغییرات ذخیره شوند. بعد از تایید میتوانید با سرویسهای آنلاینی مانند سرویسهای زیر DNSSEC خود را بررسی کنید.
http://dnssec-debugger.verisignlabs.com/
http://dnsviz.net/
سایت اول بسیار ساده است. اما سایت دوم به صورت ویژوآل و تصویری به شما نشان میدهد. در زیر تصویری از سایت اول قرار گرفته است.
خط اولی که با قرمز نشان داده شده Key tag مقدار DS رکوردها را نشان میدهد. خط دوم مقدار key id که مربوط به ZSK میباش را نشان میدهد.
بدون دیدگاه