Mise en place d'un serveur TFTP

Bien que les équipements réseaux modernes soient accessibles via SSH il est toujours possible de se devoir gérer des commutateurs ou bornes WiFi un peu anciens et dont la configuration est assurée par des moyens "historiques" tels que telnet et TFTP. Si telnet ne pose pas de problème en soi (hormis le manque de sécurité) il est tout de même nécessaire de passer un peu de temps pour mettre en place un serveur TFTP afin de pouvoir sauvegarder les configurations de vos équipements. Comme à l'accoutumée, toute la partie logicielle est disponible avec Slackware, mais il vous faudra définir une bonne configuration.

Le serveur TFTP n'est pas un service au même titre qu'Apache pour un service web ; il est géré par un "super-daemon" nommé inetd qui gère les serveurs mineurs n'ayant pas besoin d'être disponibles en permanence. Quand une requête est envoyée à destination du serveur TFTP, inetd lance le service concerné et qui se termine une fois l'opération éffectuée. Plusieurs services sont gérés de cette manière et c'est pourquoi la première étape est de modifier le fichier /etc/inetd.conf.

Même si vous n'avez pas activé ce daemon plusieurs services sont déjà configuré comme actifs par défaut. Ces services ne sont probablement pas utiles sur un réseau moderne, vous pouvez donc mettre en commentaires les lignes concernant time (TCP et UDP), comsat et auth. En utilisant Vim comme éditeur de texte, cela est possible en une seule commande :

:%s/^[^#]/# &/

En clair, le caractère dièse est ajouté à toutes les lignes ne commencant pas ce même caractère.

Vous devrez décommenter la ligne concernant le service TFTP et modifier certaines options. Par défaut, le répertoire utilisé par TFTP est /tftpboot. Ce répertoire n'existe pas sur une installation standard et le nom fait référence à l'utilisation de TFTP pour démarrer des terminaux légers. Par commodité, on utilisera un répertoire nommé /srv/tftp, il faut donc remplacer l'option -s /tftpboot par -s /srv/tftp. Bien sûr vous devrez créer ce répertoire, mais également y appliquer des permissions spécifiques ; TFTP étant géré par l'utilisateur et le groupe nobody.

mkdir /srv/tftp
chown root:nobody /srv/tftp
chmod 770 /srv/tftp

Autre option à modifier est celle permettant la création de fichiers. Par défaut encore, TFTP n'autorise le transfert de fichiers que si un fichier portant le même nom est déja existant sur le serveur ; il n'est pas possible pour un client de créer un fichier ex-nihilo si l'option -c n'est pas déclarée.

Comme précédemment, vous pouvez utiliser des commandes de substitution dans Vim pour effectuer ces changements.

- décommenter la ligne correspondant à TFTP :

:%s/^#\s*tftp/tftp/

- modifier les options pour le répertoire et la création de fichiers :

:%s/-s \/tftpboot/-c -s \/srv\/tftp/

Voilà, votre serveur TFTP est quasiment prêt. Il faudra rendre le script de démarrage d'inetd exécutable (chmod +x /etc/rc.d/rc.inetd) et démarrer le nouveau daemon.

Bien sûr, comme vous utilisez probablement un pare-feu, vous aurez besoin de modifier vos règles de filtrage :

/usr/sbin/iptables -A INPUT -o eth0 -p udp --dport 69 -s 192.168.1.0/24 -j ACCEPT

Et comme TFTP est un de ces protocoles n'étant pas géré nativement par le suivi de connection vous devrez charger un module spécifique pour cela :

/sbin/modprobe nf_conntrack_tftp.ko.

Votre nouveau serveur étant actif vous pourrez y copier les fichiers de configuration de vos équipements réseau, voire envisager des procédures automatiques en utilisant expect pour automatiser une session telnet et les commandes nécessaires.

publié le 20 juin 2013