local banFor(time, name) = { ban_v4: { cmd: ['nft', 'add', 'element', 'inet', 'firewall', 'reaction_v4', '{ }'], ipv4only: true, }, ban_v6: { cmd: ['nft', 'add', 'element', 'inet', 'firewall', 'reaction_v6', '{ }'], ipv6only: true, }, unban_v4: { after: time, cmd: ['nft', 'delete', 'element', 'inet', 'firewall', 'reaction_v4', '{ }'], ipv4only: true, }, unban_v6: { after: time, cmd: ['nft', 'delete', 'element', 'inet', 'firewall', 'reaction_v6', '{ }'], ipv6only: true, }, log: { cmd: ['/etc/reaction/_ban.sh', '', name], oneshot: true, }, }; // retry et retryperiod sont quand il y a plusieurs tentatives autorisées // juste mettre le banFor sinon... Le ban sera alors à la première tentative. // Filtre (et options) par défaut : ni trop doux, ni trop cruel. local filter_default = { retry: 3, retryperiod: '1h', actions: banFor('48h', 'ban par défaut'), }; // Filtre doux : c'est peut-être légitime. Et peut-être pas. Ça délaye les attaques. local filter_soft = { retry: 6, retryperiod: '1h', actions: banFor('30s', 'ban temporaire'), }; // Filtre violent : un seul essai, banni un mois. local filter_hard = { actions: banFor('720h', 'banni un mois'), }; // Exposer les définitions précédentes pour qu'elles soient accessibles depuis un autre fichier Jsonnet { banFor: banFor, filter_default: filter_default, filter_soft: filter_soft, filter_hard: filter_hard, }