Triviale transfers met TFTP, deel 3: Gebruik

apr 27, 2021
admin

In vorige artikels hebben we TFTP geïntroduceerd en besproken waarom je het zou willen gebruiken, en hebben we verschillende configuratie-opties bekeken. Laten we nu eens proberen om enkele bestanden te verplaatsen. Je kunt dit met enig gemak doen nu je weet hoe je je server een beetje beter kunt beveiligen.

Test 1, 2, 3

Om je server te testen, heb je natuurlijk een client nodig om mee te verbinden. Gelukkig kunnen we er een heel gemakkelijk installeren:

# apt-get install tftp

Red Hat derivaten zouden een client installatie als volgt moeten beheren:

# yum install tftp

Als je het IP adres van je server opzoekt met een commando zoals hieronder, dan is het mogelijk om van overal verbinding te maken met je TFTP server (aangenomen dat je TCP Wrappers configuratie of IPtables regels je dat toelaten, natuurlijk).

# ip a

Eenmaal je het IP adres weet, is het heel eenvoudig om aan de slag te gaan. Je kunt op deze manier verbinding maken met de server vanaf de client:

# tftp 10.10.10.10

Nu zou je verbonden moeten zijn. (Als het niet werkt, controleer dan je firewalling of je zou kunnen “telnet” naar poort 69 op het IP adres van je TFTP server). Vervolgens kan je een “status” commando uitvoeren als volgt:

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

Op dit punt verkies ik verbose output te gebruiken door gewoon dit commando te typen:

tftp> verbose

Je kan kiezen om binaries of platte tekst bestanden te downloaden door dit te typen voor platte tekst:

tftp> ascii

Of je kunt binaries forceren om correct te downloaden met:

tftp> binary

Om ons wat inhoud te geven om te downloaden, heb ik een eenvoudig tekstbestand gemaakt zoals dit:

# echo hello > HERE_I_AM

Dit betekent dat het bestand HERE_I_AM het woord “hello” bevat. Ik verplaatste dat bestand vervolgens naar onze standaard TFTP directory, die we eerder in gebruik zagen in het hoofdconfiguratiebestand, /etc/inetd.conf. Die directory – van waaruit onze trouwe daemon serveert – heet /srv/tftp, zoals we kunnen zien in Listing 3.

Omdat dit gewoon een tekstbestand is, is het niet nodig om binaire modus aan te zetten, en we hebben al verbose geschreven, dus nu is het gewoon een kwestie van ons bestand overzetten.

Als je ook maar een beetje bekend bent met FTP op de commandoregel, dan zal je geen moeite hebben om de taal op te pikken. Het is gewoon “get” om te ontvangen en “put” om te plaatsen. Mijn voorbeeldbestand HERE_I_AM kan als volgt worden opgehaald.

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

Het bovenstaande voorbeeld biedt de verbose uitvoer als die modus is ingeschakeld. U kunt nuttige informatie verzamelen, zoals dat we geen binaire modus gebruiken maar gewoon “netascii” modus. Bovendien kunt u zien hoeveel bytes werden overgedragen en hoe snel. In dit geval waren de gegevens zeven bytes groot en duurde het een tiende van een seconde, bij een halve kilobyte (of zo) per seconde, om te voltooien.

Vergelijk en contrasteer dat met de niet-verbose modus output, en ik weet zeker dat je het ermee eens bent dat het de moeite waard is om te gebruiken:

tftp> get HERE_I_AMReceived 7 bytes in 0.0 seconds

Als je de behoefte voelt om het poortnummer van je TFTP server te versluieren, dan, na het bewerken van het /etc/services bestand, moet je verbinding maken met je client software, zoals dit:

# tftp 10.10.10.10 11111

Daarnaast, wees niet te bang om meerdere bestanden op één regel aan te vragen. Doe dat met de volgende syntax:

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

Als je problemen tegenkomt, zijn er een paar probleemoplossingsopties die je kunt onderzoeken. Je zou bijvoorbeeld een verzadigde netwerk link kunnen hebben door een broadcast storm of een misdragend apparaat dat vreemde netwerk rariteiten veroorzaakt. U zult echter blij zijn te horen dat u timeouts kunt aanpassen. Ten eerste, vanaf de TFTP client prompt, kunnen we timeouts instellen op een per-packet basis als volgt:

tftp> rexmt 10

Dit toont ons het instellen van de retransmission timeouts op een per-packet basis op 10 seconden.

Om de totale-transfer timeout in te stellen, voor de hele transactie, pas je de volgende instelling aan, als volgt:

tftp> timeout 30

Een ander nuttig hulpmiddel voor debugging is de “trace” functionaliteit. Deze kan als volgt worden ingeschakeld:

tftp> tracePacket tracing on.

Nu zal elke overdracht er zeer ruisachtig uitzien, zoals hieronder, wat zou moeten helpen bij uw probleemoplossing:

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>

U zou uit de bovenstaande informatie moeten kunnen afleiden op welk punt een overdracht mislukt en misschien een gedragspatroon moeten kunnen onderscheiden.

Toevallig, als je de TFTP client prompt wilt verlaten, dan is de “q” toets voldoende.

In dit gedeelte hebben we gezien hoe je bestanden van een TFTP server kunt configureren en ontvangen. Zoals gezegd is het een goed idee om poort 69 te firewallen van de buitenwereld als je experimenteert met deze software en vooral als je het in productie neemt.

Ik raad aan om je server te locken zodat hij alleen toegankelijk is voor een paar machines door gebruik te maken van IPtables of TCP Wrappers. Hoewel het een oudere technologie is, is TFTP ongetwijfeld nog steeds een nuttig gereedschap om in je gereedschapskist te hebben, en het moet niet worden afgedaan als alleen nuttig voor het doorgeven van configuratie aan werkstations of servers als ze opstarten.

Systemd

Op moderne systemd systemen kun je toevallig dit commando uitvoeren om de TFTP server te starten en te stoppen (of opnieuw te starten na het maken van een configuratiewijziging), waarbij je “stop” vervangt door “restart” of “start” waar nodig.

# systemctl stop openbsd-inetd

Op oudere systemen hoeft u er niet aan herinnerd te worden dat in de meeste gevallen één van deze commando’s volstaat.

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

Verander gewoon openbsd-inetd in de naam van de gepaste inetd of xinetd scripts voor uw distributie. Onthoud dat u de namen van de services kunt achterhalen door een commando als dit uit te voeren:

# ls /etc/init.d

Dit werkt zelfs op moderne systemd versies maar u moet goed kijken naar de resulterende bestandslijst omdat laten we eerlijk zijn conduitsluitingen naar “inetd” in sommige kringen als een throwback beschouwd kunnen worden en vreemde bestandsnamen hebben.

EOF

Als je beslist om je leven in eigen handen te nemen en TFTP over het Internet te serveren, laat me dan één waarschuwing geven, wel, één acroniem eigenlijk: NAT. Als Network Address Translation betrokken is bij verbindingen op afstand, dan kun je problemen krijgen met TFTP overdrachten omdat ze UDP gebruiken. De NAT router moet als een iets geavanceerdere proxy fungeren om dit te laten werken. Je zou kunnen kijken naar de gerenommeerde beveiligingssoftware, pfSense, die blijkbaar kan helpen.

We hebben gekeken naar een aantal van de mogelijkheden van TFTP. Het is duidelijk dat er specifieke omstandigheden zijn waarin het uitstekende TFTP een nuttig hulpmiddel is, dat snel en effectief kan worden gebruikt met weinig configuratie.

Op andere momenten, toegegeven, voldoet TFTP niet helemaal aan de eisen. In zulke gevallen zijn sFTP en standaard FTP wellicht meer geschikt. Kijk echter eerst eens na of de functies die u nodig hebt in TFTP’s gereedschapskist aanwezig zijn, vooraleer naar die pakketten te zoeken. U zou wel eens aangenaam verrast kunnen zijn door wat u vindt. Tenslotte stammen veel van de tools die we vandaag gebruiken uit de tijd waaruit TFTP stamt.

Chris Binnie is een Technisch Consultant met 20 jaar Linux ervaring en schrijver voor Linux Magazine en Admin Magazine. Zijn nieuwe boek Linux Server Security: Hack and Defend leert je hoe je geavanceerde aanvallen uitvoert, je servers onzichtbaar maakt en complexe wachtwoorden kraakt.

Verhoog je carrière in Linux Systeembeheer! Bekijk de cursus Essentials of System Administration van The Linux Foundation.

Lees eerdere artikelen:

Trivial Transfers with TFTP, Part 1: Waarom gebruiken?

Triviale transfers met TFTP, deel 2: configuratie

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.