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.

HWS: 45 3 * * 1,3,5
Le 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 / 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 dannoso 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
In 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:
? Nuovo rilascio di #ABPXFiles #HWS ? (versione 202007150345), aggiorna la tua sottoscrizione! ? (novità disponibili su https://t.co/wgHNxxlUWa)
— Giovanni (@Gioxx) July 15, 2020
? Nuovo rilascio della lista stabile #ABPXFiles ? (versione 202007111730), aggiorna la tua sottoscrizione! ? (novità disponibili su https://t.co/wgHNxxlUWa)
— Giovanni (@Gioxx) July 11, 2020
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
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio lascia un commento!