Welcher Modus ist sicherheitsfreundlicher, Aktiv oder Passiv?

Welcher Modus ist sicherheitsfreundlicher, Aktiv oder Passiv?

Ich habe die Arten von FTP-Modi (aktiv und passiv) untersucht und bin bei einigen Fragen zu meinem aktuellen Szenario etwas verwirrt

Szenario: Ich habe Android-Geräte als Clients, die von einer Organisation verwendet werden, und die Organisation ist sehr besorgt um die Sicherheit ihrer Server oder der darauf gespeicherten Daten oder anderer Dinge. Ein gutes Beispiel ist ein Bankserver.

Jetzt können sie 1.000 bis 1.500 Android-Geräte haben. Jedes Gerät erhält eine Liste mit herunterladbaren Elementen, durchläuft diese Liste nacheinander, lädt das jeweilige Element herunter und erstellt für jedes Element eine neue Verbindung.

Angesichts der Sicherheitsbedenken und der Anzahl der Geräte im oben genannten FTP-Anwendungsfall habe ich folgende Frage.

Aktiver Modus: Meines Wissens nach sollte ich den aktiven Modus verwenden. Dabei geht es um organisatorische Bedenken hinsichtlich des Öffnens mehrerer Ports auf dem Server, da das Android-Clientgerät sowohl die Befehls- als auch die Datenverbindung initiiert. Aber kann der Server es andererseits schaffen, im aktiven Modus einen Datenkanal zu senden oder zu öffnen, um 1000–1500 Geräte von einem einzigen Port aus zu senden? Wird das nicht fehlschlagen?

Passivmodus: Wenn ich an den passiven Modus denke, müssen wir uns mit der Frage befassen, ob bei einer sicherheitsintensiven Organisation mehrere Ports geöffnet werden müssen. Und im schlimmsten Fall: Wie viele Ports sollten wir für den passiven Modus für 1000–1500 Android-Geräte öffnen? Das Szenario zum Herunterladen von Dateien ist oben erwähnt.

Antwort1

FTP verwendet eine TCP-Steuerverbindung und eine oder mehrere Datenverbindungen.

Die Steuerverbindung wird verwendet, um Nachrichten darüber zu übertragen, was zu tun ist und was gerade zwischen Client und Server geschieht. Datenverbindungen werden verwendet, um Daten zu übertragen. Im Wesentlichen: Der Client teilt dem Server über die Steuerverbindung mit: Gib mir diese Datei, und der Server sendet die Bytes der Datei an die Datenverbindung.

Da Ihre Frage sicherheitsrelevant ist, werde ich hier etwas tiefer graben: Eine TCP-Verbindung wird „geöffnet“, indem ein Client ein TCP SYN an einen Server sendet. Diese SYNs unterliegen normalerweise Firewall-Regeln. Beispiel: Erlauben Sie <ALL_IPS_IN_THE_INTERNET>, eine Verbindung zu <MY_FTP_SERVER> über Port 21 herzustellen.

Im aktiven FTP-Modus öffnet der Client die Steuerverbindung und teilt dem Server mit, zu welcher IP und welchem ​​Port der Server die Datenverbindung öffnen soll.

Im FTP-Passivmodus öffnet der Client die Steuerverbindung und der Server teilt dem Client mit, zu welcher IP und welchem ​​Port der Client die Datenverbindung öffnen soll.

Der aktive FTP-Modus ist problematisch, wenn sich der Client hinter einem NAT-Router befindet, der eine einzige öffentliche IP-Adresse für mehrere Clients freigibt. Der Client kennt nur seine private IP-Adresse und selbst wenn er die öffentliche IP-Adresse des Routers herausfinden und an den FTP-Server senden könnte, würde die Anfrage beim Verbindungsversuch des Servers mit der IP-Adresse beim Router ankommen, hinter dem sich viele Clients befinden, und er weiß nicht, an welchen Client er die SYN-Anfrage weiterleiten soll.

Eine Lösung für dieses Problem ist Deep Packet Inspection. Der Router erkennt, dass die Kontrollverbindung über Port 21 läuft, untersucht die Verbindung und wenn der Client dem Server mitteilt, zu welchem ​​Port er die Datenverbindung öffnen soll, fügt der Router eine temporäre Portweiterleitung für Pakete vom FTP-Server für diesen Port hinzu. Der Router deaktiviert die Portweiterleitung, wenn die Kontrollverbindung geschlossen wird.

Das ist großartig und gut, solange Sie sich nicht um die Sicherheit kümmern – das heißt: DAS IST SCHLECHT. Verwenden Sie bei der Authentifizierung oder Übertragung vertraulicher Daten immer eine Verschlüsselung.

Beim Verschlüsseln kann der Router nicht mehr in die Steuerverbindung hineinschauen und somit die dynamische Portweiterleitung für den FTP-Client im aktiven Modus nicht erstellen.

Dieses Problem wird durch den FTP-Passivmodus gelöst, da beide Verbindungen vom Client geöffnet werden.

Das schafft aber ein weiteres Problem – nicht für den Client, sondern für den armen Firewall-Administrator des Servers. Da der Port, mit dem sich der Client im passiven Modus verbindet, eher zufällig ist, sieht die resultierende Firewall-Regel folgendermaßen aus: Erlaube <ALL_IPS_IN_THE_INTERNET>, sich mit <MY_FTP_SERVER> über Port 21 und die Ports 1024-65535 zu verbinden. Wenn Sie einen anständigen FTP-Server-Daemon haben, können Sie den für Datenverbindungen verwendeten Portbereich konfigurieren, was die Firewall etwas verbessert: Erlaube <ALL_IPS_IN_THE_INTERNET>, sich mit <MY_FTP_SERVER> über Port 21 und die Ports 20000 bis 21500 zu verbinden – das würde Ihnen 1500 gleichzeitige Datenverbindungen geben.

Das können Sie tun, aber ich rate davon ab. Es gibt eine bessere Alternative zu FTP: HTTP.

  • HTTP verwendet keine Steuer- und Datenverbindungen, was ein Vorteil ist, der keine wirklichen Nachteile mit sich bringt.
  • HTTP wird von Sicherheitsgeräten / Firewalls / Web Application Firewalls / ... gut unterstützt - diese Produkte können sogar die SSL-Verbindungen ihrer Clients per Man-in-Middle manipulieren und Inhaltsfilterung auf HTTPS durchführen.
  • Die meisten HTTP-Server können so konfiguriert werden, dass sie Verzeichnislisten bereitstellen.
  • Alle HTTP-Server unterstützen Downloads, die meisten setzen sie sogar fort.
  • Eine HTTP-Client-Bibliothek ist bereits auf Android- und iPhone-Geräten verfügbar

Daher würde ich den Client folgendermaßen implementieren:

  1. Erhalten Sie eine Verzeichnisliste der URL, die so konfiguriert ist, dass alle zum Download verfügbaren Dateien aufgelistet werden
  2. Herunterladen der Dateien

HTTP unterstützt sogar Uploads und die Wiederaufnahme fehlgeschlagener Uploads.

Ich hoffe, ich konnte hier erfolgreich für HTTP werben, denn FTP ist böse!

BEARBEITEN: Ich füge einen Link zu einem netten Beitrag hinzu, der die maximalen Verbindungen im PASV-Modusverhalten von vsftpd anzeigt:https://serverfault.com/questions/563582/connections-number-of-vsftp-in-passive-mode

verwandte Informationen