Jo no ho qualificaria d'experiència, però si us serveix per agafar alguna idea que no sigui dolenta.
Tinc un parell de guions, l'un s'executa un cop al dia i descarrega una llista i l'afegeix a un conjunt ipset. root@gwbox:~# cat /usr/local/bin/llista_l1 #!/bin/sh ipset create Firehol_L1 hash:net -exist ipset flush Firehol_L1 rm -f /etc/firehol_level1.netset wget -c https://iplists.firehol.org/files/firehol_level1.netset -O /etc/firehol_level1.netset if [ $? -eq 0 ]; then sed -i '/192\.168\./d' /etc/firehol_level1.netset for i in $(cat /etc/firehol_level1.netset | grep -v ^# ); do ipset add Firehol_L1 $i; done ipset save -file /etc/iptables/ipsets fi amb ipset list Firehol_L1 es poden consultar les xarxes que bloqueja. L'altre s'executa cada 5 minuts i és similar root@gwbox:~# cat /usr/local/bin/ufwblock #!/bin/sh ipset create UFWBlockList hash:ip -exist ipset flush UFWBlockList #Suposo que en equips nous farà falta afegir el syslog-ng o establir la destinació del log de l'ufw. # El *5 *en negreta parametritza quantes vegades ha d'aparèixer una ip al log per afegir-la a l'ipset. for i in $(cat /var/log/messages | grep BLOCK | awk -F= '{print $5}' | cut -d " " -f 1 | sort | uniq -c | awk '{ if ($1 >=*5*) print $2}'); do ipset add UFWBlockList $i; done #en el meu cas, per estalviar-me bloquejos innecessaris. ipset del UFWBlockList 192.168.2.2 ipset del UFWBlockList 192.168.1.1 ipset save -file /etc/iptables/ipsets A banda, també vaig instal·lar el fwlogwatch que t'envia un informe diari. Missatge de Alex Muntada <al...@debian.org> del dia dg., 21 de gen. 2024 a les 13:22: > Hola Narcis, > > > no es tracta dels números sinó de buscar patrons amb una cadena > > fixa en comptes de buscar cadenes amb un patró. > > > > Exemple amb números de DNI; la llista seria: > > ES......... Spain > > FR......... France > > .........DE Germany > > IT......... Italy > > > > I donat un DNI «55667788DE» poder trobar la línia del patró > > corresponent: > > .........DE Germany > > I així extraure el nom de l'estat després de l'espai: Germany. > > Amb Python, Perl o algun altre llenguatge de més alt nivell no > seria més fàcil d'obtenir el país perquè podries capturar la > part de l'expressió regular que t'interessi i utilitzar-la per > indexar un diccionari: > > ``` > #!/usr/bin/perl > > use v5.32; > use strict; > use warnings; > > my %paisos = ( > 'DE' => 'Germany', > ); > > for my $item (<DATA>) { > chomp($item); > say "$item -> $paisos{$1}" if $item =~ /([A-Z]{2})$/; > } > > __DATA__ > 12345678DE > ``` > > > Cas més sofisticat; Rangs d'adreces IPv4 en un fitxer > > «spammers.txt»: > > 55\.66\.77\.88 > > 66\.77\.88\..* > > 99\.11\.22\.33 > > > > i amb això trobar que si la IP de l'interlocutor té > > coincidència a la llista, aleshores no acceptar-lo. > > I així poder incloure rangs també. > > Les expressions regulars per als rangs IP són poc acurades perquè > no tenen en compte les màscares de bits dels segments. En general > és millor enfocar aquest problema d'una altra manera més eficient > (per exemple amb ipset) i utilitzar llistes negres que tinguin > una reputació prou bona, per exemple: > > https://github.com/firehol/blocklist-ipsets > > És un tema que fa uns mesos que em vull mirar amb deteniment, > però en el que encara no he pogut aprofundir. Si algú hi té > experiència, estaria bé que ens expliqui com ho fa per incloure > llistes negres al tallafocs. > > Salut, > Alex > > -- > ⢀⣴⠾⠻⢶⣦⠀ > ⣾⠁⢠⠒⠀⣿⡁ Alex Muntada <al...@debian.org> > ⢿⡄⠘⠷⠚⠋ Debian Developer 🍥 log.alexm.org > ⠈⠳⣄⠀⠀⠀⠀ > >