Winkelwagen

/ .nl-domeinnaam

Jouw .nl voor slechts € 0,49.

Domeinnaam checken
E-mail

/ Hostingpakket keuzehulp

Weet je niet zeker welk hostingpakket de beste
keus is voor jouw website? Met onze keuzehulp
kom je er wel uit.

Direct naar de keuzehulp

/ OpenStack

/ Probeer Public Cloud uit

Gratis 1 maand aan de slag met Public Cloud?

Vraag proefperiode aan

/ TransIP Blog

Woocommerce vs Shopify - Kies jouw ideale platform

Lees de blogpost
Hulp nodig?

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    Een FTP-server installeren in Linux met vsftpd

    De meest gebruikte FTP-servers binnen Linux zijn PureFTPd, ProFTPD en vsftpd. Een overzicht van de verschillen vind je op deze website. Wij raden ProFTPD af omdat het minder goed onderhouden wordt dan PureFTPd en vsftpd.

    Een FTP-server biedt je een eenvoudige methode om bestanden naar je VPS of instance te uploaden. Dit is bijvoorbeeld handig voor een webserver om updates van websites op je server te plaatsen, of bij een mediaserver om bestanden te uploaden.

    In deze handleiding laten wij zien hoe je met vsftpd (Very Secure FTP Daemon) een FTP-server in een Linux-distributie installeert en configureert, en Let's Encrypt gebruikt om een veilige FTPS-verbinding op te zetten.

    Gebruik je liever SFTP? Raadpleeg dan deze handleiding.


     

    De FTP-server installeren en configureren

     

    Stap 1

    Verbind met je server via SSH, de VPS-console (VPS) of de OpenStack-console (OpenStack-instance).


     

    Stap 2

    Installeer vsftpd met het commando:

    Ubuntu/Debian:

    sudo apt -y install vsftpd

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo dnf -y install vsftpd

    vsftpd start automatisch na de installatie en herstarts van je OS.


     

    Stap 3

    Voor je je FTP-server start, maak je enkele aanpassingen in de configuratie van vsftpd, met als doel toegang tot je FTP-server specifieker af te stellen.

    Open het configuratiebestand met nano of vi:

    sudo nano /etc/vsftpd.conf

     

    Stap 4

    Pas de volgende instellingen aan/voeg ze toe als ze nog niet bestaan (neem eerst de toelichting door voor je deze instellingen aanpast). Sla de wijzigingen op en sluit het bestand met de toetsencombinatie ctrl + > > enter.

    anonymous_enable=no
    chroot_local_user=YES
    allow_writeable_chroot=YES
    userlist_enable=YES
    userlist_file=/etc/vsftpd.userlist
    userlist_deny=NO
    pasv_enable=Yes
    pasv_min_port=20100
    pasv_max_port=20200
    • anonymous_enable=NO: Voorkomt dat niet-geïdentificeerde gebruikers kunnen inloggen op je FTP-server.
    • chroot_local_user=YES: Plaatst FTP-gebruikers in hun eigen home directory (i.e. een chroot jail) na het inloggen op je FTP-server. 
    • allow_writeable_chroot=YES: Geeft FTP-gebruikers toestemming om wijzigingen te maken in de chroot directory (i.e. de eigen home directory).
    • userlist_enable=YES: Schakelt de vsftpd-userlist in, waarmee je gebruikers toestemming kunt geven, of toegang verbieden, tot je FTP-server.
    • userlist_file=/etc/vsftpd.userlist: De locatie van de hierboven beschreven userlist.
    • userlist_deny=NO: Enkel de user accounts in de userlist file mogen inloggen op je FTP-server. Zet je de optie op 'YES', dan geeft de userlist geen toestemming, maar verbiedt het toegang tot je FTP-server.
    • pasv_enable=Yes: Voor het gebruik van vsftpd is het gebruik van passive ports nodig: hiermee zorg je ervoor dat wanneer de verbinding naar poort 21 is opgezet dat voor de daadwerkelijke data transfer de passieve ports gebruikt worden.
    • pasv_min_port=20100: Het laagste nummer van de passive port range. In principe is iedere ongebruikte poort boven 1023 die niet gebruikt wordt toereikend.
    • pasv_max_port=20200: Het hoogste nummer van de passive port range. Een kleine range van max 100 poorten is normaliter meer dan toereikend. 


    Stap 5

    Ubuntu komt out-of-the-box met UFW als firewall, waarin alle poorten by default dicht staan. Open poort 21 met de commando's:

    Ubuntu/Debian:

    sudo ufw allow 21/tcp
    sudo ufw allow 20100:20200/tcp

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=20100-20200/tcp
    sudo firewall-cmd --reload

     

    Gebruikers aanmaken en toegang geven tot je FTP-server

     

    In de vorige stappen heb je de vsftpd-userlist optie ingeschakeld, samen met de aanvullende optie dat enkel gebruikersaccounts in de userlist-file toegang hebben tot je FTP-server. In dit onderdeel maak je (optioneel) een nieuwe gebruiker aan, en voeg je de gebruiker toe aan de userlist.

     

    Stap 1

    Je maakt FTP-gebruikers op dezelfde manier aan als normale gebruikers binnen Linux. Wil je een bestaand gebruikersaccount gebruiken? Ga dan verder met stap 3.

    sudo useradd -m -c "ftp demo" username
    sudo passwd username

    Toelichting code

    • -m: maakt een home directory voor de gebruiker aan. Dit is optioneel en enkel nodig als je daadwerkelijk de user een home directory op je VPS wil geven in /home/username. Geef je de user in het deel 'Home directories van gebruikers aanpassen' een home directory die zich niet in /home bevindt? Dan kun je -m weglaten.
    • -c: is eveneens optioneel en voegt een comment toe aan de gebruiker. Dit is vooral handig om een notitie voor jezelf te maken waarvoor een account dient.
    • username: de daadwerkelijke gebruikersnaam
    • passwd username: geeft de gebruiker een wachtwoord

    Optioneel:

    Optioneel kun je ook de FTP-gebruikers een specifieke directory geven als home directory en lid maken van een groep door een FTP-groep aan te maken, bijvoorbeeld:

    sudo groupadd ftp
    sudo useradd -g ftp -d /ftp/username -c "ftp demo" username
    sudo passwd username

     

    Stap 2

    Open het userlist-bestand met:

    sudo nano /etc/vsftpd.userlist

     

    Stap 3

    Voeg de naam van de gebruiker toe aan het bestand, sla de wijzigingen op en sluit nano met ctrl + x > y > enter. Iedere gebruikersnaam wordt op een nieuwe regel toegevoegd, bijvoorbeeld:

    transip
    admin
    username

    Tip: alternatief kun je ook de gebruikersnaam in één keer met een commando aan het bestand toevoegen:

    echo "gebruikersnaam" | sudo tee -a /etc/vsftpd.userlist

     

    Home directories van gebruikers aanpassen

     

    Dankzij de eerdere configuratie komen FTP-gebruikers standaard in hun home directory terecht. In deze paragraaf laten wij zien hoe je optioneel specifieke directories instelt. Dit is bijvoorbeeld handig als je gebruikers naar een specifieke directory wil leiden waar hun website in staat (bij webservers), of bijvoorbeeld een specifieke map (e.g. Block Storage) op een mediaserver.

     

    Stap 1

    Wil je een bestaande map gebruiken? Ga dan verder met stap 3. Bestaat de map nog niet? Maak die dan eerst aan en verwijder alle schrijfrechten voor alle gebruikers (vervang gebruikersnaam door de naam van de gebruiker).

    Ubuntu/Debian:

    sudo mkdir /home/gebruikersnaam/ftp
    sudo chown nobody:nogroup /home/gebruikersnaam/ftp
    sudo chmod a-w /home/gebruikersnaam/ftp

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo mkdir /home/gebruikersnaam/ftp
    sudo chown nobody:nobody /home/gebruikersnaam/ftp
    sudo chmod a-w /home/gebruikersnaam/ftp

     

    Stap 2

    Maak de directory aan waar de gebruiker bestanden in mag plaatsen en geef enkel die gebruiker volledige rechten tot de map. Vervang ‘gebruikersnaam’ door de naam van de gebruiker:

    sudo mkdir /home/gebruikersnaam/ftp/files
    sudo chown gebruikersnaam:gebruikersnaam /home/gebruikersnaam/ftp/files
    sudo chmod 0700 /home/gebruikersnaam/ftp/files

     

    Stap 3

    Je stelt nu de home directory van je gebruikers in. Open opnieuw het configuratiebestand van VSFTP:

    sudo nano /etc/vsftpd.conf

     

    Stap 4

    Voeg de volgende twee regels toe onderaan in het bestand:

    user_sub_token=$USER
    local_root=/home/$USER/ftp/
    • user_sub_token=$USER: de naam van de gebruiker die met je FTP-server verbindt, wordt gebruikt voor de variabele $USER
    • local_root:de directory waar je FTP gebruikers terecht komen. In dit voorbeeld is het de map ftp in de eigen home directory. Tenzij je meer mappen toevoegt in de ftp directory, kun je hier net zo goed direct /home/$USER/ftp/files gebruiken.
      • Stel dat je bijvoorbeeld Block Storage aan je VPS gekoppeld hebt en die wil gebruiken (e.g. voor een mediaserver), dan  gebruik je local_root=/mnt/bigstorage/ (vervang /mnt/bigstorage/ door de daadwerkelijke map waar je Block Storage gemount is).
      • Host je websites (in /var/www/html/) en heb je in de vorige paragraaf je domein als gebruikersnaam gebruikt? Dan zou je hier local_root=/var/www/html/$USER instellen.

    Sla de wijzigingen op en sluit het bestand met de toetsencombinatie ctrl + > > enter.


     

    Stap 5

    Herstart tot slot vsftpd om de nieuwe configuratie toe te passen. Het kan soms een paar minuten duren voor je een dergelijke configuratiewijziging terugziet wanneer je verbindt via je FTP-client.

    sudo systemctl restart vsftpd

     

    Je FTP-server beveiligen

     

    Het FTP-protocol versleutelt geen gegevens en is dus onveilig. In de praktijk wordt daarom doorgaans altijd SFTP of FTPS gebruikt (zie dit artikel voor een toelichting op de verschillen). In dit deel van de handleiding beveilig je je FTP-server met FTPS. 

    Voor deze stappen is een (sub)domein nodig waarvan minimaal het A-record verwijst naar je FTP-server.

     

     

     

    Stap 1

    Als SSL(TLS)-certificaat gebruiken we een Let's Encrypt-certificaat. Voor de installatie van Let's Encrypt raadt Let's Encrypt aan om Snap te gebruiken. 

    1. Installeer eerst Snap.
    2. Verwijder eventueel reeds aanwezige Certbot-installaties (de tool die gebruikt wordt om Let's Encrypt certificaten te genereren) 
    3. Installeer vervolgens Certbot met Snap
    4. Maak vervolgens een symbolic link aan zodat je certbot-commando's rechtstreeks kunt uitvoeren 

    Ubuntu/Debian:

    sudo apt -y install snapd
    sudo apt -y remove certbot
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo dnf -y install snapd
    sudo systemctl enable --now snapd.socket
    sudo dnf -y remove certbot
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

     

    Stap 2

    Het is voor de validatie belangrijk dat poort 80 en 443 open staan in je firewall. Indien ze nog niet open staan gebruik je de commando's:

    Ubuntu/Debian:

    sudo ufw allow 80,443/tcp

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
    sudo firewall-cmd --reload

     

    Stap 3

    Het is belangrijk dat poort 80 en 443 momenteel niet in gebruik zijn. Dit controleer je door net-tools te installeren en netstat te gebruiken:

    Ubuntu/Debian:

    sudo apt -y install net-tools
    sudo netstat -tulpn | less

    AlmaLinux/Rocky Linux/CentOS Stream:

    sudo dnf -y install net-tools
    sudo netstat -tulpn

    Je krijgt een overzicht te zien dat lijkt op het volgende:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.54:53           0.0.0.0:*               LISTEN      628/systemd-resolve
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1184/exim4
    tcp        0      0 0.0.0.0:45123           0.0.0.0:*               LISTEN      1/init
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      628/systemd-resolve
    tcp6       0      0 :::80                   :::*                    LISTEN      801/apache2
    tcp6       0      0 :::21                   :::*                    LISTEN      15788/vsftpd
    tcp6       0      0 :::25                   :::*                    LISTEN      1184/exim4
    tcp6       0      0 :::45123                :::*                    LISTEN      1/init
    tcp6       0      0 :::443                  :::*                    LISTEN      801/apache2
    udp        0      0 127.0.0.54:53           0.0.0.0:*                           628/systemd-resolve
    udp        0      0 127.0.0.53:53           0.0.0.0:*                           628/systemd-resolve
    udp        0      0 12.123.123.2:68         0.0.0.0:*                           672/systemd-network

    Zoals je ziet zijn beide poorten in gebruik door apache2. Stop de betreffende service tijdelijk, in dit geval met:

    sudo systemctl stop apache2

     

    Stap 4

    Genereer vervolgens een certificaat met het onderstaande commando. Vervang hier ftp.voorbeeld.nl door je hostname (te controleren met het commando hostnamectl) en admin@voorbeeld.nl door het mailadres waarmee je de certificaten wil beheren. 

    sudo certbot certonly --standalone -d ftp.voorbeeld.nl -m admin@voorbeeld.nl --agree-tos --non-interactive

    Herstart vervolgens eventueel gestopte services weer, bijvoorbeeld:

    sudo systemctl start apache2

     

    Stap 5

    Je Let's Encrypt-certificaat en keyfile zijn opgeslagen in /etc/letsencrypt/live/<hostname>/ (de exacte locatie staat in de output van het commando in stap 4).

    Vervolgens pas je de vsftpd-configuratie aan om inderdaad de Let's Encrypt-certificaten te gebruiken en onveilige verbindingen te weigeren. Open opnieuw /etc/vsftpd.conf:

    nano /etc/vsftpd.conf

     

    Stap 6

    Voeg de volgende configuratie toe onderaan het bestand, waarbij je server.voorbeeld.nl vervangt door je hostname.

    ssl_enable=YES
    allow_anon_ssl=NO
    require_ssl_reuse=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1_1=YES
    ssl_tlsv1_2=YES
    ssl_tlsv1_3=YES
    
    # schakel onveilige protocollen uit
    ssl_tlsv1=NO
    ssl_sslv2=NO
    ssl_sslv3=NO
    
    # de locaties waar de bestanden van je certificaat staan
    rsa_cert_file=/etc/letsencrypt/live/server.voorbeeld.nl/fullchain.pem
    rsa_private_key_file=/etc/letsencrypt/live/server.voorbeeld.nl/privkey.pem

    Niet alle FTP-clients kunnen met dezelfde instellingen overweg. Deze stappen zijn getest in FileZilla. Oudere FTP-clients kunnen de optie ssl_tlsv1=YES nodig hebben. Let wel dat het veiliger is om dan een nieuwere FTP client te gebruiken.


     

    Stap 7

    Je bent nu zo goed als klaar: je hoeft enkel nog vsftpd te herstarten met commando hieronder.

    sudo systemctl restart vsftpd

    Tot slot volgt het leukste onderdeel: je kunt nu je verbinding testen!


     

    Verbinden met je vsftpd-server

     

    Om met je FTP-server te verbinden, gebruik je de onderstaande instellingen. De screenshot eronder laat een voorbeeld zien in FileZilla.

    • Protocol: FTP - File Transfer Protocol (of FTPS als je FTP-applicatie die expliciet noemt)
    • Host: Het IP-adres van je FTP-server of een (sub)domein dat ernaar verwijst. Het (sub)domein is dezelfde als degene waarvoor je optioneel een SSL-certificaat hebt gegenereerd.
    • Port: 21 
    • Encryption: Indien je een SSL-certificaat gebruikt raden we ‘Require explicit FTP over TLS’ aan. Zo niet (onveilig), dan volstaat ‘Use explicit FTP over TLS if available’.
    • Logon Type: normal (nooit anonymous). 
    • User: Een eerder aangemaakt FTP-gebruikersaccount.
    • Password: Het wachtwoord van de hierboven genoemde User.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op