ABP X Files: nuovo processo di creazione della lista stabile e di HWS

| |

Volevo farlo ormai da tempo e avendo qualche giorno libero ne ho approfittato: ho migrato il processo di creazione di X Files e HWS da Windows a Linux, più precisamente da VBScript a Bash su Raspbian, quindi sul mio fido RPi. Tutto si sposta sul serio su GitHub, contributi degli utenti compresi, e la pubblicazione della nuova versione di HWS è totalmente automatizzata per evitare di essere “rallentata” dai meno frequenti rilasci della lista principale.

ABP X Files, noads.it e “cosa vi siete persi negli ultimi tempi” 2

HWS: 45 3 * * 1,3,5

AdBlock: X Files 20130108 2Le cifre e gli asterischi non sono inseriti a caso nel titolo del paragrafo. Chi mastica qualcosa di Linux sa bene che l’equivalente delle “Operazioni pianificate” di Windows è Crontab sul Sistema Operativo del pinguino (a dirla tutta su Sistemi Unix e Unix-like tutti, senza esclusione alcuna e AIX compreso). Il mio Raspberry Pi è programmato per rilasciare una nuova versione della lista HWS (Harmful WebSites) ogni lunedì, mercoledì e venerdì alle 3:45 del mattino, è così che si leggono quei numeri e quegli asterischi, più facilmente interpretabili se dati in pasto a crontab guru: crontab.guru/#45_3_*_*_1,3,5.

Come già anticipato nell’articolo ABP X Files: le necessarie modifiche per HWS e NoCoin, il nuovo script bash non fa null’altro che prendere le fonti costantemente aggiornate e pubblicate da dead-hosts / hosts-list_web_malwaredomainlist.com e The-Big-List-of-Hacked-Malware-Web-Sites_git_mitchellkrogza e le fonde ai contributi che gli utenti registrati su GitHub possono aggiungere alla lista github.com/gioxx/xfiles/blob/master/contrib/siteblock_contrib.

Se vuoi segnalare un sito web malevolo puoi farlo creando una nuova Issue o intervenendo direttamente sulla lista contributi (facendo un fork del progetto e proponendo subito dopo un merge o una patch). A scaricare le liste, mettere in ordine e fare pulizia ci penserà il mio script. Su Raspberry ho clonato il repository Git, lavoro in una cartella temporanea e poi muovo tutto quanto su GitHub in maniera automatizzata:

#!/bin/bash
wget -c "https://raw.githubusercontent.com/dead-hosts/hosts-list_web_malwaredomainlist.com/master/output/domains/ACTIVE/list" -O "malwaredomainlist.com.txt"
wget -c "https://raw.githubusercontent.com/dead-hosts/The-Big-List-of-Hacked-Malware-Web-Sites_git_mitchellkrogza/master/output/domains/ACTIVE/list" -O "mitchellkrogza.txt"

# GitHub: Get Repo Updates
    git -C "/home/pi/Github/xfiles" pull
    cp "/home/pi/Github/xfiles/contrib/siteblock_contrib" "hws_contrib.txt"

#	Date and time
#	Credits: 	https://www.lifewire.com/display-date-time-using-linux-command-line-4032698
#			https://stackoverflow.com/questions/20485749/how-to-set-a-variable-to-current-date-and-date-1-in-linux
    giorno=$(date +%d)
    mese=$(date +%m)
    anno=$(date +%Y)
    ora=$(date +%H)
    minuto=$(date +%M)
    update=$anno$mese$giorno$ora$minuto
    lastmodified=$giorno"-"$mese"-"$anno
    checkwebsite=$giorno"/"$mese"/"$anno

    echo "Debug Update:        " $update
    echo "Debug Last Modified: " $lastmodified
    echo "Debug Check Website: " $checkwebsite

#	List Header
#	Credits:	https://unix.stackexchange.com/questions/20035/how-to-add-newlines-into-variables-in-bash-script
    NL=$'\n'
    list_header="[Adblock Plus 2.8]${NL}"
    list_header+="! Version: "$update${NL}
    list_header+="! Title: X Files: HWS Harmful WebSites${NL}"
    list_header+="! Harmful WebSites blocca siti web potenzialmente dannosi per la tua navigazione${NL}"
    list_header+="! Last modified: "$lastmodified${NL}
    list_header+="! Expires: 10 days${NL}"
    list_header+="! Homepage: https://xfiles.noads.it${NL}"
    list_header+="! Home: https://xfiles.noads.it${NL}"
    list_header+="! Blog: https://gioxx.org/tag/abpxfiles${NL}"
    list_header+="! Hosting lista: GitHub.com${NL}"
    list_header+="!"

#	Check for NoAds.it
    check_noads="$update${NL}"
    check_noads+="$lastmodified${NL}"
    check_noads+="$checkwebsite${NL}"

#	Remove header and blank lines from 3rd-party lists
#	Credits:	https://unix.stackexchange.com/questions/37790/how-do-i-delete-the-first-n-lines-of-an-ascii-file-using-shell-commands
#			https://www.cyberciti.biz/faq/using-sed-to-delete-empty-lines/
    sed -i -e 1,3d "malwaredomainlist.com.txt"
    sed -i -e 1,3d "mitchellkrogza.txt"
    sed -i -e 1,3d "hws_contrib.txt"
    sed -i '/^$/d' "malwaredomainlist.com.txt"
    sed -i '/^$/d' "mitchellkrogza.txt"
    sed -i '/^$/d' "hws_contrib.txt"

#	Append "##HTML *" for each line
#	Credits:	https://stackoverflow.com/questions/2869669/in-bash-how-do-i-add-a-string-after-each-line-in-a-file
    sed -e 's/$/##HTML */' -i "malwaredomainlist.com.txt"
    sed -e 's/$/##HTML */' -i "mitchellkrogza.txt"
    sed -e 's/$/##HTML */' -i "hws_contrib.txt"

#	Make HWS (and clean)!
#	Credits:	https://kb.iu.edu/d/afas
    cat "malwaredomainlist.com.txt" "mitchellkrogza.txt" "hws_contrib.txt" >> "siteblock_nosort.txt"
    sort -o "siteblock_sort.txt" "siteblock_nosort.txt"
    echo "$list_header" > "siteblock.txt"
    echo "$check_noads" > "check_siteblock.txt"
    cat "siteblock_sort.txt" >> "siteblock.txt"
    rm "malwaredomainlist.com.txt" "mitchellkrogza.txt" "hws_contrib.txt" "siteblock_nosort.txt" "siteblock_sort.txt"

# 	Git Push and Tweet
#	Credits:	https://www.igorkromin.net/index.php/2017/12/07/how-to-pass-parameters-to-your-php-script-via-the-command-line/
    cp siteblock.txt "/home/pi/Github/xfiles/"
    cp check_siteblock.txt "/home/pi/Github/xfiles/vcheck/"
    git -C "/home/pi/Github/xfiles" add "/home/pi/Github/xfiles/siteblock.txt"
    git -C "/home/pi/Github/xfiles" add "/home/pi/Github/xfiles/vcheck/check_siteblock.txt"
    git -C "/home/pi/Github/xfiles" commit -m "Aggiornamento HWS $update del $lastmodified"
    git -C "/home/pi/Github/xfiles" push
    php /home/pi/Scripts/NoAds/tweet/post-tweets.php hws $update

#	Upload to FTP and delete HWS
    SOURCE_PATH=/home/pi/Scripts/NoAds/siteblock.txt
    DESTINATION_PATH="noads:sub/users.gxware.org/supportoinformatico/abp/"
    rclone sync $SOURCE_PATH $DESTINATION_PATH -P --transfers 9 --config /home/pi/.config/rclone/rclone.conf
    rm "siteblock.txt" "check_siteblock.txt"

Lo script conterrà certamente degli errori più o meno gravi e tanti possibili spunti di miglioramento, io ci ho messo del mio, funziona e sono soddisfatto del risultato raggiunto. Inutile dire che se tu sei il guru di queste cose e vuoi suggerirmi dei possibili ritocchi sei il benvenuto! Lascia un commento sotto l’articolo e parliamone insieme! 🙏

X Files

ABP X Files e Harmful WebSites: ecco come nascono 2In questo caso non c’è Crontab che tenga. La lista principale non può vivere di aggiornamenti automatici perché non è detto che nuovi filtri entrino a far parte di essa tutti i giorni o quasi. Sono solito raccogliere più blocchi tra i vari PC e profili dei browser utilizzati, per poi inserirli insieme e rilasciare la nuova versione di X Files. Ho però compartimentato i vari blocchi della lista, separandoli e popolando la cartella “contrib” su GitHub: github.com/gioxx/xfiles/tree/master/contrib.

La “nuova” X Files nasce infatti dalla fusione dei blocchi da me curati in prima persona (esempio: xfiles_0-whitelist, xfiles_1-noads, ecc.) e dai contributi degli utenti e utilizzatori che trovano spazio in github.com/gioxx/xfiles/blob/master/contrib/xfiles_contrib. Questo passaggio segna la fine del vecchio metodo che mi ha accompagnato dal 2007 a oggi e che mi ha visto costruire i filtri direttamente sul mio browser, esportando di tanto in tanto un backup completo che veniva poi lavorato e trasformato dal VBScript per la successiva pubblicazione su GitHub, è davvero il più bell’addio e “grazie per tutto il pesce“.

Se vuoi segnalare un sito web contenente pubblicità invasiva (da analizzare e pulire) puoi farlo creando una nuova Issue o intervenendo direttamente sulla lista contributi (facendo un fork del progetto e proponendo subito dopo un merge o una patch) o ancora basandoti sullo strumento di segnalazione integrato in AdBlock Plus. A scaricare le liste, mettere in ordine e fare pulizia ci penserà il mio script. Su Raspberry ho clonato il repository Git, lavoro in una cartella temporanea e poi muovo tutto quanto su GitHub in maniera automatizzata:

#!/bin/bash

# GitHub: Get Repo Updates
    git -C "/home/pi/Github/xfiles" pull
    cp /home/pi/Github/xfiles/contrib/xfiles_* ./

#	Date and time
#	Credits: 	https://www.lifewire.com/display-date-time-using-linux-command-line-4032698
#			https://stackoverflow.com/questions/20485749/how-to-set-a-variable-to-current-date-and-date-1-in-linux
    giorno=$(date +%d)
    mese=$(date +%m)
    anno=$(date +%Y)
    ora=$(date +%H)
    minuto=$(date +%M)
    update=$anno$mese$giorno$ora$minuto
    lastmodified=$giorno"-"$mese"-"$anno
    checkwebsite=$giorno"/"$mese"/"$anno

    echo "Debug Update:        " $update
    echo "Debug Last Modified: " $lastmodified
    echo "Debug Check Website: " $checkwebsite

#	List Header
#	Credits:	https://unix.stackexchange.com/questions/20035/how-to-add-newlines-into-variables-in-bash-script
    NL=$'\n'
    list_header="[Adblock Plus 2.8]${NL}"
    list_header+="! Version: "$update${NL}
    list_header+="! Title: ABP X Files${NL}"
    list_header+="! X Files migliora la tua navigazione quotidiana!${NL}"
    list_header+="! Last modified: "$lastmodified${NL}
    list_header+="! Expires: 5 days${NL}"
    list_header+="! Homepage: https://xfiles.noads.it${NL}"
    list_header+="! Home: https://xfiles.noads.it${NL}"
    list_header+="! Blog: https://gioxx.org/tag/abpxfiles${NL}"
    list_header+="! Hosting lista: GitHub.com${NL}"
    list_header+="!"

#	Check for NoAds.it
    check_noads="$update${NL}"
    check_noads+="$lastmodified${NL}"
    check_noads+="$checkwebsite${NL}"

# 	Sort filters
#	Credits:	https://stackoverflow.com/questions/14562423/is-there-a-way-to-ignore-header-lines-in-a-unix-sort
    for s in xfiles_*; do (head -n 1 "${s}" && tail -n +2 "${s}" | sort) > "sorted_${s}"; done

#	Make X Files (and clean)!
#	Credits:	https://kb.iu.edu/d/afas
#			https://stackoverflow.com/questions/8183191/concatenating-files-and-insert-new-line-in-between-files
    echo "$list_header" > "filtri.txt"
    echo "$check_noads" > "check_filtri.txt"
    for f in sorted_*; do (cat "${f}") >> filtri.txt; done
    rm xfiles_* sorted_*

# 	Git Push and Tweet
#	Credits:	https://www.igorkromin.net/index.php/2017/12/07/how-to-pass-parameters-to-your-php-script-via-the-command-line/
    cp filtri.txt "/home/pi/Github/xfiles/"
    cp check_filtri.txt "/home/pi/Github/xfiles/vcheck/"
    git -C "/home/pi/Github/xfiles" add "/home/pi/Github/xfiles/filtri.txt"
    git -C "/home/pi/Github/xfiles" add "/home/pi/Github/xfiles/vcheck/check_filtri.txt"
    git -C "/home/pi/Github/xfiles" commit -m "Aggiornamento Stable $update del $lastmodified"
    git -C "/home/pi/Github/xfiles" push
    php /home/pi/Scripts/NoAds/tweet/post-tweets.php stable $update

#	Upload to FTP and delete Stable
    SOURCE_PATH=/home/pi/Scripts/NoAds/filtri.txt
    DESTINATION_PATH="noads:sub/users.gxware.org/supportoinformatico/abp/"
    rclone sync $SOURCE_PATH $DESTINATION_PATH -P --transfers 9 --config /home/pi/.config/rclone/rclone.conf
    rm "filtri.txt" "check_filtri.txt"

Il processo viene avviato da me manualmente solo quando ci sarà reale necessità di pubblicare una nuova versione di X Files stabile.

Vale quanto già detto per il paragrafo relativo a HWS: lo script conterrà certamente degli errori più o meno gravi e tanti possibili spunti di miglioramento, io ci ho messo del mio, funziona e sono soddisfatto del risultato raggiunto. Inutile dire che se tu sei il guru di queste cose e vuoi suggerirmi dei possibili ritocchi sei il benvenuto! Lascia un commento sotto l’articolo e parliamone insieme! 🙏

In conclusione

Entrambi gli script svolgono compiti secondari come la creazione di file di controllo che vengono richiamati dal sito web ufficiale del progetto e tweet sull’account del sottoscritto e di @abpxfiles. Seguendomi potrai certamente rimanere allineato, noterai che di tanto in tanto salteranno fuori aggiornamenti di stato simili a questi:

Ti ricordo inoltre che potrai trovare delle copie aggiornate di entrambe le liste nel mirror all’indirizzo users.gxware.org/supportoinformatico/abp/filtri.txt (lista stabile) e users.gxware.org/supportoinformatico/abp/siteblock.txt (HWS), richiesto qualche tempo da un amico (ciao Simone) a causa di alcuni filtri imposti sul proxy aziendale che non permetteva di approdare su GitHub. Se tu lettore sei per qualsiasi motivo interessato a tenere in piedi un mirror su un tuo spazio web fammelo sapere così da poter eventualmente inserire questo processo nei miei script di rilascio liste e rendere la cosa ancora più distribuita 🤟🏻

Quasi dimenticavo (non è vero, ma fa sempre “ehi” dirlo): da qualche giorno è online il nuovo XFiles.noads.it, una rinfrescata doverosa che arriva in ordine cronologico dopo quella che ha avuto come protagonista questo blog. Il vecchio template aveva ormai molti anni sulle spalle e piuttosto che metterci ancora mano ho deciso di buttare tutto e ripartire da zero. Il risultato lo puoi giudicare tu stesso (fai il bravo e vacci piano, ricorda che faccio tutt’altro mestiere nonostante mi diverta ancora in questo campo), per imperitura memoria carico qui due sceenshot catturati con il “prima” e il “dopo“. Il nuovo sito web è compatibile anche con smartphone e tablet ed è completamente responsive, ho quindi abbattuto il vecchio “xfiles.noads.it/mob“:

Io penso di averti detto proprio tutto. In caso di dubbi o domande particolari sappi che l’area commenti è a tua totale disposizione. Se poi ti senti particolarmente magnanimo e vuoi in qualche maniera ringraziarmi per il lavoro che svolgo ormai dal 2007 con le liste X Files potresti approfittare di questo momento per offrirmi un caffè, una birra o ciò che più preferisci. Puoi sfruttare PayPal, Satispay (non sei ancora iscritto? Fallo subito per ottenere 5 euro in omaggio), Buy Me A Coffee o diventare sostenitore su Patreon. Se non vuoi spendere soldi puoi sempre fare acquisti su Amazon passando dal mio codice referral! Grazie mille in anticipo e buona navigazione! 🙂

#StaySafe

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti: