सामान्य रूप में:
फ़ायरवॉल कॉन्फ़िगरेशन को देखने और संशोधित करने के लिए व्यवस्थापक विशेषाधिकारों ( root
) की आवश्यकता होती है क्योंकि प्रतिबंधित पोर्ट नंबर रेंज में सेवाएं खोलना आवश्यक है। इसका मतलब है कि आपको कमांड को रूट के रूप में चलाने के लिए root
या तो लॉग इन होना चाहिए या वैकल्पिक रूप से उपयोग करना चाहिए sudo
। मैं वैकल्पिक के साथ ऐसे आदेशों को चिह्नित करने का प्रयास करूंगा [sudo]
।
सामग्री:
- आदेश मायने रखता है
-I
और के बीच अंतर-A
- वर्तमान फ़ायरवॉल कॉन्फ़िगरेशन प्रदर्शित करें
- के ouput की व्याख्या करना
iptables -L -v -n
- अपने पर्यावरण को जानें
- INPUT और FORWARD चेन
- कर्नेल मॉड्यूल
1. आदेश मामलों या के बीच अंतर -I
और-A
याद रखने वाली बात यह है कि फ़ायरवॉल नियमों की जाँच उसी क्रम में की जाती है जिस क्रम में वे सूचीबद्ध होते हैं। एक नियम ट्रिगर होने पर कर्नेल श्रृंखला को संसाधित करना बंद कर देगा जो या तो पैकेट या कनेक्शन को अनुमति देगा या अनुमति देगा।
मुझे लगता है कि नौसिखिया फ़ायरवॉल प्रशासकों के लिए सबसे आम गलती यह है कि वे एक नया पोर्ट खोलने के लिए सही निर्देशों का पालन करते हैं, जैसे कि नीचे दिया गया:
[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
और फिर पता चलता है कि यह प्रभावी नहीं होगा।
इसका कारण यह है कि -A
विकल्प सभी मौजूदा नियमों के बाद उस नए नियम को जोड़ता है
और बहुत बार मौजूदा फ़ायरवॉल में अंतिम नियम एक ऐसा था जो सभी ट्रैफ़िक को अवरुद्ध करता है जो कि स्पष्ट रूप से अनुमत नहीं है, जिसके परिणामस्वरूप
...
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
8 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
या iptables में बराबर-सहेजें:
...
iptables -A INPUT -j REJECT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
और टीसीपी पोर्ट 8080 खोलने वाला नया नियम कभी नहीं पहुंचेगा। (जैसा कि 0 पैकेट और शून्य बाइट्स में ज़बर्दस्त रूप से शेष काउंटरों द्वारा दर्शाया गया है)।
-I
नए नियम के साथ नियम को सम्मिलित करने से श्रृंखला में पहला स्थान होता और काम होता।
2. वर्तमान फ़ायरवॉल कॉन्फ़िगरेशन प्रदर्शित करें
फ़ायरवॉल व्यवस्थापक के लिए मेरी सिफारिश यह है कि वास्तविक कॉन्फ़िगरेशन को देखने के लिए लिनक्स कर्नेल चल रहा है, बजाय उपयोगकर्ता के टूल से फ़ायरवॉल मुद्दों का निदान करने की कोशिश करने के। अक्सर एक बार जब आप अंतर्निहित मुद्दों को समझते हैं तो आप उन उपकरणों द्वारा समर्थित मामले में आसानी से हल कर सकते हैं।
कमांड [sudo] iptables -L -v -n
आपका दोस्त है (हालाँकि कुछ लोगों को iptables-save
बेहतर लगता है)। अक्सर कॉन्फ़िगरेशन पर चर्चा करते समय --line-numbers
विकल्प के साथ-साथ संख्या रेखाओं का उपयोग करना उपयोगी होता है। नियम # X का संदर्भ लेने से उनकी चर्चा करना कुछ आसान हो जाता है।
नोट: NAT नियम iptables-save
आउटपुट में शामिल हैं, लेकिन -t nat
विकल्प यानी, को जोड़कर अलग से सूचीबद्ध करना होगा [sudo] iptables -L -v -n -t nat --line-numbers
।
कमांड को कई बार चलाना और इन्क्रीमेंट काउंटरों की जांच करना यह देखने के लिए एक उपयोगी उपकरण हो सकता है कि क्या कोई नया नियम वास्तव में चालू हो जाता है।
[root@host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 784K 65M fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 2789K 866M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 15 1384 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num pkts bytes target prot opt in out source destination
Chain fail2ban-SSH (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 117.239.37.150 0.0.0.0/0 reject-with icmp-port-unreachable
2 4 412 REJECT all -- * * 117.253.208.237 0.0.0.0/0 reject-with icmp-port-unreachable
वैकल्पिक रूप से iptables-save
एक स्क्रिप्ट देता है जो उपरोक्त फ़ायरवॉल कॉन्फ़िगरेशन को पुन: उत्पन्न कर सकता है:
[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT
यह प्राथमिकता का विषय है कि आपको क्या समझना आसान होगा।
3. ouput की व्याख्या करना iptables -L -v -n
नीति डिफ़ॉल्ट कार्रवाई श्रृंखला का उपयोग करता है जब कोई स्पष्ट नियम मैचों सेट। में INPUT
श्रृंखला है कि सभी यातायात को स्वीकार करने के लिए निर्धारित है।
INPUT श्रृंखला में पहला नियम तुरंत एक दिलचस्प है, यह सभी ट्रैफ़िक (स्रोत 0.0.0.0/0 और गंतव्य 0.0.0.0/0) को भेजता है जो कि TCP पोर्ट 22 ( tcp dpt:22
) SSH के लिए एक कस्टम लक्ष्य ( fail2ban-SSH
) के लिए डिफ़ॉल्ट पोर्ट है। । जैसा कि नाम से संकेत मिलता है कि यह नियम विफल 2 टन (एक सुरक्षा उत्पाद है जो अन्य चीजों के बीच संभावित दुरुपयोग के लिए सिस्टम लॉग फ़ाइलों को स्कैन करता है और दुर्व्यवहार करने वाले के आईपी-पते को अवरुद्ध करता है) द्वारा बनाए रखा जाता है।
उस नियम को iptables कमांडलाइन द्वारा बनाया गया होगा, iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
जैसा कि iptables के आउटपुट में पाया जाता है-सेव करें -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
। अक्सर आप प्रलेखन में उन सूचनाओं में से एक पाएंगे।
काउंटरों से संकेत मिलता है कि इस नियम ने 784'000 पैकेट और 65 मेगाबाइट डेटा का मिलान किया है।
ट्रैफ़िक जो इस पहले नियम से मेल खाता है, उसके बाद fail2ban-SSH
श्रृंखला द्वारा संसाधित किया जाता है, जो एक गैर-मानक श्रृंखला के रूप में, OUTPUT श्रृंखला के नीचे सूचीबद्ध होता है।
उस श्रृंखला में दो नियम होते हैं, प्रत्येक एब्स के लिए एक (स्रोत आईपी-एड्रेस 117.253.221.166 या 58.218.211.166) जो अवरुद्ध है (एक के साथ reject-with icm-port-unreachable
)।
-A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable
SSH पैकेट जो उन अवरुद्ध मेजबानों से नहीं हैं, उन्हें न तो अनुमति दी गई है और न ही अभी तक अनुमति नहीं दी गई है और अब यह होगा कि कस्टम श्रृंखला पूरी हो गई है और INPUT श्रृंखला में दूसरे नियम के खिलाफ जाँच की जाएगी।
पोर्ट 22 के लिए नियत नहीं किए गए सभी पैकेटों ने INPUT श्रृंखला में पहला नियम पारित किया और इसका मूल्यांकन INPUT नियम # 2 में भी किया जाएगा।
INPUT नियम नंबर 2 बनाता है कि यह एक स्टेटफुल फ़ायरवॉल होना है , जो कनेक्शन को ट्रैक करता है। इसके कुछ फायदे हैं, केवल नए कनेक्शन के लिए पैकेट को पूर्ण नियम-सेट के खिलाफ जांचने की आवश्यकता होती है, लेकिन एक बार स्थापित या संबंधित कनेक्शन से संबंधित अतिरिक्त पैकेट को बिना जाँच के स्वीकार कर लिया जाता है।
इनपुट नियम # 2 सभी खुले और संबंधित कनेक्शन से मेल खाता है और उस नियम से मेल खाने वाले पैकेट को और मूल्यांकन करने की आवश्यकता नहीं होगी।
नोट: एक स्टेटफुल फ़ायरवॉल के कॉन्फ़िगरेशन में नियम परिवर्तन केवल नए कनेक्शन को प्रभावित करेगा, स्थापित कनेक्शन को नहीं।
विपरीत कनेक्शन राज्य के बिना, एक साधारण पैकेट फ़िल्टर परीक्षण पूर्ण नियम-सेट के खिलाफ प्रत्येक पैकेट का परीक्षण करता है। ऐसे फ़ायरवॉल में किसी भी राज्य के कीवर्ड का उपयोग नहीं किया जाएगा।
INPUT नियम # 3 काफी उबाऊ है, लूपबैक ( lo
या 127.0.0.1) इंटरफ़ेस से कनेक्ट होने वाले सभी ट्रैफ़िक की अनुमति है।
INPUT नियम 4, 5 और 6 का उपयोग टीसीपी पोर्ट 22, 80 और 443 को खोलने के लिए किया जाता है। (नए कनेक्शन के लिए डिफ़ॉल्ट पोर्ट्स। SSH, HTTP और HTTPS) नए कनेक्शन तक पहुंच प्रदान करके (मौजूदा कनेक्शन पहले से ही INPUT नियम 2 द्वारा अनुमत हैं)।
एक स्टेटलेस फ़ायरवॉल में वे नियम राज्य विशेषताओं के बिना दिखाई देंगे:
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
या
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
अंतिम INPUT नियम, # 7 एक नियम है जो उन सभी ट्रैफ़िक को रोकता है जिन्हें INPUT नियम 1-7 में एक्सेस की अनुमति नहीं थी। एक काफी सामान्य सम्मेलन: जो कुछ भी अनुमति नहीं है उसे अस्वीकार कर दिया गया है। सिद्धांत रूप में इस नियम को डिफ़ॉल्ट नीति की स्थापना के द्वारा छोड़ा जा सकता था।
हमेशा पूरी चेन की जांच करें।
4. अपने पर्यावरण को जानें
4.1। सॉफ़्टवेयर फ़ायरवॉल में सेटिंग्स सुरक्षा सेटिंग्स को नेटवर्क में कहीं भी बनाए नहीं रखेगी, अर्थात iptables
आपके नेटवर्क में राउटर या अन्य फ़ायरवॉल पर अनमॉडिफाइड एक्सेस कंट्रोल लिस्ट के साथ नेटवर्क सर्विस खोलने के बावजूद भी ट्रैफ़िक ब्लॉक हो सकता है ...
4.2। जब कोई सेवा नहीं सुन रहा है, तो आप फ़ायरवॉल सेटिंग्स की परवाह किए बिना एक कनेक्शन से इनकार करने और कनेक्शन प्राप्त करने में सक्षम नहीं होंगे । इसलिए:
- पुष्टि करें कि एक सेवा सुन रही है (सही नेटवर्क इंटरफ़ेस / आईपी-एड्रेस पर) और पोर्ट संख्या का उपयोग करके जो आप के साथ
[sudo] netstat -plnut
या वैकल्पिक रूप से उपयोग करना चाहते हैं ss -tnlp
।
- यदि आपकी सेवाएं अभी तक नहीं चल रही हैं, तो उदाहरण के लिए नेटकट के साथ एक साधारण श्रोता का अनुकरण करें:
[sudo] nc -l -p 123
या openssl s_server -accept 1234 [options]
यदि आपको TLS / SSL श्रोता ( man s_server
विकल्पों की जाँच करें) की आवश्यकता है।
- सत्यापित करें कि आप सर्वर पर ही IE से कनेक्ट कर सकते हैं
telnet <IP of Server> 123
या echo "Hello" | nc <IP of Server> 123
जब TLS / SSL सुरक्षित सेवा का परीक्षण या openssl s_client -connect <IP of Server>:1234
, एक दूरस्थ होस्ट से एक ही प्रयास करने से पहले।
4.3। अपनी सेवाओं द्वारा उपयोग किए जाने वाले प्रोटोकॉल को समझें। आप उन सेवाओं को ठीक से सक्षम / अक्षम नहीं कर सकते जिन्हें आप पर्याप्त रूप से नहीं समझते हैं। उदाहरण के लिए:
- टीसीपी या यूडीपी का उपयोग किया जाता है या दोनों (डीएनएस के साथ)?
- क्या एक निश्चित डिफ़ॉल्ट पोर्ट का उपयोग करने वाली सेवा है (उदाहरण के लिए टीसीपी पोर्ट 80 जैसे वेबसर्वर के लिए)?
- वैकल्पिक रूप से एक डायनेमिक पोर्ट नंबर चुना जाता है, जो अलग-अलग हो सकता है (यानी पोर्टमैप के साथ रजिस्टर होने वाली क्लासिक एनएफएस जैसी आरपीसी सेवाएं)?
- कुख्यात एफ़टीपी भी दो बंदरगाहों का उपयोग करता है , दोनों एक निश्चित और एक गतिशील पोर्ट नंबर जब निष्क्रिय मोड का उपयोग करने के लिए कॉन्फ़िगर किया गया ...
- सेवा, बंदरगाह और प्रोटोकॉल विवरण
/etc/services
जरूरी नहीं कि पोर्ट का उपयोग करके वास्तविक सेवा से मेल खाते हों।
4.4। कर्नेल पैकेट फ़िल्टर एकमात्र ऐसी चीज़ नहीं है जो नेटवर्क कनेक्टिविटी को प्रतिबंधित कर सकती है:
- SELinux नेटवर्क सेवाओं को प्रतिबंधित भी कर सकता है।
getenforce
पुष्टि करेगा कि क्या SELinux चल रहा है।
- हालांकि थोड़ा अस्पष्ट हो रहा है टीसीपी रैपर्स अभी भी नेटवर्क सुरक्षा को लागू करने के लिए एक शक्तिशाली उपकरण है।
ldd /path/to/service |grep libwrap
और /hosts.[allow|deny]
नियंत्रण फ़ाइलों के साथ की जाँच करें।
5. INPUT
या FORWARD
जंजीर
जंजीरों की अवधारणा को यहाँ अधिक अच्छी तरह से समझाया गया है लेकिन इसकी कमी यह है:
INPUT
श्रृंखला तुम कहाँ खोलने के लिए और / या जहां iptables आदेश जारी सेवाओं के लिए करीब नेटवर्क बंदरगाहों, स्थानीय स्तर पर चल रहा है मेजबान पर है।
FORWARD
श्रृंखला है, जहां आपको लगता है कि अन्य प्रणालियों के लिए कर्नेल द्वारा अग्रेषित हो जाता है वास्तविक सिस्टम फिल्टर यातायात के लिए नियम, लेकिन यह भी डोकर कंटेनर और आभासी अतिथि सर्वर सर्वर है जब आपके Linux मशीन एक पुल, रूटर, हाइपरविजर के रूप में अभिनय और / या नेटवर्क पता करता है लागू अनुवाद और पोर्ट अग्रेषण।
एक आम गलतफहमी यह है कि चूंकि एक डॉकटर कंटेनर या केवीएम अतिथि स्थानीय रूप से चलता है, जो फ़िल्टर नियम लागू होता है वह INPUT श्रृंखला में होना चाहिए, लेकिन आमतौर पर ऐसा नहीं होता है।
6. कर्नेल मॉड्यूल
चूंकि पैकेट फ़िल्टर लिनक्स कर्नेल के भीतर चलता है इसलिए इसे डायनामिक मॉड्यूल, कई मॉड्यूल वास्तव में संकलित किया जा सकता है। अधिकांश वितरणों में नेटफिल्टर को मॉड्यूल के रूप में शामिल किया जाता है और आवश्यक नेटफिल्टर मॉड्यूल को कर्नेल में आवश्यकतानुसार लोड किया जाएगा, लेकिन कुछ मॉड्यूलों के लिए फ़ायरवॉल प्रशासक को मैन्युअल रूप से लोड करने की आवश्यकता होगी। यह मुख्य रूप से कनेक्शन ट्रैकिंग मॉड्यूल की चिंता करता है, जैसे कि nf_conntrack_ftp
जिसके साथ लोड किया जा सकता है insmod
।
वर्तमान में चल रहे कर्नेल में लोड किए गए मॉड्यूल के साथ प्रदर्शित किया जा सकता है lsmod
।
रिबूट के दौरान मॉड्यूल को सुनिश्चित करने के लिए लगातार लोड किए जाने की विधि लिनक्स वितरण पर निर्भर करती है।