Bonjour,
Ne m'en veux pas mais j'ai passé tellement de temps sur ce script que je vais le garder. Je ne comprend pas l'intégralité du tien.
J'ai eu l'idée de ce script grâce à la documentation sur Unbound qui donne la commande
awk '{print "local-zone: \""$2"\" always_refuse"}'
. J'ai pas mal galéré pour le regex
grep -E '^([0127]+.0.0.[01]|^::[ 1])'
. J'ai fais pleins de tests jusqu’à trouver le bon.
J'ai repris quelques idées que tu m'as suggéré, ajouté une liste supplémentaire ainsi qu'une condition qui indique que le script doit être lancé en tant que root car il y avait un bug si je validais la question puis si je quittais le script avec Ctrl+C.
Rien que ça, j'ai mis du temps car j'ai dû tenter plusieurs approches ($UID, $EUID ou $(id -u) n'ont pas marché). J'ai trouvé avec
sudo true
. C'est peut-être pas très élégant mais ça fonctionne, pour
rm
j'ai dû le mettre trois fois car je n'ai pas trouvé d'autres solutions
Tu vas pas aimer car j'ai gardé les alias et j'ai rajouté pleins de dir… Voici le script dernière version :
Code : Tout sélectionner
#!/usr/bin/env sh
# Convertir différents fichiers hosts pour Unbound.
dir1='/tmp/hosts'
dir2='/tmp/hosts2'
dir3='/tmp/unbound'
dir4='/etc/unbound/blocklist'
url='https://raw.githubusercontent.com/'
alias a_me='curl ${url}iam-py-test/my_filters_001/main/Alternative%20list%20formats/antimalware_pure_hosts.txt'
alias no_g='curl ${url}nickspaargaren/no-google/master/google-domains'
alias no_t='curl ${url}notracking/hosts-blocklists/master/hostnames.txt'
alias oisd='curl https://hosts.oisd.nl/basic'
a_me > $dir1
printf "\033[0;33;4mFichier 'antimalware' téléchargé\n\033[0m"
no_g >> $dir1
printf "\033[0;33;4mFichier 'no-google' téléchargé\n\033[0m"
no_t >> $dir1
printf "\033[0;33;4mFichier 'no-tracking' téléchargé\n\033[0m"
oisd >> $dir1
printf "\033[0;33;4mFichier 'oisd-basic' téléchargé\n\033[0m"
echo
grep -E '^([0127]+.0.0.[01]|^::.)' $dir1|sed '/[[:upper:]]/d'|tee $dir2 1>/dev/null
printf 'server:\n'|tee $dir3 1>/dev/null
awk '{print "local-zone: \""$2"\" always_refuse"}' $dir2|sort -g|uniq|tee -a $dir3 1>/dev/null
nb_ad1=$(grep -E '^local-zone' "$dir3" -c)
nb_ad2=$(grep -E '^local-zone' "$dir4" -c)
printf "\033[0;36;1m** ${nb_ad1} adresses peuvent être bloquées par Unbound (${nb_ad2} actuellement) **\n\033[0m"
printf "\033[3;31;1m:: Sauvegarder la liste de blocage créée vers '${dir4}' ? [O/n] : \033[0m"; read var
if [[ $var =~ ^[nN] ]]; then
rm $dir1 $dir2 $dir3
printf "\033[3;31;3m=> La conversion a été abandonnée.\n\033[0m"
exit 1
elif [[ ! $var =~ ^[nN] ]]; then
if sudo true; then
echo
sudo cp $dir3 $dir4; sudo systemctl restart unbound.service
printf "\033[0;36;3mUn petit extrait du fichier généré :\n\033[0m"
head -5 $dir4; rm $dir1 $dir2 $dir3
printf "\033[3;32;3m=> La conversion et la sauvegarde ont été un succès. À bientôt.\n\033[0m"
exit 0
else
rm $dir1 $dir2 $dir3
printf "\033[3;31;1m=> Ce script doit être lancer en tant que root.\n\033[0m"
exit 2
fi
fi
Ce fichier n'était pas prévu d'être sur le web mais vous pouvez l'utiliser si vous le souhaitez.
Attention, la liste 'no-google' va bloquer l'intégralité des domaines de
. Si vous avez une utilité à utiliser leurs services, il faudra la supprimer ou en rajouter une autre.
Pour les listes à rajouter, il faudra veiller à ce que celle-ci ne contiennent pas les adresses localhost, sinon il y aura comme un problème
Merci bien papajoke.