
मॉड्यूलर Bash टूलकिट जो CyberPatriot प्रतियोगिताओं के लिए Debian/Ubuntu सिस्टम को हार्डन करता है, लॉगिंग और बैकअप के साथ अकाउंट, फ़ायरवॉल, SSH, PAM, और सेवा हार्डनिंग को स्वचालित करता है।
प्रतियोगिता के समय दबाव में Debian/Ubuntu-परिवार के सिस्टम को हार्डन करने के लिए एक मॉड्यूलर Bash टूलकिट। CyberPatriot National Youth Cyber Defense Competition के कई सीज़न में बनाया और निखारा गया, हाल ही में 2025 सेमीफाइनल राउंड में Linux डिवीज़न में Platinum tier में स्थान प्राप्त किया।
यह एक सामान्य-उद्देश्य वाला अनुपालन फ्रेमवर्क नहीं है। यह छह घंटे के समयबद्ध अभ्यास के लिए एक चेकलिस्ट ऑटोमेटर है: यह Linux हार्डनिंग पास के स्क्रिप्ट-योग्य बहुमत को सही ढंग से, तेज़ी से, और idempotently करता है, जो कुछ भी छुआ उसे लॉग करता है, और निर्णय लेने वाले कॉल्स को चलाने वाले व्यक्ति पर छोड़ देता है।
CyberPatriot के Linux राउंड एक लाइव इमेज को एक रूब्रिक के विरुद्ध स्कोर करते हैं जो हार्डनिंग चरणों के एक काफी अनुमानित सेट को पुरस्कृत करता है -- अकाउंट हाइजीन, पासवर्ड पॉलिसी, फ़ायरवॉल कॉन्फ़िगरेशन, सर्विस एक्सपोज़र, फ़ाइल परमिशन, पैच लेवल -- एक कठोर समय सीमा के तहत, आमतौर पर बिना किसी पूर्व सूचना के कि वास्तव में कौन सी कमज़ोरियाँ लगाई गई थीं। उस चेकलिस्ट को हाथ से, सही ढंग से, उलटी गिनती के दौरान करना -- यही वह जगह है जहाँ टीमें टाइपो और भूल गए चरणों के कारण आसान अंक खो देती हैं, न कि अज्ञात सामग्री के कारण।
यह टूलकिट उसी दबाव में लिखे गए एक एकल मोनोलिथिक स्क्रिप्ट के रूप में शुरू हुआ। यह रिपॉज़िटरी उस स्क्रिप्ट का एक रीराइट है: वही चेकलिस्ट कवरेज, छोटे, एकल-उद्देश्य वाले मॉड्यूल में पुनर्गठित जो पढ़ने, टेस्ट करने, और स्वतंत्र रूप से तर्क करने में आसान हैं, जिसमें हर गैर-स्पष्ट निर्णय एक विशिष्ट CIS Benchmark अनुभाग या NIST SP 800-53 नियंत्रण से जुड़ा है (देखें सुरक्षा नियंत्रण और संदर्भ)।
flowchart TD
A[bin/harden.sh] --> B[lib/common.sh<br/>logging, backups, run wrapper]
A --> C[Service-role prompts<br/>or --config file]
A --> D[lib/packages.sh<br/>updates, attack-tool removal]
A --> E[lib/firewall.sh<br/>default-deny + ufw]
A --> F[lib/ssh.sh]
A --> G[lib/services.sh<br/>samba/ftp/mail/http/mysql/dns]
A --> H[lib/users.sh<br/>account review, hidden UID 0]
A --> I[lib/kernel.sh<br/>sysctl hardening]
A --> J[lib/pam.sh<br/>password policy, lockout]
A --> K[lib/filesystem.sh<br/>permissions, cron, banners]
A --> L[lib/monitoring.sh<br/>fail2ban, auditd, rkhunter]
A --> M[lib/forensics.sh<br/>baseline snapshot]
D & E & F & G & H & I & J & K & L & M --> N[(~/hardening-run/<br/>log + backups + baseline)]
प्रत्येक मॉड्यूल bin/harden.sh द्वारा sourced किया जाता है, जो आर्ग्युमेंट पार्सिंग, सर्विस-रोल प्रश्नावली, और निष्पादन क्रम का स्वामी है। मॉड्यूल एक-दूसरे को सीधे कॉल नहीं करते, और प्रत्येक मॉड्यूल में प्रत्येक स्टेट-चेंजिंग कमांड lib/common.sh में run() रैपर से होकर जाता है, जो पूरे प्रोजेक्ट को ड्राई-रन सपोर्ट, सुसंगत लॉगिंग, और गैर-घातक त्रुटि हैंडलिंग लागू करने के लिए एक जगह देता है।
git clone <this-repo>
cd cyberpatriot-linux-hardening
sudo ./bin/harden.sh
आपसे मशीन की भूमिका के बारे में हाँ/नहीं प्रश्नों की एक छोटी श्रृंखला पूछी जाएगी (क्या इसे Samba, FTP, SSH, एक वेब सर्वर, इत्यादि की आवश्यकता है), फिर यह ऊपर सूचीबद्ध मॉड्यूल के माध्यम से बिना निगरानी के चलता है। एक लॉग, टाइमस्टैम्प वाले कॉन्फ़िग बैकअप का एक पूरा सेट, और एक सिस्टम बेसलाइन स्नैपशॉट ~/hardening-run/ में लिखे जाते हैं।
वास्तविक राउंड में, प्रति-पैकेज पुष्टि प्रॉम्प्ट को छोड़ें और भूमिका प्रश्नों का उत्तर लाइव टाइप करने के बजाय एक तैयार उत्तर फ़ाइल से दें:
cp examples/config.env.example my-machine.env
# edit my-machine.env for this box's actual role
sudo ./bin/harden.sh --config my-machine.env --auto-approve
कुछ भी छूने से पहले यह वास्तव में क्या करेगा, यह देखना चाहते हैं?
sudo ./bin/harden.sh --dry-run --config my-machine.env
| मॉड्यूल | करता है |
|---|---|
lib/packages.sh | पूर्ण सिस्टम अपडेट; पासवर्ड क्रैकर और एक्सप्लॉइटेशन टूल्स को स्वचालित रूप से हटाता है; दोहरे-उपयोग वाले टूल्स (nmap, Wireshark, netcat) और लीगेसी सर्विसेज़ (VNC, NFS, telnet) को हटाने से पहले उनकी समीक्षा करता है |
lib/firewall.sh | ufw के माध्यम से डिफ़ॉल्ट-डिनाई इनबाउंड / डिफ़ॉल्ट-अलाउ आउटबाउंड, साथ ही एक ज्ञात सामान्य बैकडोर पोर्ट पर स्पष्ट ब्लॉक |
lib/ssh.sh | आधुनिक सिफर/KEX/MACs, कोई रूट लॉगिन नहीं, कनेक्शन और सत्र सीमाएँ -- या यदि भूमिका को इसकी आवश्यकता नहीं है तो SSH को पूरी तरह हटा देता है |
lib/services.sh | Samba, FTP, mail, printing, MySQL, HTTP, DNS: यदि भूमिका को आवश्यकता है तो प्रत्येक इंस्टॉल और न्यूनतम हार्डन किया जाता है, या यदि नहीं तो purge और फ़ायरवॉल से बंद कर दिया जाता है |
lib/users.sh | मौजूदा अकाउंट्स की इंटरैक्टिव समीक्षा (एडमिन अधिकार, विलोपन, पासवर्ड रीसेट), छिपे हुए UID-0 अकाउंट्स और खाली पासवर्ड का पता लगाना |
lib/kernel.sh | नेटवर्क-स्टैक और कर्नेल स्व-सुरक्षा sysctl सेटिंग्स (सोर्स रूटिंग, ICMP रीडायरेक्ट, ASLR, ptrace स्कोप, dmesg/kptr प्रतिबंध) |
lib/pam.sh | pam_pwquality/pam_pwhistory के माध्यम से पासवर्ड जटिलता और इतिहास, pam_faillock के माध्यम से अकाउंट लॉकआउट, login.defs में पासवर्ड एजिंग |
lib/filesystem.sh | कोर फ़ाइल परमिशन, cron/at प्रतिबंध, एक न्यूनतम rc.local, कानूनी लॉगिन बैनर, रीड-ओनली SUID/world-writable/unowned-file स्कैन |
lib/monitoring.sh | डिफ़ॉल्ट रूप से fail2ban और auditd; ClamAV और एक पूर्ण rkhunter/chkrootkit स्वीप ऑप्ट-इन हैं (देखें प्रतियोगिता सुरक्षा नोट्स) |
lib/forensics.sh | बाद की तुलना के लिए यूज़र्स, प्रोसेस, लिसनिंग पोर्ट्स, और इंस्टॉल किए गए पैकेजों का रीड-ओनली स्नैपशॉट |
tools/find-port-owner.sh और tools/list-nonstandard-users.sh उसी प्रकार के ट्राइएज कार्य के लिए छोटे स्टैंडअलोन यूटिलिटीज़ हैं, जो मुख्य स्क्रिप्ट से स्वतंत्र रूप से उपयोग किए जा सकते हैं -- उपयोग के लिए उनके हेडर देखें।
एक हार्डनिंग स्क्रिप्ट जो उस मशीन को तोड़ देती है जिसकी उसे रक्षा करनी चाहिए, समयबद्ध राउंड में बेकार से भी बदतर है। कुछ डिफ़ॉल्ट इसे दर्शाते हैं, और इसे बिना निगरानी के चलाने से पहले समझने योग्य हैं: