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
>   ⠈⠳⣄⠀⠀⠀⠀
>
>

Respondre per correu electrònic a