Ich habe einen gemieteten VPS mit installiertem Debian. Vor kurzem habe ich proftpd installiert, um allen schreibgeschützten Zugriff und bestimmten Benutzern Vollzugriff zu ermöglichen.
Ich habe proftpd (mit TLS) gemäß mehreren Anleitungen konfiguriert. Ich habe passive Ports (diese und Port 21 über iptables) entsperrt und anonyme Anmeldung eingerichtet.
Wenn ich mich anmelde, ist alles in Ordnung – schnelle Anmeldung, schnelles Durchlaufen der Verzeichnisse … Probleme treten auf, wenn ich versuche, eine Datei herunterzuladen – WinSCP/FileZilla/Python bleiben alle beim Herunterladen einer Datei hängen und verlieren dann die Verbindung (Dateien sind ~1 KB groß, also sehr klein). Wenn ich über SFTP mit dem Server verbunden bin, habe ich keine Probleme und volle Geschwindigkeit.
Irgendwelche Ideen? Brauchen Sie meine proftpd.conf
Datei?
Aktualisieren:
Ich sehe, dass ich dank des ersten Kommentars (über SCP) einige Informationen hinzufügen muss:
- Ich möchte Dateien anonym ansehen können, am besten über einen Webbrowser, aber das ist kein Muss.
- Ich muss eine Anwendung einrichten, die den gesamten Ordner vom VPS mit dem Ordner auf meiner Festplatte synchronisiert (ich plane, dies über Python zu tun, aber Shell/Bash ist auch gut)
- Ich möchte entweder den gesamten Katalog oder nur die Dateien herunterladen/hochladen können, die sich geändert haben
- Ich brauche dies, damit es ohne Programme von Drittanbietern machbar ist. Entweder über cmdline/bash oder offizielle Python-Bibliotheken. Muss sowohl unter Windows als auch unter Fedora funktionieren
Meine iptables-Konfiguration:
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh-ddos tcp -- anywhere anywhere multiport dports ssh
ACCEPT tcp -- anywhere anywhere tcp dpts:60000:65535
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-ssh-ddos (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Ich habe TLS ausgeschaltet, mich über ein Gastkonto verbunden, den Binärmodus aktiviert und tcpdump auf Port 21 gestartet (natürlich serverseitig). Dann habe ich ein „Get“ für eine einzelne Datei ausgeführt und nach einer Weile die Meldung „Verbindung vom Remote-Host geschlossen“ erhalten. Hier ist die FTP-Eingabe:
ftp> get light.cfg
200 PORT command successful
150 Opening BINARY mode data connection for light.cfg (94 bytes)
Connection closed by remote host.
und hier sehen Sie „get“ und „connection_closed“, getrennt durch eine neue Zeile:
15:12:15.836468 IP (tos 0x0, ttl 119, id 30359, offset 0, flags [DF], proto TCP (6), length 67)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0x5526 (correct), seq 139:166, ack 575, win 7618, length 27
15:12:15.836636 IP (tos 0x0, ttl 64, id 50952, offset 0, flags [DF], proto TCP (6), length 69)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0x7049 (correct), seq 575:604, ack 166, win 115, length 29
15:12:15.856530 IP (tos 0x0, ttl 119, id 30360, offset 0, flags [DF], proto TCP (6), length 56)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0xd20f (correct), seq 166:182, ack 604, win 7589, length 16
15:12:15.868348 IP (tos 0x0, ttl 64, id 50953, offset 0, flags [DF], proto TCP (6), length 106)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0xba9a (correct), seq 604:670, ack 182, win 115, length 66
15:12:15.934002 IP (tos 0x0, ttl 119, id 30365, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0ccc (correct), ack 670, win 7523, length 0
15:13:15.909873 IP (tos 0x0, ttl 119, id 30372, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [F.], cksum 0x0ccb (correct), seq 182, ack 670, win 7523, length 0
15:13:15.910056 IP (tos 0x0, ttl 64, id 50954, offset 0, flags [DF], proto TCP (6), length 40)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [F.], cksum 0x29ba (correct), seq 670, ack 183, win 115, length 0
15:13:15.922725 IP (tos 0x0, ttl 119, id 30373, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0cca (correct), ack 671, win 7523, length 0
Antwort1
Bitte posten Sie Ihr iptables
Setup. Beachten Sie, dass es schwierig sein kann, es mit FTP zum Laufen zu bringen, da FTP dynamische Portzuweisungen verwendet (im passiven Modus weist der Server dem Datenübertragungsstrom einen dynamischen Port zu, wenn der Client eine Datei herunterladen oder hochladen möchte, teilt ihn dem Client mit und erwartet, dass der Client eine Verbindung damit herstellt).
Das heisst:
- Wenn Sie in Netfilter einen „stateful“-Ansatz zum Erkennen von FTP-Datenströmen verwenden möchten, müssen Sie ein spezielles Kernelmodul zum Dekodieren von Kontroll-FTP-Streams laden.
- Dies funktioniert nicht mit TLS, da der Kernel die besagten FTP-Steuerströme nicht dekodieren kann.
SCP (und SFTP) funktionieren einwandfrei, da sie Steuer- und Datenströme in einem einzigen TCP-Stream multiplexen.
Was die Synchronisierung betrifft … Vergessen Sie es zunächst, scp
da es sich hierbei um ein veraltetes Protokoll handelt. Verwenden Sie stattdessen SFTP. Dasscheint eine plattformübergreifende Python-SFTP-Implementierung zu sein, also könnte es für Sie funktionieren. Übrigens bietet Windows gute Unterstützung für SFTP-Frontend-Software (googlen Sie nach WinSCP).
Und Sie könnten auch andere Synchronisierungsmethoden in Betracht ziehen. Beispielsweise rsync
gibt es Windows-Builds und es ist wohl das beste verfügbare Tool zur Dateisystemsynchronisierung. Sie könnten auch WebDAV in Betracht ziehen oder sogar die Implementierung von etwas RESTful.