CentOS 7 में श्वेतसूची आईपी पते


23

मैं CentOS 7 फ़ायरवॉल को स्थापित करना चाहता हूं, जैसे कि, आने वाले सभी अनुरोधों को आईपी पते के अलावा अवरुद्ध कर दिया जाएगा जो कि मैं श्वेत सूची देता हूं। और श्वेतसूची आईपी पते के लिए सभी बंदरगाहों को सुलभ होना चाहिए।

मैं कुछ समाधान खोजने में सक्षम हूं (यह सुनिश्चित नहीं है कि वे काम करेंगे) iptablesलेकिन CentOS 7 का उपयोग करता है firewalld। मैं firewall-cmdकमांड के साथ प्राप्त करने के लिए कुछ समान नहीं पा सकता हूं ।

इंटरफेस सार्वजनिक क्षेत्र में हैं। मैंने सभी सेवाओं को पहले ही सार्वजनिक क्षेत्र में स्थानांतरित कर दिया है।

जवाबों:


44

मैं ज़ोन में स्रोतों को जोड़कर इसे पूरा करूँगा। पहले चेकआउट करें कि आपके ज़ोन के लिए कौन से स्रोत हैं:

firewall-cmd --permanent --zone=public --list-sources

यदि कोई नहीं हैं, तो आप उन्हें जोड़ना शुरू कर सकते हैं, यह आपका "श्वेतसूची" है

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(यह एक संपूर्ण /24और एक IP जोड़ता है , बस इसलिए आपके पास सबनेट और एकल IP दोनों का संदर्भ है)

उन बंदरगाहों की सीमा निर्धारित करें जिन्हें आप खोलना चाहते हैं:

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

यह सिर्फ 22 के माध्यम से 1 पोर्ट करता है। यदि आप चाहें तो आप इसे चौड़ा कर सकते हैं।

अब, आपने जो किया है उसे पुनः लोड करें।

firewall-cmd --reload

और अपना काम जांचें:

 firewall-cmd --zone=public --list-all

साइड नोट / संपादकीय: इससे कोई फर्क नहीं पड़ता, लेकिन मुझे फ़ायरवॉल में आईपी के एक सफेद-सूचीबद्ध सेट के लिए "विश्वसनीय" ज़ोन पसंद है। ज़ोन चुनने पर रेडहैट के सुझावों को पढ़कर आप आगे का आकलन कर सकते हैं ।

यह भी देखें:


यदि आप DROPइस स्रोत के बाहर पैकेट लेना चाहते हैं , तो यहां एक उदाहरण के /24रूप में जो मैंने पहले इस्तेमाल किया था, उन्हें बाहर छोड़ने के लिए एक उदाहरण है, आप इसके लिए समृद्ध नियमों का उपयोग कर सकते हैं , मुझे विश्वास है। यह वैचारिक है, मैंने इसका परीक्षण नहीं किया है (यह देखकर कि सेंटो 7 कमांड को स्वीकार करता है), लेकिन, एक फलक करने के लिए पर्याप्त आसान होना चाहिए और देखें कि क्या यह व्यवहार करता है कि आप कैसे उम्मीद करेंगे

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'

जवाब देने के लिए बहुत बहुत धन्यवाद। प्रतिष्ठा में कमी के कारण मतदान नहीं कर सकते। लेकिन मैं अन्य सभी IP को कैसे छोड़ सकता हूं, सिवाय एक के जो मैंने स्रोतों का उपयोग करके जोड़ा है?
कृष्णंदू सरकार

धन्यवाद @KrishnanduSarkar - आप सही हैं, डिफ़ॉल्ट रूप से यह ICMP अस्वीकार होना चाहिए। लेकिन, मुझे लगता है कि आप पैकेट छोड़ने के लिए एक समृद्ध नियम जोड़ सकते हैं। मैंने अपने जवाब में एक उदाहरण जोड़ा कि मुझे लगता है कि काम करेगा। उत्थान के बारे में धन्यवाद, मैं समझता हूं, यदि कोई उत्तर काम करता है, तो एक उत्तर को स्वीकार करने पर विचार करें।
dougBTV

महान जवाब, मैं अब तक iptables का उपयोग कर रहा था।
तेनसीघ

(!) यह उत्तर मौजूदा डिफ़ॉल्ट फ़ायरवॉलडी कॉन्फ़िगरेशन के लिए अपेक्षित के रूप में काम नहीं करेगा (इंटरफेस डिफ़ॉल्ट रूप से सार्वजनिक क्षेत्र को सौंपा गया है)।
डेस

24

यहां तक ​​कि अगर एक जवाब स्वीकार कर लिया गया है और मतदान किया गया है, तो मुझे नहीं लगता कि यह एक सही है। मैं प्रलेखन में स्पष्ट विवरण खोजने में विफल रहा, लेकिन कार्यान्वित व्यवहार से ऐसा लगता है:

  1. इंटरफ़ेस और स्रोत का चयनकर्ताओं के रूप में किया जाता है - जो कि सक्रिय करने के लिए क्षेत्र (क्षेत्रों)
  2. दोनों को डिफ़ॉल्ट क्षेत्र (हमेशा सक्रिय) के लिए अनदेखा किया जाता है

तो इसका उत्तर होगा:

  1. डिफ़ॉल्ट क्षेत्र को लॉक करें, "सार्वजनिक" कहें - कोई पोर्ट नहीं खुला या सेवाएं उपलब्ध नहीं हैं
  2. दूसरे क्षेत्र में, "काम" कहें - स्रोत और खुले बंदरगाहों को परिभाषित करें

उदाहरण के लिए, डिफॉल्ट ज़ोन को सार्वजनिक करना और कोई खुला पोर्ट नहीं है, "वर्क" ज़ोन में स्रोत और पोर्ट रेंज जोड़ें:

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

अब सक्रिय क्षेत्रों की जाँच करें (डिफ़ॉल्ट क्षेत्र हमेशा सक्रिय है):

$ sudo firewall-cmd --get-active-zones

आपको मिलेगा:

work
  sources: 192.168.0.0/24

इसलिए "काम" ज़ोन के नियम विशेष सबनेट पर लागू होंगे। आपके पास अनुरोध के अनुसार "श्वेतसूची" = सबनेट के लिए खुले बंदरगाहों की एक सीमा होगी । और निश्चित रूप से व्यवहार छड़ी बनाने के लिए बयानों --permanentमें विकल्प का उपयोग करें --add-xxx

"सार्वजनिक" (डिफ़ॉल्ट) क्षेत्र में आपके पास मौजूद किसी भी पोर्ट या सेवाओं को सभी इंटरफेस और स्रोत पते पर लागू किया जाएगा।

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

एक ही सिस्टम इंटरफेस के लिए काम करता है। "ज़ोन 3" को "कार्य" क्षेत्र में जोड़कर कहें:

$ sudo firewall-cmd --zone=work --add-interface=ens3

आप "वर्क" ज़ोन नियमों का उपयोग किसी विशेष इंटरफ़ेस से "स्रोत" की तुलना में अधिक मोटे चयनकर्ता से करेंगे।


4
यह सबसे अच्छा जवाब है। सबसे महत्वपूर्ण हिस्सा यह स्पष्टीकरण है कि इंटरफ़ेस सेट करना एक्सेस को व्यापक करता है (मामले के स्रोत सेट होने पर)। मुझे एक समस्या थी कि पोर्ट मेरे पास sourcesश्वेतसूची होते हुए भी सुलभ थे । कारण यह था कि ज़ोन में एक इंटरफ़ेस सौंपा गया था।
गुलाबी

1
इस उत्तर को ठीक करने के लिए सभी डिफ़ॉल्ट सेवाओं को publicज़ोन से हटाने की आवश्यकता है , यदि कोई हो (ये सेवाएँ सभी पते पर उपलब्ध होंगी क्योंकि इंटरफेस publicडिफ़ॉल्ट रूप से ज़ोन को सौंपा गया है )। या डिफ़ॉल्ट क्षेत्र को दूसरे में बदलें: blockया drop(यह आम बात है)। या परिवर्तन publicकरने के लिए क्षेत्र लक्ष्य %%REJECT%%या DROP
डेस

6

अस्वीकरण: मैंने वास्तव में कोशिश नहीं की है कि मैं क्या सुझाव दे रहा हूं, यहां है, लेकिन यह पिछले फायरवॉल सेटअप के काफी करीब है जो मैंने किया था, इसलिए मैं इससे दूर जा रहा हूं। फायरवल्ड आपको इस उद्देश्य के लिए कुछ पूर्व-कॉन्फ़िगर किए गए क्षेत्र प्रदान करता है। एक "ड्रॉप" कहा जाता है, जो आने वाले किसी भी चीज़ को छोड़ देता है, और एक को "विश्वसनीय" कहा जाता है, जो किसी भी कनेक्शन की अनुमति देता है (यानी, इसलिए आपको व्यक्तिगत पोर्ट खोलने की आवश्यकता नहीं होनी चाहिए, मुझे लगता है)। आप जो चाहते हैं उसके लिए ट्रिगर करने के लिए ट्रिक को सही ज़ोन मिल रहा है।

फायरवल्ड निम्नलिखित मिसाल के आधार पर एक क्षेत्र के लिए नियम लागू करेगा:

  • यदि स्रोत IP किसी ज़ोन से जुड़े स्रोत IP से मेल खाता है, तो वह इसका उपयोग करता है।
  • यदि स्रोत आईपी किसी विशेष क्षेत्र से मेल नहीं खाता है, तो यह देखने के लिए जांचता है कि क्या पैकेट पर आया इंटरफ़ेस के लिए कोई ज़ोन कॉन्फ़िगर किया गया है या नहीं। यदि कोई है, तो वह इसका उपयोग करता है।
  • अंत में, यदि और कुछ भी मेल नहीं खाता है, तो यह डिफ़ॉल्ट क्षेत्र का उपयोग करता है।

इसलिए, सबसे पहले, आप अपने विश्वसनीय आईपी को "विश्वसनीय" क्षेत्र से बांधना चाहते हैं:

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

फिर, या तो अपने डिफॉल्ट जोन को "ड्रॉप" पर सेट करें या अपने इंटरफेस को इसमें बांधें:

firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=eth0

और फिर परिवर्तन को प्रभावी बनाएं (चेतावनी: यह संभवतः आपके कनेक्शन को छोड़ देगा यदि आप नेटवर्क पर ऐसा कर रहे हैं और आपने अपने स्रोत आईपी को विश्वसनीय क्षेत्र में नहीं जोड़ा है):

firewall-cmd --reload

बेशक, आप "-परमानेंट" (और फिर आपको --reload करने की जरूरत नहीं है, या तो) को छोड़ कर आप अस्थायी रूप से इनका परीक्षण कर सकते हैं।


blockका उपयोग भी किया जा सकता है (इसके बजाय drop) यदि आप अन्य मेजबानों को बताना चाहते हैं कि आप उनसे बात नहीं कर रहे हैं ....
Gert van den Berg

5

मैं इस तरह से अपने फायरवॉल संचालित करता हूं। यहाँ आप क्या चाहते हैं को पूरा करने के लिए मेरा पसंदीदा तरीका है।

# firewall-cmd --list-all

आप देखेंगे कि आपका डिफ़ॉल्ट क्षेत्र सार्वजनिक है और सक्षम सेवाएं dhcpv6-client और ssh हैं। हम कोई भी सार्वजनिक सेवा उपलब्ध नहीं चाहते हैं, है ना? केवल श्वेतसूची वाले आईपी ही अधिकृत हैं। तो चलो दो सार्वजनिक सेवाओं को हटा दें।

# firewall-cmd --zone=public --remove-service=ssh --permanent
# firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

अब, आइए एक विशिष्ट आईपी को श्वेत सूची दें जो किसी भी बंदरगाह तक पहुंच प्रदान करता है।

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" accept'

अब, एक और आईपी को श्वेत सूची दें, जिससे हम केवल SSH, http और https एक्सेस का उपयोग कर सकते हैं। कोई अन्य पोर्ट नहीं।

#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="ssh" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx" service name="http" accept'
#firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="xx.xx.xx.xx service name="https" accept'

यदि आप SSH के माध्यम से कनेक्ट कर रहे हैं, तो अपने नए नियम सेट को लागू करने से पहले अपने IP को अधिकृत करना सुनिश्चित करें। जब नए नियम लागू करने के लिए तैयार है।

#firewall-cmd --reload

2

आप रिच नियम द्वारा आसानी से प्रबंधित कर सकते हैं।

पहला कदम

firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0

दूसरा चरण - समृद्ध नियम जोड़ें

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

सभी नियम 192.168.2.2 तक पहुँचने पर सभी पोर्ट एक बार समृद्ध नियम जोड़ देते हैं और प्रत्येक पोर्ट को अन्य स्रोत से अवरुद्ध कर देते हैं।

यदि आप किसी भी पोर्ट या सेवा को कमांड के नीचे जोड़ेंगे तो यह सभी स्रोतों द्वारा सुलभ होगा।

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

यदि आप नीचे दिए गए कमांड के बजाय विशिष्ट आईपी के लिए विशिष्ट पोर्ट खोलना चाहते हैं

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'

2

DougBTV से शीर्ष उत्तर गलत है। मैं उनके जवाब का जवाब नहीं दे सकता क्योंकि मेरे पास आवश्यक प्रतिनिधि बिंदु नहीं हैं, इसलिए मैं यहां बताऊंगा:

वह डिफ़ॉल्ट क्षेत्र "सार्वजनिक" का उपयोग कर रहा है। वह उस क्षेत्र में नेटवर्क को बांध रहा है और फिर उस क्षेत्र पर पोर्ट खोल रहा है। लेकिन, एक डिफ़ॉल्ट कॉन्फ़िगरेशन पर, सभी ट्रैफ़िक डिफ़ॉल्ट ज़ोन के माध्यम से जाते हैं, न कि केवल उस स्रोत नेटवर्क से, जो आप इसे टाई करते हैं। इसलिए उसके --add- सोर्स कमांड से कोई फर्क नहीं पड़ता है और उसके --add- पोर्ट कमांड ने अब पूरी दुनिया को उन पोर्ट्स को एक्सेस करने की अनुमति दी है।

Normunds Kalnberzins द्वारा दूसरा उत्तर सही है। आप एक अलग क्षेत्र बनाना चाहते हैं, उस क्षेत्र में अपने नेटवर्क / आईपी को टाई करें, और उस क्षेत्र में पोर्ट खोलें।

वैकल्पिक रूप से, आप डिफ़ॉल्ट ज़ोन में सब कुछ छोड़ सकते हैं और कुछ आईपी से एक्सेस की अनुमति देने के लिए फ़ायरवॉल के समृद्ध नियमों का उपयोग कर सकते हैं:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'

यह सभी बंदरगाहों के लिए 192.168.2.2 से सभी ट्रैफ़िक की अनुमति देता है और क्योंकि मैंने कोई ज़ोन निर्दिष्ट नहीं किया है, इसे डिफ़ॉल्ट ज़ोन "पब्लिक" पर लागू किया जाएगा (उपयोग -गेट-डिफॉल्ट-ज़ोन यह सत्यापित करने के लिए कि आपका डिफ़ॉल्ट ज़ोन क्या है और - यह देखने के लिए सक्रिय-क्षेत्र प्राप्त करें कि वर्तमान में कौन से क्षेत्र उपयोग में हैं)।

इस IP से केवल एक विशिष्ट पोर्ट तक पहुँचने की अनुमति देने के लिए मैं करूँगा:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept'

सबसे अच्छा अभ्यास इन कमांड्स को बिना --permanent (या शॉर्ट के लिए --perm) के चलाना है जो वर्तमान में चल रहे फ़ायरवॉल को प्रभावित करता है। यह परीक्षण करने के बाद कि आपका नियम काम कर रहा है, इसे फिर से चलाएं - शुक्राणु को जोड़ दिया जाए ताकि इसे बाद में फायरवालड लोड पर याद रखा जाए।


1

बस उत्तर में जोड़ने के लिए उत्तर:

$ sudo firewall-cmd --permanent --zone=work --add-source=172.16.0.0/12
$ sudo firewall-cmd --permanent --zone=work --add-port=8080-8090/tcp

अन्य सभी ट्रैफ़िक को ब्लॉक करने के लिए:

$ sudo firewall-cmd --set-default-zone=drop

चेतावनी: यदि आप दूरस्थ मशीन से पहुँचते हैं, तो यह आपके लॉगिन सत्र को काट सकता है। यदि आपको सही तरीके से 'काम' ज़ोन आईपी सेटअप नहीं मिला है, तो आप अपने सर्वर से कनेक्ट नहीं कर पाएंगे।

फ़ायरवॉल को पुनः लोड करने के लिए:

$ sudo firewall-cmd --reload

मैं यह पता नहीं लगा सका कि दो अलग-अलग IP को '--add-rich-rule' के साथ कैसे जोड़ा जाए।


वर्तमान डिफ़ॉल्ट फ़ायरवॉलड कॉन्फ़िगरेशन के लिए यह पर्याप्त नहीं हो सकता है। विवरण के लिए नॉर्मनड्स के जवाब के लिए मेरी टिप्पणी देखें।
डेस

मल्टीपल IPs के लिए आप ipsetजैसे firewall-cmd --permanent --new-ipset=blacklist --type=hash:ipही ipset को ipset में ऐड firewall-cmd --ipset=blacklist --add-entry=192.168.1.4कर सकते हैंfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
वैसे बना

0

मुझे आश्चर्य है कि विश्वसनीय ज़ोन के उत्तर चयनित उत्तर नहीं हैं। विश्वसनीय ज़ोन में एक डिफ़ॉल्ट "लक्ष्य: ACCEPT" है जबकि बाकी "लक्ष्य: डिफ़ॉल्ट" हैं। हालांकि यह वास्तव में कोई फर्क नहीं पड़ता है कि यह अपने नाम और डिफ़ॉल्ट लक्ष्य मूल्य के कारण इच्छित विधि प्रतीत होता है।

एक बॉक्स को जल्दी से कैसे बंद करें ताकि केवल आप ही उस तक पहुंच सकें:

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

सभी क्षेत्रों को सूचीबद्ध करने के बाद आपको कुछ इस तरह से देखना चाहिए:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

नोट: मैंने एक अशक्त / लापता मान वाली लाइनें हटा दी हैं। महत्वपूर्ण बात यह है कि विश्वसनीय और ड्रॉप दोनों (सक्रिय) हैं और ड्रॉप में आपका सार्वजनिक इंटरफ़ेस है।

यह प्रदर्शन के लिए iptables के लिए क्या करता है:

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.