2012-05-01 15 views
11

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

#!/bin/bash 

IPT=/sbin/iptables 
$IPT -F 
$IPT -X 
$IPT -t nat -F 
$IPT -t nat -X 
$IPT -t mangle -F 
$IPT -t mangle -X 
/sbin/modprobe ip_conntrack 
/sbin/modprobe ip_conntrack_ftp 

# Setting default filter policy 
$IPT -P INPUT DROP 
$IPT -P OUTPUT ACCEPT 

# Allow FTP connections @ port 21 
$IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 

# Allow Active FTP Connections 
$IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 

# Allow Passive FTP Connections 
$IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT 

उत्तर

5

कि कोड ही इनकमिंग और आउटगोइंग एफ़टीपी कनेक्शन की अनुमति देता है। यह किसी और चीज में/बाहर की अनुमति नहीं देता है।

$IPT -P INPUT DROP 

सभी आने वाले यातायात को छोड़ देता है। तो यदि आप इसके साथ शुरू करते हैं, तो आप किसी भी अन्य सेवाओं में यातायात को सक्षम करना चाहते हैं जिसमें आप चलाना चाहते हैं।

$IPT -A INPUT -p tcp --sport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp --dport 21 -m state --state ESTABLISHED -j ACCEPT 

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

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

+1

पोर्ट 80 पर निष्क्रिय और सक्रिय मोड के बीच टॉगल करने के लिए ?! – machineaddict

+0

INPUT नया होना चाहिए, स्थापित किया जाना चाहिए। आउटपुट नहीं –

+0

सुधार के लिए धन्यवाद। फिक्स्ड। मैंने बस इसे टाइप किया और इसे एक दूसरे रूप में नहीं दिया। – hsanders

5

INPUT और OUTPUT लाइनों के लिए तर्क में फ़्लिप करने की आवश्यकता है # एफ़टीपी कनेक्शन @ पोर्ट 21 अनुभाग को अनुमति दें अन्यथा नए (सक्रिय) एफ़टीपी कनेक्शन अवरुद्ध किए जाएंगे।

# Allow FTP connections @ port 21 
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT 
6

आपका प्रश्न से मुझे लगता है कि आप इस तरह के वेब ब्राउज़र, मेल क्लाइंट, के रूप में क्षुधा की सामान्य सेट के साथ कुछ तुच्छ मेजबान है टेलनेट और हो सकता है | या ssh-ग्राहक, FTP ग्राहक भी हो सकता है, हो सकता है कुछ आईएम इत्यादि। और इन सभी ऐप्स को काम करने के साथ, आप अतिरिक्त रूप से इस होस्ट पर एक FTP सर्वर को कनेक्ट करने वाले ग्राहकों के लिए सक्रिय और निष्क्रिय मोड दोनों में काम करने की अनुमति देना चाहते हैं। इस मामले में लागू नियमों के 3 ब्लॉक यहां दिए गए हैं। सामान्य नियमों का ब्लॉक अधिकांश क्लाइंट होस्ट के लिए लागू नियमों का न्यूनतम सेट है। एफटीपी-क्लाइंट के लिए नियमों का ब्लॉक अगला है, यदि आपके पास ऐसा होस्ट है। एफटीपी-क्लाइंट के लिए नियम अन्य ग्राहकों के नियमों से थोड़ा अलग हैं: डाटा ट्रांसफर को सक्षम करने के लिए हमेशा दो कनेक्शन होते हैं: एफटीपी-कंट्रोल (पोर्ट 21) और एफटीपी-डेटा (सक्रिय मोड में पोर्ट 20 या निष्क्रिय मोड में यादृच्छिक बंदरगाह)। आपको संभवतः सक्रिय मोड के लिए क्लाइंट नियमों की आवश्यकता नहीं होगी क्योंकि निष्क्रिय मोड एनएटीड नेटवर्क के लिए एकल विकल्प है।

एफ़टीपी सर्वर के नियम अंतिम ब्लॉक में हैं।

कृपया जांच करें आप ip_conntrack_ftp कर्नेल में है (nf_conntrack_ftp नाम दिया जा सकता):, अलग

> lsmod | grep conn 

आप इस कर्नेल मॉड्यूल नहीं है, तो, 'संबंधित' नियम और सबसे शायद काम नहीं करेगा प्राथमिक ftp-control कनेक्शन 'PORT' कमांड के बाद कहीं भी लटका होगा, तो FTP-data कनेक्शन प्रारंभ नहीं होगा। आप अभी भी इस मामले में एफटीपी-डेटा कनेक्शन को लागू कर सकते हैं, लेकिन tweaked नियमों द्वारा प्रदान की गई अपमानजनक सुरक्षा के खर्च पर। नियम नियमों से पहले टिप्पणियों में हैं।

प्रो

#!/bin/bash 
IPT=/sbin/iptables 

$IPT -F 
$IPT -t nat -F 
$IPT -t mangle -F 

$IPT -X 
$IPT -t nat -X 
$IPT -t mangle -X 

/sbin/modprobe ip_conntrack 
/sbin/modprobe ip_conntrack_ftp 

$IPT -P INPUT DROP 
$IPT -P FORWARD DROP 
$IPT -P OUTPUT DROP 

# Block of common rules ##################################################### 
$IPT -A OUTPUT -o lo -j ACCEPT 
$IPT -A INPUT -i lo -j ACCEPT 

$IPT -A OUTPUT -p icmp -j ACCEPT 
$IPT -A INPUT -p icmp -j ACCEPT 

# allow DNS queries and replies 
$IPT -A OUTPUT -p udp --dport 53 -j ACCEPT 
$IPT -A INPUT -p udp --sport 53 -j ACCEPT 

# allow all Your possible client applications to work 
$IPT -A OUTPUT -p tcp -m multiport --dports ssh,telnet,http,https,xmpp-client,aol,smtp,pop3,imap2,imap3 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
$IPT -A INPUT -p tcp -m multiport --sports ssh,telnet,http,https,xmpp-client,aol,smtp,pop3,imap2,imap3 -m state --state RELATED,ESTABLISHED -j ACCEPT 
# End of block of common rules ############################################## 


# If You have ftp-client too, this block of rules 
# will allow it to work with external ftp servers in both modes. 
# 
# First, allow ftp-control at client side: 
$IPT -A OUTPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT 
# 
# Then allow ftp-data Active Mode at client side: 
# Client accepts RELATED connection from server port 20 
# to client port number negotiated in ftp-control connection. 
# nf_conntrack_ftp is REQUIRED at client host 
# to pick up this client port number from payload of ftp-control packets, 
# otherwise You are forced to use 'NEW' instead of 'RELATED'. 
# And in the case of 'NEW' You allow connection to ANY port of Your host! 
$IPT -A INPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 
# 
# Finally, allow ftp-data Passive Mode at client side: 
# Client starts RELATED connection from random own high port number 
# to server fixed high port number negotiated in ftp-control connection. 
# nf_conntrack_ftp is REQUIRED again at client host 
# to pick up this client port number from payload of ftp-control packets, 
# otherwise You are forced to use 'NEW' instead of 'RELATED' ! 
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT  

#######[ Block of rules needed for Local FTP Server ]####### 
# This block of rules allows clients to access Your FTP server at this host 
# either in Active or Passive mode. 
# You may need to enable Passive mode in FTP server config file, 
# e.g. with pasv_enable=yes in /etc/vsftpd.conf if vsftpd is Your choice. 
# 
# Ftp-control at server side: 
# (some example rules are given below just to show 
# how You can selectively restrict access to Your FTP server): 
$IPT -A INPUT -s 1.2.3.0/24 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A INPUT -s 5.6.7.8/32 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT 
# 
# Ftp-data Active Mode at server side: 
# Server starts RELATED connection from server port 20 
# to client port number negotiated in ftp-control connection. 
# nf_conntrack_ftp is REQUIRED to pick up this client port number 
# from payload of ftp-control packets, 
# otherwise You are forced to use 'NEW' instead of 'RELATED' ! 
$IPT -A OUTPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 
# 
# Ftp-data Passive Mode at server side: 
# Server accepts RELATED client connection from random client high port number 
# to own fixed high port number negotiated in ftp-control connection. 
# nf_conntrack_ftp is REQUIRED to pick up this own fixed high port number 
# from payload of ftp-control packets, 
# otherwise You are forced to use 'NEW' instead of 'RELATED'. 
# And in the case of 'NEW' You allow connection to ANY high port of Your server! 
$IPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT 
###### 
0

मैं ऊपर स्क्रिप्ट में एक बड़ी गलती मिल गया है!

नियम misstyped कर रहे हैं, यह ऐसा होना चाहिए:

$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT 

$IPT -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT 

Dport और खेल परिवर्तन स्थानों! यदि आप किसी सर्वर से कनेक्ट करते हैं, तो आप एक गंतव्य पर जा रहे हैं, स्रोतपोर्ट गतिशील और क्लाइंटसाइड spefific है और फिर भी ज्ञात नहीं है एक कनेक्शन स्थापित है!

दूसरी पंक्ति इम्हो बिल्कुल महत्वाकांक्षी है, क्योंकि आप नहीं जानते कि सर्वर-साइड क्लाइंट किस पोर्ट्स को एक FTP कनेक्शन स्थापित करने के लिए उपयोग करने जा रहा है। बेहतर है, इस तरह एक नियम हो सकता है अगर आउटबाउंड यातायात defalut द्वारा अवरुद्ध है:

$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 

लेकिन अगर शासन

$IPT -P OUTPUT DROP 

नियम-सेट के शीर्ष पर है यह केवल जरूरत है।

अभिवादन

मार्कस

1

स्पष्टीकरण के लिए इस साइट देखें: http://slacksite.com/other/ftp.html

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

lsmod | grep ftp 
modprobe nf_conntrack_ftp  or modprobe ip_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 --dport 1024: -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  or modprobe ip_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 --sport 1024:-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.