आने वाले एफ़टीपी की अनुमति देने के लिए Iptables


32

मैं आने वाले एफ़टीपी यातायात की अनुमति देना चाहता हूं।

CentOS 5.4:

यह मेरी /etc/sysconfig/iptablesफाइल है।

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

इसके अलावा, डिफ़ॉल्ट रूप से, ip_conntrack_netbios_n मॉड्यूल लोड हो रहा है।

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

लेकिन समस्या उस मॉड्यूल के साथ नहीं है, जैसा कि मैंने इसे उतारने की कोशिश की और फिर भी किस्मत नहीं।

यदि मैं iptables को अक्षम करता हूं, तो मैं अपने बैकअप को दूसरी मशीन से FTP में स्थानांतरित करने में सक्षम हूं। यदि iptables लागू हो रहा है, तो स्थानांतरण विफल हो गया।

जवाबों:


27

डेटा ट्रांसफर करने के लिए आपके ftp सर्वर को एक चैनल की आवश्यकता होती है। पोर्ट 21का उपयोग कनेक्शन स्थापित करने के लिए किया जाता है। इसलिए डेटा ट्रांसफर संभव बनाने के लिए आपको पोर्ट भी सक्षम करना होगा 20। निम्नलिखित विन्यास देखें

सुनिश्चित करें कि निष्क्रिय ftp कनेक्शन अस्वीकार नहीं किया गया है बनाने के लिए पहले निम्न मॉड्यूल लोड करें

modprobe ip_conntrack_ftp

पोर्ट 21इनकमिंग और आउटगोइंग पर FTP कनेक्शन की अनुमति दें

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

20आने वाले और बाहर जाने वाले सक्रिय कनेक्शनों के लिए FTP पोर्ट की अनुमति दें

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

अंत में FTP निष्क्रिय इनबाउंड ट्रैफ़िक की अनुमति दें

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

एफ़टीपी और फ़ायरवॉल समस्याओं पर अधिक जानकारी के लिए देखें: http://slacksite.com/other/ftp.html#active

संपादित करें:NEW पोर्ट 21 इनपुट नियम में जोड़ा गया ।


2
मैं यह बताना भूल गया कि --sport 1024: and --dport 1024:इसका मतलब यह है कि हम सभी पोर्ट्स को उस श्रेणी में 1024:32535शामिल कर रहे हैं जो अनपेक्षित पोर्ट्स हैं, जिसका अर्थ है कि बिना विशेषाधिकार वाले उपयोगकर्ता इन पोर्ट का उपयोग अपने अनुप्रयोगों का परीक्षण करने के लिए कर सकते हैं।
वैलेंटाइन बजरमी

@ बीइंग गोकुल, यह सही है। हम अपने सर्वर को क्लाइंट कनेक्शन के लिए किन पोर्ट्स पर सुनना चाहिए, इस पर नियंत्रण कर सकते हैं। हालांकि एक निष्क्रिय मोड में, हमें --sportफ़ायरवॉल की समस्याओं का सामना करने और क्लाइंट को सर्वर से कनेक्ट करने के लिए एक अनपेक्षित मोड का उपयोग करना होगा ।
वैलेंटाइन बजरमी

2
ठीक है, आप जोड़ सकते हैं NEW,ESTABLISHEDलेकिन यह बात नहीं होनी चाहिए। एक कनेक्शन पहले एक NEWराज्य में हमेशा होता है फिर यह कूदता है RELATEDजो दर्शाता है कि यह कनेक्शन पहले से ही स्वीकृत कनेक्शन से संबंधित है। जब कनेक्शन में परिवर्तन होता ESTABLISHEDहै तो यह बताता है कि कनेक्शन दोनों पक्षों (सर्वर / क्लाइंट) पर स्थापित किया गया है। आप -m state --state ...इसके बजाय कोशिश कर सकते हैं ।
वैलेंटाइन बजरमी

1
NEWवास्तव में कोई फर्क पड़ता है। यह इसके बिना काम करने के लिए प्रतीत नहीं होता है।
लिएंड्रोस

1
@ val0x00ff मुझे इसकी आवश्यकता समझ में नहीं आती है --sport 1024:। क्लाइंट का पोर्ट नियम के लिए उपयोगी क्यों होगा? यदि वह पोर्ट 80 से सर्वर के पैसिव पोर्ट से कनेक्ट होता है, तो उसे भी कनेक्ट करने की अनुमति दी जानी चाहिए।
यवन

15

मैंने इस तरह के व्यापक नियम पहले से ही कई ब्लॉग्स आदि में देखे और सोचा कि क्यों न बस इसका उपयोग किया जाए

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

nf_conntrack_ftpमॉड्यूल के साथ । यह अधिक संक्षिप्त और पठनीय है, जो आम तौर पर एक अच्छी बात है, खासकर फायरवॉल के साथ ...

Fwiw, ऐसा लगता है कर्नेल 4.7 में एक परिवर्तन किया गया है, ताकि आप सेट करने के लिए या तो जरूरत net.netfilter.nf_conntrack_helper=1के माध्यम से sysctl(उदाहरण के लिए यह में डाल /etc/sysctl.d/conntrack.conf) या उपयोग

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

( अधिक जानकारी के लिए यहां देखें)


1
कर्नेल 4.7 के बारे में जानकारी ने मेरे जीवन को बचाया, यह काम करने के लिए घंटों से कोशिश कर रहा था। एक सरल echo "1" > /proc/sys/net/netfilter/nf_conntrack_helperऔर सब कुछ उम्मीद के मुताबिक काम करता है।
कीपर

1
महान! 4.7 मैं जेसी कर्नेल 4.9 पर हल नहीं कर सका समस्या थी!
अरुणास बार्टियस

@Jakob संबंधित कनेक्शन के साथ एक समस्या है जिसका उपयोग अन्य सेवाओं तक पहुंचने के लिए किया जा सकता है: home.regit.org/wp-content/uploads/2011/11/… और github.com/rtsisyk/linux-iptables-contrack-exploit
Yvan

6

एफ़टीपी ग्राहक:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP सर्वर:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

क्लाइंट पक्ष पर निष्क्रिय और सक्रिय मोड के बीच टॉगल करने के लिए

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

3
आप निश्चित रूप से इसके लिए कुछ उत्थान के पात्र हैं। निष्क्रिय FTP कनेक्शन और iptables कनेक्शन ट्रैकिंग की समस्या निवारण करते समय nf_conntrack_ftp मॉड्यूल लोड करने के लिए सिरदर्द सिरदर्द का एक स्रोत है। इस मॉड्यूल का उपयोग करने से आप "नया" प्रकार को हटा सकते हैं ताकि इन बंदरगाहों को पिछले एफटीपी सत्र की स्थापना के बिना मनमाने कनेक्शन से सुरक्षित किया जा सके।
रयान ग्रिग्स

5

NEW ने इसे जोड़ा, मुझे विश्वास है।

अब, मेरी iptables फ़ाइल इस तरह दिखती है ..

# Generated by iptables-save v1.3.5 on Thu Oct  3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]

-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct  3 22:25:54 2013

इसे उत्तर के रूप में टाइप करना, क्योंकि बहुत सारे पात्रों को टिप्पणी में अनुमति नहीं है .. आपकी मदद के लिए बहुत बहुत धन्यवाद।


2
यह काम किया और खुशी है कि मैंने आपको सही दिशा की ओर इशारा किया। कृपया अपने स्वयं के उत्तर को हल के रूप में चिह्नित करें ताकि आप अन्य लोगों की मदद करें जो सही उत्तर के लिए तलाश करते हैं।
वैलेंटाइन बजरमी

मेरा मानना ​​है कि स्वीकृत उत्तर में एक टाइपो है। मेरा मानना ​​है कि --dport 20:65535किसी भी स्रोत पोर्ट से 1024: 65535 के बीच खुले 20 - 65535 से सभी पोर्ट छोड़ रहे हैं, जो कई सेवाओं को उजागर करता है जो शायद तब तक नहीं होने चाहिए, जब तक कि स्पष्ट रूप से अनुमति नहीं दी जाती है। मेरा मानना ​​है कि इरादा क्या था--dport 1024:65535
itnAAnti

0

यदि आपको सक्रिय और निष्क्रिय दोनों कनेक्शनों की आवश्यकता है, और पहले से ही ESTABLISHEDकनेक्शन स्वीकार करते हैं, जैसे:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

फिर आपको केवल पोर्ट 21 खोलने और निष्क्रिय बंदरगाहों के लिए एक विशेष नियम जोड़ने की आवश्यकता है। पोर्ट 20 के लिए किसी नियम की आवश्यकता नहीं है क्योंकि यह पहले से ही ESTABLISHEDऊपर के नियम द्वारा स्वीकार किया गया है।

पहले नए कनेक्शन स्वीकार करें port 21:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

फिर निष्क्रिय बंदरगाहों के लिए सीटी हेल्पर जोड़ें 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

यह भी देखें:

नोट: आप 1024:अपने एफ़टीपी सर्वर में सेट करना होगा : अपने एफ़टीपी विन्यास में डिफ़ॉल्ट निष्क्रिय बंदरगाहों के लिए खोज करें। एल्स आप बहुत सारे पोर्ट खोलेंगे जो एफ़टीपी सापेक्ष नहीं हो सकते हैं।

महत्वपूर्ण ध्यान दें: मैंने OUTPUTनियम नहीं जोड़े क्योंकि मेरी चूक के साथ चलते हैं iptables -P OUTPUT ACCEPT। मतलब कि मुझे भरोसा है कि मेरे बॉक्स से क्या निकल रहा है। यह एक अच्छा विकल्प नहीं हो सकता है, विशेषकर NAT सेटअप में।

बहुत महत्वपूर्ण नोट: एफटीपीएस ऐसे सेटअप के साथ काम नहीं करेगा, क्योंकि निष्क्रिय बंदरगाह छिपा हुआ (एन्क्रिप्टेड) ​​है, इसलिए iptablesअच्छे पोर्ट का अनुमान लगाने का कोई तरीका नहीं है । निष्क्रिय पोर्ट और https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok का उपयोग करके टीएलएस से अधिक FTP की अनुमति देने के लिए IPTables बदलना देखें

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