كيفية إعداد وتهيئة بايند كخادم (نظام أسماء النطاقات) خاص للشبكة الخاصة

إعداد وتهيئة بايند كخادم (نظام أسماء النطاقات) خاص للشبكة الخاصة DNS

مقدمة

Bind (Berkeley Internet Name Domain) هو برنامج مفتوح المصدر يقوم بتنفيذ بروتوكولات نظام أسماء النطاقات (DNS) للإنترنت. إنه البرنامج الأكثر استخدامًا على نطاق واسع لخوادم DNS على الإنترنت.

إعداد Bind كخادم DNS خاص للشبكة يوفر عددًا من المزايا:

  • يسمح بترجمة أسماء المضيف إلى عناوين IP للآلات على الشبكة الخاصة دون الاعتماد على خادم DNS خارجي
  • يتيح لك سيطرة وتخصيص أكبر على نطاق DNS الخاص الخاص بك
  • يحسن الأمان والخصوصية من خلال تجنب استعلامات DNS الذاهبة إلى الخوادم الخارجية
  • يعزز الموثوقية من خلال الحد من الاعتماد على خوادم DNS الخارجية

في هذا الدليل ، سنغطي الخطوات اللازمة لتثبيت وتهيئة وإعداد Bind كخادم DNS ذاكرة تخزين مؤقت وسلطة على شبكة خاصة.

المتطلبات الأساسية

قبل البدء بإعداد Bind ، نحتاج إلى التأكد من توفر ما يلي:

  • خادم لينكس مع تثبيت نظام لينكس مثل أوبونتو20.04 /22.04 أو دبيان11/12 أو CentOS 7/8 إلخ.
  • يجب أن يكون للجهاز اللينكس عنوان IP ثابت واتصال شبكة على الشبكة الخاصة.
  • اسم النطاق الذي تريد استخدامه لشبكتك الخاصة. سيكون هذا بمثابة النطاق الجذر في تكوين Bind. على سبيل المثال ، إذا اخترت home.net كنطاقك ، فسيكون خادم DNS الخاص بك مسؤولاً عن home.net وأي نطاقات فرعية تحته مثل server1.home.net و printers.home.net إلخ.

تثبيت Bind

Bind متاح في مستودعات التثبيت الافتراضية لمعظم توزيعات لينكس.

أوبونتو / دبيان

في أوبونتو أو دبيان ، قم بتثبيت Bind باستخدام apt:

$ sudo apt update
$ sudo apt install bind9 bind9utils

سيقوم هذا بتثبيت Bind 9 وبعض الأدوات مثل dig و nslookup إلخ.

CentOS / RHEL

في CentOS أو RHEL ، قم بتثبيت Bind باستخدام yum:

$ sudo yum update  
$ sudo yum install bind bind-utils

مرة أخرى سيقوم هذا بتثبيت حزم bind9 والأدوات.

التحقق من التثبيت

للتحقق من تثبيت Bind:

$ dig -v

يجب أن يعرض هذا إصدار Bind الذي تم تثبيته الآن:

;; BIND version: 9.11.3-1ubuntu1.2-Ubuntu 

هذا يؤكد أن Bind مثبت وجاهز للتكوين.

يمكن بعد ذلك الانتقال إلى تكوين الدليل كما هو موضح. أخبرني إذا كنت ترغب في إضافة أي تفاصيل أخرى إلى قسم التثبيت!

التكوين الأساسي لـ Bind

ملفات التكوين الرئيسية لـ Bind هي:

  • /etc/bind/named.conf – ملف تكوين Bind الرئيسي الذي يتضمن جميع ملفات التكوين الأخرى
  • /etc/bind/named.conf.options – خيارات عامة لـ Bind
  • /etc/bind/named.conf.local – تكوين لخادم DNS المحلي نفسه
  • /etc/bind/db.root – ملف تلميحات الجذر يشير إلى خوادم الجذر DNS
  • /var/cache/bind – الدليل العامل لـ Bind مع الذاكرة المؤقتة والبيانات الأخرى

دعونا نلقي نظرة على بعض الخيارات الرئيسية التي نحتاج إلى تكوينها في هذه الملفات.

في named.conf.options:

options {
        directory "/var/cache/bind";
        
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        allow-query { any; };
        
        dnssec-validation auto;
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };  
};

هذا يقوم بتعيين الدليل العامل لـ Bind ، ويكوّن خوادم DNS العامة لشركة جوجل كموجّهات لإجراء الاستعلامات الخارجية ، ويسمح بالاستعلامات من أي عنوان IP ، ويمكّن التحقق من DNSSEC ، ويستمع على كل من عناوين IPv4 و IPv6.

في named.conf.local ، قم بتكوين منطقة الجذر الخاصة بك وتفاصيل خادم DNS المحلي:

// تعريف المنطقة الجذرية  
zone "home.net" IN {
        type master;
        file "/etc/bind/db.home.net"; 
};
// إعلان خادم DNS المحلي نفسه
zone "dns1.home.net" {
        type master;
        file "/etc/bind/db.dns1.home.net";
};

هذا يعرّف home.net كمنطقة جذر مهيأة كمنطقة ماستر ، مما يعني أن خادم DNS الخاص بنا سيكون الخادم المعتمد لهذا المجال. سيتم تحميل تفاصيل المنطقة من الملف db.home.net.

كما نضيف إعلان منطقة لاسم خادم DNS المحلي dns1.home.net مع تفاصيله في ملف db.dns1.home.net.

تكوين المنطقة الجذرية

بعد ذلك ، نحتاج إلى تعريف تفاصيل منطقتنا الجذرية home.net في ملف db.home.net:

$TTL    604800
@       IN      SOA     dns1.home.net. admin.home.net. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      dns1.home.net. 
@       IN      A       192.168.1.100

هذا يقوم بتعيين TTL الافتراضي ، وتسجيل SOA الذي يحدد خصائص المنطقة ، وخادم DNS الخاص بنا كخادم اسم لـ home.net وعنوان IP الخاص به.

بالنسبة لخادم DNS المحلي ، يكون ملف db.dns1.home.net:

$TTL    604800
@       IN      SOA     dns1.home.net. admin.home.net. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; 
@       IN      NS      dns1
@       IN      A       192.168.1.100

هذا يكوّن سجلات SOA و A لخادم DNS المحلي الخاص بنا.

تكوين التوجيه المتكرر

في الشبكة الخاصة ، قد لا يكون بإمكان خادم DNS المحلي حل جميع أسماء المضيفين إلى عناوين IP بنفسه. في تلك الحالة ، نحتاج إلى تكوين توجيه متكرر لإرسال استعلامات DNS الخارجية إلى محللي DNS عامة.

يتم تعريف هذا في named.conf.options في وقت سابق باستخدام بيان forwarders. هنا نقوم بتكوين خوادم DNS العامة لشركة جوجل 8.8.8.8 و 8.8.4.4 للتعامل مع الاستعلامات الخارجية.

بهذه الطريقة ، إذا تلقى خادم DNS الخاص بنا استعلامًا لا يستطيع حله من مناطقه المحلية ، فسيقوم بتوجيهه بشكل متكرر إلى خوادم DNS الخارجية لإيجاد الإجابة.

تأمين خادم DNS

نظرًا لأن خادم DNS يوفر خدمات شبكة حساسة ، نحتاج إلى تأمينه مثل أي خادم آخر. وتشمل بعض الخطوات الرئيسية:

  • استخدام حساب مستخدم مخصص غير جذر لعملية Bind
  • تقييد الوصول إلى ملفات ومجلدات تكوين Bind
  • تكوين قواعد الجدار الناري للسماح فقط بحركة DNS على المنفذ 53 لكل من UDP و TCP
  • تمكين SELinux أو AppArmor للحصول على أمان إضافي
  • استخدام TLS لتشفير حركة DNS إذا لزم الأمر
  • إعداد التحديثات الديناميكية الآمنة باستخدام TSIG إذا احتاجت العملاء إلى تحديث سجلات DNS بشكل ديناميكي
  • تمكين التحقق من صحة DNSSEC لتعزيز أمن بيانات DNS
  • Configure rate-limiting in named.conf.options to prevent DNS amplification attacks

إليك بعض قواعد الجدار الناري للسماح فقط بحركة DNS:

# السماح باستعلامات DNS
$ iptables -A INPUT -p udp --dport 53 -j ACCEPT 
$ iptables -A INPUT -p tcp --dport 53 -j ACCEPT
# السماح بتحويلات المنطقة  
$ iptables -A INPUT -p tcp --dport 53 -m state --state ESTABLISHED -j ACCEPT
# السماح بالاستجابات
$ iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT

اختبار الإعداد

بمجرد تثبيت Bind وإتمام التكوين الأساسي ، يمكننا تشغيل الخدمة والتحقق من أنها تعمل بشكل صحيح.

على أنظمة Systemd ، قم بتشغيل:

# systemctl start bind9  
# systemctl enable bind9

على أنظمة init.d ، قم بتشغيل:

# service bind9 start
# chkconfig bind9 on 

تحقق من الحالة باستخدام:

# systemctl status bind9
# service bind9 status 

يجب أن تكون خدمة Bind نشطة وقيد التشغيل.

الآن يمكننا اختبار البحث باستخدام أوامر dig و nslookup و host:

# dig @192.168.1.100 home.net
# nslookup dns1.home.net 192.168.1.100
# host google.com 192.168.1.100

يجب أن يعيد الاستعلام الأول سجلات SOA و NS لـ home.net. ويجب أن يعرض الثاني سجل A لـ dns1.home.net. والأخير هو استعلام متكرر لـ google.com والذي يجب أن يعيد عنوان IP الخارجي بعد التوجيه إلى خادم Google DNS.

إذا كانت كل هذه تعمل بشكل جيد ، فإن خادم DNS الخاص بك مهيأ بشكل صحيح لإجراء البحث الأساسي عن DNS والتوجيه!

تكوين المناطق للشبكات المحلية

في هذه المرحلة ، لا يعرف خادم DNS الخاص بنا سوى منطقة الجذر home.net مع تفاصيل خادم DNS المحلي. نحتاج إلى إضافة المزيد من المناطق لتوفير تسمية إجراء البحث لشبكتنا الخاصة.

دعنا نفترض أن لدينا الشبكة 192.168.1.0/24 مع بعض المضيفين المحددين:

  • 192.168.1.100 – خادم DNS نفسه dns1.home.net
  • 192.168.1.101 – خادم ويب باسم web1.home.net
  • 192.168.1.102 – خادم قاعدة بيانات db1.home.net
  • 192.168.1.103 – خادم ملفات files.home.net

يمكننا إضافة كل من هذه الخوادم كسجل A داخل منطقة home.net نفسها في db.home.net:

web1     IN  A 192.168.1.101
db1      IN  A 192.168.1.102
files    IN  A 192.168.1.103 

بعد إعادة تحميل خدمة Bind ، يمكننا الآن البحث عن هذه المضيفين والحصول على عنوان IP:

# dig @192.168.1.100 web1.home.net
# nslookup db1.home.net 192.168.1.100
# host files.home.net 192.168.1.100

بدلاً من إضافة جميع المضيفين في المنطقة الجذرية ، يمكننا أيضًا تكوين منطقة منفصلة جديدة لشبكتنا الداخلية.

قم بإضافة هذا التعريف المنطقة إلى named.conf.local:

zone "1.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/db.192";
};

هنا نعرّف منطقة بحث عكسية لعناوين IP تحت 192.168.1.0/24 معيّنة إلى نطاق .arpa.

ملف المنطقة /etc/bind/db.192:

$TTL    604800
@       IN      SOA     home.net. admin.home.net. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL  
;
@       IN      NS      dns1.  
100     IN      PTR     dns1.home.net.
101     IN      PTR     web1.home.net. 
102     IN      PTR     db1.home.net.
103     IN      PTR     files.home.net.

وهذا يحدد عملية التعيين العكسية من عناوين IP إلى أسماء للمضيفين في شبكة 192.168.1.0/24.

بعد إعادة تحميل Bind ، ستعمل البحوث العكسية:

# dig -x 192.168.1.101 @192.168.1.100  
# nslookup -query=PTR 192.168.1.102 192.168.1.100
# host 192.168.1.103 192.168.1.100

يمكن إضافة ملفات مناطق إضافية مماثلة لأي شبكات فرعية خاصة ومضيفين مهيئين على الشبكة.

وهذا يوفر خدمة DNS محلية معتمدة دون الاعتماد على أي خوادم DNS خارجية.

التحديثات الديناميكية للمنطقة

في البيئات الأكبر ، يمكن أن يكون الحفاظ على سجلات DNS لبنية تحتية متغيرة أمرًا صعبًا. يوفر Bind طريقتين لتحديث مناطق DNS بشكل ديناميكي – DNS الديناميكي (DDNS) والتحديثات الموقّعة DNSSEC.

مع DDNS ، يمكن للعملاء تحديث سجلات DNS الخاصة بهم مباشرةً داخل منطقة عن طريق إرسال طلبات UPDATE خاصة إلى خادم DNS. هذا أبسط في الإعداد ولكنه غير آمن.

تستخدم التحديثات الموقعة DNSSEC توقيعات معاملات (TSIG) لتوقيع طلبات التحديث توقيعًا تشفيريًا. لا يقبل خادم DNS إلا التحديثات ذات التوقيع الصالح.

فيما يلي مثال على تمكين تحديثات DDNS للعملاء في الشبكة الفرعية 192.168.1.0/24:

في named.conf.local:

zone "home.net" {
     type master;
     allow-update { 192.168.1/24; };  
     file "/etc/bind/db.home.net";
};

تمكّن خيارات allow-update التحديثات من الشبكة الفرعية.

يمكن للآلات العميل استخدام أمر nsupdate لإضافة/تعديل/حذف السجلات. على سبيل المثال:

# nsupdate
> update add web2.home.net 3600 A 192.168.1.105  
> send

سيضيف هذا سجل A لـ web2.home.net. يمكن حذف السجلات عن طريق تحديد اسمها وقيمة ttl فقط.

بالنسبة للتحديثات الموقعة TSIG ، يشترك كل من الخادم والعملاء في مفتاح TSIG مشترك. يمكن إنشاء المفتاح باستخدام dnssec-keygen. يوقّع العملاء حزمة UPDATE بتوقيع TSIG.

على الخادم ، يحدد ملف named.conf مفتاح TSIG ويمكّن التحديثات الموقّعة:

key "tsig-key" {
     algorithm hmac-sha256;
     secret "b3BlbnNlc2FtZTAwMA==";
};
  
zone "home.net" {
    type master;
    allow-update { key tsig-key; };
    ... 
}

يمكن للعملاء استخدام نفس المفتاح لتوقيع طلبات التحديث. هذا يضمن إمكانية تحديث سجلات DNS بشكل ديناميكي فقط من قبل المضيفين المصرّح لهم.

DNS منقسم الأفق

في بعض الأحيان ، قد تعيد خوادم DNS الداخلية الخاصة نتائج مختلفة عن DNS العامة الخارجية لتوفير تكوين DNS منقسم. وهذا يُعرف باسم DNS منقسم الأفق.

على سبيل المثال ، webserver.company.com داخليًا يمكن أن يحل إلى عنوان IP الخاص 192.168.1.101 في حين أنه خارجيًا يحل إلى العنوان IP العام 1.2.3.4.

يمكننا تحقيق ذلك مع Bind عن طريق تعريف منطقة company.com كمنطقة توجيه لعناوين IP العامة وكمنطقة عكسية منفصلة لعناوين IP الداخلية.

في named.conf.local:

// منطقة التوجيه
zone "company.com" {
    type master; 
    file "/etc/bind/db.company.com.public"; 
}
// منطقة عكسية  
zone "1.168.192.in-addr.arpa"{
   type master;
   file "/etc/bind/db.company.com.private"; 
}

يسمح هذا بتعريف سجلات A مختلفة لـ webserver.company.com في ملفات منطقة العامة والخاصة. يمكن تكوين خادم BIND للاستماع على واجهات شبكة مختلفة لتقديم البيانات الصحيحة.

يعد DNS المنقسم مفيدًا للأمان والعزل والتحكم في السياسات بين بيانات DNS العامة والخاصة.

الذاكرة المؤقتة والاستباق

تمكين الذاكرة المؤقتة والاستباق على خادم DNS يمكن أن يحسن الأداء. بشكل افتراضي ، يقوم Bind بتخزين نتائج الاستعلام في الذاكرة المؤقتة لتحسين سرعة الاستعلام.

يمكننا ضبط قيم TTL للذاكرة المؤقتة في named.conf.options:

dnssec-validation auto;
recursion yes;
cache-size 500m;  
cache-file "/var/cache/bind/db.cache";
prefetch 2;
prefetch-key no-edns;
dnssec-accept-expired yes;  
max-cache-ttl 600;        # 10 دقائق
max-ncache-ttl 90;        # 1.5 دقيقة 

هذا يمكّن التخزين المؤقت لما يصل إلى 500 ميغابايت من البيانات على القرص ، ويحدد مستوى الاستباق ، وحدود مدة صلاحية الذاكرة المؤقتة ويسمح باستخدام السجلات المنتهية الصلاحية أثناء تحديث بيانات DNSSEC.

يحسن الاستباق عملية الاستعلام للنطاقات الشقيقة عن طريق استعلام السجلات التابعة المطلوبة استباقيًا.

التسجيل والمراقبة

مثل أي خادم آخر ، يجب مراقبة خادم DNS عن كثب. يوفر Bind إمكانيات تسجيل جيدة يمكن إرسالها إلى خادم تسجيل مركزي.

في named.conf.options:

logging {
        channel query_log {
                file "/var/log/query.log" versions 3 size 20m; 
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        category queries { query_log; };
};

المقاييس الرئيسية التي يجب مراقبتها هي:

  • معدلات الاستعلام وأوقات الاستجابة
  • استخدام الذاكرة المؤقتة ونسب الإصابة
  • أخطاء التحقق من صحة DNSSEC
  • فشل التحديثات أو تحويلات المنطقة
  • أحداث التقييد المعدل أو انتهاكات الوصول
  • أخطاء الشبكة ومهل الانتظار

دمج خادم DNS مع نظام مراقبة يوفر رؤية مهمة حول عمليات وأداء DNS.

الاختبار والتحقق

بمجرد نشر خادم DNS وتهيئته ، يجب علينا اختباره بشكل شامل لاكتشاف أي مشاكل:

  • استخدم أدوات البحث مثل dig و nslookup و host لاختبار استعلامات سجلات مختلفة
  • أجر بحوثًا عكسية للتأكد من تعريف سجلات PTR بشكل صحيح
  • تحقق من عمل تحويلات المنطقة بأمان للخوادم الثانوية
  • اختبر التحديثات الديناميكية عن طريق إضافة/حذف سجلات باستخدام nsupdate
  • تحقق من تكوينات DNS منقسمة الأفق تعيد النتائج الداخلية والخارجية الصحيحة
  • تأكد من عمل التحقق من صحة DNSSEC للمناطق الموقعة
  • اختبر أداء خادم DNS باستخدام أدوات مثل dnsperf و namebench
  • تحقق من السجلات وعمليات المراقبة أثناء الاختبار لاكتشاف أي أخطاء
  • امسح بحثًا عن مشاكل الأمان مثل إصدارات البرامج المعرضة للخطر ، قوة التشفير
  • أجر اختبار اختراق لتحديد وإصلاح نقاط الضعف

يقلل الاختبار والتحقق الشاملان لخادم DNS من المخاطر ويوفران الثقة في توفر وأداء وأمن ودقة بنية DNS.

ملخص

في هذا الدليل المفصل ، غطينا كيفية تثبيت وتهيئة وإعداد Bind 9 كخادم DNS محلي للشبكات الخاصة.

قمنا بتثبيت حزم Bind ، وتكوين ملفات named.conf الأساسية ، وإعداد التوجيه الأمامي ، وقوائم التحكم في الوصول ، وخيارات أخرى. أضفنا مناطق البحث الأساسية والعكسية لنطاقات ومضيفي الشبكة الداخلية. كما تم تكوين التحديثات الديناميكية و DNS منقسم الأفق والذاكرة المؤقتة والتسجيل والمراقبة.

يوفر نشر Bind كخادم DNS محلي خدمات تسمية مركزية لبيئتك الخاصة. إنه يوفر مزيدًا من التحكم والتخصيص والخصوصية والأمان والاستقلالية عن بنيتك الأساسية لـ DNS الخاصة مقارنة بالاعتماد فقط على مزودي الخدمة الخارجيين.

بالطبع ، من الضروري توفير أمان صارم ، ومراقبة قوية ، واختبار ، واحتياطي ، وصيانة مناسبة للحفاظ على خدمات DNS الخاصة بك قيد التشغيل بشكل موثوق. ولكن مع تكويناته المرنة ، يمكن لـ Bind تلبية متطلبات DNS المحلية حتى للشبكات الخاصة الكبيرة والنشر المخصص.

LEAVE A COMMENT