TFTP: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(UnderConstruction)
 
(Initial)
Zeile 1: Zeile 1:
 
{{UnderConstruction}}--[[Benutzer:Gehrke|Gehrke]] ([[Benutzer Diskussion:Gehrke|Diskussion]]) 20:59, 2. Jan. 2014 (CET)
 
{{UnderConstruction}}--[[Benutzer:Gehrke|Gehrke]] ([[Benutzer Diskussion:Gehrke|Diskussion]]) 20:59, 2. Jan. 2014 (CET)
 +
 +
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]]:
 +
<pre>
 +
[root@j4 ~]#  yum install tftp-server
 +
</pre>
 +
Für die Konfiguration muss lediglich der Wert des Parameters 'disable' auf 'no' gesetzt werden:
 +
<pre>
 +
[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
 +
}
 +
</pre>
 +
Abschließend wird sichergestellt, dass sowohl der Daemon [[xinetd]] als auch ''tftp'' selbst läuft.
 +
<pre>
 +
[root@j4 ~]# /sbin/chkconfig --level 345 xinetd on
 +
[root@j4 ~]# /sbin/chkconfig --level 345 tftp on
 +
</pre>
 +
 +
Um den Zugriff auf den Dienst in der lokalen [[iptables]]-Firewall zu erlauben, müssen entsprechende Firewall-Regeln angelegt und die Firewall neu gestartet werden:
 +
<pre>
 +
[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  ]
 +
</pre>
 +
 +
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]]:
 +
<pre>
 +
j2:~ # yast --install tftp
 +
</pre>
 +
Auch auf dem Client muss explizit eine Freigabe in der lokalen Firewall erfolgen (kann ebenfalls unter [[YaST]] durchgeführt werden):
 +
<pre>
 +
j2:~ # grep '172.16.11.' /etc/sysconfig/SuSEfirewall2
 +
FW_SERVICES_ACCEPT_EXT="172.16.11.8,udp"
 +
</pre>
 +
 +
===Test der Funktionalität===
 +
Testdatei auf dem Server bereitstellen:
 +
<pre>
 +
[root@j4 ~]# echo "42" > /var/lib/tftpboot/test.txt
 +
</pre>
 +
Request auf dem Client:
 +
<pre>
 +
user@j2:~> f=test.txt; tftp j4 -c get $f; cat $f; rm $f
 +
42
 +
</pre>
 +
Als Ergebnis wird eine Testdatei vom Server geladen, angezeigt und direkt wieder gelöscht.
 +
 +
=Links=
 +
*[https://de.wikipedia.org/wiki/Trivial_File_Transfer_Protocol TFTP (Wikipedia)]
 +
*[http://www.winagents.com/en/solutions/tftp-over-firewall.php TFTP over Firewall: How to get it working]{{englisch}}
 +
*[https://www.suse.com/documentation/sles11/singlehtml/book_security/book_security.html#sec.fire.SuSE SuSEfirewall2 (SUSE Linux Enterprise Server 11 SP3 Security Guide)]{{englisch}}
 +
*[[TFTP (openSUSE)|TFTP-Server unter OpenSUSE mit YaST]]
 +
*[[TFTP Musterkonfigurationen]]
 +
 +
[[Kategorie:Netzwerk]] [[Kategorie:File Server]] [[Kategorie:Security]] [[Kategorie:YaST]]

Version vom 3. Januar 2014, 16:18 Uhr

Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.

--Gehrke (Diskussion) 20:59, 2. Jan. 2014 (CET)

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

Um 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 durchgeführt werden):

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

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