Au lieu de trouver les problèmes de lenteur, vire ces pubs !
Le code ci dessous, télécharge la liste des principales centrales de pubs de la planète (http://pgl.yoyo.org/adservers/serverlist.php) et les filtre via ton serveur DNS (avec la technique du RPZ: response policy zone)).
C'est simple, rapide et très efficace.
Pour activer les RPZ dans bind/named, ajouter (dans la secion options)
response-policy { zone "ad-server-list";};
Puis , à la fin du fichier de conf:
1 2 3 4 5 6
| zone "ad-server-list" {
type master;
file "/etc/namedb/working/ad-server-list.rpz.zone";
allow-query {none;};
zone-statistics yes;
}; |
Le script de téléchargement des données:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #!/bin/csh -f
#
# updateur pour zone adServerList
#
cd /etc/namedb/working/ || exit 1
if ( ! -f ad-server-list.rpz.zone ) then
/usr/bin/touch ad-server-list.rpz.zone
endif
set TMPLIST=`mktemp "/tmp/ad-server-list.rpz.zone.XXXXXXX"`
set NewLIST=`mktemp "/tmp/ad-server-list.rpz.zone_new.XXXXXXX"`
## crée un SOA pour la zone
cat << __HEADER__ > "${NewLIST}"
\$TTL 300s
@ SOA LOCALHOST. dns-menteur.ad-server-list (`date +%Y%m%d%H` 1h 15m 30d 2h)
NS LOCALHOST.
; Database file ad-server-list.rpz.zone for ad-server-list zone.
__HEADER__
# récupère, met en forme, test et recharge la zone (a faire une fois ou 2 par semaines).
/usr/bin/fetch -q -o "${TMPLIST}" 'http://pgl.yoyo.org/adservers/serverlist.php?hostformat=bindconfig;showintro=0' \
&& /usr/bin/fgrep -v google-analytics.com < "${TMPLIST}" > /tmp/adserverlist_google_drop.$$ \
&& /usr/bin/fgrep -v www-google-analytics.l.google.com < /tmp/adserverlist_google_drop.$$ > "${TMPLIST}" \
&& /usr/bin/fgrep null.zone.file "${TMPLIST}" \
| /usr/bin/sed -e 's|^zone "||' \
| /usr/bin/sed -e 's|" {.*| CNAME .|' \
| /usr/bin/expand -t 45 >> "${NewLIST}" \
&& /usr/bin/cmp -s "${NewLIST}" ad-server-list.rpz.zone
# toutes les étapes ci dessus, ont été imbriquées avec un ET (&&) ; donc si le status de la dernière
# commande qui c'est bien exécutée est à 0 (ce qui signifie OK); on peut mettre à jour :
if ( $status > 0 ) then
echo ">> UPDATING ad-server-list.rpz.zone"
/bin/mv -f ad-server-list.rpz.zone ad-server-list.rpz.zone.OLD
/bin/mv "${NewLIST}" ad-server-list.rpz.zone
chmod 644 ad-server-list.rpz.zone
/usr/sbin/rndc reload ad-server-list \
/usr/bin/xz -f ad-server-list.rpz.zone.OLD
else
echo ">> Not UPDATING ad-server-list.rpz.zone"
endif
echo OKDAC
/bin/rm -f "${TMPLIST}" /tmp/adserverlist_google_drop.$$ "${NewLIST}" |
Partager