Controle op passief poortbereik bij FTP

Controleer of het poortbereik voor de passieve modus van je FTP-server open staat en door firewalls heen bereikbaar is. Onmisbaar om fouten als "unable to open data connection" op te sporen.

Voorinstellingen:

Wat is de passieve modus?

In de passieve modus van FTP (PASV) opent de server een willekeurige poort met een hoog nummer voor de gegevensoverdracht en vertelt hij de client met welke poort die verbinding moet maken. Blokkeert een firewall die poorten, dan mislukken bestandsoverdrachten, ook al werkt de besturingsverbinding op poort 21 prima.

De besturingsverbinding op poort 21 komt door de firewall, maar de tweede gegevensverbinding naar poort 50000 wordt geblokkeerd; het 227-antwoord van de server codeert de poort als 195 x 256 + 80
Niet de besturingsverbinding faalt, en het 227-antwoord vertelt je welke poort je moet openzetten.

Gangbare passieve poortbereiken

Bereik Gebruikt door
49152–65535Dynamisch/tijdelijk bereik van IANA (standaard op veel servers)
40000–40100Veelgebruikt eigen bereik (cPanel, Plesk)
30000–31000Veelgebruikt eigen bereik (standaard bij FileZilla Server)

Actieve en passieve modus vergeleken

FTP gebruikt twee verbindingen: een besturingsverbinding op poort 21 voor opdrachten en een aparte gegevensverbinding voor elke bestandsoverdracht en elk mapoverzicht. De modus bepaalt welke kant die tweede verbinding opent.

Actieve modus (PORT) Passieve modus (PASV)
Wie opent de gegevensverbindingDe server, terug naar de clientDe client, naar de server
Wat de client stuurtPORT (of EPRT) met een eigen adres en een eigen poortPASV (of EPSV)
Wat bereikbaar moet zijnEen poort op de client, die thuisrouters en bedrijfsfirewalls blokkerenHet passieve poortbereik van de server
Wie het gebruiktDe ingebouwde ftp.exe van Windows, oude scriptsBijna elke moderne client, standaard

De passieve modus heeft alleen uitgaande verbindingen vanaf de client nodig. Daarom werkt hij achter NAT en daarom gebruiken moderne clients hem standaard. Het werk verschuift naar de server: de firewall daarvan moet clients binnenlaten op het hele passieve bereik, niet alleen op poort 21.

Het 227-antwoord lezen

De server beantwoordt PASV met zes getallen, bijvoorbeeld 227 Entering Passive Mode (203,0,113,10,195,80). De eerste vier vormen het IP-adres waarmee de client verbinding moet maken. De laatste twee geven de poort: 195 x 256 + 80 = 50000. Twee dingen gaan vaak mis:

  • De poort valt buiten het bereik dat de firewall toestaat. Stel het passieve bereik van de server in op het bereik dat je hebt opengezet, of zet het bereik open dat de server echt gebruikt.
  • Het adres is een privéadres, zoals 192.168.1.10, omdat de server achter NAT staat en zijn interne adres doorgeeft. Clients blijven dan bij elk mapoverzicht hangen. Geef de server zijn openbare adres op met de instellingen hieronder; sommige clients omzeilen het probleem door het adres van de server te hergebruiken, maar de oplossing hoort op de server.

Met EPSV is het antwoord 229 Entering Extended Passive Mode (|||50000|): alleen de poort, geen adres, dus het probleem met het privéadres verdwijnt. De poort moet nog steeds open staan.

Het passieve bereik instellen op gangbare servers

  • vsftpd: in vsftpd.conf pasv_min_port=40000, pasv_max_port=40100 en pasv_address met het openbare IP-adres als de server achter NAT staat.
  • ProFTPD: PassivePorts 40000 40100, plus MasqueradeAddress voor het openbare adres.
  • Pure-FTPd: PassivePortRange 40000 40100 en ForcePassiveIP.
  • FileZilla Server: de instellingen voor de passieve modus nemen een eigen poortbereik en het openbare IP-adres dat de server moet doorgeven.
  • IIS: op serverniveau, onder FTP Firewall Support (FTP-firewallondersteuning), het poortbereik voor het gegevenskanaal en het externe IP-adres van de firewall. Mogelijk moet je de FTP-service opnieuw starten voordat een nieuw bereik werkt.

Zet daarna hetzelfde bereik voor TCP open overal vóór de server (de firewall van het besturingssysteem, een beveiligingsgroep in de cloud, port forwarding op de router) en controleer een paar poorten uit dat bereik met de tool hierboven.

Zo lees je het resultaat

Open betekent dat een TCP-verbinding met die poort vanaf internet werd geaccepteerd, dus onderweg blokkeert niets. Geen antwoord betekent meestal dat een firewall de poging stilletjes heeft weggegooid. Gesloten betekent dat iets met een weigering antwoordde, vaak de server zelf, want veel FTP-servers luisteren maar heel even op een passieve poort nadat een client PASV heeft gestuurd.

Op een server die niets aan het doen is, zijn gesloten poorten in het bereik dus normaal; een heel bereik zonder antwoord is het echte waarschuwingsteken. Het definitieve bewijs is een mapoverzicht in passieve modus vanuit een echte client: lukt het inloggen en blijft het overzicht daarna hangen, dan wordt de gegevensverbinding geblokkeerd. De FTP-verbindingstester controleert de eerste helft: dat de server antwoordt en je inloggegevens accepteert.