এই নিবন্ধে, আমরা দেখাব কীভাবে উইন্ডোজ সার্ভারে চলমান একটি DNS সার্ভারে সমস্ত ব্যবহারকারীর প্রশ্নের জন্য DNS লগিং সক্ষম করা যায়, কীভাবে DNS লগগুলিকে পার্স এবং বিশ্লেষণ করা যায়। আমি এই কাজের মুখোমুখি হয়েছিলাম যখন আমাকে একটি শাখা অফিসে একটি পুরানো অ্যাক্টিভ ডিরেক্টরি ডোমেন কন্ট্রোলার ডিকমিশন করতে হয়েছিল এবং কোন ডিভাইসগুলি এখনও ডিএনএস সার্ভার ব্যবহার করছে তা বুঝতে আমার প্রয়োজন ছিল। একটি DNS লগ সক্ষম করার পরে এবং এটি বিশ্লেষণ করার পরে, আমি ডিভাইসগুলি খুঁজে পেতে এবং অন্যান্য DNS সার্ভারগুলি ব্যবহার করার জন্য তাদের পুনরায় কনফিগার করতে সক্ষম হয়েছি। এছাড়াও, এই পদ্ধতিটি আপনাকে আপনার সক্রিয় ডিরেক্টরি নেটওয়ার্কে (দূষিত URL, বটনেট হোস্ট, ইত্যাদি অ্যাক্সেস করা) সন্দেহজনক কার্যকলাপ সহ হোস্টগুলি খুঁজে পেতে সহায়তা করবে৷
অবশ্যই, পোর্ট 53-এ ট্র্যাফিক ক্যাপচার করতে আপনি আপনার DNS হোস্টে Wireshark, Microsoft Network Monitor বা pktmon ইনস্টল করতে পারেন, তবে Windows সার্ভারে বিল্ট-ইন DNS ক্যোয়ারী লগিং ব্যবহার করা সহজ।
ডিফল্টরূপে, উইন্ডোজ সার্ভারে ডিএনএস লগিং নিষ্ক্রিয় থাকে। এটি সক্ষম করতে:
- DNS ম্যানেজার খুলুন স্ন্যাপ-ইন (
dnsmgmt.msc
) এবং আপনি যে DNS সার্ভার চান তার সাথে সংযোগ করুন; - এর বৈশিষ্ট্যগুলি খুলুন এবং ডিবাগ লগিং-এ যান৷ ট্যাব;
- সক্ষম করুন ডিবাগ করার জন্য প্যাকেট লগ করুন বিকল্প;
- তারপর আপনি লগিং বিকল্পগুলি কনফিগার করতে পারেন:ডিএনএস প্যাকেটের দিকনির্দেশ, একটি প্রোটোকল (ইউডিপি এবং/অথবা টিসিপি), প্যাকেটের প্রকারগুলি (সাধারণ ডিএনএস প্রশ্ন, আপডেট, বা বিজ্ঞপ্তিগুলি) নির্বাচন করুন;
- IP ঠিকানা অনুসারে প্যাকেটগুলি ফিল্টার ব্যবহার করা বিকল্প, আপনি ইনকামিং বা আউটগোয়িং প্যাকেটগুলি লগ করার জন্য আইপি ঠিকানাগুলি নির্দিষ্ট করতে পারেন (এটি লগের আকার উল্লেখযোগ্যভাবে হ্রাস করতে দেয়);
- লগ ফাইল পাথ এবং নাম-এ বক্সে, আপনি যে টেক্সট ফাইলটিতে সমস্ত ইভেন্ট লগ করতে চান তার নাম উল্লেখ করুন। ডিফল্টরূপে, DNS লগের আকার 500MB-তে সীমাবদ্ধ। এটি পৌঁছানোর পরে, পুরানো DNS লুকআপ ইভেন্টগুলি নতুনগুলির সাথে ওভাররাইট করা হবে৷
এছাড়াও, আপনি PowerShell ব্যবহার করে DNS ক্যোয়ারী লগিং সক্ষম করতে পারেন বা বর্তমান সেটিংস পেতে পারেন:
Get-DnsServerDiagnostics
মনে রাখবেন যে অত্যন্ত লোড করা Windows DNS হোস্টে, DNS ক্যোয়ারী লগিং CPU, RAM এবং স্টোরেজের উপর অতিরিক্ত লোড সৃষ্টি করতে পারে (ডিস্কের কার্যক্ষমতা অবশ্যই যথেষ্ট হতে হবে)।
তারপর যেকোনো কম্পিউটার থেকে আপনার সার্ভারের বিরুদ্ধে একটি DNS ক্যোয়ারী চালান। উদাহরণস্বরূপ, যদি উইন্ডোজ সার্ভারে চলমান আমাদের DNS হোস্টের IP ঠিকানা হয় 192.168.13.10:
nslookup woshub.com 192.168.13.10
অথবা PowerShell ব্যবহার করে DNS ঠিকানা সমাধান করার চেষ্টা চালান:
Resolve-DnsName -Name woshub.com -Server 192.168.13.10
একটি DNS লুকআপ ক্যোয়ারী অনুরোধ করা হোস্টের ক্লায়েন্ট আইপি ঠিকানা ফিরিয়ে দিয়েছে।
আসুন নিশ্চিত করি যে প্রশ্নটি DNS সার্ভার লগে উপস্থিত হয়েছে।
এটি করতে, ক্লায়েন্ট আইপি ঠিকানা (192.168.13.130
দ্বারা পাঠ্য লগ ফাইলটি অনুসন্ধান করুন। ) আপনি নোটপ্যাডে লগ ফাইল খুলতে পারেন বা পাওয়ারশেল ব্যবহার করে গ্রেপ করতে পারেন:
get-content "C:\Logs\dc01dns.log" | Out-String -Stream | Select-String "192.168.13.130"
এখানে ইভেন্টের উদাহরণ:
11/17/2021 6:00:00 AM 0D0C প্যাকেট 00000272D98DD0B0 UDP Rcv 192.168.13.130 0002 Q [0001 D NOERROR] A (8)wushub(20>)আপনি দেখতে পাচ্ছেন, একটি নাম
ফাইলের শুরুতে সমস্ত ক্ষেত্র বর্ণনা করা হয়েছে:(8)woshub(2)com(0)
সমাধানের জন্য একটি DNS ক্যোয়ারী গৃহীত হয়েছে (rcv
) ক্লায়েন্ট থেকে192.168.13.130
UDP
এর উপরে , তারপর DNS সার্ভার সফলভাবে (NOERROR
) এতে সাড়া দিয়েছে (snd
)।ক্ষেত্র # তথ্যের মান------------------ ------1 তারিখ2 সময়3 থ্রেড ID4 প্রসঙ্গ5 অভ্যন্তরীণ প্যাকেট শনাক্তকারী6 UDP/TCP নির্দেশক7 পাঠান/প্রাপ্তি নির্দেশক8 রিমোট IP9 Xid (হেক্স) 10 ক্যোয়ারী/প্রতিক্রিয়া R =রেসপন্সব্রাঙ্ক =Query11 Opcode Q =স্ট্যান্ডার্ড QueryN =NotifyU =আপডেট? =অজানা 12 পতাকা (হেক্স) 13 ফ্ল্যাগ (চার কোড) A =কর্তৃত্বমূলক উত্তরT =ছেঁটে দেওয়া প্রতিক্রিয়াD =Recursion DesiredR =Recursion Available14 ResponseCode15 প্রশ্নের ধরন16 প্রশ্নের নাম
একটি নির্দিষ্ট বিন্যাসের কারণে, এই ধরনের একটি DNS লগ ফাইল ম্যানুয়ালি পার্স করা এবং বিশ্লেষণ করা কঠিন। তাই আপনাকে Get-DNSDebugLog.ps1 ব্যবহার করে DNS ক্যোয়ারী লগটিকে আরও সুবিধাজনক ফর্ম্যাটে রূপান্তর করতে হবে স্ক্রিপ্ট।
এই PowerShell স্ক্রিপ্টটি আমার নয়, তবে এটি বর্তমানে TechNet Scriptcenter-এ উপলব্ধ নয়, তাই আমি এটিকে আমার GitHub সংগ্রহস্থলে সংরক্ষণ করেছি:https://github.com/maxbakhub/winposh/blob/main/Get-DNSDebugLog.ps1।
ফাইলটি আপনার ডিস্কে ডাউনলোড করুন। তারপর PowerShell স্ক্রিপ্টগুলিকে বর্তমান কনসোল সেশনে চালানোর অনুমতি দিন:
Set-ExecutionPolicy -Scope Process Unrestricted
Get-DNSDebugLog.ps1 থেকে আপনার সেশনে ফাংশন আমদানি করুন:
. C:\ps\Get-DNSDebugLog.ps1
তারপর DNS লগকে আরও সুবিধাজনক ফর্ম্যাটে রূপান্তর করুন:
Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | format-table
অথবা আপনি Excel-এ আরও বিশ্লেষণের জন্য ফলাফলটি একটি CSV ফাইলে রপ্তানি করতে পারেন (অথবা আপনি পাওয়ারশেল থেকে সরাসরি একটি এক্সেল ফাইল অ্যাক্সেস করতে পারেন এবং আপনি যে DNS প্রশ্নগুলি করতে চান তা লিখতে পারেন)।
Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | Export-Csv C:\log\ProperlyFormatedDNSLog.csv –NoTypeInformation
আপনি ফাইলটি এক্সেলে রপ্তানি করতে পারেন এবং DNS প্রশ্নগুলি বিশ্লেষণ করতে এটি ব্যবহার করতে পারেন (ফাইলটিতে হোস্ট আইপি ঠিকানা এবং DNS নাম রয়েছে যা তারা আপনার DNS সার্ভার থেকে অনুরোধ করেছে)।
এছাড়াও, আপনি লগ পার্সার 2.2 ব্যবহার করতে পারেন (https://docs.microsoft.com/en-us/archive/blogs/secadv/parsing-dns-server-log-to-track-active-clients) DNS লগ ফাইল পার্স এবং বিশ্লেষণ করতে। উদাহরণস্বরূপ, নীচের কমান্ডটি প্রতিটি IP ঠিকানা থেকে DNS প্রশ্নের সংখ্যা প্রদর্শন করবে:
LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 "SELECT field9 AS IP, REVERSEDNS(IP) AS Name, count(IP) as QueryCount FROM "C:\Logs\dc01dns.log" WHERE field11 = 'Q' GROUP BY IP ORDER BY QueryCount DESC"
এই উদাহরণে, আমরা DNS লগ সংগ্রহ করতে টেক্সট ফাইল ব্যবহার করেছি। Windows Server 2012 এবং পরবর্তীতে আপনি DNS প্রশ্নগুলি সরাসরি ইভেন্ট ভিউয়ারে লগ করতে পারেন(
অবশ্যই, আপনি যদি একাধিক সার্ভারে DNS প্রশ্নগুলি লগ করতে চান, তাহলে স্প্লঙ্ক, ELK, Graylog, বা Azure Log Analytics-এর মতো লগ সংগ্রহ, সঞ্চয় এবং প্রক্রিয়া করার জন্য একটি বিশেষ সমাধান ব্যবহার করা বাঞ্ছনীয়৷Microsoft-Windows-DNS-Server/Audit
) কিন্তু আমার মতে, পাঠ্য DNS লগ বিশ্লেষণ করা অনেক সহজ।DNS ক্যোয়ারী লগ সক্রিয় করার পরে এবং এটি বিশ্লেষণ করার পরে, আমি ডিভাইসগুলির IP ঠিকানাগুলি খুঁজে পেয়েছি যেগুলি এখনও DNS সার্ভার ব্যবহার করছে এবং সেগুলিকে অন্য DNS সার্ভারগুলিতে পুনরায় কনফিগার করেছে৷ যদি পুরানো DC-তে কোনো FSMO ভূমিকা না থাকে, তাহলে আপনি এটিকে সরিয়ে দিতে পারেন (AD ব্যবহারকারী লগন ইভেন্টগুলি এখানে গুরুত্বপূর্ণ নয়)।