48 lines
1.3 KiB
Django/Jinja
48 lines
1.3 KiB
Django/Jinja
{{ 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
|
||
}
|
||
|
||
}
|