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 ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)