
केंद्रीकृत फ़ायरवॉल नियंत्रण
केंद्रीकृत फ़ायरवॉल नियंत्रण iptables चलाने वाले कई सर्वरों या लोडबैलेंसर्स पर फ़ायरवॉल प्रबंधित करने का एक केंद्रीकृत तरीका प्रदान करता है। इस तरह आप एक कमांड से कई सर्वरों पर दुरुपयोग रेंज आदि को तुरंत अनुमति/अवरोध/हटा/खोज सकते हैं। यह उन सर्वरों तक ssh के माध्यम से पहुँचता है। यह IPv4 और IPv6 दोनों का समर्थन करता है। Debian 6.x / 7.x / 8.x / 9.x पर परीक्षण किया गया है, लेकिन किसी भी डिस्ट्रो पर काम करना चाहिए।
IPv6 के लिए 'precheck', 'protected' और 'findip' फ़ंक्शन का उपयोग करने के लिए, आपको 'netaddr' python मॉड्यूल स्थापित होना चाहिए। IPv4 को इसकी आवश्यकता नहीं है क्योंकि यह IP के बाइनरी रूप पर उपसर्ग मिलान का उपयोग करता है।
Debian: apt-get install python3-netaddr
iptables के अतिरिक्त 'ipset' का उपयोग करना अधिक कुशल है। Ipset का उपयोग उन सूचियों को प्रबंधित करने के लिए किया जा सकता है जिन्हें iptables संदर्भित और उपयोग कर सकता है। यह तेजी से काम करता है और सूची का प्रबंधन भी अधिक लचीला है और इस स्क्रिप्ट का उपयोग करने का पसंदीदा तरीका है।
Debian: apt-get install ipset
चूंकि यह स्क्रिप्ट दिए गए सर्वरों से ssh के साथ जुड़ती है, इसलिए इसका उपयोग करने से पहले ऐसी पहुँच मौजूद होनी चाहिए।
पहली बार cfc.cfg-example से cfc.cfg में उदाहरण कॉन्फ़िगरेशन कॉपी करें।
कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित सेटिंग्स सेट की जा सकती हैं:
action: नियम जोड़ते समय कार्रवाई सेट करता है, डिफ़ॉल्ट: DROP
checkaggrbin: checkaggr.py स्क्रिप्ट का पथ, डिफ़ॉल्ट: ./checkaggr.py
cleanupconfirmation: clean कमांड चलाने से पहले पुष्टि मांगता है, क्रॉन उपयोग के लिए false पर सेट करें, डिफ़ॉल्ट: true
date: फ़ायरवॉल टिप्पणियों के लिए दिनांक प्रारूप सेट करता है, डिफ़ॉल्ट: $(date +%d%m%Y) -> 22062016
dateipset: ipset फ़ायरवॉल टिप्पणियों के लिए दिनांक प्रारूप सेट करता है, कुछ फ़ंक्शन को तोड़ने से बचने के लिए इसे डिफ़ॉल्ट पर छोड़ दें, डिफ़ॉल्ट: $(date +%Y%m%d) -> 20160622
ipsetname: IPSET सूची नाम सेट करता है, डिफ़ॉल्ट: blockedips
ipsetservers: उन सर्वरों को सेट करता है जो iptables के बजाय IPSET का उपयोग करते हैं, डिफ़ॉल्ट: "lvs05.example.com lvs06.example.com"
fwchain: जोड़ने/हटाने/खोजने के लिए फ़ायरवॉल श्रृंखला का नाम, डिफ़ॉल्ट: INPUT
masklimit: जोड़े जा सकने वाले IP रेंज का अधिकतम आकार, डिफ़ॉल्ट: /21
precheck: जाँच करें कि जोड़ा जाने वाला IP पहले से फ़ायरवॉल में है या किसी बड़ी रेंज का हिस्सा है, बड़े फ़ायरवॉल पर IPv6 के लिए थोड़ा धीमा हो सकता है (प्रति सर्वर 500 IP रेंज खोजने में ~25 सेकंड), डिफ़ॉल्ट: true
protected: जोड़े गए संरक्षित रेंज को सक्षम करें, डिफ़ॉल्ट: true
protectedranges: IP रेंज जो 'add' फ़ंक्शन से बाहर रखी गई हैं, आमतौर पर स्थानीय नेटवर्क के स्वामित्व वाली रेंज, डिफ़ॉल्ट: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: उपयोग किए गए Python बाइनरी का स्थान, डिफ़ॉल्ट: /usr/bin/python3
servers: उन सर्वरों को सेट करता है जो केवल iptables का उपयोग करते हैं, डिफ़ॉल्ट: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
IPv6 फ़ंक्शन '6' प्रत्यय के साथ चिह्नित हैं
निम्नलिखित कमांड के साथ IP/रेंज दर्ज करते समय, CIDR संकेतन में करें, यह मान्य हो जाता है और कुछ और स्वीकार नहीं करेगा।
जोड़ें:
cfc.sh add n.n.n.n/NN '<optional comment>'
cfc6.sh add <IPv6_address_range> '<optional comment>'
दिए गए IP (रेंज) को कॉन्फ़िगर की गई कार्रवाई के साथ उस स्रोत से सभी ट्रैफ़िक के लिए फ़ायरवॉल में जोड़ता है। डिफ़ॉल्ट रूप से वर्तमान दिनांक के साथ एक टिप्पणी बनाता है, आप उदाहरण के लिए उस रेंज के कारण या स्वामी को जोड़ने के लिए एकल उद्धरणों का उपयोग करके एक वैकल्पिक टिप्पणी जोड़ सकते हैं। बाद में उस टिप्पणी पर भी खोजा जा सकता है।
स्ट्रिंग जोड़ें:
cfc.sh addstring <protocol>:<dport> <string>
cfc6.sh addstring <protocol>:<dport> <string>
एक निश्चित प्रोटोकॉल और गंतव्य पोर्ट के लिए iptables में एक स्ट्रिंग ब्लॉक जोड़ता है। एक व्यावहारिक उदाहरण होगा कि वेबसर्वरों के एक समूह के लिए निर्धारित User-Agent को अवरुद्ध करना, इसलिए पोर्ट 80 के लिए निर्धारित tcp कनेक्शन स्ट्रिंग: Firefox/28.0 के साथ, उस स्ट्रिंग से मेल खाने वाला सभी आने वाला ट्रैफ़िक tcp पोर्ट 80 की ओर अवरुद्ध हो जाएगा:
cfc.sh addstring tcp:80 'Firefox/28.0'
सावधान रहें, यदि स्ट्रिंग पर्याप्त विशिष्ट नहीं है तो इसके बड़े परिणाम हो सकते हैं!
साफ़ करें:
cfc.sh clean <older_than_number_of_days>
n दिनों से पुराने सभी CFC फ़ायरवॉल नियमों को साफ़ करता है। ध्यान रखें कि यह डिफ़ॉल्ट दिनांक प्रारूप पर निर्भर करता है! इसलिए यदि आपने दिनांक प्रारूप को अनुकूलित किया है, तो आपको 'clean' अनुभाग में स्क्रिप्ट को समायोजित करने की आवश्यकता होगी।
हटाएँ:
cfc.sh del n.n.n.n/NN
cfc6.sh del <IPv6_address_range>
फ़ायरवॉल से दिए गए IP(रेंज)/नियम को हटाता है
स्ट्रिंग हटाएँ:
cfc.sh delstring <protocol>:<dport> <string>
cfc6.sh delstring <protocol>:<dport> <string>
एक निश्चित प्रोटोकॉल और गंतव्य पोर्ट के लिए iptables में एक स्ट्रिंग ब्लॉक हटाता है।
खोजें:
cfc.sh find <string>
cfc6.sh find <string>
फ़ायरवॉल में दिए गए स्ट्रिंग (केस-असंवेदनशील) की खोज करता है, यह IP/रेंज/टिप्पणी का (भाग) हो सकता है
IP खोजें:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <IPv6_address_range>
फ़ायरवॉल में खोजता है कि क्या दिया गया IP(रेंज) पहले से किसी जोड़े गए नियम का हिस्सा है, IPV6 के लिए बड़े फ़ायरवॉल पर थोड़ा धीमा हो सकता है (प्रति सर्वर 500 IP रेंज खोजने में ~25 सेकंड)। IPv4 इसके बजाय IP के बाइनरी रूप पर उपसर्ग मिलान का उपयोग करता है जो लगभग 500% तेज है, इसका उपयोग precheck और protectedranges सुविधाओं के लिए भी किया जाता है।
IPSET होस्ट आरंभ करें:
cfc.sh ipsethostinit <server_name>
cfc6.sh ipsethostinit <server_name>
निर्दिष्ट होस्ट में cfc.cfg में परिभाषित मापदंडों का उपयोग करके एक IPSET सूची और उसका संदर्भ देने वाला iptables नियम जोड़ता है। फ़ायरवॉल नियम जोड़ने से पहले यह केवल एक बार करने की आवश्यकता है।
अंतिम:
cfc.sh last <nr_of_most_recent_rules>
cfc6.sh last <nr_of_most_recent_rules>
फ़ायरवॉल में जोड़ी गई अंतिम प्रविष्टियाँ दिखाता है