Mengizinkan FTP dengan IPTables

26

Skenario saya saat ini melibatkan memungkinkan berbagai aturan, tetapi saya perlu ftp agar dapat diakses dari mana saja. OS adalah Cent 5 dan saya menggunakan VSFTPD. Sepertinya saya tidak bisa mendapatkan sintaks yang benar. Semua aturan lain berfungsi dengan benar.

## 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

Berikut ini adalah aturan yang telah saya coba.

##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
IOTAMAN
sumber
1
memperbaiki pemformatan Anda sehingga dapat dibaca.
Avery Payne
im dengan asumsi Anda menggunakan Rackspace? tutorial memiliki kelemahan itu. Cukup ikuti instruksi @Evan Anderson.
Andres SK

Jawaban:

41

Inilah dokumen yang saya referensikan kepada orang-orang sehingga mereka dapat mengikuti protokol FTP: http://slacksite.com/other/ftp.html

  • Untuk melakukan FTP mode aktif, Anda harus mengizinkan koneksi masuk ke port TCP 21 dan koneksi keluar dari port 20.
  • Untuk melakukan FTP mode-pasif, Anda harus mengizinkan koneksi masuk ke port TCP 21 dan koneksi masuk ke port yang dibuat secara acak di komputer server (mengharuskan menggunakan modul conntrack di netfilter)

Anda tidak memiliki apa pun kembali: rantai OUTPUT Anda di pos Anda, jadi saya akan memasukkannya di sini juga. Jika rantai OUTPUT Anda adalah default-drop maka ini penting.

Tambahkan aturan ini ke konfigurasi iptables Anda:

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

Untuk mendukung FTP mode pasif, Anda perlu memuat modul ip_conntrack_ftp saat boot. Batalkan komentar dan ubah baris IPTABLES_MODULES di file / etc / sysconfig / iptables-config untuk membaca:

IPTABLES_MODULES="ip_conntrack_ftp"

Simpan konfigurasi iptables dan mulai ulang iptables.

service iptables save
service iptables restart

Untuk sepenuhnya mengesampingkan VSFTPD sebagai masalah, hentikan VSFTPD, verifikasi bahwa itu tidak mendengarkan pada port 21 dengan "netstat -a" dan kemudian jalankan:

nc -l 21

Ini akan mulai mendengarkan netcat pada port 21 dan akan memasukkan input ke shell Anda. Dari host lain, TELNET ke port 21 server Anda dan verifikasi bahwa Anda mendapatkan koneksi TCP dan Anda melihat output di shell ketika Anda mengetikkan koneksi TELNET.

Terakhir, bawa kembali VSFTPD, verifikasi bahwa ia mendengarkan pada port 21, dan coba sambungkan lagi. Jika koneksi ke netcat berhasil maka aturan iptables Anda baik-baik saja. Jika koneksi ke VSFTPD tidak berfungsi setelah netcat maka ada sesuatu yang salah dengan konfigurasi VSFTPD Anda.

Evan Anderson
sumber
Terima kasih atas bantuannya, saran yang Anda uraikan untuk mode pasif memperbaiki masalah saya. Saya menghargai bantuannya.
IOTAMAN
Restart iptables akan menghapus semua perubahan yang Anda buat jika IPTABLES_SAVE_ON_STOP Anda tidak disetel ke "ya".
Kevin M
@ Kevin: Benar-benar poin yang bagus! > tersenyum <Saya akan memberikan suntingan sekarang.
Evan Anderson
@ GLB03: Tidak masalah. Saya hidup ke Server Fault ...> smile <
Evan Anderson
Jawaban ini tidak berfungsi untuk saya, jadi bagi siapa pun yang memiliki masalah ini, saya akan menunjukkan bahwa ini (dan juga membuka port / input / output) bekerja untuk saya: linuxquestions.org/questions/linux-security-4 / ... -
ehsanul
0

Coba aturan ini. Catatan: $EXTIPadalah alamat IP eksternal Anda untuk server FTP.

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

Dalam kasus saya, saya kehilangan modul kernel ip_conntrack_ftp. Perlu dimuat. Jadi Anda dapat mencoba ini:

modprobe ip_conntrack_ftp

Dan juga tambahkan ip_conntrack_ftp ke / etc / modules sehingga akan berfungsi setelah restart

Kornel
sumber