Oturum açma çalışıyor, PWD çalışıyor, sonra LIST istemci pes edene veya başka bir veri moduna geçene kadar askıda kalıyor. Bu ayrım imzadır: 21 numaralı bağlantı noktasına giden denetim bağlantısı sağlıklıyken veri bağlantısı, karşı tarafın ulaşamadığı bir adresten veya bağlantı noktasından kuruluyor. Ayrıca NAT yapan bir VPN geçidinin arkasında olağan suçlu, yükünde 10.8.0.6 gibi bir tünel adresi adlandıran FTP komutudur. Başlık çevirisi o değere hiçbir zaman dokunmaz.

Ardından, bu değerin nereden geldiği ve hangi kutunun onu değiştirme yetkisi olduğu gelir.

Bozulan şey tünel değil, yüktür

FTP, verinin uç noktasını denetim akışının içine koyar. Etkin modda istemci kendi adresini ve bağlantı noktasını içeren PORT gönderir, sunucu da o çifte geri arar. Pasif modda sunucu bir çiftle 227 yanıtı verir, istemci ise bunun yerine o çifti arar.

İki biçim de aynı türden bir ifade taşır: bu adrese, bu bağlantı noktasından bağlan. Yalnızca IP ve TCP başlıklarını yeniden yazan bir aygıt ifadeyi öyle bırakır, bu yüzden bir uç yalnızca tünelin karşı tarafında var olan bir adrese ulaşmayı sürdürür. Denetim bağlantısı sağlıklı ilan edildikten sonra veri bağlantısı durur.

Üç mod, üç yük

Aşağıdaki tablo hangi tarafa arama yapmasının söylendiğini ve yalnızca başlıkları yeniden yazan bir NAT'ın bu konuda ne yapabileceğini gösterir.

Son sütunu ilk başarısız olan şey olarak okuyun. Etkin modda özel bir adresi arayan sunucudur; pasif modda istemcidir; FTPS'te yük şifreli metindir ve aradaki kutu için işleyecek daha da az şey vardır.

ModeValue in the control streamWho dials whomHeader-only NAT leaves
Active (PORT)client address and portserver dials the clienta server dialing an unreachable tunnel address
Passive (227)server address and portclient dials the servera client dialing an address it cannot route to
FTPSthe same values, inside TLSas aboveciphertext, so no rewrite happens at all

Yardımcıyı çevirinin gerçekleştiği yere koyun

Linux'ta yükün yeniden yazılmasını yardımcı nf_conntrack_ftp yapar. Denetim bağlantısını izler, görüşülen bağlantı noktasını öğrenir, veri akışı için bir beklenti oluşturur ve bir NAT kutusunda yükün içindeki adresi ve bağlantı noktasını yeniden yazar. Yalnızca istemcinin adresini çeviren aygıtta yardımcı olur. Onu istemciye ya da akışı yalnızca ileten bir yönlendiriciye yüklemek oturumda hiçbir şeyi değiştirmez.

Bu üç komut modülün var olup olmadığını, bağlı olup olmadığını ve oturum açıkken bir beklenti bulunup bulunmadığını gösterir:

modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp

Modülü yüklemek onu bağlamakla aynı şey değildir. 4.7 ve sonrası çekirdekler net.netfilter.nf_conntrack_helper=0 ile gelir, bu yüzden yardımcı açık bir kural bekler, örneğin iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Bir aktarım denenirken beklenti listesi boş kalıyorsa denetlenmesi gereken modül değil, bağlamadır.

Pasif mod: sunucuya ne duyuracağını söyleyin

Pasif modu belirlenimli kılmak daha kolaydır çünkü sunucuya 227 yanıtına ne koyacağı söylenebilir. vsftpd'de bu pasv_address ile birlikte pasv_min_port ve pasv_max_port'tur; ProFTPD MasqueradeAddress ve PassivePorts kullanır. Önce bunları ayarlayın, çünkü doğru duyurulan bir adres o tarafta herhangi bir şeyi yeniden yazma gereğini ortadan kaldırır.

Sonra tam olarak o bağlantı noktası aralığını geçitten geçirin, örneğin -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, böylece kural sunucunun duyurduğuyla eşleşsin.

İki ayar birbiriyle uyuşmalıdır. 30000-30100 duyurması söylenen sunucu, geçit 40000-40100'e izin verirken en az yardımcı olacak şekilde başarısız olur: denetim konuşması sağlıklı görünür ve her veri bağlantısı ölür. Başka bir şeyde hata ayıklamadan önce sayıları karşılaştırın.

İki arıza imzası ve FTPS'in ortadan kaldırdığı şey

LIST'te askıda kalma oturumun ilk veri bağlantısına işaret eder; orada hem adresin yeniden yazılması hem de beklenti çalışmalıdır. Çalışan bir LIST'ten sonra RETR'de askıda kalma aktarımın kendisine, yani pasif aralığa veya tünelin MTU'suna işaret eder. Bu ikinci imza bir yük sorunu değildir ve yardımcı ayarları onu düzeltmez.

TLS üzerinden FTP, yardımcının okuduğu yükü ortadan kaldırır. Aradaki kutu şifresini çözemediği PORT veya PASV değerini yeniden yazamaz, bu yüzden geriye TLS'i sonlandıran bir vekil, sınırlı bir aralıkta erişilebilir adres duyuran bir sunucu ya da başka bir aktarım protokolü kalır.

Kısa bir denetim sırası

Belirtiden dışarı doğru çalışın. PWD başarılı olurken LIST'in başarısız olduğunu doğrulayın, PORT veya 227 yükünün içindeki adresi yakalayın ve o adresi hangi aygıtın çevirdiğini sorun. Yardımcıyı oraya bağlayın, bir aktarım sırasında beklenti listesini izleyin, ardından sunucudaki pasif modu düzeltin ve aralığı geçit kuralına yansıtın.

Veri yolu arızasını toplu aktarım arızasından ayrı tutun, çünkü farklı ayarlara götürürler.

İlgili makaleler