This commit is contained in:
Yann Verry 2022-04-24 17:59:42 +02:00
parent 8a5593082d
commit 98ccdb4aac
Signed by: yann
GPG key ID: EB9E679A66B8C7A1
4 changed files with 143 additions and 24 deletions

View file

@ -6,7 +6,7 @@ theme: PaperMod
defaultContentLanguage: fr
languages:
en:
languageName: ":uk:"
languageName: ":gb:"
languageAltTitle: English
title: "Yann Verry | My blog"
homeInfoParams:
@ -15,10 +15,10 @@ languages:
fr:
languageName: ":fr:"
languageAltTitle: French
title: "Yann Verry | Mon blog"
title: "Yann Verry | Mon blog"
homeInfoParams:
Title: "Bonjour à vous \U0001F44B"
Content: "Il n'y a pas de magie, seulement des messages d'erreurs. Voici mon blog personnel sans prétention"
Content: "Il n'y a pas de magie, seulement des messages d'erreurs"
enableRobotsTXT: true
buildDrafts: false
@ -32,7 +32,7 @@ minify:
params:
env: production # to enable google analytics, opengraph, twitter-cards and schema.
title: Yann Verry
description: "Blog Yann Verry"
description: "Blog de Yann Verry"
keywords: [Blog, Yann Verry]
author: Me
# images: ["https://20181125_092822-PANO.jpg"]
@ -53,6 +53,8 @@ params:
hideSummary: false
showtoc: false
tocopen: true
assets:
disableFingerprinting: true
assets:
# disableHLJS: true # to disable highlight.js
@ -73,7 +75,10 @@ params:
url: "https://twitter.com/yverry"
- name: gitea
url: "https://git.verry.org/"
- name: rss
- name: RSS
url: "index.xml"
- name: Me
url: "https://verry.org"
editPost:
URL: "https://git.verry.org/yann/yann.verry.org/content"
@ -95,7 +100,7 @@ menu:
- identifier: tags
name: Tags
url: /tags/
weight: 20
weight: 1
outputs:
home:

View file

@ -1,16 +0,0 @@
+++
author = "Yann Verry"
date = 2018-06-03T12:05:53Z
description = ""
draft = false
image = "__GHOST_URL__/content/images/2018/06/9251674532_91cc053088_o.jpg"
slug = "coton"
title = "Cotton"
+++
{{< figure src="__GHOST_URL__/content/images/2018/06/3932158214_13b108d26c_b.jpg" >}}

View file

@ -0,0 +1,130 @@
+++
author = "Yann Verry"
categories = ["dns"]
date = 2022-01-15T23:27:45Z
description = "NXDOMAIN on trackers!"
draft = false
image = "lie_to_me.png"
slug = "rpz"
tags = ["dns"]
title = "DNS RPZ: Lying properly"
+++
![lie to me](lie_to_me.png)
Make a lying DNS is not new. This feature exist long time ago. Many known stories exist, such as the famous red hand that make popular by public this technic.
A list was build by state, secretly release to French ISP. We ear about protect measure ask by major, terrorism etc ...
## But if not, we can make things for ourselves?
Yes of course ! like filtering upstream everything that advertising, ad tracking, telemetry a little too talkative or the communication of your camera stamped chineese at 15€ bought on aliexpress which is much too talkative on a thing that ends in _.cn._ Ok, ok, typing on China is so easy but you get the idea.
This is not a magic solution far from it. Websites where you are the product use countermeasures to avoid DNS blocking because ads was distributed directly from the servers.
# Under the hood
Tout d'abord il faut posséder son propre serveurs récursif chez sois. C'est facile avec un mini ordinateur, une VM sur votre freebox delta ou même en local sur votre ordinateur.
Plusieurs méthodes éxistent comme l'override de la zone mais ça casse _DNSSEC_ ce qui est mal.Dans unbound on va forcer un/des enregistrements via les options _local-data_ ou _local-zone_.Une zone complète ou j'avais plusieurs milliers de lignes :
```
wc -l /etc/unbound/unbound-nxdomain.blacklist
33073 /etc/unbound/unbound-nxdomain.blacklist
```
avec dedans des choses comme ceci :
```
local-zone: "ibs.lgappstv.com" always_nxdomain
local-zone: "eic-ngfts.lge.com" always_nxdomain
local-zone: "s.sh" always_nxdomain
local-zone: "m2.ai" always_nxdomain
local-zone: "cw.nu" always_nxdomain
local-zone: "6m.pl" always_nxdomain
local-zone: "ip.ro" always_nxdomain
local-zone: "rs.sh" always_nxdomain
```
Mais c'est pas ouf non ? Non, pas du tout.
Il est donc l'heure d'avoir quelque chose de plus solide, standard qui va fonctionner partout. Une pointure s'y colle côté [IETF](https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-dns-rpz-00) pour faire le boulot, à savoir Paul Vixie (entre autres).
L'idée est donc de créer une zone DNS presque classique qui va contenir tout ce qu'on souhaite modifier avec la possibilité de renvoyer du _NXDOMAIN_, une réponse de notre choix comme _::1_ ou le legacy _127.0.0.1_ pour par exemple éviter des messages d'erreur comme le fait ma TV LG. C'est donc modulable en fonction de ce qu'on souhaite
Si on fait les choses bien on va catégoriser plusieurs listes et les aligner une à une dans la configuration.
Cette zone se matérialise comment ? Voici le fichier de la zone en question, un petit clin d'œil :
```
; Beginning of the zone, some mandatory values
$TTL 1H
@ SOA lie.to.me. red.pills (42 2h 30m 30d 1h)
NS blue.pills.
lgtvsdp.com CNAME .
*.lgtvsdp.com CNAME .
```
On va donc ici dire de répondre **_NXDOMAIN_** grâce au points final.
Comment distribuer cette zone au plus grand nombre ? J'utilise unbound et il permet de récupérer ses zones d'une manière simple à savoir HTTPS. C'est du DNS la seconde plus évidente est de faire une zone DNS récupérable via un transfert de zone (IXFR).J'ai préféré HTTP car plus simple dans mon setup actuel. La mise à jour est plus simple. C'est donc parti, je fait un nouveau vhost
**[https://rpz.verry.org](https://rpz.verry.org )**
avec une belle page indéxé qui contient plusieurs fichiers de RPZ
# Unbound side
Côté DNS récursif, ici unbound il faut tout d'abord activer deux modules :
```
server:
module-config: "respip validator iterator"
```
Et ensuite on déclare en fin de fichier les multiples RPZ souhaités :
```
rpz:
name: "oisd"
url: https://rpz.oisd.nl
rpz-log: yes
rpz-log-name: "rpz-oisd"
rpz:
name: "youtube"
url: https://rpz.verry.org/youtube.zone
rpz-log: yes
rpz-log-name: "rpz-youtube"
rpz:
name: "adaway"
url: https://rpz.verry.org/adaway.zone
rpz-log: yes
rpz-log-name: "rpz-adaway"
rpz:
name: "easylist-full"
url: https://rpz.verry.org/easylist.zone
rpz-log: yes
rpz-log-name: "rpz-easylist"
rpz:
name: "easylist-fr"
url: https://rpz.verry.org/easylist_fr.zone
rpz-log: yes
rpz-log-name: "rpz-easylistfr"
```
Nous avons plusieurs section, pour chaque mention de _rpz_ une configuration différente qui sera évalué de haut en bas.On lui donne un petit nom, l'url pour la récupérer. Afin d'avoir du logging on indique le nom à afficher ce qui sera pratique pour savoir quel RPZ rentre en action.
Côté logging ça donne quelque chose du genre :
```
info: RPZ applied [rpz-adaway] currency.prebid.org. nxdomain
```
Et voila !
# La suite ?
Automotiser la génération des fichiers situé sur rpz.verry.org. Aujourd'hui j'ai récupéré plusieurs listes un peu n'importe comment, fait des `grep/sed/awk` ce qui n'est pas du tout optimal, ensuite il faut créditer les sources cleaner les doublons et ajouter une petite cron pour faire bien dans un projet git

View file

@ -2,7 +2,7 @@
author = "Yann Verry"
categories = ["dns"]
date = 2022-01-15T23:27:45Z
description = ""
description = "NXDOMAIN sur les trackers !"
draft = false
image = "lie_to_me.png"
slug = "rpz"
@ -53,7 +53,7 @@ L'idée est donc de créer une zone DNS presque classique qui va contenir tout c
Si on fait les choses bien on va catégoriser plusieurs listes et les aligner une à une dans la configuration.
Cette zone elle se matérialise comment ?Voici la zone en question, un petit clin d'œil :
Cette zone se matérialise comment ? Voici le fichier de la zone en question, un petit clin d'œil :
```
; Beginning of the zone, some mandatory values