Pour ce qui est d'une denylist (/blacklist) permanente, je sais pas si c'est pertinent d'implémenter ça directement dans reaction.
Par contre je viens de réfléchir à une configuration qui le permette de manière pas si dégueu !
À chaque fois que reaction ban une IP, il la stocke également dans un fichier.
reaction suit ce fichier comme un stream, et n'en garde que les 3 premiers nombres (la partie "réseau")
au bout de 50 occurences du même réseau en un mois, il ban tout le réseau pour un an.
reaction.jsonnet
local permanentfile = '/var/lib/reaction/permanent';
{
patterns: {
// full ip
ip: {
regex: '...',
},
// Only keep "network" part of an IPv4
ipD: {
regex: @'[0-9]\.[0-9]\.[0-9]\.',
},
},
streams: {
myservice: {
// ...
filters: {
myfilter: {
// ...
actions: {
ban: {
// ...
},
unban: {
// ...
},
// when banning an IP, you also put it in a file
storeinfile: {
cmd: ['store.sh', '<ip>', permanentfile]
},
},
},
},
},
myotherservice: {
// ... same 'storeinfile' action
},
permanent: {
cmd: ['tail', '-fn0', permanentfile],
filters: {
oneyearban: {
regex: [@'^<ipD>.*'],
// 50 bans of this network in one month
retry: 50,
retryperiod: std.toString(31 * 24) + 'h',
actions: {
ban: {
// ...
},
unban: {
// ...
// unban after 12 months
after: std.toString(12 * 31 * 24) + 'h',
},
},
},
},
},
},
}
store.sh
#!/usr/bin/env bashecho"1ドル" >> "2ドル"
Notes:
J'utilise un petit script plutôt que la commande ['sh', '-c', 'echo <ip> >> ' + permanentfile], car faire un sh -c est risqué, de manière inhérente.
Pour ban un rang d'IP, il faut ajouter le /24: iptables -w -A reaction -s a.b.c.0/24 -j DROP
Je n'ai pas testé, mais c'est forcément pas loin de fonctionner 😄 S'il y a un vrai intérêt autour de cette méthode, je ferai une page dans le wiki.
Si quelqu'un trouve une manière élégante de permettre de chainer des streams dans reaction, et ainsi d'ajouter de la réflexivité, ça m'intéresse d'implémenter ça, et d'éviter d'avoir recours à un fichier externe comme dans cet exemple. Mais il faut alors trouver de nouvelles options de conf pour permettre ça de manière élégante. (Les issues sont ouvertes !)
Si je vous ai perdu avec ce bout de conf, je peux essayer d'expliquer mieux, n'hésitez pas à poser des questions.
[^] # Re: whitelist/blacklist
Posté par ppom . En réponse à la dépêche reaction, remplaçant de fail2ban. Évalué à 3.
Pour ce qui est d'une denylist (/blacklist) permanente, je sais pas si c'est pertinent d'implémenter ça directement dans reaction.
Par contre je viens de réfléchir à une configuration qui le permette de manière pas si dégueu !
reaction.jsonnetstore.shNotes:
['sh', '-c', 'echo <ip> >> ' + permanentfile], car faire unsh -cest risqué, de manière inhérente./24:iptables -w -A reaction -s a.b.c.0/24 -j DROP