Saya mencoba meneruskan server FTP dengan IPTables. FTP-Server berjalan pada kotak Windows 2008 (Cerberus).
Rincian Kotak Kemenangan:
- IP: 192.168.220.51
- FTP-Port: 21
- PASV-Port: 11000-13000
Server FTP berfungsi dengan baik di LAN.
Router berfungsi dengan baik untuk klien lain (Melayani NAT, DHCP, Firewall, ...). Saya perlu meneruskan layanan FTP ke dunia luar, tetapi saya tidak bisa menggunakan port 20-21 (sudah diambil).
Saya mencoba ini, tetapi tidak berhasil:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21
Konfigurasi IPTables saat ini:
[root@router ~]# service iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
2 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 127.0.0.1 0.0.0.0/0
2 DROP all -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1194
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
11 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
12 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
13 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
14 DROP udp -- 0.0.0.0/0 0.0.0.0/0
15 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Setiap bantuan akan sangat bagus :-).
Bounty-Edit : Saya belum dapat menemukan ini, bantuan apa pun akan sangat dihargai.
EDIT2
Saya dapat melakukan telnet ke server FTP saya sekarang, setelah menjalankan perintah di sana:
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21
Saya mulai ke sana ... Saya pikir saya hanya perlu mendapatkan PASV-Ports saya bekerja sekarang ...
EDIT3: Info Tambahan
[root@router ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 3251 packets, 154K bytes)
pkts bytes target prot opt in out source destination
540 48534 ACCEPT all -- * * 127.0.0.1 0.0.0.0/0
4270K 5625M ACCEPT all -- * * 192.168.220.0/24 0.0.0.0/0
0 0 DROP all -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1194
65 8487 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
8 404 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
63870 81M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
974 224K DROP udp -- * * 0.0.0.0/0 0.0.0.0/0
638 34956 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
Chain FORWARD (policy ACCEPT 3578K packets, 3355M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2275K packets, 703M bytes)
pkts bytes target prot opt in out source destination
[root@router ~]# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 33954 packets, 2595K bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2121 to:192.168.220.51:21
Chain POSTROUTING (policy ACCEPT 5925 packets, 699K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * eth1 0.0.0.0/0 0.0.0.0/0
27170 1785K MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 5777 packets, 457K bytes)
pkts bytes target prot opt in out source destination
Larutan
Ini adalah bagaimana saya melakukannya, mungkin tidak terlalu cantik, tetapi berhasil.
[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.220.51:2121
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 2121 -j ACCEPT
[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 11000:13000 -j DNAT --to 192.168.220.51:11000-13000
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 11000:13000 -j ACCEPT
Beberapa catatan tambahan: Server FTP mendengarkan bot 21 an 2121 dan kisaran PASV diatur dari 11000 hingga 13000
sumber
lsmod | grep -i ftp
?ip_conntrack_ftp
danip_nat_ftp
modul kernel dimuat. FTP adalah protokol yang menarik untuk berurusan dengan firewall / gateway NAT. Anda mungkin lebih mudah menggunakan sftp (SSH FTP) yang hanya menggunakan port 22 dan dienkripsi (jauh lebih aman). FileZilla adalah klien FTP gratis yang hebat yang mendukung SFTP.Jawaban:
Agar dukungan pasif berfungsi, Anda perlu meneruskan port pasif ke server ftp internal dengan nomor port yang sama .
Solusi mudah: teruskan semuanya sepanjang waktu
InternetIP: 11000-13000 -> 192.168.220.51:11000-13000
Solusi yang lebih sulit:
Anda akan memerlukan beberapa agen pelacakan koneksi tujuan khusus yang membaca protokol FTP dan membuat pemetaan NAT yang tepat tepat waktu. Sepertinya ip_conntrack_ftp mungkin melakukan ini.
sumber
Saya yakin Anda perlu memuat modul pelacakan koneksi FTP.
http://www.sns.ias.edu/~jns/wp/2006/01/12/iptables-connection-tracking-ftp/
sumber
Seharusnya cukup
sumber
2121
harus diganti21
? Bagaimana modul ftp mengenali koneksi sebagai kontrol ftp? Apakah ini akan diterapkan ke setiap koneksi menggunakan port 21 baik sebelum atau sesudah NAT?