Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:pxe_c8:tftp [04.07.2020 14:51. ] – [automatisierter Weg mit Hilfe von Ansible] djangocentos:pxe_c8:tftp [05.07.2020 18:26. ] (aktuell) – [Testdatei transferieren] django
Zeile 18: Zeile 18:
 Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/69**unseres TFTP-Servers stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/69**unseres TFTP-Servers stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen.
  
-Unter **CentOS 8** wird als Standard-Firewall, wie auch schon bereits unter **[[centos:pxe_c7:tftp#paketfilter_firewall|CentOS 7]]** eingeführt wurde, die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden.+Unter **[[#tftp-server_installieren|CentOS 8]]** wird als Standard-Firewall, wie auch schon bereits unter **[[centos:pxe_c7:tftp#paketfilter_firewall|CentOS 7]]** eingeführt wurde, die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden.
  
 Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Service ***TFTP** für Port **69** an. Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Service ***TFTP** für Port **69** an.
Zeile 93: Zeile 93:
  
 ==== automatisierter Weg mit Hilfe von Ansible ==== ==== automatisierter Weg mit Hilfe von Ansible ====
-Da wir aber in unserer Produktiven Umgebung alle Server, Dienste und Services mit Hilfe von **[[centos:ansible:start|Ansible]]** werden wir natürlich auch für unseren **TFTP**-Dienst dies über eine entsprechende **[[centos:ansible:detail#grundlagen|Ansible-Rolle]] {{:centos:pxe_c8:ansible-role-tftp.tar.gz|ansible-role-tftp.tar.gz}}**((Version v1 vom 04.07.2020)) erledigen lassen.+Da wir aber in unserer Produktiven Umgebung alle Server, Dienste und Services mit Hilfe von **[[centos:ansible:start|Ansible]]** werden wir natürlich auch für unseren **TFTP**-Dienst dies über eine entsprechende **[[centos:ansible:detail#grundlagen|Ansible-Rolle]] {{:centos:pxe_c8:ansible-role-tftp.tar.gz|ansible-role-tftp.tar.gz}}**((Version v2 vom 05.07.2020)) erledigen lassen.
  
 /* /*
Zeile 143: Zeile 143:
  
 ===== Systemtest ===== ===== Systemtest =====
-==== Testdatei für die Übertragung anlegen ====+==== System-Test ==== 
 +=== Testdatei anlegen ===
 Für unseren Test legen wir uns einfach eine kleine Textdatei im Arbeitsverzeichnis //**/var/lib/tftpboot/**// an, die wir uns dann vom TFTP-Server herunterladen werden. Für unseren Test legen wir uns einfach eine kleine Textdatei im Arbeitsverzeichnis //**/var/lib/tftpboot/**// an, die wir uns dann vom TFTP-Server herunterladen werden.
    # echo "Dies ist ein ganz einfacher Text für den Test unseres TFTP-Servers" > /var/lib/tftpboot/test    # echo "Dies ist ein ganz einfacher Text für den Test unseres TFTP-Servers" > /var/lib/tftpboot/test
  
 +=== Testdatei transferieren ===
 +Anschließend melden wir uns auf einem Host im zugehörigen Netzwerksegment an, auf dem das RPM-Paket **''tftp''** (Client) installiert ist, an.
  
 +Dann bauen wir mit dem TFTP-Clientprogramm eine Verbindung zu unserem Server auf und holen uns die zuvor angelegte Datei //test// mit dem Befehl **get**. Nach dem Herunterladen verlassen wir das Programm mit dem Befehl **quit**.
  
 +Entweder über IP-Adresse des TFTP-Servers:
 +   # tftp -v 10.0.0.190
 +oder über den Hostnamen des TFTP-Servers
 +   # tftp -v tftp.dmz.nausch.org
  
 +   Connected to tftp.dmz.nausch.org (10.0.0.190), port 69
 +   tftp> get test
 +   getting from tftp.dmz.nausch.org:test to test [netascii]
 +   Received 69 bytes in 0.1 seconds [8714 bit/s]
 +   tftp> quit
  
 +Das Ganze geht natürlich auch schneller als "Einzeiler":
 +   # tftp 10.0.0.190 -c get test
 +
 +=== Fehlerbehandlung ===
 +Klappt der Download von unserem Clientrechners nicht, trotz funktionierendem Zugriff nicht, liegt es an den Paketfilterregelungen auf dem **Clientrechner**! Wie man in folgendem Beispiel sieht laufen wir hier in einen timeout: 
 +   # tftp -v tftp.dmz.nausch.org -c get test
 +
 +   Connected to tftp.dmz.nausch.org (10.0.0.190), port 69
 +   getting from tftp.dmz.nausch.org:test to test [netascii]
 +   Transfer timed out.
 +
 +Was ist nun passiert? Auf dem Client gibt es doch keine iptables-Regel, die den Datentransfer beschneidet:
 +   # iptables -L
 +<code>Chain INPUT (policy ACCEPT)
 +target     prot opt source               destination         
 +ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
 +ACCEPT     icmp --  anywhere             anywhere            
 +ACCEPT     all  --  anywhere             anywhere            
 +ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
 +REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
 +
 +Chain FORWARD (policy ACCEPT)
 +target     prot opt source               destination         
 +REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
 +
 +Chain OUTPUT (policy ACCEPT)
 +target     prot opt source               destination
 +</code>
 +
 +Auf unserem TFTP-Server haben wir doch auch Port **69** freigeschaltet:
 +   # firewall-cmd --zone=public --list-services
 +
 +  tftp dhcpv6-client http ssh
 +
 +Im Syslog des TFTP-Servers sehen wir nur die Folgende Fehlermeldung:
 +   Jan 8 07:49:14 vml000057 in.tftpd[10031]: tftpd: read(ack): No route to host
 +
 +<WRAP center round tip 90%>
 +Die Ursache ist ganz einfach erklärt. TFTP nutzt für die Steuerung Port **69**, für die Datenübertragung werden dann aber beliebige highports genutzt. Damit diese nun unseren Paketfilter passieren können, müssen wir an dem betreffenden (Test-)Clientsystem, oder einem internen Paketfilter der unterschiedliche Sicherheitszonen trennt, die folgenden iptables-Module laden.
 +  * **ip_conntrack_tftp**
 +  * **ip_nat_tftp**
 +</WRAP>
 +
 +Auf einem **//CentOS 8 bzw. CentOS 7 System//** benutzen wir zur Aktivierung der beiden Module die Datei //**/etc/modules-load.d/iptables.conf**//.
 +   # vim /etc/modules-load.d/iptables.conf
 +<file bash /etc/modules-load.d/iptables.conf># Django : 2016-01-08 - Zum Testen des TFTP-Servers nötige Änderungen
 +# default: none
 +ip_nat_tftp
 +ip_conntrack_tftp</file>
 +
 +Zum Aktivieren starten wir den betreffenden Host einmal durch.
 +   # systemctl reboot
 +
 +Auf einem **//CentOS 6 System//** geschieht dies über die Konfigurationsdatei **iptables-config** des Paketfilter-Regelwerkes **iptables**. Dort tragen wir bei den **nat helpers** die beiden Module nach: 
 +   # vim /etc/sysconfig/iptables-config
 +<code bash>
 +# Django 2011-11-24 Freischaltungen für TFTP-Transfers
 +# default : IPTABLES_MODULES=""
 +IPTABLES_MODULES="ip_conntrack_tftp ip_nat_tftp"
 +</code>
 +Anschließend starten wir unseren iptables-Paketfilter einmal durch.
 +   # service iptables restart
 +
 +   iptables: Flushing firewall rules:                          OK  ]
 +   iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
 +   iptables: Unloading modules:                                OK  ]
 +   iptables: Applying firewall rules:                          OK  ]
 +   iptables: Loading additional modules: ip_conntrack_tftp ip_[  OK  ]
 +
 +Nun versuchen wir erneut unsere Testdatei vom TFTP-Server herunterzuladen , was natürlich Dank unserer Anpassungen nun erfolgreich funktioniert.
 +   $ tftp tftp.dmz.nausch.org -v -c get test
 +
 +   Connected to tftp.dmz.nausch.org (10.0.0.57), port 69
 +   getting from tftp.dmz.nausch.org:test to test [netascii]
 +   Received 69 bytes in 0.1 seconds [6073 bit/s]
 +
 +Im Syslog unseres TFTP-Servers wird der erfolgreiche Dateitransfer entsprechend protokolliert.
 +  Jul  4 09:14:30 vml000190 xinetd[7708]: START: tftp pid=10145 from=10.0.0.27
 +  Jul  4 09:14:30 vml000190 in.tftpd[10146]: RRQ from 10.0.0.107 filename test
 +
 +====== Links ======
 +  * **[[centos:pxe_c8:start|Zurück zum Kapitel >>PXE-Boot-Server unter CentOS 8.x einrichten<<]]**
 +  * **[[wiki:start|Zurück zu Projekte und Themenkapitel]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
  • centos/pxe_c8/tftp.1593874263.txt.gz
  • Zuletzt geändert: 04.07.2020 14:51.
  • von django