// This file is using JSONNET, a complete configuration language based on JSON // See https://jsonnet.org // action pour bannir/débannir local banFor(time) = { ban: { cmd: ['ip46tables', '-w', '-A', 'reaction', '-s', '', '-j', 'DROP'], }, unban: { after: time, cmd: ['ip46tables', '-w', '-D', 'reaction', '-s', '', '-j', 'DROP'], }, }; // Envoyer un mail lors des actions et précisant ip et raison local sendmail(ip,rule) = { mail: { cmd: ['sh', '/root/scripts/sendmailreaction/mailreaction.sh', ip, rule], }, }; // pourquoi ça ouvre ici ? Mais, ça marche. { // patterns are substitued in regexes. when a filter performs an action, it replaces the found pattern. // reaction regex syntax is defined here: https://github.com/google/re2/wiki/Syntax // jsonnet's @'string' is for verbatim strings. patterns: { // IPs can be IPv4 or IPv6 // ip46tables (C program also in this repo) handles running the good commands ip: { regex: @'(([0-9]{1,3}\.){3}[0-9]{1,3})|([0-9a-fA-F:]{2,90})', ignore: ['127.0.0.1', '::1'], }, }, // Commandes exécutées au lancement start: [ ['ip46tables', '-w', '-N', 'reaction'], ['ip46tables', '-w', '-I', 'INPUT', '-p', 'all', '-j', 'reaction'], ['echo', 'Le service a démarré', '|', 'mail', '-s', '"Démarrage de Reaction"', 'root'], ], // Commandes exécutées à l'arrêt, après tout le reste stop: [ ['ip46tables', '-w', '-D', 'INPUT', '-p', 'all', '-j', 'reaction'], ['ip46tables', '-w', '-F', 'reaction'], ['ip46tables', '-w', '-X', 'reaction'], ['echo', 'Le service est éteint', '|', 'mail', '-s', '"Extinction de Reaction"', 'root'], ], // Streams : c'est là qu'on va définir les services et règles menant au bannissement streams: { ssh: import 'ssh.jsonnet', kernel: import 'kernel.jsonnet', badguypostfix: import 'badguypostfix.jsonnet', }, }