การอนุญาต FTP ด้วย IPTables


26

สถานการณ์ปัจจุบันของฉันเกี่ยวข้องกับการอนุญาตกฎต่างๆ แต่ฉันต้องการ ftp เพื่อให้สามารถเข้าถึงได้จากทุกที่ ระบบปฏิบัติการคือ Cent 5 และฉันใช้ VSFTPD ฉันดูเหมือนจะไม่สามารถแก้ไขไวยากรณ์ได้ กฎอื่น ๆ ทั้งหมดทำงานอย่างถูกต้อง

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

ต่อไปนี้เป็นกฎที่ฉันได้ลอง

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

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

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

1
แก้ไขการจัดรูปแบบของคุณเพื่อให้สามารถอ่านได้
Avery Payne

ฉันสมมติว่าคุณกำลังใช้ Rackspace? บทเรียนมีข้อบกพร่อง เพียงทำตามคำแนะนำของ @Evan Anderson
Andres SK

คำตอบ:


41

นี่คือเอกสารที่ฉันแนะนำคนเพื่อให้พวกเขาสามารถติดตามโปรโตคอล FTP: http://slacksite.com/other/ftp.html

  • ในการทำ FTP โหมดแอคทีฟคุณต้องอนุญาตการเชื่อมต่อขาเข้ากับพอร์ต TCP 21 และการเชื่อมต่อขาออกจากพอร์ต 20
  • ในการทำ FTP โหมดแฝงคุณต้องอนุญาตการเชื่อมต่อขาเข้ากับพอร์ต TCP 21 และการเชื่อมต่อขาเข้ากับพอร์ตที่สร้างแบบสุ่มบนคอมพิวเตอร์เซิร์ฟเวอร์ (จำเป็นต้องใช้โมดูลเชื่อมต่อใน netfilter)

คุณไม่มีอะไรอีกแล้ว: เชนเอาท์พุทของคุณในโพสต์ของคุณดังนั้นฉันจะรวมไว้ที่นี่ด้วย หากห่วงโซ่เอาท์พุทของคุณเป็นค่าเริ่มต้นแล้วเรื่องนี้

เพิ่มกฎเหล่านี้ไปยังการกำหนดค่า iptables ของคุณ:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

หากต้องการสนับสนุน FTP โหมดพาสซีฟคุณต้องโหลดโมดูล ip_conntrack_ftp เมื่อบูต ยกเลิกหมายเหตุและแก้ไขบรรทัด IPTABLES_MODULES ในไฟล์ / etc / sysconfig / iptables-config เพื่ออ่าน:

IPTABLES_MODULES="ip_conntrack_ftp"

บันทึก iptables config และรีสตาร์ท iptables

service iptables save
service iptables restart

หากต้องการกำจัด VSFTPD ว่าเป็นปัญหาอย่างสมบูรณ์ให้หยุด VSFTPD ตรวจสอบว่าไม่ได้ฟังในพอร์ต 21 ด้วย "netstat -a" จากนั้นเรียกใช้ a:

nc -l 21

สิ่งนี้จะเริ่ม netcat ที่กำลังฟังบนพอร์ต 21 และจะสะท้อนอินพุตไปยังเชลล์ของคุณ จากโฮสต์อื่นให้ TELNET ไปยังพอร์ต 21 ของเซิร์ฟเวอร์ของคุณและตรวจสอบว่าคุณได้รับการเชื่อมต่อ TCP และคุณเห็นผลลัพธ์ในเชลล์เมื่อคุณพิมพ์ในการเชื่อมต่อ TELNET

ในที่สุดนำ VSFTPD สำรองตรวจสอบว่ากำลังฟังบนพอร์ต 21 และลองเชื่อมต่ออีกครั้ง หากการเชื่อมต่อกับ netcat ทำงานได้กฎ iptables ของคุณก็ใช้ได้ หากการเชื่อมต่อกับ VSFTPD ไม่ทำงานหลังจาก netcat ทำสิ่งที่ผิดพลาดด้วยการกำหนดค่า VSFTPD ของคุณ


ขอบคุณสำหรับความช่วยเหลือคำแนะนำที่คุณระบุไว้สำหรับโหมดพาสซีฟได้แก้ไขปัญหาของฉัน ฉันขอขอบคุณความช่วยเหลือ
IOTAMAN

การรีสตาร์ท iptables จะลบล้างการเปลี่ยนแปลงใด ๆ ที่คุณทำหากคุณไม่มี IPTABLES_SAVE_ON_STOP ตั้งไว้ที่ "ใช่"
Kevin M

@ เควิน: แน่นอนเป็นจุดที่ดีโดยสิ้นเชิง! > smile <ฉันจะทำการแก้ไขในตอนนี้
Evan Anderson

@ GLB03: ไม่มีปัญหา ฉันอยู่ที่ Server Fault ... > smile <
Evan Anderson

คำตอบนี้ไม่ได้ผลสำหรับฉันดังนั้นสำหรับคนอื่นที่มีปัญหานี้ฉันจะชี้ให้เห็นว่าสิ่งนี้ (และการเปิดพอร์ต 21 อินพุต / เอาต์พุต) ก็ใช้งานได้สำหรับฉัน: linuxquestions.org/questions/linux-security-4 / … -
ehsanul

0

ลองกฎนี้ หมายเหตุ: $EXTIPเป็นที่อยู่ IP ภายนอกของคุณสำหรับเซิร์ฟเวอร์ FTP

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

0

ในกรณีของฉันฉันขาดเคอร์เนลโมดูล ip_conntrack_ftp มันจะต้องมีการโหลด ดังนั้นคุณสามารถลองสิ่งนี้:

modprobe ip_conntrack_ftp

และยังเพิ่ม ip_conntrack_ftp ไปยัง / etc / modules ดังนั้นมันจะทำงานหลังจากรีสตาร์ท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.