FTP

Uit LinuxMintNL WiKi
Ga naar: navigatie, zoeken

File-sharing met een FTP server in je thuisnetwerk.


Voor een thuisnetwerk kan een ftp server een goede oplossing zijn om bestanden te delen. Met redelijke computers en een router kun je gemakkelijk de maximale snelheid uit je ethernet kabel halen en dan kom je op ruim 115 MB/sec bij de overdracht van bestanden. Veel sneller als dat zal het niet worden op een 1Gb netwerk. Smartphones en tablets kunnen ook goed overweg met ftp, maar meestal wel op een lagere snelheid.

Er komt wel het een en ander bij kijken om je thuisnetwerk op te zetten en de juiste software te installeren. Daar is al veel over geschreven en daarom staan hier voornamelijk links om je daarmee verder te helpen.

Netwerk

Om te beginnen kan het wenselijk zijn om je netwerk met een draadloze router uit te breiden omdat er steeds meer apparaten bijkomen. Voor het uitbreiden van je netwerk is een switch het meest aangewezen apparaat qua kostprijs en eenvoud, maar voor draadloze apparaten of om het bereik van je draadloze netwerk uit te breiden heb je toch wel een router nodig. Op WikiHow[1] staat een heel goed artikel waarin stap voor stap wordt uitgelegd hoe je een router aan je netwerk moet toevoegen zodat de computers en mobiele apparatuur allemaal voor elkaar zichtbaar blijven.

De clou is dat je op de hulp router eerst de dhcp server uitschakelt en vervolgens niet de wan poort maar een lan poort gebruikt om naar de hoofd router te verbinden. Als je de dhcp server niet uitschakelt interfereert die met die van de hoofd router. Dan gaat je net op slot en kan je helemaal overnieuw beginnen.

FTP server

Er zijn verschillende ftp servers. In deze twee artikelen [2] [3] wordt de installatie besproken van vsFTP.

Je kunt de server overigens gewoon vanuit programmabeheer installeren. De service wordt na installatie automatisch gestart.
Op mijn computer werkt de server in stand alone mode en dat gaat prima. Het is zeer eenvoudig.

De configuratie gegevens voor de server staan in /etc/vsftpd.conf. Je hebt root bevoegdheden nodig om dat bestand te kunnen wijzigen. Als je in je bestandsbeheerder naar die map navigeert moet je hem daarom als beheerder openen.
Er is maar één waarde die je daarin hoeft te veranderen:

write_enable=YES

Daarmee sta je toe dat users bestanden kunnen uploaden en verwijderen.

Controleer voor de zekerheid of local users kunnen inloggen:

local_enable=YES

Firewall

Met een server alleen ben je er nog niet want je moet er ook voor zorgen dat de clients toegang hebben tot de computer waarop de ftp server draait. Dat betekent dat je de firewall moet aanpassen. Een heel handig hulpmiddel hiervoor is UFW [4]
Voor ftp zou je de poorten 20 en 21 kunnen openzetten. In mijn eigen ervaring vind ik het beter werken om specifieke ip adressen toegang te geven tot de server. Dat betekent dan wel dat je statische ip adressen in je netwerk moet hebben. Dat configureer ik allemaal in de router samen met IP&MAC binding voor extra veiligheid. Met UFW is het heel eenvoudig om individuele ip adressen van de lokale apparatuur toegang te geven tot de server. Je kunt op de server een client met adres 192.168.1.183 toegang geven via de regel

sudo ufw allow from 192.168.1.183

Meer is het niet.

Je kunt het aantal pogingen beperken waarmee een ip-adres een nieuwe verbinding tot stand probeert te brengen. Als een ip-adres meer dan 10 keer in 30 seconden probeert te verbinden zullen alle volgende pogingen worden genegeerd. Dit doe je door de volgende regel toe te voegen aan de firewall:

sudo ufw limit ftp

Dit verbetert de beveiliging van de server.

Om te zien welke apparaten er op je LAN zijn aangesloten kun je de opdracht arp-scan[5] gebruiken. Voor het uitvoeren van die opdracht heb je root bevoegdheden nodig dus je moet de opdracht door sudo vooraf laten gaan en na enter je wachtwoord invoeren. De uitvoer ziet er dan ongeveer zo uit:

mogenblue@brutus ~ $ sudo arp-scan --localnet
Interface: eno1, type: EN10MB, MAC: 24:3a:d5:0b:d7:d3, IPv4: 192.168.1.53
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.1     40:64:a7:fe:1b:b9	TP-LINK TECHNOLOGIES CO.,LTD.
192.168.1.62	5c:dd:2b:7f:a4:e4	ASUSTek COMPUTER INC.
192.168.1.63	5c:ab:d5:3b:c9:eb	Motorola Mobility LLC

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.963 seconds (130.41 hosts/sec). 3 responded

FTP cliënt

Als dat allemaal werkt kun je verbinding maken met de server met een ftp cliënt zoals het welbekende Filezilla. Je kunt de server ook gewoon vanuit je bestandsbeheerder benaderen [6]. Vanaf een smartphone of tablet vind ik CX Explorer een heel goede app om met de ftp server te verbinden.

Om verbindig te maken met de ftp server heb je drie gegevens nodig:

  1. het ip-adres van de server
  2. je username
  3. het wachtwoord waarmee je inlogt

Dat is alles wat je nodig hebt voor handmatig verbinden en bladeren op je thuis server.
Via ftp is de gegevensoverdracht niet versleuteld, maar zolang je binnen je thuisnetwerk blijft maakt dat weinig uit. Als je een beveiligde verbinding wilt hebben kun je beter voor SSH kiezen.

Draadloze overdracht via wifi is standaard versleuteld via het wifi protocol. Voor mobiele apparaten kan het niet versleutelen een snelheidsvoordeel opleveren ten opzichte van sftp wat wel versleuteld is. Met wifi kom je doorgaans niet hoger dan 433 MHz op de 5GHz band. Dat vertaalt zich in ongeveer 40MB/s maar afhankelijk van de apparatuur, de afstand en het aantal tussenliggende muren kunnen de prestaties ook een stuk lager zijn. Een verhelderend artikel hierover is te vinden op hardware.info: Onbereikbare snelheden

FTP cliënt scripting

Voor het automatisch uploaden, downloaden of synchroniseren van hele mappen heb je een ander programma nodig. Daarvoor komt LFTP om de hoek kijken. Hiermee kun je scripts maken om met een ftp server te synchroniseren. [7] [8] Met dit programma geef je aan je ftp netwerk een flinke powerboost.

Deze programma's kunnen allemaal gewoon vanuit het programmabeheer worden geïnstalleerd. Daar heb je dus geen sudo apt-get meer voor nodig.

Test online status FTP server

Om op een client te controleren of de ftp server online is kan de nmap[9][10] opdracht worden gebruikt.

Als het ip-adres van de server bijvoorbeeld 192.168.1.073 is en de server is online dan ziet de uitvoer in een terminal er ongeveer zo uit:

mogenblue@Brutus ~ $ nmap 192.168.1.073 -p 21 --open --host-timeout 3
Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:19 CEST
Nmap scan report for 192.168.1.073
Host is up (0.00050s latency).

PORT   STATE SERVICE
21/tcp open  ftp

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

Als de server niet online is, of een willekeurig ander ip wordt gebruikt, ziet het er zo uit:

mogenblue@Brutus ~ $ nmap 192.168.1.078 -p 21 --open --host-timeout 3
Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:20 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds

FTP werkt gewoonlijk op poort 21. Daarom wordt bij de -p optie deze waarde meegegeven. Daardoor wordt alleen op die poort gescand.
Door de optie --host-timeout zal de opdracht na 3 seconden stoppen met wachten op respons.

Met het volgende script kan de status in een terminal worden gecontroleerd. Het heet test-ftp-status-t.sh en dit staat er in:

#!/bin/bash

# vul hier het ip-adres van de ftp-server in
Host='192.168.1.073'
# ftp via port 21
Port=21
TimeOutSeconden=3

echo .
echo .
echo .
echo .

nmap $Host -p $Port --open --host-timeout $TimeOutSeconden

Je hoeft alleen het ip-adres van de ftp-server in te vullen.

Als alternatief kun je ook een script gebruiken wat een melding op het scherm geeft. Dit heet test-ftp-status-m.sh:

#!/bin/bash

# vul hier het ip-adres van de ftp-server in
Host='192.168.1.073'
# ftp via port 21
Port=21
TimeOutSeconden=3
Service='FTP'

echo .
echo .
echo .
echo .

Status=$(nmap $Host -p $Port --open --host-timeout $TimeOutSeconden  | grep open)

echo .
echo .
if [[ -z $Status ]]
then
  StatusText="Server op ${Host} is niet online"
else
  StatusText="Server op ${Host} is online"
fi

zenity --info --height=100 --width=400 --title="Status $Service server" --text="$StatusText"

Je hoeft alleen het ip-adres van de ftp-server in te vullen.

Als de host online is zal de grep[11] opdracht het woord open vinden in de regel

21/tcp open ftp

en dat is de voorwaarde om de status online door te geven.

De zenity[12] opdracht geeft vervolgens een melding op het scherm. Zenity is een opdracht met uitgebreide mogelijkheden voor input en weergave.

Bij het opslaan van deze scripts moet je bij de Eigenschappen onder de tab Rechten toestaan dat het bestand wordt uitgevoerd als programma.

Beide scripts kunnen met een programmastarter op het buroblad worden geplaatst. Je kunt het icoon bijvoorbeeld veranderen in network-idle. Voor het eerste script met terminal uitvoer moet je bij het aanmaken van de starter aangeven dat de opdracht in een terminal wordt uitgevoerd. Bij die met een melding op het scherm juist niet.

Referenties

  1. How to Cascade Routers
  2. How To Set Up Your FTP Server In Linux
  3. How to setup and use FTP Server in Ubuntu Linux
  4. How To Setup a Firewall with UFW on an Ubuntu and Debian Cloud Server
  5. arp-scan
  6. Access FTP server using the Nemo File Manager in Linux Mint
  7. How to automatically sync the contents of a local folder with the contents of a ftp folder?
  8. LFTP - sophisticated file transfer program
  9. Checking FTP server online from Bash script?
  10. 29 Practical Examples of Nmap Commands for Linux System/Network Administrators
  11. How To Use grep Command In Linux / UNIX With Practical Examples
  12. Zenity Manual