FTP Unzulässiger PORT-Befehl

6114
Patrick

Ich habe proftpd für die Verwendung von ssl / tls eingerichtet. Beim Versuch, eine Verbindung herzustellen, wird ein ungültiger PORT-Befehl angezeigt.

Finding Host xxx.nl ... Connecting to xxx.xxx.xxx.xxx:21 Connected to xxx.xxx.xxx.xxx:21 in 0.018001 seconds, Waiting for Server  Response Initializing SSL Session ... 220 FTP Server ready. AUTH TLS 234 AUTH TLS successful SSL session NOT set for reuse SSL Session Started. Host type (1): AUTO USER xxx 331 Password required for xxx PASS (hidden) 230 User xxx logged in SYST 215 UNIX Type: L8 Host type (2): Unix (Standard) PBSZ 0 200 PBSZ 0 successful PROT P 200 Protection set to Private PWD 257 "/" is the current directory CWD /var/www/html/ 250 CWD command successful PWD257 "/var/www/html/" is the current directory TYPE A 200 Type set to A PORT 192,168,192,14,211,181 500 Illegal PORT command Port failed 500 Illegal PORT command PASV 227 Entering Passive Mode (xxx,xxx,xxx,xxx,160,151). connecting data channel to xxx.xxx.xxx.xxx:160,151(41111) Failed to connect data channel to xxx.xxx.xxx.xxx:160,151(41111) 

iptables:

Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp -- anywhere anywhere /* 000 accept all icmp */ ACCEPT all -- anywhere anywhere /* 001 accept all to lo interface */ REJECT all -- anywhere loopback/8 /* 002 reject local traffic not on loopback interface */ reject-with icmp-port-unreachable ACCEPT all -- anywhere anywhere /* 003 accept all to eth1 interface */ ACCEPT all -- anywhere anywhere /* 004 accept related established rules */ state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere multiport ports ftp /* 021 allow ftp. */ ACCEPT tcp -- anywhere anywhere multiport ports ssh /* 022 allow ssh. */ ACCEPT tcp -- anywhere anywhere multiport ports smtp /* 025 allow smtp. */ ACCEPT tcp -- anywhere anywhere multiport ports pharos /* 051 allow rundeck. */ ACCEPT tcp -- anywhere anywhere multiport ports 8140 /* 814 allow puppetserver. */ ACCEPT tcp -- anywhere anywhere multiport ports http /* 080 allow http. */ ACCEPT tcp -- anywhere anywhere multiport ports https /* 443 allow https. */ DROP all -- anywhere anywhere /* 999 drop all */  Chain FORWARD (policy ACCEPT) target prot opt source destination  Chain OUTPUT (policy ACCEPT) target prot opt source destination 

Das Anschließen über normales FTP funktioniert einwandfrei ...

Ich verwende WS_FTP mit ftp-authssl // xxx.nl / .... Ich habe mehrere andere Verbindungsoptionen, Ports usw. ausprobiert. Aber alle geben den gleichen Fehler. Obwohl es scheint, dass manchmal eine erste Verzeichnisliste angezeigt wird (dies könnte jedoch eine Zwischenspeicherung von WS_FTP sein)

3
"PORT 192,168,192,14,211,181" wird in "tcp: //192.168.192.141: 54197" übersetzt. Dies ist ein gültiger Port, der jedoch verwendet werden kann. https://www.securitypronews.com/understanding-the-ftp-port-command-2003-09 Frank Thomas vor 6 Jahren 0
@FrankThomas: Das ist normal - es soll ein zufälliger Port sein, der vom FTP-Client nur für diese eine Übertragung zugewiesen wird. (Wenn der Client nicht erfolgreich daran gebunden hatte, hätte er einen anderen versucht.) grawity vor 6 Jahren 1
Allgemeiner Tipp: Wenn Sie den Verdacht haben, dass die Firewall verwandt ist, erhalten Sie ein Feedback von dieser. Iptables speichert Paketzähler für jede Regel und ist in der Lage, [und die Ablaufverfolgung] zu protokollieren (http://backreference.org/2010/06/11) / iptables-debugging /). grawity vor 6 Jahren 0
Patrick - Ich bekomme die gleichen Probleme. Hast du dieses Problem gelöst? wenn ja, könntest du bitte teilen? Avis vor 6 Jahren 0
Ja, habe es gelöst, siehe meine Antwort auf meine Frage. Patrick vor 6 Jahren 0
Ihre Frage von [so] wurde hierher verschoben und zusammengeführt. Bitte kreuzen Sie die Fragen in Zukunft nicht auf mehreren Websites. Mokubai vor 6 Jahren 0

4 Antworten auf die Frage

6
grawity

Beachten Sie zunächst, dass die beiden letzten Befehle, PORT und PASV, nichts miteinander zu tun haben. Es sind zwei unabhängige Verbindungsversuche (einer für aktives FTP, einer für passives FTP).


Ihr PORT-Fehler wird also erwartet.

Die Funktionsweise PORT(der "aktive FTP" -Modus) besteht darin, dass der Client seine eigene Adresse an den Server sendet. Der Server stellt für die Datenübertragung eine Verbindung zu Ihnen her .

Laut den Protokollen befindet sich Ihr Client-Computer hinter einem NAT und hat eine "private" IP-Adresse. Das ist die einzige Adresse, die es kennt, also wird es mit dem PORT-Befehl gesendet.

Normalerweise erkennt Ihr Router eine FTP-Verbindung und bearbeitet den PORT-Befehl hinterlegt, um Ihre private Adresse durch die eigene öffentliche Adresse des Routers zu ersetzen. (Oder wenn Sie Pech haben, wird es durch Müll ersetzt.)

Da Ihre Steuerungsverbindung jetzt mit TLS verschlüsselt ist, kann der Router diese Korrektur nicht durchführen (es werden nur verschlüsselte Daten angezeigt), und der Server empfängt genau das, was Ihr Client sendet: Ihre private Adresse.

Da sich der Server in einem anderen Netzwerk befindet, kann er möglicherweise keine private Adresse erreichen (das ist der Kernpunkt von NAT). Obwohl es sich nicht einmal um die Mühe kümmert - aus Sicherheitsgründen lehnen die meisten Server sofort jede Adresse ab, die nicht genau mit der Herkunft der Kontrollverbindung übereinstimmt.

tl; dr Schalten Sie Ihren FTP-Client in den passiven Modus. Ja, Ihre Protokolle zeigen auch, dass der Passivmodus (PASV) beschädigt ist. Zumindest ist es etwas zu korrigieren, wenn der Server über eine dedizierte öffentliche IP-Adresse verfügt, der aktive Modus dagegen nicht.


Was ist mit PASV? Nun, das Problem ist ähnlich.

Normalerweise greift die Firewall Ihres Servers an der FTP-Steuerverbindung vorbei, extrahiert den temporären Port aus der Antwort "Passivmodus eingeben (x, y, z ...)" und markiert sie als zu einer "RELATED" -Verbindung gehörend. Dann würde es Ihre Regel # 004 erlauben.

Iptables kann jedoch auch nicht durch TLS hindurchsehen (es werden nur verschlüsselte Daten angezeigt) und Ihre FTP-Datenverbindungen können nicht mehr als zusammengehörig erkannt werden. Ihre Verbindung trifft also einfach Regel 999 und wird verworfen.

Damit PASV funktioniert, müssen Sie ProFTPd so konfigurieren, dass ein bestimmter Bereich passiver Ports verwendet wird (unabhängig davon, welcher Bereich genau ist) und iptables mitzuteilen, dass Verbindungen zu diesen Ports zugelassen werden.

Die Leute verwenden das gerne als Argument dafür, dass FTP Müll ist und vermieden werden sollte. Sie sind nicht falsch, aber ich würde lieber sagen, dass _NAT_ Müll ist und vermieden werden sollte ... grawity vor 6 Jahren 1
Ich kann dir bei NAT nicht zustimmen. Wir hätten keine einfachen, von Verbrauchern konfigurierten Router in jedem Haushalt, und NAT + SPF bietet unkomplizierten Heimanwendern ohne erheblichen Arbeitsaufwand einen erheblichen Schutz. Es sollten nur erfahrene Benutzer sein, die jeden Computer über eine öffentlich ansprechbare IP-Adresse verfügen, damit sie sich zu 100% auf ihre eigenen Fähigkeiten verlassen können. Andernfalls gefährdet das Web-Ökosystem im großen Stil. Außerdem können wir immer sagen, dass die Probleme mit NAT eigentlich darin bestehen, dass wir Dinge weiterhin mit TCP-Paradigmen machen und nicht neu erfinden wollen. Nur meine zwei Bits. Frank Thomas vor 6 Jahren 0
Sicher hätten wir - wenn ISPs stattdessen Protokolle mit korrekter Adressierung vorangetrieben hätten, wie IPv6 / IPng / etc. grawity vor 6 Jahren 0
IPv6 verschlimmert das Problem der direkten Verbindungen zu Systemen, ohne dass ein Unternehmen direkt öffentlich zugänglich ist. es verringert es nicht. Frank Thomas vor 6 Jahren 0
Einige Clients (wie das extrem leistungsfähige LFTP, das unter Windows nicht verfügbar ist, außer Cygwin AFAIK), haben die Möglichkeit, die zu sendenden IP- und Portbereiche zu wählen (in LFTP mit `set ftp: port-ipv4` und` set ftp: port- Bereich "). Bei einigen Synchronisierungen mit den Firewall-Regeln (einschließlich eines Schutzes mit dem Treffer "Recent") sollte es in diesem Fall möglich sein, PORT mit TLS zu verwenden. Dies wird jedoch auf einen "privilegierten" Client beschränkt sein, es wird nicht für jeden automatisch sein A.B vor 6 Jahren 1
(Entschuldigung für die Verzögerung) Ich habe ProFTPd und iptables konfiguriert: `PassivePorts 49152 65534` Illegal PORT-Befehl wird immer noch angezeigt, aber dann wird mit PASV fortgefahren. . Datenkanal an xxx.xxx.xxx.xxx:226,92 (57948) anschließen Datenkanal an xxx.xxx.xxx.xxx:226,92 (57948) angeschlossen. LIST -la 150 Datenverbindung für ASCII-Modus für Dateiliste öffnen 425 Unable Datenverbindung aufbauen: Vorgang nicht zulässig. " Patrick vor 6 Jahren 0
Musste TLSOptions NoSessionReuseRequired zu ProFTPd hinzufügen und es hat funktioniert! Patrick vor 6 Jahren 0
2
Steffen Ullrich
PORT 192,168,192,14,211,181 

Dieser Befehl bedeutet, dass der Client die IP-Adresse 192.168.192.14 von Port 54197 auf die Datenverbindung vom Server überwacht. 192.168. *. * Sind private IP-Adressen, die nicht über das Internet geroutet werden können. Dies bedeutet, dass diese IP-Adresse von einem Server im Internet nicht erreichbar ist. Aus diesem Grund hält der Server den PORT-Befehl für ungültig.

0
Patrick

Ich habe die Frage auch auf SuperUser gestellt und dort die Antwort erhalten: Ich habe der proftpd.conf folgendes hinzugefügt:

PassivePorts 49152 65534 TLSOptions NoSessionReuseRequired 

PassivePorts finden Sie unter http://proftpd.org/docs/directives/linked/config_ref_PassivePorts.html

Für TLSOptions siehe http://www.proftpd.org/docs/howto/TLS.html (basierend auf einigen Protokollnachrichten von WS_FTP habe ich herausgefunden, dass NoSessionReuseRequired helfen sollte).

Ihr Post wurde migriert. das ist jetzt überflüssig. Martijn Pieters vor 6 Jahren 0
0
albert

Das hat für mich funktioniert: Sie müssen die folgenden Zeilen hinzufügen vsftpd.conf. Ich habe tagelang versucht, diese Antwort zu finden

listen=YES #listen_ipv6=YES 

Nachfolgend alle nicht kommentierten Elemente in vsftpd.conf

listen=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO pasv_enable=YES pasv_min_port=1024 pasv_max_port=1048 port_enable=YES pasv_address=PUT YOUR PUBLIC IP ADDRESS HERE (e.g. 18.236.105.3)