
एक स्वचालित, पुनरुत्पादनीय नेटवर्क सुरक्षा परीक्षण ढांचा जो Ansible और BATS का उपयोग करके एकाधिक दृष्टिकोणों से DNS, होस्ट उपलब्धता, खुले पोर्ट और TLS कॉन्फ़िगरेशन को सत्यापित करता है।
यह परियोजना Ansible का उपयोग करके BATS परीक्षण फ़ाइलें उत्पन्न करती है जो नेटवर्क बुनियादी ढांचे के बारे में सुरक्षा धारणाओं को सत्यापित करती हैं। परीक्षण प्रोब मशीनों ("प्रोबर नोड्स") से चलाए जाते हैं जिन पर Prober तैनात किया जाता है।
यह उपकरण स्वयं के नेटवर्क के पुनरुत्पादन योग्य, स्वचालित परीक्षण के लिए है। यह कई प्रोबर नोड्स को परीक्षण चलाने का समर्थन करता है, प्रत्येक का परीक्षण किए जा रहे नेटवर्क के बारे में अलग-अलग दृष्टिकोण होता है — उदाहरण के लिए, बाहरी क्षेत्र से एक दृश्य, और आंतरिक क्षेत्र से एक दृश्य, और DMZ के अंदर से एक दृश्य।
Prober का उपयोग उन नेटवर्कों की जांच करने के लिए करना जिनके लिए आप अधिकृत नहीं हैं, अवैध हो सकता है।
प्रोबर नोड्स पर तैनात करने के लिए Ansible मास्टर पर:
ansible (ज़ाहिर है!)python*-netaddr (GNU/Linux पर) / py*-netaddr (FreeBSD पर)प्रोबर नोड्स पर स्वयं:
bashsshnmapdig/kdigtestsslएक सिस्टम पर जहाँ आप परिणामों (*.tap फ़ाइलें) की समीक्षा कर रहे हैं, आप tappy स्थापित करना चाह सकते हैं। परिणाम प्रत्येक प्रोबर नोड पर स्थानीय git रिपॉजिटरी में रखे जाते हैं (डिफ़ॉल्ट रूप से, /var/run/prober/results/ में, कॉन्फ़िगरेशन विकल्पों के लिए नीचे देखें), प्रत्येक स्कैनिंग रन की समाप्ति तिथि के साथ टैग किए गए कमिट के साथ, ऐतिहासिक रिकॉर्ड और आसान तुलना के लिए।
Ansible का उपयोग प्रोबर नोड्स पर परीक्षण उत्पन्न करने के लिए किया जाता है। एक प्रोबर नोड कोई भी FreeBSD या GNU/Linux होस्ट हो सकता है, जब तक उस पर Prober की निर्भरताएँ स्थापित करना संभव है। इसे परीक्षण के लिए समर्पित होने की आवश्यकता नहीं है, लेकिन अनुशंसा की जाती है — एक उचित आकार के नेटवर्क का स्कैन घंटों लग सकता है, बहुत अधिक CPU का उपयोग करता है, और काफी ट्रैफ़िक उत्पन्न करता है।
विभिन्न निगरानी बिंदुओं (उदाहरण के लिए: आंतरिक नेटवर्क, DMZ, इंटरनेट) से अपने नेटवर्क की जाँच करने के लिए विभिन्न मशीनों पर Prober तैनात करना समझ में आता है।
प्रोबर नोड्स पर परीक्षण निर्देशिका में परीक्षण चलाने की सुविधा के लिए एक run-tests.sh स्क्रिप्ट बनाई जाती है। परीक्षण इस तरह से चलाए जाते हैं कि हर समय <simultaneous_tests_count> परीक्षण एक साथ चल रहे हों — यह चर मुख्य तरीका है जिससे प्रोबिंग स्कैन कितने संसाधनों का उपयोग करता है और कितनी बैंडविड्थ की आवश्यकता है, इसे नियंत्रित किया जाता है।
परीक्षण के परिणाम तब स्थानीय git रिपॉजिटरी में सहेजे जाते हैं, जिसमें कमिट को किसी दिए गए रन की समाप्ति तिथि (जो कुछ लंबे प्रोबिंग रन के लिए प्रारंभ तिथि से भिन्न हो सकती है) से टैग किया जाता है।
यदि केवल कुछ होस्ट से बड़े बुनियादी ढांचे से निपट रहे हैं, तो Mitogen जैसे उपकरण का उपयोग परीक्षण उत्पादन को नाटकीय रूप से गति देने के लिए समझ में आ सकता है।
Debian या FreeBSD सर्वर को प्रोबर नोड के रूप में उपयोग करने के लिए तैयार करें (इसे prober.example.com कहते हैं), सुनिश्चित करें कि आपके पास SSH पहुँच है और उस पर sudo कर सकते हैं।
उदाहरण इन्वेंट्री को inventories/test/ के रूप में कॉपी करें।
उस test इन्वेंट्री में:
group_vars/all.yml संपादित करें और zone_nameserver, zone_domains, address_blocks को अपनी पसंद के अनुसार सेट करें; मान लें कि आप example.com को जांचे जाने वाले एकमात्र डोमेन के रूप में जोड़ते हैंhosts फ़ाइल संपादित करें, अपने prober.example.com प्रोबर नोड को [prober-nodes] अनुभाग में कॉन्फ़िगर करें; मान लें कि आप tested_zone को test पर सेट करते हैं।उदाहरण ज़ोन कॉन्फ़िग को data/<tested_zone>.yml (हमारे मामले में: data/test.yml) के रूप में कॉपी करें और संपादित करें; न्यूनतम रूप से, tested_zone_settings.name कुंजी में tested_zone (यानी, test) होना चाहिए।
अपने DNS ज़ोन को निर्यात करें और इसे data/<dns_zone>.zone (हमारे मामले में: example.com) के रूप में सहेजें।
प्लेबुक चलाएँ:
ansible-playbook prober.yml -i inventories/test/ -vvv
इससे प्रोबर नोड पर परीक्षण उत्पन्न होंगे और उन्हें प्रति रात्रि 01:00 AM पर चलाने के लिए एक क्रॉनजॉब सेट होगा।
अब आप प्रोबर नोड में ssh कर सकते हैं और /opt/prober/ में उत्पन्न परीक्षणों का निरीक्षण कर सकते हैं। एक बार संतुष्ट होने पर, आप उन्हें /opt/prober/run_tests.sh निष्पादित करके चला सकते हैं। परिणाम /var/run/prober/results में सहेजे जाएंगे।
कॉन्फ़िगरेशन चर (probers.yml में परिभाषित):
tests_directory (डिफ़ॉल्ट: /opt/prober):
प्रोबर नोड्स पर वह निर्देशिका जहाँ परीक्षण फ़ाइलें (*.bats फ़ाइलें) उत्पन्न की जाती हैं।
results_repo_directory (डिफ़ॉल्ट: /var/run/prober/results):
परीक्षण परिणामों (*.tap फ़ाइलें) के लिए रिपॉजिटरी की निर्देशिका; वहाँ एक git रिपॉजिटरी आरंभ की जाती है और वास्तविक परिणामों के लिए एक tap/ उपनिर्देशिका बनाई जाती है; परिणाम git रिपॉजिटरी में प्रतिबद्ध किए जाते हैं, कमिट को yyyy-mm-dd प्रारूप में एक तारीख से टैग किया जाता है (उदाहरण के लिए, 19 मार्च, 2020 को समाप्त हुए परीक्षण के परिणामों वाला कमिट 2020-03-19 के रूप में टैग किया जाता है)।
simultaneous_tests_count (डिफ़ॉल्ट: 20):
एक साथ कितने परीक्षण चलाए जाते हैं।
prober_dev (डिफ़ॉल्ट: अपरिभाषित):
कुछ कार्यों को छोड़ें जो डेव मशीन पर समझ में नहीं आते (जैसे cron या zabbix सेट करना)।
ज़ोन ./data/<zone_name>.yml फ़ाइलों में परिभाषित होते हैं जिनमें शीर्ष कुंजी स्ट्रिंग "tested_zone_settings" होती है, जिसमें तब कुंजियाँ होती हैं:
name: ज़ोन का नाम, फ़ाइल नाम (बिना एक्सटेंशन) से मेल खाता है; उदाहरण के लिए: "internal", "external", "dmz"default (वैकल्पिक): इस ज़ोन के सभी होस्ट के लिए डिफ़ॉल्ट सेटिंग्स^" वर्ण से शुरू होती हैं) जो कई FQDN से मेल खाती हैंdefault कुंजी, प्रत्येक regex कुंजी और प्रत्येक डोमेन कुंजी में ये कुंजियाँ हो सकती हैं:
resolve: क्या होस्ट प्रासंगिक IP पते पर हल होना चाहिए (बूल true/false, या स्ट्रिंग "skip")ping: क्या होस्ट को ping का जवाब देना चाहिए (बूल true/false, या स्ट्रिंग "skip")ports: TCP और UDP पोर्टों की सूची जिन्हें खुलने की अनुमति है (उप-कुंजियाँ "tcp" और "udp", प्रत्येक में पूर्णांकों की एक सरणी जो खुले रहने की अनुमति वाले पोर्टों को परिभाषित करती है, या स्ट्रिंग "skip"), और TLS-सक्षम पोर्ट जिनकी गहन जाँच की जानी है (tls उप-कुंजी, जिसमें पोर्ट नंबरों को कुंजी के रूप में और TLS सेवा के प्रकार या शब्द "skip" को मान के रूप में युक्त dict होता है)ports: "skip" निम्नलिखित का संक्षिप्त रूप है:
ports:
tcp: "skip"
udp: "skip"
tls: "skip"
TLS सेवा प्रकार वही हैं जो testssl.sh -t/--starttls विकल्प के लिए समर्थन करता है, HTTPS परीक्षण (हेडर सहित) के लिए "https", या सामान्य TLS परीक्षण के लिए "tls"।tcp" कुंजी में भी खुले के रूप में चिह्नित न किया गया हो।skip: क्या होस्ट को पूरी तरह से छोड़ दिया जाना चाहिए (बूलियन)आप यहाँ एक उदाहरण कॉन्फ़िग देख सकते हैं।
ग्लोबल डिफ़ॉल्ट probers.yml में परिभाषित हैं। प्रत्येक जांचे गए होस्ट के लिए इन्हें तब प्रासंगिक ज़ोन डिफ़ॉल्ट के साथ combine किया जाता है, फिर regex कुंजियों के साथ जो किसी दिए गए होस्टनाम से मेल खाती हैं, और अंत में विशिष्ट होस्ट सेटिंग्स के साथ।
इसका मतलब है कि किसी दिए गए ज़ोन में विशिष्ट होस्ट सेटिंग्स regex मिलान की गई कुंजियों की सेटिंग्स पर प्राथमिकता लेती हैं, जो बदले में ज़ोन डिफ़ॉल्ट पर प्राथमिकता लेती हैं, जो बदले में ग्लोबल डिफ़ॉल्ट पर प्राथमिकता लेती हैं।