Trivielle overførsler med TFTP, del 3: Anvendelse

apr 27, 2021
admin

I tidligere artikler introducerede vi TFTP og diskuterede, hvorfor du måske ønsker at bruge det, og vi så på forskellige konfigurationsmuligheder. Lad os nu prøve at flytte nogle filer rundt. Det kan du gøre med en vis tryghed, nu hvor du ved, hvordan du sikrer din server lidt bedre.

Test 1, 2, 3

For at teste din server har du naturligvis brug for en klient, som du kan oprette forbindelse med. Heldigvis kan vi installere en meget nemt:

# apt-get install tftp

Red Hat derivatives bør styre en klientinstallation på følgende måde:

# yum install tftp

Hvis du slår din servers IP-adresse op ved hjælp af en kommando som den nedenfor, så er det muligt at oprette forbindelse til din TFTP-server fra hvor som helst (forudsat at din TCP Wrappers-konfiguration eller IPtables-reglerne tillader det, selvfølgelig).

# ip a

Når du kender IP-adressen, er det meget enkelt at komme i gang. Du kan oprette forbindelse til serveren på denne måde fra klienten:

# tftp 10.10.10.10

Nu skulle du være forbundet. (Hvis det ikke virkede, skal du kontrollere din firewalling, eller du kan “telnette” til port 69 på din TFTP-serverens IP-adresse). Dernæst kan du køre en “status”-kommando som følger:

tftp> statusConnected to 192.168.0.9.Mode: netascii Verbose: off Tracing: offRexmt-interval: 5 seconds, Max-timeout: 25 seconds

På dette tidspunkt foretrækker jeg at bruge verbose output ved blot at skrive denne kommando:

tftp> verbose

Du kan vælge at downloade binære filer eller ren tekst ved at skrive dette for ren tekst:

tftp> ascii

Og du kan tvinge binære filer til at downloade korrekt med:

tftp> binary

For at give os noget indhold at downloade, oprettede jeg en simpel tekstfil som denne:

# echo hello > HERE_I_AM

Det betyder, at filen HERE_I_AM indeholder ordet “hello”. Jeg flyttede derefter denne fil til vores standard TFTP-mappe, som vi så i brug tidligere i hovedkonfigurationsfilen, /etc/inetd.conf. Denne mappe – hvorfra vores trofaste dæmon tjener – hedder /srv/tftp, som vi kan se i Listing 3.

Da dette blot er en almindelig tekstfil, er der ikke noget behov for at aktivere binær tilstand, og vi har allerede skrevet verbose, så nu er det blot et spørgsmål om at overføre vores fil.

Hvis du overhovedet er bekendt med FTP på kommandolinjen, så vil du ikke have nogen problemer med at lære sproget at kende. Det er simpelthen “get” for at modtage og “put” for at placere. Min prøvefil HERE_I_AM kan hentes på følgende måde:

tftp> get HERE_I_AMgetting from 192.168.0.9:HERE_I_AM to HERE_I_AM Received 7 bytes in 0.1 seconds 

Overstående eksempel giver verbose output, når denne tilstand er aktiveret. Du kan uddrage nyttige oplysninger, f.eks. at vi ikke bruger binær tilstand, men blot “netascii”-tilstand. Derudover kan du se, hvor mange bytes der blev overført og hvor hurtigt. I dette tilfælde var dataene syv bytes store og tog en tiendedel af et sekund, med en halv kilobyte (eller deromkring) pr. sekund, at gennemføre.

Sammenlign det med output i ikke-verbose-tilstand, og jeg er sikker på, at du vil være enig i, at det er værd at bruge:

tftp> get HERE_I_AMReceived 7 bytes in 0.0 seconds

Hvis du føler behov for at sløre din TFTP-serverens portnummer, så skal du, efter at du har redigeret filen /etc/services, oprette forbindelse med din klientsoftware på følgende måde:

# tftp 10.10.10.10 11111

Du skal heller ikke være alt for bange for at anmode om flere filer på én linje. Opnå netop dette ved at bruge denne syntaks:

# get one.txt two.txt three.txt four.txt five.txt

Hvis du løber ind i problemer, er der et par muligheder for fejlfinding, som du kan undersøge. Du kan f.eks. have en mættet netværksforbindelse på grund af en broadcast-storm eller en mislykket enhed, der forårsager mærkelige netværksunderligheder. Du vil dog være glad for at erfare, at du kan justere timeouts. For det første kan vi fra TFTP-klientprompten indstille timeouts på en per-pakke-basis på følgende måde:

tftp> rexmt 10

Dette viser, at vi indstiller retransmissions-timeouts på en per-pakke-basis til 10 sekunder.

For at indstille den samlede overførsels-timeout for hele transaktionen skal du justere følgende indstilling på denne måde:

tftp> timeout 30

Et andet nyttigt værktøj til fejlfinding er “trace”-funktionaliteten. Den kan aktiveres på følgende måde:

tftp> tracePacket tracing on.

Nu vil hver overførsel se meget støjende ud, som nedenfor, hvilket bør hjælpe dig med din fejlfinding:

tftp> get HERE_I_AMsent RRQ <file=HERE_I_AM, mode=netascii>received DATA <block=1, 512 bytes> sent ACK <block=1> received DATA <block=2, 512 bytes>sent ACK <block=2> received DATA <block=3, 512 bytes>

Af ovenstående oplysninger bør du kunne se, på hvilket tidspunkt en overførsel mislykkes, og måske skelne et adfærdsmønster.

Hvis du ønsker at forlade TFTP-klientprompten, bør det være tilstrækkeligt at trykke på “q”-tasten.

I dette afsnit har vi set, hvordan du konfigurerer og modtager filer fra en TFTP-server. Som nævnt er det en god idé at firewall port 69 fra omverdenen, hvis du eksperimenterer med denne software, og især hvis du implementerer den i produktion.

Jeg anbefaler, at du enten låser din server, så den kun kan tilgås af få maskiner ved at bruge IPtables eller TCP Wrappers. Selv om det er en ældre teknologi, er TFTP uden tvivl stadig et nyttigt værktøj at have i værktøjskassen, og det bør ikke afvises som værende kun nyttigt til at videregive konfiguration til arbejdsstationer eller servere, når de starter op.

Systemd

For at starte og stoppe TFTP-serveren (eller genstarte den efter at have foretaget en konfigurationsændring) på moderne systemd-systemer kan du tilfældigvis køre denne kommando, idet du erstatter “stop” med “restart” eller “start”, hvor det er nødvendigt.

# systemctl stop openbsd-inetd

På ældre systemer er der ingen grund til at minde dig om, at i de fleste tilfælde vil en af disse kommandoer være tilstrækkelig.

# /etc/init.d/openbsd-inetd start# service openbsd-inetd restart

Du skal blot ændre openbsd-inetd til navnet på de relevante inetd- eller xinetd-scripts for din distribution. Husk, at du kan finde ud af servicenavne ved at køre en kommando som denne:

# ls /etc/init.d

Dette virker endda på moderne systemd-versioner, men du skal kigge nøje på den resulterende filliste, for lad os se det i øjnene, at ledninger til “inetd” kan blive betragtet som et throwback i nogle kredse og har mærkelige filnavne.

EOF

Hvis du beslutter dig for at tage dit liv i dine egne hænder og servere TFTP over internettet, så lad mig komme med en advarsel, ja, et akronym faktisk: NAT. Hvis Network Address Translation er involveret i fjernforbindelser, kan du få problemer med TFTP-overførsler, fordi de bruger UDP. Du skal bruge NAT-routeren til at fungere som en lidt mere avanceret proxy for at få det til at fungere. Du kan se på det berømte sikkerhedsprogram pfSense, som tilsyneladende kan hjælpe.

Vi har kigget på en række af TFTP’s funktioner. Det er klart, at der er specifikke omstændigheder, hvor det fremragende TFTP er et nyttigt værktøj, der kan bruges hurtigt og effektivt med lidt konfiguration.

Andre gange indrømmet, vil TFTP ikke helt skære sengen. I sådanne tilfælde kan sFTP og standard-FTP være mere hensigtsmæssige. Før du søger efter disse pakker, skal du dog kigge hurtigt efter, om de funktioner, du har brug for, findes i TFTP’s værktøjskasse. Du kan blive positivt overrasket over, hvad du finder. Mange af de værktøjer, vi bruger i dag, stammer trods alt fra den tid, som TFTP stammer fra.

Chris Binnie er teknisk konsulent med 20 års Linux-erfaring og skribent for Linux Magazine og Admin Magazine. Hans nye bog Linux Server Security: Hack and Defend lærer dig at iværksætte sofistikerede angreb, gøre dine servere usynlige og knække komplekse adgangskoder.

Fremskridt din karriere inden for Linux System Administration! Se Essentials of System Administration-kurset fra The Linux Foundation.

Læs tidligere artikler:

Trivielle overførsler med TFTP, del 1: Hvorfor bruge det?

Trivielle overførsler med TFTP, del 2: Konfiguration

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.