GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aktives FTP vs. Passives FTP

Einführung

Eine der am häufigsten gestellten Fragen beim Umgang mit Firewalls und anderen Problemen mit der Internetverbindung ist der Unterschied zwischen aktivem und passivem FTP (File Transfer Protocol) und wie man eines oder beide am besten unterstützt. Hoffentlich hilft der folgende Text dabei, die Verwirrung darüber zu beseitigen, wie man FTP in einer Firewall-Umgebung unterstützt.

Dieser Beitrag enthält Beispiele für aktive und passive FTP-Sitzungen über die Befehlszeile. Diese Sitzungsbeispiele sollen helfen, die Dinge etwas klarer zu machen. Sie bieten auch ein schönes Bild davon, was während einer FTP-Sitzung hinter den Kulissen vor sich geht. Nun zu den Informationen…

Die Grundlagen

FTP ist ausschließlich ein TCP-basierter Dienst. Es gibt keine UDP-Komponente für FTP. FTP ist insofern ein ungewöhnlicher Dienst, als er zwei Ports verwendet, einen „Daten“-Port und einen „Befehls“-Port (auch als Kontrollport bekannt). Traditionell sind dies Port 21 für den Befehlsport und Port 20 für den Datenport. Die Verwirrung beginnt jedoch, als wir feststellen, dass der Datenport je nach Modus nicht immer auf Port 20 liegt.

Aktives FTP

Im aktiven FTP-Modus verbindet sich der Client von einem zufälligen nicht privilegierten Port (N> 1024) mit dem Befehlsport des FTP-Servers, Port 21. Dann beginnt der Client, Port N+1 abzuhören und sendet den FTP-Befehl PORT N+1 an FTP Server. Der Server verbindet sich dann wieder mit dem angegebenen Datenport des Clients von seinem lokalen Datenport, der Port 20 ist.

Aus Sicht der serverseitigen Firewall müssen zur Unterstützung von FTP im aktiven Modus die folgenden Kommunikationskanäle geöffnet werden:

  • Port 21 des FTP-Servers von überall (Client initiiert Verbindung)
  • Port 21 des FTP-Servers zu Ports> 1024 (Server antwortet auf den Kontrollport des Clients)
  • Port 20 des FTP-Servers zu Ports> 1024 (Server initiiert Datenverbindung zum Datenport des Clients)
  • Port 20 des FTP-Servers von Ports> 1024 (Client sendet ACKs an den Datenport des Servers)

Ausgezogen sieht die Verbindung wie folgt aus:

  • Von Client-Port 1026 (Cmd) zu Server-Port 21 (Cmd)
  • Von Server-Port 21 (Cmd) zu Client-Port 1026 (Cmd)
  • Von Server-Port 20 (Daten) zu Client-Port 1027 (Daten)
  • Von Client-Port 1027 (Daten) zu Server-Port 20 (Daten)

In Schritt 1 kontaktiert der Befehlsport des Clients den Befehlsport des Servers und sendet den Befehl PORT 1027. Der Server sendet dann in Schritt 2 ein ACK zurück an den Befehlsport des Clients. In Schritt 3 initiiert der Server eine Verbindung auf seinem lokalen Datenport zu der Datenport, den der Client zuvor angegeben hat. Schließlich sendet der Client ein ACK zurück, wie in Schritt 4 gezeigt.

Das Hauptproblem bei FTP im aktiven Modus liegt tatsächlich auf der Clientseite. Der FTP-Client stellt nicht die eigentliche Verbindung zum Datenport des Servers her – er teilt dem Server einfach mit, auf welchem ​​Port er lauscht, und der Server verbindet sich wieder mit dem angegebenen Port auf dem Client. Von der clientseitigen Firewall scheint dies ein externes System zu sein, das eine Verbindung zu einem internen Client initiiert – etwas, das normalerweise blockiert wird.

Aktives FTP-Beispiel

Unten sehen Sie ein tatsächliches Beispiel einer aktiven FTP-Sitzung. Die einzigen Dinge, die geändert wurden, sind die Servernamen, IP-Adressen und Benutzernamen. In diesem Beispiel wird eine FTP-Sitzung von user01 (192.0.0.1), einer Solaris-Box, auf der der standardmäßige FTP-Befehlszeilenclient ausgeführt wird, zu dest_serv (192.0.0.2), einer Solaris-Box, auf der solaris[TM] 9 ftpd ausgeführt wird, initiiert. Das Debugging-Flag (-d) wird mit dem FTP-Client verwendet, um zu zeigen, was hinter den Kulissen vor sich geht. Alles in Kursivschrift ist die Debugging-Ausgabe, die die tatsächlichen FTP-Befehle zeigt, die an den Server gesendet werden, und die Antworten, die von diesen Befehlen generiert werden.

Bei diesem Dialog gibt es einige interessante Dinge zu beachten. Beachten Sie, dass bei der Ausgabe des PORT-Befehls ein Port auf dem Client-System (192.0.0.1) und nicht auf dem Server angegeben wird. Wir werden das entgegengesetzte Verhalten sehen, wenn wir passives FTP verwenden. Wo wir gerade beim Thema sind, noch eine kurze Anmerkung zum Format des PORT-Befehls. Wie Sie im Beispiel unten sehen können, ist es als eine Reihe von sechs Zahlen formatiert, die durch Kommas getrennt sind. Die ersten vier Oktette sind die IP-Adresse, während die zweiten beiden Oktette den Port umfassen, der für die Datenverbindung verwendet wird. Um den tatsächlichen Port zu finden, multiplizieren Sie das fünfte Oktett mit 256 und addieren dann das sechste Oktett zur Gesamtzahl. Im Beispiel unten ist die Portnummer also ( (256*188) + 231) oder 48359. Eine schnelle Überprüfung mit netstat sollte diese Information bestätigen.

$ ftp -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> ls
---> PORT 192,0,0,1,188,231
200 PORT command successful.
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
(...)
var
vol
xfn
226 Transfer complete.
191 bytes received in 0.03 seconds (6.16 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.
# netstat -a | grep 48359
dest_serv.ftp-data       user01.48359 33580      0 49640      0 TIME_WAIT

Passives FTP

Um das Problem zu lösen, dass der Server die Verbindung zum Client initiiert, wurde eine andere Methode für FTP-Verbindungen entwickelt. Dies wurde als passiver Modus oder PASV bezeichnet, nach dem Befehl, den der Client verwendet, um dem Server mitzuteilen, dass er sich im passiven Modus befindet.

Im passiven FTP-Modus initiiert der Client beide Verbindungen zum Server, wodurch das Problem gelöst wird, dass Firewalls die eingehende Datenportverbindung vom Server zum Client filtern. Beim Öffnen einer FTP-Verbindung öffnet der Client zwei zufällige nicht privilegierte Ports lokal (N> 1024 und N+1). Der erste Port kontaktiert den Server auf Port 21, aber anstatt dann einen PORT-Befehl auszugeben und dem Server zu erlauben, sich wieder mit seinem Datenport zu verbinden, gibt der Client den PASV-Befehl aus. Das Ergebnis davon ist, dass der Server dann einen zufälligen unprivilegierten Port (P> 1024) öffnet und den Befehl PORT P an den Client zurücksendet. Der Client initiiert dann die Verbindung von Port N+1 zu Port P auf dem Server, um Daten zu übertragen.

Aus Sicht der serverseitigen Firewall müssen zur Unterstützung von FTP im passiven Modus die folgenden Kommunikationskanäle geöffnet werden:

  • Port 21 des FTP-Servers von überall (Client initiiert Verbindung)
  • Port 21 des FTP-Servers zu Ports> 1024 (Server antwortet auf den Kontrollport des Clients)
  • Ports des FTP-Servers> 1024 von überall (Client initiiert Datenverbindung zu zufälligem Port, der vom Server angegeben wird)
  • Ports des FTP-Servers> 1024 zu Remote-Ports> 1024 (Server sendet ACKs (und Daten) an den Datenport des Clients)

Eine gezeichnete FTP-Verbindung im passiven Modus sieht folgendermaßen aus:

  • Von Client-Port 1026 (Cmd) zu Server-Port 21 (Cmd)
  • Von Server-Port 21 (Cmd) zu Client-Port 1026 (Cmd)
  • Von Client-Port 1027 (Daten) zu Server-Port 2024
  • Von Server-Port 2024 (Cmd) zu Client-Port 1027 (Daten)

In Schritt 1 kontaktiert der Client den Server am Befehlsport und gibt den PASV-Befehl aus. Der Server antwortet dann in Schritt 2 mit PORT 2024 und teilt dem Client mit, auf welchem ​​Port er auf die Datenverbindung lauscht. In Schritt 3 initiiert der Client dann die Datenverbindung von seinem Datenport zu dem angegebenen Server-Datenport. Schließlich sendet der Server in Schritt 4 ein ACK an den Datenport des Clients zurück.

Während FTP im passiven Modus viele der Probleme auf der Client-Seite löst, eröffnet es eine ganze Reihe von Problemen auf der Server-Seite. Das größte Problem ist die Notwendigkeit, jede Remote-Verbindung zu hochnummerierten Ports auf dem Server zuzulassen. Glücklicherweise erlauben viele FTP-Daemons, einschließlich des Solaris-Daemons in.ftpd, dem Administrator, eine Reihe von Ports anzugeben, die der FTP-Server verwenden wird. Weitere Informationen finden Sie in Anhang 1.

Das zweite Problem betrifft die Unterstützung und Fehlerbehebung von Clients, die den passiven Modus unterstützen (oder nicht). Beispielsweise unterstützt das mit Solaris ftp daemon bereitgestellte Befehlszeilen-FTP-Dienstprogramm den passiven Modus seit Solaris 9 (beginnend mit sccs v1.20). Werfen Sie einen Blick auf die Manpages (in.ftpd), Option -p.

Mit der enormen Popularität des World Wide Web ziehen es viele Menschen vor, ihren Webbrowser als FTP-Client zu verwenden. Die meisten Browser unterstützen nur den passiven Modus beim Zugriff auf ftp://-URLs. Dies kann entweder gut oder schlecht sein, je nachdem, was die Server und Firewalls für die Unterstützung konfiguriert sind.

Passives FTP-Beispiel

Unten sehen Sie ein tatsächliches Beispiel einer passiven FTP-Sitzung. Die einzigen Dinge, die geändert wurden, sind die Servernamen, IP-Adressen und Benutzernamen. In diesem Beispiel wird eine FTP-Sitzung von user01 (192.0.0.1), einer Solaris-Box, auf der der Standard-FTP-Befehlszeilenclient ausgeführt wird, zu dest_serv (192.0.0.2), einer Solaris-Box, auf der Solaris 9 ftpd ausgeführt wird, initiiert. Das Debugging-Flag (-d) wird mit dem FTP-Client verwendet, um zu zeigen, was hinter den Kulissen vor sich geht. Alles in Kursivschrift ist die Debugging-Ausgabe, die die tatsächlichen FTP-Befehle zeigt, die an den Server gesendet werden, und die Antworten, die von diesen Befehlen generiert werden. Normale Serverausgaben werden in Schwarz dargestellt, Benutzereingaben in Fettdruck .

Beachten Sie den Unterschied im PORT-Befehl in diesem Beispiel im Gegensatz zum aktiven FTP-Beispiel. Hier sehen wir, dass ein Port auf dem Serversystem (192.0.0.2) und nicht auf dem Client geöffnet wird. Sehen Sie sich die Diskussion über das Format des PORT-Befehls oben im Abschnitt Aktives FTP-Beispiel an.

$ ftp -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
---> PASV
227 Entering Passive Mode (192,0,0,2,7,176)
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
cdrom
(...)
vol
xfn
226 Transfer complete.
191 bytes received in 0.027 seconds (7.04 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.

Zusammenfassung

Das folgende Diagramm soll Administratoren dabei helfen, sich daran zu erinnern, wie die einzelnen FTP-Modi funktionieren:

Active FTP : 
command : client >1024 -> server 21 
data :    client >1024 <- server 20 
Passive FTP : 
command : client >1024 -> server 21 
data :    client >1024 -> server >1024

Eine kurze Zusammenfassung der Vor- und Nachteile von aktivem vs. passivem FTP ist ebenfalls angebracht:

Aktives FTP ist vorteilhaft für den Administrator des FTP-Servers, aber nachteilig für den Administrator auf der Client-Seite. Der FTP-Server versucht, Verbindungen zu zufälligen hohen Ports auf dem Client herzustellen, die mit ziemlicher Sicherheit durch eine Firewall auf der Clientseite blockiert würden. Passives FTP ist vorteilhaft für den Client, aber nachteilig für den Administrator des FTP-Servers. Der Client stellt beide Verbindungen zum Server her, aber eine davon zu einem zufälligen hohen Port, der mit ziemlicher Sicherheit durch eine Firewall auf der Serverseite blockiert wird.

Glücklicherweise gibt es einen gewissen Kompromiss. Da Administratoren, die FTP-Server betreiben, ihre Server für die größtmögliche Anzahl von Clients zugänglich machen müssen, müssen sie mit ziemlicher Sicherheit passives FTP unterstützen. Die Offenlegung von High-Level-Ports auf dem Server kann minimiert werden, indem ein begrenzter Portbereich für den zu verwendenden FTP-Server angegeben wird. Somit kann alles außer diesem Bereich von Ports auf der Serverseite durch eine Firewall geschützt werden. Dies beseitigt zwar nicht alle Risiken für den Server, verringert sie jedoch enorm. Weitere Informationen finden Sie in Anhang 1.


Linux
  1. Beheben Sie das Problem mit dem passiven FTP-Modus auf OpenStack- und EC2-VMs

  2. Linux – Raspberrypi Serielle Schnittstelle?

  3. Überprüfen Sie aktive FTP-Verbindungen zu Ihrem Hosting-Konto in cPanel

  4. Überblick über FTP und SFTP

  5. So übertragen Sie eine Datei im passiven Modus per FTP

RHEL 8 / CentOS 8 öffnen FTP-Port 21 mit Firewalld

Netbsd Gateway für serielle Schnittstelle?

Öffnen eines Ports unter Linux

Ist es möglich, eine Adresse:Port zu pingen?

HTTPS-SSH-Tunnel

FTP mit IPTables zulassen