Clark's Home page

Tecnicismi vari di un Sysadmin Linux ma anche qualcosa della sua vita

Blocklist-with-nftables —

Negli ultimi anni si sono diffusi a macchia d’olio i vari criptolocker.
Inutile rimarcare quanto siano dannosi e che razza di gentaglia sia quella che li produce e li usa, importante invece cercare di capire come funzionano e quindi metterli in condizione di non poter fare danni o almeno non molti.
Dalle analisi fatte dai vari studiosi è emerso che molti di questi programmi una volta lanciati vanno a prendersi la chiave di criptazione su dei nodi della rete tor, se a ciò ci aggiungiamo che in azienda non c’è un solo valido motivo per usare la navigazione anonima, una “toppa” al problema è negare l’accesso in/out a questi nodi, con iptables usavo il torblock purtroppo con nftables questo tipo di soluzione e’ troppo lenta e manda in stallo lo script di firewall.
Al solito quando non sai chiedi a chi sa o presumi possa sapere, infatti ponendo il quesito in ml netfilter mi hanno detto lascia stare bash passa a perl o pyton, se fai una breve ricerca in Internet trovi fior di script belli e pronti perché lo stesso tuo problema lo hanno avuto altri prima di te.
Infatti ho trovato quasi subito blocklist-whith-nftables che in sostanza crea due set di IP uno per ipv4 e uno per ipv6 scaricando una o più liste dalla rete e quindi crea due chain in input negando la serie di indirizzi.
È necessario installare prima ipset e libdata-validate-ip-perl e creare la directory blocklist sotto etc che deve contenere i due file whitelist e blacklist
Io nella mia paranoia ho aggiunto anche 2 chain in output nel dubbio.

ADDENDUM:
Parlando con un fornitore che fa parte anche lui del mondo Linux mi ha messo una pulce nell’orecchio  grossa come una pecora, quindi ho aggiunto anche due chain in forward con drop come target, a questo punto non c’è più nulla da poter aggiungere, su queste liste di indirizzi  non si va in nessun modo neanche per sbaglio.
Le liste si trovano all’inizio dello script blocklist.pl alla voce  my @listUrl io ho  lasciato il default e ho aggiunto questa https://lists.fissionrelays.net/tor/exits.txt ma probabilmente ne aggiungerò una un po più dinamica visto che a quanto vedo questa viene aggiornata solo una volta a giorno.

Addendum dell’Addendum

è stata rilasciata una nuova versione dello script e l’ho modificata in questo modo per blindare forward e output

# Build tmp_v4 and v4 OR tmp_bridge
if ( $bridgeOption == 0 )
{
print $tmp_v4 “table ip $TABLE {\n”;
print $tmp_v4 “$tmp_ipv4”;
print $tmp_v4 “\tchain input {
\t\ttype filter hook input priority 100; policy accept;
\t\tip saddr \@ipv4 log prefix \”Blocklist Dropped: \” drop
\t}
}\n”;
{
print $tmp_v4 “table ip $TABLE {\n”;
print $tmp_v4 “$tmp_ipv4”;
print $tmp_v4 “\tchain forward {
\t\ttype filter hook forward priority 100; policy accept;
\t\tip saddr \@ipv4 log prefix \”Blocklist Dropped: \” drop
\t}
}\n”;
}

{
print $tmp_v4 “table ip $TABLE {\n”;
print $tmp_v4 “$tmp_ipv4”;
print $tmp_v4 “\tchain forward {
\t\ttype filter hook forward priority 100; policy accept;
\t\tip daddr \@ipv4 log prefix \”Blocklist Dropped: \” drop
\t}
}\n”;
}

{
print $tmp_v4 “table ip $TABLE {\n”;
print $tmp_v4 “$tmp_ipv4”;
print $tmp_v4 “\tchain output {
\t\ttype filter hook output priority 100; policy accept;
\t\tip daddr \@ipv4 log prefix \”Blocklist Dropped: \” drop
\t}
}\n”;
}
print $tmp_v6 “table ip6 $TABLE {\n”;
print $tmp_v6 “$tmp_ipv6”;
print $tmp_v6 “\tchain input {
\t\ttype filter hook input priority 100; policy accept;
\t\tip6 saddr \@ipv6 log prefix \”Blocklist Dropped: \” drop
\t}

}\n”;
### aggiunte forward e output
{
print $tmp_v6 “table ip6 $TABLE {\n”;
print $tmp_v6 “$tmp_ipv6”;
print $tmp_v6 “\tchain forward {
\t\ttype filter hook forward priority 100; policy accept;
\t\tip6 saddr \@ipv6 log prefix \”Blocklist Dropped: \” drop
\t}

}\n”;
}

{
print $tmp_v6 “table ip6 $TABLE {\n”;
print $tmp_v6 “$tmp_ipv6”;
print $tmp_v6 “\tchain forward {
\t\ttype filter hook forward priority 100; policy accept;
\t\tip6 daddr \@ipv6 log prefix \”Blocklist Dropped: \” drop
\t}

}\n”;
}

{
print $tmp_v6 “table ip6 $TABLE {\n”;
print $tmp_v6 “$tmp_ipv6”;
print $tmp_v6 “\tchain output {
\t\ttype filter hook output priority 100; policy accept;
\t\tip6 daddr \@ipv6 log prefix \”Blocklist Dropped: \” drop
\t}

}\n”;
}

Il file completo in formato zip si trova qui blocklist

 


Categorised as: firewall | Linux | Networking | Work

Comments are disabled on this post


Comments are closed.


Hide picture