, , , , , , , ,

Netfilter : Autoriser les connexions au service TFTP sur un poste serveur

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.

nftables.conf
#!/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"
  }
}