{{ ansible_managed | comment }} table inet signup { set triggered { type ether_addr timeout 24h } set allowed { type ether_addr timeout 30m } chain trigger { log prefix "signup-trigger" group 0 add @triggered { ether saddr } add @allowed { ether saddr } } chain filter { # Si l'adresse MAC est temporairement autorisée, on ne bloque pas ether saddr @allowed return # Si l'adresse n'est pas autorisée (cf. règle précédente) mais qu'elle # a accédé récemment à un déclencheur, cela signifie qu'elle a déjà # « consommé son crédit », donc on bloque ether saddr @triggered drop # Si la machine tente de se connecter à un des hôtes déclencheurs, # on enregistre son adresse MAC et on laisse passer la connexion ip daddr $signup_triggers_v4 goto trigger ip6 daddr $signup_triggers_v6 goto trigger # La machine a tenté de se connecter vers une destination qui ne # déclenche pas l'accès à Internet, donc on bloque drop } chain forward { type filter hook forward priority -10 policy accept ip saddr $signup_v4 goto filter ip6 saddr $signup_v6 goto filter } }