Archives 2017
#Gnu/Linux, Planet Libre, DNS, jeedom, pfsense
REVERSE PROXY - PFSENSE - JEEDOM
Quelques usages dans l'ordre d'importance:
- Ma domotique avec l'excellent JEEDOM
- Mes caméras
- Mon NAS sous Open Media Vault
- Et pas mal d'autres choses
- Comment acceder avec une seule adresse IP à plusieurs services en interne sur le même port ? ( https 443 , http 80)
- Comment gérer la sécurité ? ( est ce bien sécurisé d'accéder en direct à vos services ? Jeedom ouvert en direct sur internet ? ) ( en cas d'intruision vérifier chaque log de chaque service )
- Certains services ne sont pas sécurisable en https , est ce sérieux d'y accéder directement depuis l'extérieur sans intermédiaire ?? ( mettre un VPN a chaque fois ???)
- Comment gérer la performance ? des choses ne pourraient t'elle pas être compréssées ou mise en cache pour aller plus vite ?
Et bien tout cela, c'est le role du REVERSE PROXY!
cf wikipedia
Le reverse proxy va vous permettre avec un seul équipement d'accéder à plusieurs services Web internes en en faisant qu'une seule redirection de port
Le reverse proxy va ajouter de la sécurité, car il va vous permettre de ne plus laisser vos services web accessible en fontal sur internet
Le reverse proxy va ajouter de la sécurité, car il va vous permettre de chiffrer les flux écoutables sur internet, même vers des services Web qui ne sont pas sécurisés
Le reverse proxy va ajouter de la performance car il va mettre en cache des éléments statiques et va même pouvoir compresser des flux.
Le reverse proxy sur mon réseau privée.
Quand j'ai réfléchi à comment implémenter mon Reverse proxy j'ai voulu ajouter un peu de sécurité.Je trouvait qu'un reverse proxy accessible depuis internet, avait plutot sa place dans une DMZ
En effet il est plus sur de positionner son RP dans une zone qui n'a pas un full accès à tout votre réseau.
Je voulais que le RP n'ai accès qu'aux services qu'il est censé "reverse proxifier"
C'est à dire les ports 443 ou 80 de mes services internes
Voiçi le schéma simplfié de mon réseau focusé sur le RP
J'ai la chance d'avoir choisi un PFSENSE comme routeur / Firewall
De plus j'avais pensé les choses au départ.
Mon PFSENSE est installé sur un ALIX 2D13 ( 3 ports Ethernet)
Je l'utilisais pour le WAN et le LAN, il me restait donc un port pour la DMZCoté Gandi:
il faudra bien sur créer les entrées DNS qui pointe vers l'ip publique de votre Box
Pour ma part cam et Maison
Coté PFSENSE:
on remarque que je n'utilise aucune IP dans mes Virtual Hosts.
Que des FQDN, le but et d'utiliser que la fonction DNS
Je vais utiliser la technique du SPLIT DNS
Même FQDN mais résolu différement en fonction de la requête:
J'ai donc utilisé mon PFSENSE en tant que resolveurs DNS
Ce qui est très pratique, car je peux lui donner des noms qu"il resoudra avec une IP locale pour mes équipement interne.
1 - J'ai crée activé ma 3ème interface et je l'ai nommée DMZ2 - Renseigner l'IP de cette interface : Ce sera la passerelle du reverse Proxy
3 - J'ai utilise une reservation DHCP statique pour fournir l'IP au Raspberry
4 - J'ai créer 2 entrée DNS dans mon resolveur PFSENSE ' cela marche aussi si vou sutilisez PFSENSE en Redirecteur)
cam.monfomaine.fr ---> Pour la caméra
maison.mondomaine.fr ---> Pour Jeedom
Le Split DNS est simple voiçi uin schéma de ce qui va se passer.
Pas besoin de paramétrer des règles de routage PFSense s'occupe de tout.
Il faut par contre paramétrer des règles de NAT et de Firewall
NAT : Tous ce qui arrive sur le port 443 est natté vers le RP
Firewall : On ouvre les accès du RP vers les port 443 de Jeedom et 80 de la caméra
On autorise ausi le RP à faire des requetes DNS vers PFSENSE
Attention : PFSENSE m'avait créer une regle de NAT Unbound qui me remplacait l'ip source par l'ip de la DMZ
Du coup dans les logs du reverse proxy on ne voyais que l'ip de la passerelle, ce qui n'est pas pratique pour analyser
Bienn désactiver la regle qui dit Sque tout ce qui vient de l'interface DMZ soit natté par DMZ Adresse. ( dernière ligne)
Voilà coté PFSENSE
Installation du reverse Proxy:
J'ai choisi d'utiliser un équipement tiers : un Raspberry Pie 3j'ai commencé par une installation classique de Rapian strech Lite ( pas besoin d'interface graphique)
https://www.raspberrypi.org/downloads/raspbian/
Je vous conseille d'utiliser d'Etcher : qui est très simple à prendre en main :
Je ne détaille pas l'installation de raspian
Placer une IP Fixe sur le raspberry
Renseigner comme passerelle, l'adresse IP du PFSENSE ( interface DMZ)
Renseigner le DNS qui sera le pfsense.
Une fois le raspian installé on se lance dans l'installation du RP:je pars du principe que vous avez déjà généré un certificat SSL chez un registrar
Je vais détailler un peu ce que j'ai fait pour un Certificat Gandi.
Je passe très vite sur la création du certificat Gandi ; Tout est expliqué sur le site
1 - Achat du certificat Gandi
2 - Création du CSR à fournir à Gandi en ligne de commande
openssl req -nodes -newkey rsa:2048 -sha256 -keyout maison.key -out maison.csr
3 - Copie du CSR sur le site de gandi4 - Achat du certificat
5 - Validation du Certificat par ajout d'enregistrement CNAME dans votre DNS
6 - Récupération des certificats
7 - Vous devez avoir 4 fichiers :
GandiStandardSSLCA2.pem maison.crt maison.csr maison.key
8 - Copier ces fichiers dans par exemple :/etc/ssl/
Pour ma part j"ai placé les fichiers de certificats dans /etc/ssl/
Pour ma caméra même principe:sudo apt-get install apache2
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
Le virtual host pour Jeedom
vi /etc/apache2/sites-available/rp.conf
<VirtualHost *:443>
ServerName maison.domaine.fr
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/ssl/maison.crt
SSLCertificateKeyFile /etc/ssl/maison.key
SSLCertificateChainFile /etc/ssl/GandiStandardSSLCA2.pem
SSLVerifyClient None
HostnameLookups off
ProxyRequests off
ProxyVia off
ProxyPass / https://maison.domaine.fr/
ProxyPassReverse / https://maison.domaine.fr/
<Proxy *>
Order allow,deny
allow from all
</Proxy>
ErrorLog ${APACHE_LOG_DIR}/rproxy_error.log
CustomLog ${APACHE_LOG_DIR}/rproxy_access.log combined
</VirtualHost>
vi /etc/apache2/sites-available/zcam.conf
<VirtualHost *:443>
ServerName cam.domaine.fr
SSLEngine on
SSLProxyEngine On
#SSLProtocol All
SSLCertificateFile /etc/ssl/maison.crt
SSLCertificateKeyFile /etc/ssl/maison.key
SSLCertificateChainFile /etc/ssl/GandiStandardSSLCA2.pem
SSLVerifyClient None
HostnameLookups off
ProxyRequests off
ProxyVia off
ProxyPass / http://cam.domaine.fr/
ProxyPassReverse / http://cam.domaine.fr/
<Proxy *>
Order allow,deny
#Deny from all
allow from all
</Proxy>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/rproxy_error.log
CustomLog ${APACHE_LOG_DIR}/rproxy_access.log combined
</VirtualHost>
cd /etc/apaches/site-available
a2ensite rp.conf
a2ensite zcam.conf
/etc/init.d apache2 reload
Voila notre Reverse proxy est configuré
Si tout est OK depuis l'extérieur on accéde bien à notre Jeedom et à notre Cam en passant
Par le Reverse Proxy
Si tout est OK depuis l'interne on accéde bien à
notre Jeedom et à notre Cam en passant
en direct sur le lan ( DNS Résolu en local par pfsense)
Par contre vous aurez remarqué qu'une erreur de certificat est présent sur la cam
Ce qui est normal car j'utilise le même certificat dans les 2 virtual Hots
Et ce certificat à été grée pour maison.mondomaine.fr et non cam.mondomaine.fr
Cela n'est pas grave, j'ai confiance en mon certificat, et le but est de chiffrer les flux vers ma
caméra.
#Gnu/Linux, Planet Libre, DNS
- DNS MENTEURS - - CENSURE SUR INTERNET -
De nos jours tout Internet est basé sur les noms de domaines.
Sans le système DNS quasiment plus rien ne fonctionnerait.
Pour rappel selon Wikipédia:
Le Domain Name System (ou DNS, système de noms de domaine) est un service permettant de traduire un nom de domaine en informations,
notamment en adresses IP .
Autrement dit quand vous tapper sur http://blog.info16.fr, votre machine va tenter de transformer ce nom en Adresse IP.
Grace à cette addresse votre système va pouvoir aller communiquer avec l'adresse IP de mon blog.
La structure et le fonctionnement du DNS
Le système DNS utilise une structure en arbre.
Tout commence depuis les serveurs Racines ( Root ) : Officiellement
il y en a 13 ( 13 adresses IP) , mais réèllement il y en a plus
de 130 répartis dans le monde
Les serveurs racines utilisent la technologie réseau unicast ; selon votre localisation, l'adresse IP va être routée vers un serveur
le plus prêt de la requete.
sources: https://fr.wikipedia.org/wiki/Serveur_racine_du_DNS
Puis les serveur de TLD ( .fr, .com, ...) ou de premier niveau
Puis les serveurs de second niveau
Puis les serveur de troisième niveau
etc ...
Autrement dit une requete récursive vers ce blog donnerait:
1. Quelle est l'adresse IP de blog.info16.fr ? ( Les serveurs racines voit toujours la requête complète)
2. les serveurs racines répondent la liste des serveurs faisant autorité pour le .FR
3. Le client DNS interroge alors un des serveurs faisant autorité pour .FR en lui demandant "quelle est l'adresse IP de blog.info16.fr"
4. Un des serveurs faisant autorité pour .FR répond la liste des serveurs faisant autorité pour le domaine info16.fr
5. Le client DNS interroge alors un des serveurs faisant autorité pour info16.fr en lui demandant "qu'elle est l'adresse IP de blog.info16.fr"
6. le serveurs faisant autorité pour .info16.fr répond la ou les adresses IP correspondantes au nom blog.info16.fr
On le voit très bien en utilisant la commande dig + Trace
Le resolveur
Cet enchainement de questions/réponses est ce que fait un résolveur
Le résolveur va de plus mettre en cache les réponses trouvées afin de pouvoir les fournir plus rapidement
la prochaine fois qu'on lui demandera. ( le temps du TTL du DNS)
Cela permet de ne pas de réinterroger tous les racines et les serveurs faisant autorités à chaque fois.
Cela explique que les DNS Racines ne sont pas très chargés car la plupart des requetes clients sont fournies via des résolveurs
qui ont la réponse en cache.
Plus le résolveurs est sollicité plus son cache sera fourni et moins il interrogera les serveurs racines.
Source www.afnic.fr
Il y a donc deux types de serveurs DNS:
- Les Serveurs faisants autorité ( à différents niveaux)
- Les resolveurs ( qui connaissent en durs les IP des racines)
Les serveurs faisant autorité ont l'autorité sur un domaine: c'est-à-dire que la réponse ne fait pas appel à un autre serveur ou à un cache
Les resolveurs sont des serveurs qui vont intérroger les serveurs faisant autorité et mettre en cache les réponses pour les fournir à ses clients.
La plupart des utilisateurs de l'internet on
peu ou pas conscience de ce fonctionnement.
L'utilisateur LAMBDA utilise sa box internet fourni par son FAI et navigue sans se poser de question.
La plupart du temps les box internet utilisent les résolveurs du Fournisseur d'accès.
PAr exemple :
Free:
212.27.40.240
212.27.40.241
Orange:
80.10.246.2
80.10.246.1291
SFR:
109.0.66.10
109.0.66.20
Et beaucoup d'autres...
http://www.ariase.com/fr/guides/adresses-dns.html
La censure via les DNS Menteurs
Mais alors mon FAI peut me renvoyer n'importe quelle adresse ? quand j'interroge un domaine ?
OUI mon capitaine.
D'ailleurs si vous suivez l'actualité, des décrets français permettent d'obliger les FAI à bloquer, filtrer des sites internet
Sur décision de justice.
La réponse la plus simple des FAI est d'utiliser le mensonge DNS.
Par exemple cela à été le cas sur des sites de streaming, Torrent, etc ..
T411, Pirate Bay, libertyland, voirfilm ...
Mais aussi des sites islamistes, propagandes, etc ...
Vous allez me dire, oui... c'est pour notre sécurité, et c'est normal de bloquer ce qui est illégal.
On peut le voir comme cela en effet, si vous arrivez à dormir avec cela et que cela ne vous gène pas que
ce qu'on vous affiche à l'écran est ce qu'a décidé votre FAI et votre gouvernement, alors continuez comme cela.
Il faut des moutons :)
Pour ma part je milite pour la neutralité du NET depuis longtemps.
La Quadrature du NET en parle beaucoup mieux que moi : https://www.laquadrature.net/fr/neutralite_du_Net
On peut imaginer alors que ces résolveurs peuvent vous mentir à chaque instant et vous
envoyer l'adresse IP qui leur plait.
Pour par exemple:
- Bloquer des sites
- Vous envoyer sur des adresses publicitaires
- Monetiser des sites
- ...
Plus en détail, bortzmeyer.org. explique que « certains FAI prétendent mettre en place des DNS menteurs pour « le bien des clients »
alors qu'en réalité, ils sont poussés par des intermédiaires qui leur proposent de « monétiser » l'audience du site Web ainsi pointé, comme l'a bien expliqué le directeur technique de Free).
La preuve du mensonge.
Vous allez me dire; oui mais comment prouver que mon résolveur me ment ?
En effet, il y a des cas facile et d'autres nons.
Dans certains cas, la résolution d'un nom de domaine par un resolveur menteur aboutit à la réponse 127.0.0.1
qui est votre adresse locale ce qui explique une page blanche ou une erreur dans votre navigateur.
Dans d'autres cas, le DNS va vous renvoyer un code erreur
Dans d'autre le DNS va vous envoyer sur une page de bloquage ou une publicité.
Exemple : Allez avec votre navigateur sur http://streamcomplet.me/ ( juste pour voir, le téléchargement d'oeuvres protégées est illégales)
Avec mon résolveur:
Pour ma part en utilisant mon propre résolveur ( je vous en parlerait plus loin), le site s'affiche:
D'ailleurs il me redirige vers un autre domaine, car le site essaye déjà de contourner la censure
La résolution DNS donne les adresses IP du FQDN
Moi@linux:~# dig streamcomplet.com +short
104.28.6.68
104.28.7.68
Avec le résolveur de mon FAI
Avec le résolveur de mon FAI ( je vous laisse deviner lequel)
Page blanche.
La résolution DNS renvoi 127.0.0.1
root@NAS:~# dig streamcomplet.com +short @212.27.40.241
127.0.0.1
La preuve avec les sondes ATLAS:
Il est difficile d'avoir une vue de l'internet depuis n'importe quel endroit du monde.
Qui me dit que l'internet est le même si je navigue depuis La France ou ou depuis l'Allemagne.
Pour cela il existe le projet RIPE NCC , qui à un réseau de sonde Atlas.
Selon mon grand gourou Stéphane BORTZMEYER
Le réseau des sondes Atlas, créé et géré par le RIPE-NCC, couvre l'Europe (et au delà) de petites machines connectées à l'internet et qui effectuent en permanence des mesuresdiverses, qui servent par exemple de base aux très intéressants articles des RIPE Labs. Cela permet par exemple de détecter une bogue présente dans beaucoup de routeurs. Les Atlas ne savaient faire au début que des mesures commandées par le RIPE-NCC. Depuis quelque temps, les utilisateurspeuvent également commander des mesures selon leur goût, un système connu sous le nom d'UDM, User-Defined Measurements.
Ces petites sondes, tout le monde peut faire la demande d'en héberger et de la brancher sur sa connection internet.
Si RIPE NCC accepte votre demande vous recevrez votre petite sonde, qui contribuera à sonder la qualité de l'internet.
Héberger cette sonde vous permet de gagner des crédits chez https://atlas.ripe.net/
Ces crédit vous permettent de lancer des mesures internet depuis le site mais aussi depuis leurs APIs
Des scripts disponibles sur Github vous permettent d'utiliser ces API:
https://github.com/RIPE-Atlas-Community/ripe-atlas-community-contrib
J'ai la chance d'héberger une sonde, et donc de pouvoir faire ces mesures.
Parmis ces mesures on peut mesurer les DNS.
Reprenons l'éxemple de streamcomplet.com
En FRANCE
Nous allons utiliser le script atlas-resolve
% atlas-resolve --country FR --requested 100 streamcomplet.com
[ERROR: SERVFAIL] : 10 occurrences
[104.28.6.68 104.28.7.68] : 47 occurrences
[ERROR: NXDOMAIN] : 7 occurrences
[127.0.0.1] : 35 occurrences
[TIMEOUT(S)] : 1 occurrences
Test #9327211 done at 2017-09-23T10:15:02Z
on lui demande, "résoud moi streamcomplet.com, depuis 100 sondes ATLAS hébergées en FRANCE"
On obtient:
47 bonnes réponse sur 100 requetes ...
Ce domaine est donc en partie "censuré" en France
En ALLEMAGNE
Nous allons utiliser le script atlas-resolve
% atlas-resolve --country DE --requested 100 streamcomplet.com [104.28.6.68 104.28.7.68] : 100 occurrences Test #9327213 done at 2017-09-23T10:16:08Z
on lui demande, "résoud moi streamcomplet.com, depuis 100 sondes ATLAS hébergées en FRANCE"
On obtient:
100 bonnes réponse sur 100 requetes !!!
Ce domaine ne subit pas de censure en Allemagne.Mais alors !! Qu'est ce que je dois faire ??
Les Resolveurs publics
Si vous vous interessez un peu à la question, les premières réponses qu'on trouve
sur le NET c'est:
Les DNS de ton FAI ce sont des menteurs, utilise les DNS de Google ; les fameux 8.8... !!! Eux ils te respectent
D'autres te diront Utilise ceux de Open DNS c'est les meilleurs et ils sont OPEN
D'autres réponses un peu moin bêtes vous recommande des Résolveurs associatif qui revendiquent la liberte du NET
Tout cela se discute sur plusieurs points:
Google --> Vous êtes sérieux ? certes ils ne sont pas connus pour mentir, mais encore cela peu changer
Mais vous vous doutez bien que c'est vous le produit, et que vos requetes seront utilisées d'une manière ou d'une autre.
Ceci dit vous utilisez surement leur moteur de recherche . ils savent dejà tout de vous.
Du moment que vous en êtes conscient ...
OpenDNS --> Cela pourrait paraitre une bonne idée à première vue, mais leurs intentions ne sont pas différentes
de celle de Google.
Ils vont même a vous ajouter de la Pub, quand le FQDN n'existe pas.
Tout cela est réglable dans leur interface, mais ma confiance en eux est toute relative.
NB; L'utilisation de OPEN DNS en tant que filtrage parentale peut apporter une solution à mondre cout
Si on est conscient du risque pourquoi pas.
Les DNS Associatifs et les autres --> Certains DNS associatifs s'engagent sur la pureté des résolutions de nom (pas de censure...etc.)
comme les DNS proposés par FDN : 80.67.169.12 et 80.67.169.40.
pourquoi pas, ce serait le moins pire.
Mais encore une fois nous ne savons pas à 100% qu'ils respecteront leurs engagements,et si les resolveurs ne disparaitront pas du jour au lendemain
Il faut aussi voir le coté performance.
En règle général les resolveurs de vos FAI seront les plus rapides ( mais pas toujours)
Ils sont sur le même réseau que vous et sont donc censé etre plus performants.
Si vou ssouhaitez utiliser des résolveurs ouverts publics n'hésitez pas à tester leur temps de réponses avec dig par exemple
;; Query time: 59 msec
;; SERVER: 212.27.40.241#53(212.27.40.241)
;; WHEN: Sat Sep 23 14:54:36 CEST 2017
;; MSG SIZE rcvd: 138
Avoir son propre résolveur.
J'en suis arrivé à la conclusion, que la moins pire des solutions est
d'utiliser son propre resolveur
Cela demande un peu ( très peu) de travail, mais c'est le seul moyen d'éviter les problèmes de DNS Menteur et
d'exploitation de vos requetes DNS
Le tout en gardant une meilleure performance.
Il y a plusieurs outils qui vous permettent de monter votre résolveur
Les plus connus : Unbound et BIND
Unbound est pas mal car beaucoup plus léger que BIND.
Je ne vais pas écrire d'article sur comment monter un résolveur; Il y en a plein sur le NET.
Ce résolveur va lui même réaliser les requetes récursive depuis les racines et les mettre en cache
PAr conséquent, pas de censure, et vous maitrisez vos requetes DNS
de plus la performance est au rendez vous, puisque si votre resolveurs est local, la réponse
en cache sera quasi instantanée
Exemple d'une requete depuis un de mes postes clients, qui utilise mon resolveur local unbound
Premiere requete elle n'est pas en cache --> 176ms
Moi@NAS:~# dig www.info16.fr
;; QUESTION SECTION:
;www.info16.fr. IN A
;; ANSWER SECTION:
www.info16.fr. 3600 IN A 212.129.3.40
;; AUTHORITY SECTION:
info16.fr. 10800 IN NS b.dns.gandi.net.
info16.fr. 10800 IN NS c.dns.gandi.net.
info16.fr. 10800 IN NS a.dns.gandi.net.
;; Query time: 176 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Sat Sep 23 15:06:31 CEST 2017
;; MSG SIZE rcvd: 119
On relance la même requetes --> Elle est instantanée 0ms
Moi@NAS:~# dig www.info16.fr
;; QUESTION SECTION:
;www.info16.fr. IN A
;; ANSWER SECTION:
www.info16.fr. 3592 IN A 212.129.3.40
;; AUTHORITY SECTION:
info16.fr. 10792 IN NS b.dns.gandi.net.
info16.fr. 10792 IN NS c.dns.gandi.net.
info16.fr. 10792 IN NS a.dns.gandi.net.
;; Query time: 0 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Sat Sep 23 15:06:39 CEST 2017
;; MSG SIZE rcvd: 119
Il existe tout de même des inconvénients non négligeables.
Vous ne bénéficier pas de l'énorme cache du résolveur de votre FAI
Sur l'ensemble des requetes de tous ses clients, le cache emmagazine les informations et les fournis
sans faire de requetes récursive.
Vous solliciterez plus les serveurs racines et contribuerez à leur montée en charge.
Mais a mon avis cela reste la meilleures solution à l'heure actuelle.
Pour finir, c'est vrai que monter son resolveur, n'est pas toujours évident.
Surtout pour le grand public ( les entreprises c'est plus facile, elles bénéficient déjà d'infrastructures serveurs))
Avoir un petit serveur qui tourne dans un coin, ou un vrai serveur dédié demande de l'investissement et du temps
Pour ma part j'ai trouvé le compromis qui me convient : Cela est intégré dans mon routeur.
J'utilise ma Box en mode Bridge, ce qui me permet de mettre un vrai routeur / Firewall en frontal de ma connexion.
Pour cela j'utilise le magnifique PFSENSE que j'ai monté dans un petit boitier ALIX:
Dans PFSENSE, le choix de faire un DNS Forwarder ou Resolver est possible: ( d'ailleurs PFSense utilise Unbound)