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:tftp [24.11.2011 16:53. ] – [Links] link zum Themenkapitel eingetragen djangocentos:pxe:tftp [20.04.2018 10:35. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== TFTP-Server unter CentOS 6.x einrichten ======
 +Für unseren Installationsserver benötigen wir einen TFTP-Server, der die Auslieferung der nötigen Dateien für den PXE-Bootvorgang bereitstellt und ausliefert.
 +===== Installation =====
 +==== TFTP-Server ====
 +Als erstes installieren wir uns die für den TFTP-Server notwendigen Pakete via yum.
 +   #  yum install syslinux tftp-server -y
 +Bei Bedarf informieren wir was bei der Installation der einzelnen Pakete im System installiert wurde.
 +=== syslinux ===
 +   # rpm -qil syslinux
 +<code>Name        : syslinux                     Relocations: (not relocatable)
 +Version     : 3.86                              Vendor: CentOS
 +Release     : 1.1.el6                       Build Date: Wed 18 May 2011 06:44:12 AM CEST
 +Install Date: Mon 21 Nov 2011 02:55:49 PM CET      Build Host: c6b6.bsys.dev.centos.org
 +Group       : Applications/System           Source RPM: syslinux-3.86-1.1.el6.src.rpm
 +Size        : 2663825                          License: GPLv2+
 +Signature   : RSA/8, Sun 03 Jul 2011 07:02:39 AM CEST, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://syslinux.zytor.com/
 +Summary     : Simple kernel loader which boots from a FAT filesystem
 +Description :
 +SYSLINUX is a suite of bootloaders, currently supporting DOS FAT
 +filesystems, Linux ext2/ext3 filesystems (EXTLINUX), PXE network boots
 +(PXELINUX), or ISO 9660 CD-ROMs (ISOLINUX).  It also includes a tool,
 +MEMDISK, which loads legacy operating systems from these media.
 +/sbin/extlinux
 +/usr/bin/gethostip
 +/usr/bin/isohybrid
 +/usr/bin/keytab-lilo
 +/usr/bin/lss16toppm
 +/usr/bin/md5pass
 +/usr/bin/mkdiskimage
 +/usr/bin/ppmtolss16
 +/usr/bin/pxelinux-options
 +/usr/bin/sha1pass
 +/usr/bin/syslinux
 +/usr/bin/syslinux2ansi
 +/usr/share/doc/syslinux-3.86
 +/usr/share/doc/syslinux-3.86/COPYING
 +/usr/share/doc/syslinux-3.86/CodingStyle.txt
 +/usr/share/doc/syslinux-3.86/NEWS
 +/usr/share/doc/syslinux-3.86/README
 +/usr/share/doc/syslinux-3.86/SubmittingPatches.txt
 +/usr/share/doc/syslinux-3.86/TODO
 +/usr/share/doc/syslinux-3.86/comboot.txt
 +/usr/share/doc/syslinux-3.86/distrib.txt
 +/usr/share/doc/syslinux-3.86/extlinux.txt
 +/usr/share/doc/syslinux-3.86/gpt.txt
 +/usr/share/doc/syslinux-3.86/isolinux.txt
 +/usr/share/doc/syslinux-3.86/keytab-lilo.txt
 +/usr/share/doc/syslinux-3.86/mboot.txt
 +/usr/share/doc/syslinux-3.86/memdisk.txt
 +/usr/share/doc/syslinux-3.86/menu.txt
 +/usr/share/doc/syslinux-3.86/pxelinux.txt
 +/usr/share/doc/syslinux-3.86/rfc5071.txt
 +/usr/share/doc/syslinux-3.86/sample
 +/usr/share/doc/syslinux-3.86/sample/Makefile
 +/usr/share/doc/syslinux-3.86/sample/README
 +/usr/share/doc/syslinux-3.86/sample/atou.c
 +/usr/share/doc/syslinux-3.86/sample/c32echo.c
 +/usr/share/doc/syslinux-3.86/sample/c32echo.c32
 +/usr/share/doc/syslinux-3.86/sample/c32entry.S
 +/usr/share/doc/syslinux-3.86/sample/c32exit.S
 +/usr/share/doc/syslinux-3.86/sample/comecho.asm
 +/usr/share/doc/syslinux-3.86/sample/comecho.com
 +/usr/share/doc/syslinux-3.86/sample/conio.c
 +/usr/share/doc/syslinux-3.86/sample/fd.c
 +/usr/share/doc/syslinux-3.86/sample/fd.c32
 +/usr/share/doc/syslinux-3.86/sample/filetest.c
 +/usr/share/doc/syslinux-3.86/sample/filetest.c32
 +/usr/share/doc/syslinux-3.86/sample/hello.c
 +/usr/share/doc/syslinux-3.86/sample/hello.c32
 +/usr/share/doc/syslinux-3.86/sample/hello2.c
 +/usr/share/doc/syslinux-3.86/sample/hello2.c32
 +/usr/share/doc/syslinux-3.86/sample/m16-640x640-syslinux.jpg
 +/usr/share/doc/syslinux-3.86/sample/printf.c
 +/usr/share/doc/syslinux-3.86/sample/sample.msg
 +/usr/share/doc/syslinux-3.86/sample/skipatou.c
 +/usr/share/doc/syslinux-3.86/sample/syslinux_splash.jpg
 +/usr/share/doc/syslinux-3.86/sample/syslogo.lss
 +/usr/share/doc/syslinux-3.86/sample/syslogo.ppm.gz
 +/usr/share/doc/syslinux-3.86/sdi.txt
 +/usr/share/doc/syslinux-3.86/syslinux.txt
 +/usr/share/doc/syslinux-3.86/usbkey.txt
 +/usr/share/man/man1/extlinux.1.gz
 +/usr/share/man/man1/gethostip.1.gz
 +/usr/share/man/man1/lss16toppm.1.gz
 +/usr/share/man/man1/ppmtolss16.1.gz
 +/usr/share/man/man1/syslinux.1.gz
 +/usr/share/man/man1/syslinux2ansi.1.gz
 +/usr/share/syslinux
 +/usr/share/syslinux/altmbr.bin
 +/usr/share/syslinux/altmbr_c.bin
 +/usr/share/syslinux/altmbr_f.bin
 +/usr/share/syslinux/chain.c32
 +/usr/share/syslinux/cmd.c32
 +/usr/share/syslinux/com32
 +/usr/share/syslinux/com32/com32.ld
 +/usr/share/syslinux/com32/include
 +/usr/share/syslinux/com32/include/alloca.h
 +/usr/share/syslinux/com32/include/assert.h
 +/usr/share/syslinux/com32/include/bitsize
 +/usr/share/syslinux/com32/include/bitsize/limits.h
 +/usr/share/syslinux/com32/include/bitsize/stddef.h
 +/usr/share/syslinux/com32/include/bitsize/stdint.h
 +/usr/share/syslinux/com32/include/bitsize/stdintconst.h
 +/usr/share/syslinux/com32/include/bitsize/stdintlimits.h
 +/usr/share/syslinux/com32/include/colortbl.h
 +/usr/share/syslinux/com32/include/com32.h
 +/usr/share/syslinux/com32/include/console.h
 +/usr/share/syslinux/com32/include/cpufeature.h
 +/usr/share/syslinux/com32/include/ctype.h
 +/usr/share/syslinux/com32/include/dev.h
 +/usr/share/syslinux/com32/include/dirent.h
 +/usr/share/syslinux/com32/include/dprintf.h
 +/usr/share/syslinux/com32/include/elf.h
 +/usr/share/syslinux/com32/include/endian.h
 +/usr/share/syslinux/com32/include/errno.h
 +/usr/share/syslinux/com32/include/fcntl.h
 +/usr/share/syslinux/com32/include/gplinclude
 +/usr/share/syslinux/com32/include/gplinclude/README
 +/usr/share/syslinux/com32/include/gplinclude/cpuid.h
 +/usr/share/syslinux/com32/include/gplinclude/disk
 +/usr/share/syslinux/com32/include/gplinclude/disk/bootloaders.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/common.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/errno_disk.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/error.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/geom.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/mbrs.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/msdos.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/partition.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/read.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/swsusp.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/util.h
 +/usr/share/syslinux/com32/include/gplinclude/disk/write.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_base_board.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_battery.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_bios.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_cache.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_chassis.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_ipmi.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_memory.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_processor.h
 +/usr/share/syslinux/com32/include/gplinclude/dmi/dmi_system.h
 +/usr/share/syslinux/com32/include/gplinclude/memory.h
 +/usr/share/syslinux/com32/include/gplinclude/vpd
 +/usr/share/syslinux/com32/include/gplinclude/vpd/vpd.h
 +/usr/share/syslinux/com32/include/inttypes.h
 +/usr/share/syslinux/com32/include/klibc
 +/usr/share/syslinux/com32/include/klibc/archsetjmp.h
 +/usr/share/syslinux/com32/include/klibc/compiler.h
 +/usr/share/syslinux/com32/include/klibc/diverr.h
 +/usr/share/syslinux/com32/include/klibc/endian.h
 +/usr/share/syslinux/com32/include/klibc/extern.h
 +/usr/share/syslinux/com32/include/klibc/sysconfig.h
 +/usr/share/syslinux/com32/include/libansi.h
 +/usr/share/syslinux/com32/include/limits.h
 +/usr/share/syslinux/com32/include/math.h
 +/usr/share/syslinux/com32/include/minmax.h
 +/usr/share/syslinux/com32/include/netinet
 +/usr/share/syslinux/com32/include/netinet/in.h
 +/usr/share/syslinux/com32/include/png.h
 +/usr/share/syslinux/com32/include/pngconf.h
 +/usr/share/syslinux/com32/include/setjmp.h
 +/usr/share/syslinux/com32/include/stdarg.h
 +/usr/share/syslinux/com32/include/stdbool.h
 +/usr/share/syslinux/com32/include/stddef.h
 +/usr/share/syslinux/com32/include/stdint.h
 +/usr/share/syslinux/com32/include/stdio.h
 +/usr/share/syslinux/com32/include/stdlib.h
 +/usr/share/syslinux/com32/include/string.h
 +/usr/share/syslinux/com32/include/sys
 +/usr/share/syslinux/com32/include/sys/cpu.h
 +/usr/share/syslinux/com32/include/sys/elf32.h
 +/usr/share/syslinux/com32/include/sys/elf64.h
 +/usr/share/syslinux/com32/include/sys/elfcommon.h
 +/usr/share/syslinux/com32/include/sys/fpu.h
 +/usr/share/syslinux/com32/include/sys/gpxe.h
 +/usr/share/syslinux/com32/include/sys/io.h
 +/usr/share/syslinux/com32/include/sys/pci.h
 +/usr/share/syslinux/com32/include/sys/stat.h
 +/usr/share/syslinux/com32/include/sys/time.h
 +/usr/share/syslinux/com32/include/sys/times.h
 +/usr/share/syslinux/com32/include/sys/types.h
 +/usr/share/syslinux/com32/include/syslinux
 +/usr/share/syslinux/com32/include/syslinux/adv.h
 +/usr/share/syslinux/com32/include/syslinux/advconst.h
 +/usr/share/syslinux/com32/include/syslinux/align.h
 +/usr/share/syslinux/com32/include/syslinux/boot.h
 +/usr/share/syslinux/com32/include/syslinux/bootpm.h
 +/usr/share/syslinux/com32/include/syslinux/bootrm.h
 +/usr/share/syslinux/com32/include/syslinux/config.h
 +/usr/share/syslinux/com32/include/syslinux/features.h
 +/usr/share/syslinux/com32/include/syslinux/idle.h
 +/usr/share/syslinux/com32/include/syslinux/io.h
 +/usr/share/syslinux/com32/include/syslinux/keyboard.h
 +/usr/share/syslinux/com32/include/syslinux/linux.h
 +/usr/share/syslinux/com32/include/syslinux/loadfile.h
 +/usr/share/syslinux/com32/include/syslinux/memscan.h
 +/usr/share/syslinux/com32/include/syslinux/movebits.h
 +/usr/share/syslinux/com32/include/syslinux/pxe.h
 +/usr/share/syslinux/com32/include/syslinux/reboot.h
 +/usr/share/syslinux/com32/include/syslinux/resolve.h
 +/usr/share/syslinux/com32/include/syslinux/vesacon.h
 +/usr/share/syslinux/com32/include/syslinux/video.h
 +/usr/share/syslinux/com32/include/syslinux/zio.h
 +/usr/share/syslinux/com32/include/time.h
 +/usr/share/syslinux/com32/include/tinyjpeg.h
 +/usr/share/syslinux/com32/include/unistd.h
 +/usr/share/syslinux/com32/include/zconf.h
 +/usr/share/syslinux/com32/include/zlib.h
 +/usr/share/syslinux/com32/libcom32.a
 +/usr/share/syslinux/com32/libcom32gpl.a
 +/usr/share/syslinux/com32/libutil_com.a
 +/usr/share/syslinux/com32/libutil_lnx.a
 +/usr/share/syslinux/config.c32
 +/usr/share/syslinux/cpuid.c32
 +/usr/share/syslinux/cpuidtest.c32
 +/usr/share/syslinux/disk.c32
 +/usr/share/syslinux/dmitest.c32
 +/usr/share/syslinux/dosutil
 +/usr/share/syslinux/dosutil/copybs.com
 +/usr/share/syslinux/dosutil/eltorito.sys
 +/usr/share/syslinux/dosutil/mdiskchk.com
 +/usr/share/syslinux/elf.c32
 +/usr/share/syslinux/ethersel.c32
 +/usr/share/syslinux/gfxboot.c32
 +/usr/share/syslinux/gfxboot.com
 +/usr/share/syslinux/gptmbr.bin
 +/usr/share/syslinux/gptmbr_c.bin
 +/usr/share/syslinux/gptmbr_f.bin
 +/usr/share/syslinux/gpxecmd.c32
 +/usr/share/syslinux/gpxelinux.0
 +/usr/share/syslinux/hdt.c32
 +/usr/share/syslinux/ifcpu.c32
 +/usr/share/syslinux/ifcpu64.c32
 +/usr/share/syslinux/int18.com
 +/usr/share/syslinux/isohdpfx.bin
 +/usr/share/syslinux/isohdpfx_c.bin
 +/usr/share/syslinux/isohdpfx_f.bin
 +/usr/share/syslinux/isohdppx.bin
 +/usr/share/syslinux/isohdppx_c.bin
 +/usr/share/syslinux/isohdppx_f.bin
 +/usr/share/syslinux/isolinux-debug.bin
 +/usr/share/syslinux/isolinux.bin
 +/usr/share/syslinux/kbdmap.c32
 +/usr/share/syslinux/linux.c32
 +/usr/share/syslinux/mboot.c32
 +/usr/share/syslinux/mbr.bin
 +/usr/share/syslinux/mbr_c.bin
 +/usr/share/syslinux/mbr_f.bin
 +/usr/share/syslinux/memdisk
 +/usr/share/syslinux/memdump.com
 +/usr/share/syslinux/meminfo.c32
 +/usr/share/syslinux/menu.c32
 +/usr/share/syslinux/pcitest.c32
 +/usr/share/syslinux/pmload.c32
 +/usr/share/syslinux/poweroff.com
 +/usr/share/syslinux/pxechain.com
 +/usr/share/syslinux/pxelinux.0
 +/usr/share/syslinux/reboot.c32
 +/usr/share/syslinux/rosh.c32
 +/usr/share/syslinux/sanboot.c32
 +/usr/share/syslinux/sdi.c32
 +/usr/share/syslinux/sysdump.c32
 +/usr/share/syslinux/syslinux.com
 +/usr/share/syslinux/syslinux.exe
 +/usr/share/syslinux/vesainfo.c32
 +/usr/share/syslinux/vesamenu.c32
 +/usr/share/syslinux/vpdtest.c32
 +</code>
 +=== tftp-server ===
 +   # rpm -qil tftp-server
 +<code>Name        : tftp-server                  Relocations: (not relocatable)
 +Version     : 0.49                              Vendor: CentOS
 +Release     : 5.1.el6                       Build Date: Wed 18 Aug 2010 11:44:33 PM CEST
 +Install Date: Mon 21 Nov 2011 02:55:52 PM CET      Build Host: c6b2.bsys.dev.centos.org
 +Group       : System Environment/Daemons    Source RPM: tftp-0.49-5.1.el6.src.rpm
 +Size        : 58742                            License: BSD
 +Signature   : RSA/8, Sun 03 Jul 2011 07:03:43 AM CEST, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://www.kernel.org/pub/software/network/tftp/
 +Summary     : The server for the Trivial File Transfer Protocol (TFTP)
 +Description :
 +The Trivial File Transfer Protocol (TFTP) is normally used only for
 +booting diskless workstations.  The tftp-server package provides the
 +server for TFTP, which allows users to transfer files to and from a
 +remote machine. TFTP provides very little security, and should not be
 +enabled unless it is expressly needed.  The TFTP server is run from
 +/etc/xinetd.d/tftp, and is disabled by default.
 +/etc/xinetd.d/tftp
 +/usr/sbin/in.tftpd
 +/usr/share/doc/tftp-server-0.49
 +/usr/share/doc/tftp-server-0.49/CHANGES
 +/usr/share/doc/tftp-server-0.49/README
 +/usr/share/doc/tftp-server-0.49/README.security
 +/usr/share/doc/tftp-server-0.49/README.security.tftpboot
 +/usr/share/man/man8/in.tftpd.8.gz
 +/usr/share/man/man8/tftpd.8.gz
 +/var/lib/tftpboot
 +</code>
 +==== TFTP-Client ====
 +Zum Testen unserer Konfiguration greifen wir auf das Clientpaket **TFTP** zurück. So können wir mit einfachen Mitteln leicht testen, ob der Zugriff und die Datenübertragung klappen. 
 +Falls das Paket **tftp** noch nicht installiert wurde, können wir dies mittels **yum** ins system einbinden.
 +   # yum install tftp -y
 +=== Clientpaket tftp ===
 +Wie immer können wir uns hier auch vergewissern, was genau installiert wurde.
 +   # rpm -qil tftp
 +<code>Name        : tftp                         Relocations: (not relocatable)
 +Version     : 0.49                              Vendor: CentOS
 +Release     : 5.1.el6                       Build Date: Wed 18 Aug 2010 11:44:33 PM CEST
 +Install Date: Wed 23 Nov 2011 01:59:56 PM CET      Build Host: c6b2.bsys.dev.centos.org
 +Group       : Applications/Internet         Source RPM: tftp-0.49-5.1.el6.src.rpm
 +Size        : 46554                            License: BSD
 +Signature   : RSA/8, Sun 03 Jul 2011 07:03:42 AM CEST, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://www.kernel.org/pub/software/network/tftp/
 +Summary     : The client for the Trivial File Transfer Protocol (TFTP)
 +Description :
 +The Trivial File Transfer Protocol (TFTP) is normally used only for
 +booting diskless workstations.  The tftp package provides the user
 +interface for TFTP, which allows users to transfer files to and from a
 +remote machine.  This program and TFTP provide very little security,
 +and should not be enabled unless it is expressly needed.
 +/usr/bin/tftp
 +/usr/share/doc/tftp-0.49
 +/usr/share/doc/tftp-0.49/CHANGES
 +/usr/share/doc/tftp-0.49/README
 +/usr/share/doc/tftp-0.49/README.security
 +/usr/share/doc/tftp-0.49/README.security.tftpboot
 +/usr/share/man/man1/tftp.1.gz
 +</code>
 +
 +===== Konfiguration =====
 +==== xinet-Daemon ====
 +Die Auslieferung des Bootmenüs und der hierzu notwendigen Dateien erfolgt mit Unterstützung des TFTP-Servers, der mit Hilfe des **xinetd**-Daemon gestartet wird.
 +Hierzu passen wir die Konfigurationsdatei des Daemon wie folgt an.
 +   # vim /etc/xinetd.d/tftp
 +<file bash # vim /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
 +{
 +        socket_type             = dgram
 +        protocol                = udp
 +        wait                    = yes
 +        user                    = root
 +        server                  = /usr/sbin/in.tftpd
 +        server_args             = -s /var/lib/tftpboot
 +        # Django 2011-11-21 TFTP-server aktiviert
 +        # default : disable = yes
 +        disable                 = no
 +        per_source              = 11
 +        cps                     = 100 2
 +        flags                   = IPv4
 +}
 +</file>
 +
 +Damit der **xinetd** bei jedem Systemstart automatisch gestartet werden kann, setzen wir noch die notwendigen Syslinks im Pfad **/etc/init.d/**.
 +   # chkconfig xinetd on
 +
 +Ob der **xinted** beim Systemstart gestartet wird und dieser den **tftp**-Server auch anstartet können wir mittels folgendem Aufruf überprüfen.
 +   # chkconfig --list | tail -n 16
 +<code>xinetd          0:off 1:off 2:on 3:on 4:on 5:on 6:off
 +
 +xinetd based services:
 + chargen-dgram: off
 + chargen-stream: off
 + daytime-dgram: off
 + daytime-stream: off
 + discard-dgram: off
 + discard-stream: off
 + echo-dgram:    off
 + echo-stream:    off
 + rsync:          off
 + tcpmux-server: off
 + tftp:          on
 + time-dgram:    off
 + time-stream:    off
 +</code>
 +
 +==== Paketfilter ====
 +Damit sowohl unser TFTP-Server im Netz erreichbar ist und auch seine Pakete ausliefern kann werden wir nun den Paketfilter noch erweitern und anpassen.
 +
 +Als erstes überprüfen wir unsere aktuelle iptables-Regeln.
 +   # 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 
 +ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
 +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>
 +Die Konfigurationsdatei unseres Paketfilters passen wir nun wie folgt an.
 +   # vim /etc/sysconfig/iptables
 +<file bash /etc/sysconfig/iptables>
 +# Firewall configuration written by system-config-firewall
 +# Manual customization of this file is not recommended.
 +*filter
 +:INPUT ACCEPT [0:0]
 +:FORWARD ACCEPT [0:0]
 +:OUTPUT ACCEPT [0:0]
 +-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 +-A INPUT -p icmp -j ACCEPT
 +-A INPUT -i lo -j ACCEPT
 +-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
 +# Django : 2011-11-16 htpp für Apache Webserver freigeschaltet
 +-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
 +#
 +# Django : 2011-11-16 Freischalten des TFTP-servers
 +-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT
 +#
 +-A INPUT -j REJECT --reject-with icmp-host-prohibited
 +-A FORWARD -j REJECT --reject-with icmp-host-prohibited
 +COMMIT
 +</file>
 +Anschließend starten wir den Paketfilter 1x durch.
 +   # service iptables restart
 +<code>
 +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  ] 
 +</code>
 +Überprüfen wir anschließend unseren Paketfilter, werden unsere neuen Regeln entsprechend angezeigt.
 +   # 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 
 +ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
 +ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:tftp 
 +LOG        all  --  anywhere             anywhere            LOG level warning 
 +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>
 +
 +===== Systemstart =====
 +Nun ist es an der Zeit unseren TFTP Server das erste mal über den **xinetd** zu starten.
 +   # service xinetd start
 +
 +Im Syslog wird uns der Start des Daemon entsprechend protokolliert.
 +<code>Nov 22 09:11:51 vml000050 xinetd[6177]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
 +Nov 22 09:11:51 vml000050 xinetd[6177]: Started working: 1 available service
 +</code>
 +
 +Ob auf unserem Server nun der TFTP Server läuft und auf Port **69** horcht können wir bei Bedarf auch noch überprüfen.
 +   # netstat -tulpen | grep xinetd
 +
 +   udp        0      0 0.0.0.0:69                  0.0.0.0:                                       75579      6177/xinetd
 +
 +Den automatischen Start unseres Serverdienstes haben wir bereits im [[centos:pxe:tftp#xinet-daemon|Absatz xinet-Daemon]] eingestellt.
 +
 +===== Systemtest =====
 +==== Testdatei für die Übertragung 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.
 +   # echo "Dies ist ein ganz einfacher Text für den Test unseres TFTP-Servers" > /var/lib/tftpboot/test
 +
 +==== Testdatei transferieren ====
 +Anschließend wechseln wir ins Homeverzeichnis unseres Benutzers.
 +   # cd ~
 +
 +Dann bauen wir mit dem TFTP-Clientprogramm eine Verbiundung 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**.
 +
 +   # tftp -v 10.0.0.50
 +
 +   Connected to 10.0.0.50 (10.0.0.50), port 69
 +   tftp> get test
 +   getting from 10.0.0.50: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.50 -c get test
 +
 +==== Fehlerbehandlung ====
 +Klappt der Download von unserem Clientrechners nicht, trotz funktionierendem Zugriff nicht, liegt es an den Paketfilterregelungen auf unserem Clientrechner! Wie man in folgendem Beispiel sieht laufen wir hier in einen timeout: 
 +   # tftp -v 10.0.0.50 -c get test
 +
 +   Connected to 10.0.0.50 (10.0.0.50), port 69
 +   getting from 10.0.0.50: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 Port **69** freigeschaltet:
 +<code bash># Django : 2011-11-16 Freischalten des TFTP-servers
 +-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT
 +#
 +</code>
 +
 +Im Syslog des TFTP-Servers sehen wir nur die Folgende Fehlermeldung:
 +   Nov 24 07:49:14 vml000050 in.tftpd[10031]: tftpd: read(ack): No route to host
 +
 +Die Ursache ist ganz einfach erklärt. TFTP nutzt für die Steuerung Port **69**, für die Datenübertragung werden dann aber über beliebige highports. 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**
 +
 +Dies geschiet ü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 10.0.0.50 -v -c get test
 +
 +   Connected to 10.0.0.50 (10.0.0.50), port 69
 +   getting from 10.0.0.50: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.
 +<code>Nov 24 09:14:30 vml000050 xinetd[7708]: START: tftp pid=10145 from=10.0.0.40
 +Nov 24 09:14:30 vml000050 in.tftpd[10146]: RRQ from 10.0.0.40 filename test
 +</code>
 +
 +
 +====== Links ======
 +  * **[[centos:pxe:start|Zurück zum Kapitel >>PXE-Boot-Server unter CentOS 6.x einrichten<<]]**
 +  * **[[wiki:start|Zurück zu Projekte und Themenkapitel]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +