डिबगिंग iptables और आम फ़ायरवॉल नुकसान?


18

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

के जवाब में EEAA के जवाब और @ Shog की टिप्पणी हम एक उपयुक्त विहित क्यू एंड ए iptables के बारे में आम अपेक्षाकृत आसान सवालों को बंद करने के लिए आवश्यक है।

लिनक्स सॉफ्टवेयर फ़ायरवॉल, साथ डिबग समस्याओं के लिए एक संरचित विधि क्या है नेटफिल्टर पैकेट को छानने के ढांचे, आमतौर पर userland इंटरफ़ेस से जाना जाता iptables ?

सामान्य नुकसान, आवर्ती प्रश्न और सरल या थोड़ी अधिक अस्पष्ट चीजें यह जांचने के लिए कि एक सामयिक फ़ायरवॉल प्रशासक अनदेखी कर सकता है या अन्यथा जानने से लाभ उठा सकता है?

यहां तक ​​कि जब आप यूएफडब्ल्यू , फायरवॉल (उर्फ firewall-cmd), शोरवेल या इसी तरह के टूलिंग का उपयोग करते हैं, तो आप एब्सट्रैक्शन परत के बिना हुड के नीचे देखने से लाभ उठा सकते हैं।

यह सवाल फायरवॉल के निर्माण के लिए एक कैसे-के रूप में इरादा नहीं है: जाँच उत्पाद दस्तावेज़ उस के लिए और उदाहरण के लिए के लिए व्यंजनों योगदान iptables यात्राओं और ट्रिक्स या खोज टैग मौजूदा के लिए सवाल बार-बार और अच्छी तरह से माना उच्च स्कोरिंग क्यू एंड ए के।


1
NAT और स्टेटफुल नियमों के बारे में क्या जो प्रदर्शन को बेहतर बनाने और सुरक्षा बढ़ाने के लिए श्रृंखला में पहले रखे जा सकते हैं?
मैट

1
@Matt: फ़ायरवॉल नियमों के अनुकूलन अपने आप में और इस क्यू एंड ए मैं में एक पूरा क्यू एंड ए है पहले के एक जवाब मैं दे दी है पर विस्तार नहीं होगा यहाँ
HBruijn

1
यदि आप उस नियम तक नहीं पहुंचते हैं जो आपको IPtables में होना चाहिए, तो एक समान लॉग नियम जोड़ें और जब तक आप लॉग संदेश प्राप्त नहीं करते तब तक श्रृंखला को आगे बढ़ाएं। फिर, इसके नीचे के नियमों में से एक नियम होगा जो आपके पैकेट पर गलत तरीके से मेल खाता है।
मैथ्यू इफ

1
ओह और net.netfilter.nf_conntrack_log_invalid255 पर सेट करने से अमान्य पैकेट पर बहुत अच्छी तरह से कब्जा हो जाएगा जो खराब व्यवहार का उत्पादन करने वाले नेटफिल्टर दैट्स के राज्य का हिस्सा होने पर मदद कर सकता है।
मैथ्यू इफ

जवाबों:


14

सामान्य रूप में:

फ़ायरवॉल कॉन्फ़िगरेशन को देखने और संशोधित करने के लिए व्यवस्थापक विशेषाधिकारों ( root) की आवश्यकता होती है क्योंकि प्रतिबंधित पोर्ट नंबर रेंज में सेवाएं खोलना आवश्यक है। इसका मतलब है कि आपको कमांड को रूट के रूप में चलाने के लिए rootया तो लॉग इन होना चाहिए या वैकल्पिक रूप से उपयोग करना चाहिए sudo। मैं वैकल्पिक के साथ ऐसे आदेशों को चिह्नित करने का प्रयास करूंगा [sudo]

सामग्री:

  1. आदेश मायने रखता है -Iऔर के बीच अंतर-A
  2. वर्तमान फ़ायरवॉल कॉन्फ़िगरेशन प्रदर्शित करें
  3. के ouput की व्याख्या करना iptables -L -v -n
  4. अपने पर्यावरण को जानें
  5. INPUT और FORWARD चेन
  6. कर्नेल मॉड्यूल

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

रिबूट के दौरान मॉड्यूल को सुनिश्चित करने के लिए लगातार लोड किए जाने की विधि लिनक्स वितरण पर निर्भर करती है।


1
वेतन वृद्धि पैकेट / बाइट काउंटरों की तलाश में। एक उपयोगी उपकरण अंतर मोड में घड़ी का उपयोग करना है। तो कुछ इस तरह से watch --difference -n 1 iptables -L FORWARD -v -n:। टूल को समय-समय पर कमांड को चलाने और परिवर्तनों को हाइलाइट करने से यह बहुत आसान हो जाता है।
Zoredache

1
मैंने आपकी सुस्त टिप्पणी देखी। यह एक अच्छा जवाब है, यकीन नहीं कि मैं बहुत कुछ जोड़ सकता हूं। आप TRACE सुविधा का उपयोग करने का उल्लेख शामिल करना चाह सकते हैं ।
Zoredache

मैं इस खूंखार (विभिन्न तर्कों के साथ) आउटपुट पर हर बार iptables-save(अधिमानतः ) ले जाऊंगा। -ciptables -L
0xC0000022L

7

विभिन्न प्रोटोकॉल के साथ सामान्य मुद्दे

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

ईमेल: कई उपभोक्ता आईएसपी के ब्लॉक एसएमटीपी ट्रैफ़िक (या कम से कम डिफ़ॉल्ट पोर्ट टीसीपी 25), जिससे सीधे ईमेल प्राप्त करना या भेजना असंभव हो जाता है और उनके ग्राहक सभी आउटगोइंग ईमेल के लिए और कभी-कभी आने वाले ईमेल के लिए भी आईएसपी के एसएमटीपी रिले का उपयोग करने के लिए मजबूर हो जाते हैं। । §1.1 से संबंधित है।

एफ़टीपी: एफ़टीपी एक अजीब प्रोटोकॉल है इस संबंध में कि दो कनेक्शन का उपयोग किया जाता है। पहला नियंत्रण कनेक्शन है, डिफ़ॉल्ट रूप से एक एफ़टीपी सर्वर उसके लिए टीसीपी पोर्ट 21 पर सुनेंगे। नियंत्रण कनेक्शन का उपयोग प्रमाणीकरण और आदेश जारी करने के लिए किया जाता है। वास्तविक फ़ाइल स्थानांतरण और चीजें जैसे डायरेक्टरी लिस्टिंग का आउटपुट दूसरे टीसीपी कनेक्शन, डेटा कनेक्शन पर जाता है। सक्रिय एफ़टीपी में कि टीसीपी पोर्ट 20 से एफ़टीपी सर्वर से डेटा कनेक्शन शुरू किया जाएगा और एफ़टीपी क्लाइंट से कनेक्ट होगा। सक्रिय एफ़टीपी फ़ायरवॉल और NAT गेटवे के पीछे उपयोगकर्ताओं के साथ बहुत अच्छा काम नहीं करता है, इसलिए यह ज्यादातर उपयोग में नहीं आता है। अधिकांश FTP सर्वर इसके बजाय निष्क्रिय FTP को सपोर्ट करते हैं। पैसिव एफ़टीपी के साथ एफ़टीपी सर्वर दूसरे पोर्ट पर डेटा कनेक्शन के लिए एक श्रोता को खोलता है, जिससे एफ़टीपी क्लाइंट फिर कनेक्ट हो सकता है। एक फ़ायरवॉल के लिए समस्या यह है कि DATA पोर्ट 1024-65536 के बीच कोई भी उपलब्ध unprivilged पोर्ट हो सकता है।

एक निष्क्रिय फ़ायरवॉल में जो आम तौर पर उन निष्क्रिय बंदरगाहों की संख्या को सीमित करके हल किया जाता है जो एफ़टीपी सर्वर असाइन कर सकते हैं और फिर स्पष्ट रूप से उन पोर्टों को खोल सकते हैं। अर्थात

iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT

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

  iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT

इसके लिए आवश्यक है कि सही कर्नेल मॉड्यूल को लोड किया जाए, उदाहरण के लिए insmod nf_conntrack_ftp, एफ़टीपी मामले में मैन्युअल रूप से चलाकर , यह सुनिश्चित करना कि लगातार रिबूट वितरण पर निर्भर करता है।

नोट: FTP कनेक्शन ट्रैकिंग मॉड्यूल तब विफल हो जाएगा जब FTP का उपयोग SSL के साथ किया जाता है, क्योंकि नियंत्रण कनेक्शन एन्क्रिप्ट किया जाएगा और nf_conntrack_ftp अब PASV repsonse नहीं पढ़ पाएगा।

एनएफएस और इसी तरह की आरपीसी सेवाएं: आरपीसी सेवाओं के साथ समस्या यह है कि डिजाइन द्वारा वे एक विशिष्ट निश्चित पोर्ट का उपयोग नहीं करते हैं। वे यादृच्छिक पर किसी भी उपलब्ध पोर्ट को चुन सकते हैं, जिसे तब आरपीसी पोर्टमैप डेमॉन के साथ पंजीकृत किया जाएगा। कनेक्ट करने का प्रयास करने वाला क्लाइंट पोर्टमैप डेमॉन को क्वेरी करेगा और फिर सीधे सही पोर्ट से कनेक्ट करेगा। आरक्षित बंदरगाहों से बाहर निकलने की समस्या का समाधान ...

फ़ायरवॉल परिप्रेक्ष्य से टीसीपी / यूडीपी पोर्ट 111 को खोलने की आवश्यकता है और वास्तविक पोर्ट जो वर्तमान में आरपीसी सेवा का उपयोग कर रहा है। फ़ायरवॉल में इस तरह के एक यादृच्छिक पोर्ट को खोलने की समस्या को आमतौर पर एक निश्चित फिक्स्ड पोर्ट का उपयोग करने के लिए RFS सेवा, जैसे NFS सर्वर को प्रतिबंधित करके हल किया जाता है।


7

Iptables / फ़ायरवॉल "परिचय"

फ़ायरवॉल मूल रूप से एक नीति-आधारित नेटवर्क फ़िल्टर है। नेटफिल्टर के चारों ओर लिनक्स फायरवॉल बनाए गए हैं; कर्नेल के नेटवर्क पैकेट प्रोसेसिंग फ्रेमवर्क जो विशिष्ट कार्यों को करने वाले कई कर्नेल मॉड्यूल से बना है:

  1. फिल्टर मॉड्यूल (हमेशा डिफ़ॉल्ट रूप से लोड) मुख्य रूप से हमें एक निश्चित मिलान मानदंडों के आधार पर ACCEPT या DROP IP पैकेट की अनुमति देता है।
  2. NAT मॉड्यूल सेट हमें नेटवर्क एड्रेस ट्रांसलेशन (SNAT, DNAT, MASQUERADE) करने की अनुमति देता है।
  3. MANGLE मॉड्यूल हमें कुछ IP पैकेट फ़ील्ड (TOS, TTL) को बदलने की अनुमति देता है।

उपयोगकर्ता कमांड लाइन से iptables का उपयोग करके अपनी फ़ायरवॉल आवश्यकताओं के अनुरूप नेटफिल्टर फ्रेमवर्क को कॉन्फ़िगर करते हैं। Iptables के साथ हम उन नियमों को परिभाषित करते हैं जो कर्नेल को निर्देश देते हैं कि आईपी पैकेट के साथ क्या करें, जब वे आते हैं, तो वहां से गुजरते हैं, या हमारे लिनक्स बॉक्स को छोड़ देते हैं। प्रत्येक नेटफिल्टर मुख्य प्रक्रिया को iptables lingo पर एक TABLE (FILTER, NAT, MANGLE) द्वारा दर्शाया गया है। उनके पास नेटवर्क पैकेट प्रवाह मानचित्र पर कई विशिष्ट हुक बिंदु हैं जहां वे कर्नल द्वारा अपने कर्तव्यों को पूरा करने के लिए लगाए जाते हैं। TABLE कॉल के कुछ विशेष रूप से स्थित अनुक्रमों को आमतौर पर अंतर्निहित CHAINS कहा जाता है जो PREROUTING, INPUT, FORWARD, OUTPUT और POSTROUTING के नाम प्राप्त करते हैं। यह याद रखना आसान है कि क्या हम एक "प्रकार की प्रक्रिया" के साथ एक टेबल को जोड़ते हैं और नेटवर्क पैकेट फ्लो मैप पर "स्थान" के साथ एक चेन को जोड़ते हैं जहां उन प्रक्रियाओं के उदाहरणों को लागू किया जाता है।

यहाँ छवि विवरण दर्ज करें

चूंकि आईपी पैकेट एक नेटवर्क इंटरफेस पर प्राप्त होता है, या एक स्थानीय प्रक्रिया द्वारा बनाया जाता है, जब तक कि इसे अंतिम रूप से वितरित या खारिज नहीं किया जाता है, नेटफिल्टर इंजन क्रमिक रूप से परीक्षण करेगा और नेटवर्क पैकेट प्रवाह मानचित्र के साथ निहित नियमों को लागू करेगा। टेबल @ चैन जोड़ी द्वारा पहचाने जाने वाले प्रत्येक ब्लॉक में उपयोगकर्ता आईपी पैकेट मिलान मापदंड और कार्रवाई के संबंधित पाठ्यक्रम के इन लगातार नियमों में से एक या अधिक जोड़ सकते हैं। ऐसी क्रियाएं (यानी ACCEPT, DROP, आदि) हैं जिन्हें एक से अधिक TABLE और अन्य कार्यों (यानी SNAT, DNAT, आदि) द्वारा किया जा सकता है जो TABLE विशिष्ट हैं।

जब एक आईपी पैकेट एक नेटवर्क इंटरफ़ेस से आता है, तो इसे पहली बार MERLE तालिका उपयोगकर्ता परिभाषित नियमों को लागू करने वाले PREROUTING श्रृंखला द्वारा संसाधित किया जाता है। यदि ऐसे नियम नहीं हैं जो वर्तमान पैकेट से संबंधित MANGLE @ PREROUTING डिफ़ॉल्ट कोर्स ऑफ एक्शन या "नीति" लागू होते हैं। इस बिंदु पर यदि पैकेट नहीं गिराया गया था तो प्रक्रिया अब जारी रहेगी NAT तालिका के नियमों को PREROUTING श्रृंखला (मानचित्र देखें) और इसी तरह। नियमों के लेआउट को सुविधाजनक बनाने के लिए, उपयोगकर्ता अपनी इच्छानुसार अपनी खुद की कस्टम चेन और "जंप" भी मैप के विभिन्न बिंदुओं से बना सकते हैं।

यहाँ छवि विवरण दर्ज करें

हालांकि अंतर्निहित श्रृंखलाओं में ACCEPT या DROP पैकेटों की उपयोगकर्ता परिभाषित नीतियां हो सकती हैं, उपयोगकर्ता परिभाषित श्रृंखलाओं में प्रक्रिया को जारी रखने के लिए कॉल करने के लिए RETURN की एक अपरिवर्तनीय डिफ़ॉल्ट नीति आवंटित होती है।

Iptables आदेश

Iptables मुख्य कमांड नेटवर्क पैकेट प्रवाह मानचित्र को आवश्यक प्रसंस्करण नियमों के साथ आबाद करते हैं।

जेनेरिक iptables नियम को इस प्रकार लिखा जा सकता है:

# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>

इसे ऐसे पढ़ा जा सकता है:

Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed

<table>
  -t filter       (the filter table is assumed when omitted)
  -t nat
  -t mangle 

<Add/Insert/Delete>
  -A              (append rule at the end of the chain list)
  -I              (insert rule at the begining of the chain list)
  -D              (Delete rule)

<CHAIN>
  PREROUTING
  INPUT
  FORWARD
  OUTPUT
  POSTROUTING
  USER_DEFINED_CHAIN

<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
  -i [!] <if_name>    or --in-interface [!] <if_name>
          (OUTPUT and POSTROUTING chains cannot match on input  interfaces)
  -o [!] <if_name>    or --out-interface [!] <if_name>
          (INPUT  and PREROUTING  chains cannot match on output interfaces) 
    -mac-source [!] <xx-xx-xx-xx-xx-xx>
            (OUTPUT and POSTROUTING chains cannot match on input  interfaces)

ISO Level-3 matching:
  -s [!] <src_ip>     or --src [!] <src_ip>   or --source [!] <src_ip>
  -d [!] <dst_ip>     or --src [!] <dst_ip>   or --destination [!] <dst_ip>

ISO Level-4 matching:
  -p [!] <prot_name>    or --protocol [!] <prot_name>  (udp|tcp|icmp)

  Also available when ICMP protocol is defined
  --icmp-type [!] <icmp_type>

  Also available when UDP protocol is defined
  --source-port [!] <udp_src_port>      or --sport [!] <udp_src_port>
  --destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>

  Also available when TCP protocol is defined
  --source-port [!] <tcp_src_port>      or --sport [!] <tcp_src_port>
  --destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
  --tcp-flags [!] <tcp_flags>   (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
    --syn
  --tcp-option [!] <tcp_option#>

  --state [!] <state>
  -m <match> [options]

    note: [!] = negation operator

<ACTION>                (also called TARGET)
  -j ACCEPT             (process continues with rules of the next table in map)
  -j DROP               (discard current packet)
  -j REJECT             (discard current packet with ICMP notification)
      option:
      --reject-with <reject_type>
  -j USER_DEFINED_CHAIN   (start traversing USER_DEFINED_CHAIN rules)
  -j RETURN               (return from USER_DEFINED_CHAIN)
  -j LOG                  (log to syslog, then process next rule in table)
      options:
      --log-level <level>
      --log-prefix <prefix>
      --log-tcp-sequence
      --log-tcp-options
      --log-ip-options
      --log-uid

nat table specific
  -j SNAT             (rewrite the source IP address of the packet)
      option:
      --to <ip_address>
  -j SAME             (idem SNAT; used when more than one source address)
      options:
      --nodst 
      --to <a1-a2>
  -j MASQUERADE       (idem SNAT; used when the replace IP is dynamic)
  -j DNAT             (rewrite the destination IP address of the packet)
      option:
      --to <ip_address>
  -j REDIRECT         (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
      option:
      –-to-port <port#>

mangle table specific
  -j ROUTE            (explicitly route packets, valid at PREROUTING)
      options:
      --iface <iface_name>
      --ifindex <iface_idx>
  -j MARK             (set Netfilter mark values)
      options:
      --set-mark <value>
      --and-mark <value>
      --or-mark <value> 
  -j TOS              (set the IP header Type of Service field) 
      option:
      --set-tos <value>
  -j DSCP             (set the IP header Differentiated Services Field)
      options:
      --set-dscp <value>
      --set-dscp-class <class>
  -j TTL              (set the IP header Time To Live field)
      options:
      --ttl-set <value>
      --ttl-dec <value>
      --ttl-inc <value>

Iptables सहायक कमांड डिफॉल्ट कॉन्डिट्स, लिस्टिंग रूल्स, फ्लशिंग रूल्स इत्यादि सेट करने वाले परिदृश्य को पूरा करती है।

#iptables -t <table> -L             
       (Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>     
       (Lists the <table> rules in <CHAIN>)

#iptables -t <table> -N <CHAIN>     
       (Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>  
       (Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)

#iptables -t <table> -X   
       (Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
       (Deletes user-defined <CHAIN> created for holding <table> rules)

#iptables -t <table> -P <CHAIN> <ACTION>     where <ACTION> = ACCEPT|DROP
       (Sets the default policy of <table> rules at <CHAIN> to <ACTION>)

#iptables -t <table> -F             
       (Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
       (Flushes (deletes) all <table> rules in <CHAIN>)

#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
       (Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>

Iptables रनटाइम में हमारे कमांड को नेटफिल्टर इंजन में लोड करता है, नेटफिल्टर इनवर्डेटली लोड किए गए नियमों और सेटिंग्स को लागू करता है लेकिन वे निरंतर नहीं हैं। पहले से लोड किए गए नेटफिल्टर के सभी नियमों को अफोर्ड करें और सेटिंग्स खो जाएंगी। इस कारण से iptables उपयोगिताओं हैं जो वर्तमान में सक्रिय नियमों को एक फ़ाइल में सहेजने और बाद में इसे फिर से लोड करने की अनुमति देती हैं।

#iptables-save > fileName
      (Save the currently active Netfilter ruleset to fileName)

#iptables-restore < fileName
      (Restore Netfilter ruleset to the one saved in fileName)

Iptables सारांश

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

फायरवॉल

एक फ़ायरवॉल मुख्य रूप से नियमों के एक सेट के आधार पर गतिशील रूप से नेटवर्क ट्रैफ़िक को अनुमति देने या अस्वीकार करने के लिए डिज़ाइन किया गया है। इस बिंदु पर यह समझना आसान है कि फ़ायरवॉल निर्माण के लिए लिनक्स नेटफिल्टर / Iptables फ्रेमवर्क क्यों सही है। नेटवर्क पैकेट फ्लो मैप को देखते हुए हमें INPUT और FORWARD श्रृंखलाओं में फिल्टर टेबल पर दो विशेष रूप से दिलचस्प स्पॉट मिले; अगर हम ACCEPT, REJECT, या सिर्फ एक विशेष IP पैकेट को छोड़ देते हैं, तो हम IP सोर्स एड्रेस, IP प्रोटोकॉल (UDP / TCP), डेस्टिनेशन पोर्ट (80, 21, 443, आदि) आदि पर फैसला कर सकते हैं। यह वह है जो फ़ायरवॉल 80% उस समय करता है जब एक वेब सर्वर को अनधिकृत नेटवर्क अनुरोधों से बचाता है। अन्य 20% समय में हेरफेर हो रहा है (NAT, MANGLE) नेटवर्क पैकेट।

फ़ायरवॉल परिदृश्य

सैकड़ों अलग-अलग फ़ायरवॉल लेआउट हैं जो विभिन्न आवश्यकताओं को जोड़ते हैं लेकिन उनमें से 3 को सबसे विशिष्ट फ़ायरवॉल परिदृश्य माना जा सकता है।

  1. इंटरनेट से जुड़े एक या अधिक इंटरफेस वाला सरल वेब सर्वर। नीति में प्रतिबंधित इनबाउंड एक्सेस, अप्रतिबंधित आउटबाउंड एक्सेस और एंटी-स्पूफिंग नियमों को अनुमति देने के लिए बुनियादी नियम शामिल हैं। आईपी ​​अग्रेषण बंद है।
  2. यह फ़ायरवॉल इंटरनेट और एक संरक्षित आंतरिक क्षेत्र से जुड़ता है। नीति में प्रतिबंधित इनबाउंड एक्सेस, अप्रतिबंधित आउटबाउंड एक्सेस और एंटी-स्पूफिंग नियमों को अनुमति देने के लिए बुनियादी नियम शामिल हैं। चूंकि संरक्षित क्षेत्र निजी आईपी पते स्रोत का उपयोग करता है इसलिए एनएटी की आवश्यकता है। आईपी ​​अग्रेषण जारी है।
  3. यह फ़ायरवॉल इंटरनेट, आंतरिक संरक्षित और डिमिलिटरीकृत क्षेत्र से जुड़ता है। नीति में प्रतिबंधित इनबाउंड एक्सेस, अप्रतिबंधित आउटबाउंड एक्सेस और एंटी-स्पूफिंग नियमों को अनुमति देने के लिए बुनियादी नियम शामिल हैं। चूंकि संरक्षित और DMZ क्षेत्र निजी आईपी पते का उपयोग करते हैं, उन्हें स्रोत और गंतव्य NAT की आवश्यकता होती है। आईपी ​​अग्रेषण जारी है। यहाँ छवि विवरण दर्ज करें

मैंने इसके लिए यह लिखा है: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.