Ubuntu server ufw (Uncomplicated firewall) bloccare IP o lista di IP (via CIDR). <alebal web Blog> | Appunti di PHP, MySql, javascript, Css, HTML, HTML5 e altro...

Per bloccare un IP, si fa cosi:

ufw insert 1 deny from 93.105.187.11 to any;

"insert 1" inserisce la nuova regola in alto, sembra che l'ordine conti, ci devono essere prima tutte le regole DENy, poi alla fine tutte le regole ALLOW.


Un CIDR, praticamente una lista di IP, si fa cosi:

Per prima cosa si fa un wois sull'IP da bloccare su un sito come questo http://whois.arin.net/, che riporta anche i CIDR.

Poi copia la riga CIDR e incollala nel comando ufw deny

ufw insert 1 deny from 39.0.0.0/8  to any;

Compreso / e numeretto.


bloccare lista IP (CIDR) da un file

Per prima cosa scarica la lista di IP che vuoi bloccare in formato CIDR, esd esempio da qui: https://www.ip2location.com/free/robot-whitelist, e magari rinominala in qualcosa di comprensibile, tipo cidr.txt

Poi carica il file sul server, ad esempio in /var/www/html/

e lancia questa:

while read line; do sudo ufw insert 1 deny from $line to any; done < /var/www/html/cidr.txt

Il terminale comincia a dirti aggiungo, aggiungo,aggiungo, lascialo fare finchè ha finito.

Quando ha finito controlla se c'è tutto con questa:

ufw status numbered

Se hai fatto una cazzata e ad esempio hai rimosso troppi IP, o gli ip sbagliati, si risolve cosi.

Scarica la lista di ip che vuoi ripristinare in formato cidr, caricala sul server e lancia questa:

while read line; do sudo ufw delete deny from $line; done < /var/www/html/cidr.txt

Tanto per... ti do in omaggio anche una lista di Ip di bad-robots (search engine bot) che sono venuti spesso a rompere le balle sul mio server.

Bello che loro passino a leggere vedere e scansionare il sito, perche di motori di ricerca si vive, ma a volte esagerano e fanno fondere il server, creando casini del tipo siti offline, memory limit, mysql limit ecc ecc ecc, e se il tuo sito è scassato non serve a niente che lo indicizzi...

http://www.alebalweb-blog.comhttps://www.alebalweb-blog.com/ckfinder/userfiles/files/bad-bot-cidr.txt


Non ho capito se dopo aver aggiunto o modificato regole in ufw bisogna ricaricare il firewall, però.. fa sempre bello...

Si fa cosi:

sudo ufw reload

Anche Bing è parecchio rompiballe nel senso descritto qui sopra, non va completamente bloccato, ma si può limitare aggiungendo questo su robots.txt

User-agent: bingbot
Crawl-delay: 1

Questo dovrebbe ridurre frequenza e tempo che passa nelle tue pagine.

Si può fare anche su Bing webmaster in "Configura sito -> Controllo della ricerca per indicizzazione", ci vuole una vita perchè le prime volte stai li a selezionare casellina per casellina, dopo un pò tutto si velocizza perchè capisci che puoi selezionare la prima e strusciare col mouse  :)


Velocizziamo un pò le cose

Questo è un mezzo scriptino che uso per prendere gli ip dei bot rompicoglioni dagli access.log e bloccarli con ufw.

Mezzo, perchè al momento non lo so fare tutto via terminale, ma lo so portare a termine usando php.

Il giochino inizia cercando negli access.log le righe con un riferimento al bot rompiballe (es. MJ12bot) e salvandole in un file.

grep MJ12bot /var/log/apache2/access.log > /var/www/ipban.txt

Il file si chiama ipban.txt e lo salvo ad esempio nella mia root.

Poi lo scarico nel mio LAMP locale.

Nel mio LAMP ho questo scriptino php:

$my_database_txt = 'ipban.txt';

$array_righi = file($my_database_txt);
foreach($array_righi as $key => $capi){
    list($ip, $merda) = explode(" - - ", $capi);

    if(strpos($ip_list, $ip) === false){
        $ip_list = $ip_list.$ip.'
';
    }
}
$nome_file_index = "ip_list.txt";
//chmod($nome_file_index, 0666);
$file = fopen($nome_file_index, "w") ;
	fwrite($file, $ip_list);
	fclose($file);

Questo giochino spacca le righe salvate dagli access.log e separa gli ip dal resto, controlla se l'ip è un duplicato e alla fine li salva uno per riga nel file ip_list.txt

A questo punto carico il file ip_list.txt nel server (ad esempio nella root), e posso lanciare il solito while di ufw per bloccare gli ip.

while read line; do sudo ufw insert 1 deny from $line to any; done < /var/www/ip_list.txt

Poi:

ufw reload

Tanto per completare il tutto.

Tutto questo giochino si può fare anche con un unico script?  (ad esempio .sh)

Sicuramente si, ma col cazzo che sono capace... e quindi per adesso questo... :(

Google Digg Reddit Tumblr Pinterest StumbleUpon Email

Rating: 5 out of 5 by 968 visitors

Leave your comment