सर्वर और क्लाइंट दोनों के लिए प्रतिबंधात्मक INPUT
और खुला होना OUTPUT
, अर्थात:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
और सक्रिय मोड में FTP के उदाहरण पर iptables- एक्सटेंशन (8) से:
1. नया
नए पैकेट ने एक नया कनेक्शन शुरू किया है या अन्यथा एक ऐसे कनेक्शन के साथ जुड़ा हुआ है जिसने दोनों दिशाओं में पैकेट नहीं देखा है।
पोर्ट पर क्लाइंट 50000
(कोई भी यादृच्छिक अनपेक्षित पोर्ट) पोर्ट पर FTP सर्वर से कनेक्ट 21
होता है, इस आवक कनेक्शन को स्वीकार करने के लिए सर्वर को कम से कम इसकी आवश्यकता होगी:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. स्थापित
ESTABLISHED पैकेट एक कनेक्शन से जुड़ा होता है, जिसमें दोनों दिशाओं में पैकेट देखे जाते हैं।
अब क्लाइंट की ओर से, उसने पोर्ट पर सर्वर के लिए एक आउटगोइंग कनेक्शन को 21
स्थानीय पोर्ट का उपयोग करके खोला 50000
और उसे निम्नलिखित iptables की आवश्यकता server (21)
है client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. संबंधित
संबंधित पैकेट एक नया कनेक्शन शुरू कर रहा है, लेकिन मौजूदा कनेक्शन से जुड़ा है, जैसे कि एफ़टीपी डेटा ट्रांसफर या आईसीएमपी त्रुटि।
अब एफ़टीपी कनेक्शन स्थापित होने के बाद और एक डेटा कनेक्शन का प्रदर्शन किया जाने वाला है, क्लाइंट पोर्ट पर 60000
( सर्वर एफ़टीपी क्लाइंट डेटा कनेक्शन के लिए सर्वर बन जाता है) के साथ एक सर्वर सॉकेट खोलेगा (मेरी समझ से क्लाइंट इस पोर्ट को चिह्नित करेगा से अन्य कनेक्शन के 60000
रूप में ) और FTP कमांड का उपयोग करके इस पोर्ट नंबर को सर्वर पर भेज देगा । तब एफ़टीपी सर्वर क्लाइंट पर पोर्ट के लिए एक नया कनेक्शन खोल देगा , और अच्छी तरह से, क्लाइंट को अब इस नए कनेक्शन को सफल होने देने के लिए निम्नलिखित की आवश्यकता होगी:RELATED
50000->21
PORT
20
60000
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
अंत में, काम करने के लिए आपको ip_conntrack_ftp
कर्नेल मॉड्यूल को सक्षम करने की आवश्यकता है ताकि सिस्टम कनेक्शन / पैकेजों को चिह्नित कर सके RELATED
(यह मेरी समझ है, मैंने इस पर बहुत ज्यादा खुदाई नहीं की है):
modprobe ip_conntrack_ftp