Comme pour FTP, Pour que le service TFTP puisse correctement fonctionner derrière un pare-feu restrictif, il faut mettre en place un dispositif particulier de suivi du protocole (un helper).
L' exemple de configuration ci-dessous utilise une politique restrictive pour les trafics entrants et sortants. On accorde l'accès au service TFTP aux seuls clients identifiés.
#!/usr/sbin/nft -f flush ruleset table ip ipfilter { comment "Firewall" # Suivi des connexions TFTP ct helper tftp-standard { type "tftp" protocol udp l3proto ip } set allowed_tftp_clients { type ipv4_addr comment "Hotes identifiés autorisés à utiliser le service TFTP" elements = { 192.168.1.10, 192.168.1.11, 192.168.33.123 } } chain PRE { type filter hook prerouting priority filter; policy accept; udp dport 69 ct helper set "tftp-standard" } chain inbound { comment "Filtrage des paquets entrants" type filter hook input priority filter; policy drop; # Suppression des paquets non conformes ct state invalid counter drop # Accepte tous paquets en lien avec un trafic explicitement autorisé ct state established, related counter accept # Pas de restriction sur le trafic entrant sur la boucle locale iif "lo" counter accept comment "Accepte le trafic local sur l'interface loopback" # Accepte les connexions TFTP pour les clients identifiés. Le trafic est ensuite géré par l'helper "tftp" iif "lan0" ip saddr @allowed_tftp_clients udp dport 69 ct state new log level notice prefix "[FW] [ACCEPT] [RID=19] " counter accept # Tout trafic entrant non explicitement autorisé est journalisé et rejeté log prefix "[FW] [REJECT] [RID=666] " counter packets 0 bytes 0 reject comment "Rejette tout trafic entrant non explicitement autorise" } chain outbound { comment "Filtrage des paquets sortants" type filter hook output priority filter; policy drop; # Accepte tous les paquets en lien avec un trafic explicitement autorisé ct state established,related counter accept comment "Accepte tout paquet en lien avec le trafic autorise" # Pas de restriction concernant le trafic sortant par la boucle locale oif "lo" counter accept comment "Accepte le trafic local sur l'interface loopback" # Tout trafic sortant non explicitement autorisé est journalisé et rejetté log prefix "[FW] [REJECT] [RID=667] " counter packets 0 bytes 0 reject comment "Rejette tout trafic sortant non explicitement autorise" } chain forward { type filter hook forward priority filter; policy drop; # Transmets tout paquet en relation avec un trafic explicitement autorisé en forwarding ct state established,related counter accept comment "Transfert les trafics des connexions explicitement autorisees" # Journalise et rejette tout transfert non explicitement autorisé log prefix "[FW] [REJECT] [RID=668] " counter reject comment "Refuse toute transmission non explicitement autorisee" } }