[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Filtrar comodins/regex de les línies



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 <alexm@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 <alexm@debian.org>
  ⢿⡄⠘⠷⠚⠋   Debian Developer 🍥 log.alexm.org
  ⠈⠳⣄⠀⠀⠀⠀


Reply to: