TFTP

Aus Linupedia
Version vom 7. Januar 2014, 16:51 Uhr von Gehrke (Diskussion | Beiträge) (Review-Bitte entfernt (2x durchgeführt))

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Trivial File Transfer Protocol (TFTP)

Bei TFTP handelt es sich um ein einfaches Netzwerk-Protokoll für den Transport von Dateien, welches auf Basis von UDP arbeitet. Es ist für schnelle Datenübertragung innerhalb eines gesicherten Netzwerkes konzipiert.

Abgrenzung zu FTP

Im Gegensatz zum Protokoll FTP arbeitet es verbindungslos und beinhaltet keine Sicherungsmaßnahmen für die Zustellung von Datenpaketen, welche bei FTP im verwendeten Basisprotokoll TCP implizit enthalten ist. Durch den Verzicht auf diese Kontrollstrukturen kann sich bei günstiger Netzwerkauslastung eine erheblich höhere Performance im Vergleich zu TCP-basierten Netzwerk-Protokollen einstellen.

Außerdem beinhaltet TFTP kein Sicherheitskonzept für eine Authentifizierung (Benutzername, Passwort).

Anwendungsgebiete

Das Protokoll ist weniger gedacht für den Einsatz durch den Endanwender. Die Haupteinsatzgebiete liegen vielmehr in der Bereitstellung von Softwarepaketen oder Konfigurationen auf Netzwerk-Komponenten (wie z.B. Switches, Routern, Firewalls o.ä.).

Auch der Download von Systemsoftware zum Booten über das Netzwerk (PXE) wird im allgemeinen über TFTP umgesetzt.

Architektur

Es handelt sich um eine klassische Client-/Server-Architektur.

Die Server-Komponente ist meist als Daemon implementiert und übernimmt die Aufgabe, Anfragen (Requests) von den Clients entgegen zu nehmen und Datenpakete zu verschicken. Dazu lauscht der Daemon auf einem festen Port (Standard: 69).

Die Aufgabe der Client-Komponente ist die Steuerung durch den Anwender und der Empfang von Datenpaketen.

Konfiguration

Die Konfiguration der beiden Komponenten soll an einem konkreten Beispiel-Szenario verdeutlicht werden:

  • Server 'j4' (172.16.11.8) ist ein Linux-Server auf Basis von CentOS 6.2
  • Client 'j2' (172.16.11.6) ist ein Linux-PC auf Basis von OpenSUSE 13.1

Beide Systeme befinden sich im selben Netzwerk.

Serverseitige Konfiguration

Die Installation der Server-Komponente erfolgt über yum:

[root@j4 ~]#  yum install tftp-server

Für die Konfiguration muss lediglich der Wert des Parameters 'disable' auf 'no' gesetzt werden:

[root@j4 ~]# cat /etc/xinetd.d/tftp 
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        disable = no
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

Abschließend wird sichergestellt, dass sowohl der Daemon xinetd als auch tftp selbst läuft.

[root@j4 ~]# /sbin/chkconfig --level 345 xinetd on
[root@j4 ~]# /sbin/chkconfig --level 345 tftp on

Für den Zugriff auf den Dienst kann es notwendig sein, den Regelsatz der vorgeschalteten Firewalls zu ergänzen. In diesem Fall ist es notwendig, den Port 69 für das Protokoll UDP zu öffnen. Dies sollte auf die minimale Menge an Source-IPs eingeschränkt werden.

Um im konkreten Fall den Zugriff auf den Dienst in der lokalen iptables-Firewall zu erlauben, müssen entsprechende Firewall-Regeln angelegt und die Firewall neu gestartet werden:

[root@j4 etc]# grep '69' /etc/sysconfig/iptables
-A INPUT -s 172.16.11.0/24 -m udp -p udp --dport 69 -j ACCEPT

[root@j4 ~]# service iptables restart
iptables: Firewall-Regeln leeren:                          [  OK  ]
iptables: Ketten auf Richtlinie ACCEPT setzen: filter      [  OK  ]
iptables: Module entladen:                                 [  OK  ]
iptables: Firewall-Regeln anwenden:                        [  OK  ]

Hinweis: Auch zusätzliche Security-Frameworks wie SELinux oder AppArmor können hier noch einen dedizierten Regelsatz erfordern. Im vorliegenden Beispiel war das nicht notwendig, obwohl SELinux im Einsatz ist.

Clientseitige Konfiguration

Die Installation der Client-Komponente erfolgt unter OpenSUSE mit YaST:

j2:~ # yast --install tftp

Auch auf dem Client muss explizit eine Freigabe in der lokalen Firewall erfolgen (kann ebenfalls unter YaST unter Custom Rules durchgeführt werden). Hier wird für die Source-IP des Servers das Protokoll UDP auf allen Ports ermöglicht:

j2:~ # grep '172.16.11.' /etc/sysconfig/SuSEfirewall2
FW_SERVICES_ACCEPT_EXT="172.16.11.8,udp"

Hinweis: Die Antwort erfolgt hier nicht auf einem dedizierten Port, daher muss der gesamte Bereich geöffnet werden.

Test der Funktionalität

Testdatei auf dem Server bereitstellen:

[root@j4 ~]# echo "42" > /var/lib/tftpboot/test.txt

Request auf dem Client:

user@j2:~> f=test.txt; tftp j4 -c get $f; cat $f; rm $f
42

Als Ergebnis wird eine Testdatei vom Server geladen, angezeigt und direkt wieder gelöscht.

Links