walk-hoary

Archives pour la catégorie Internet

Communiquer entre l’hôte et les containers LXC

Aujourd’hui j’utilise un Raspberrry Pi comme routeur chez moi. Il me permet de me passer de la box internet et d’isoler les équipements de mon réseau avec des VLAN.

J’ai dans l’optique de rassembler différents services sur un seul hôte afin de réduire le nombre d’appareils, en commençant par Home-assistant et le système de routage/DHCP. Plus tard, ce sera d’autres service comme tvheadend qui permet de broadcaster la TNT reçue à mon domicile par une clé USB vers un serveur multimédia Jellyfin dans le cloud.

Quel hyperviseur sous Raspberry Pi ?

Pour cela, je me suis penché sur docker, mais cela ne me satisfait pas entièrement à cause des contraintes au niveau réseau qui sont souvent mal documenté ou géré par les mainteneurs des images. Proxmox était pour moi le candidat idéal, mais non supporté sur ARM64. Je me suis donc tourné vers LXC qui est la couche de conteneurisation utilisé par Proxmox. A noter que LXD convient également, il s’agit d’une implémentation plus évoluée de LXC, mais la direction de l’éditeur LXD me semble floue et incertaine et ne l’ai donc pas utilisé.

Un réseau simple

Un point important dans l’architecture est que je veux avoir accès aux différentes couches et d’une façon la plus naturelle possible, c’est à dire se rapprochant d’une architecture matérielle. Je trouve cela beaucoup plus facile à se le représenter et à l’exploiter, surtout si je dois y intervenir rarement.

Je veux par exemple, me connecter en SSH sur le RaspberryPi et rebondir en SSH sur différents containers. Et bien sachez que ce n’est pas possible naturellement sous docker ou LXC, il vous faudra créer une interface macvlan pour chaque container sur vôtre hôtes. Ça me parait beaucoup et ajoute une complexité à l’architecture que je ne veux pas.

Solution

La solution que j’ai trouvé est de se baser sur des interfaces bridges. Ainsi, les containers sont capables de communiquer avec l’extérieur mais surtout avec l’hôte.

Voici la configuration réseau du Raspberry Pi. Avec ceci, vous pourrez utiliser les liens habituels VETH avec LXC.

# /etc/network/interfaces.d/eth0
auto eth0
iface eth0 inet static
        address 192.168.0.1/24

# /etc/network/interfaces.d/br7
auto eth0.7
iface eth0.7 inet manual

auto br7
iface br7 inet static
        bridge_ports eth0.7
        bridge_fd 0
        bridge_maxwait 120
        address 10.35.7.1/24

Note : eth0.7 est une syntaxe qui vous permet d’avoir une interface qui ne communiquera qu’avec le traffic tagué VLAN 7. (Au même titre que eth0:1 vous permet d’avoir une nouvelle interface alias de eth0)

Tags: ,

Wildcard letsencrypt

Cet article vous présente comment générer un wildcard letsencrypt avec validation automatique par DNS.

Si vous l’avez déjà créé en manuel, comme moi la première fois, voyez la note « Vous avez déjà créé votre certificat en manuel ».

Voici l’environnement :

  • Un reverse-proxy qui fait terminaison SSL sous nginx 1.14
  • Un serveur DNS sous BIND9

Principe de fonctionnement

Pour valider un wildcard, letsencrypt va vérifier la présence d’une entrée TXT dans votre zone DNS au moment de la création/renouvellement du certificat.

Cette entrée TXT est ajoutée par la commande certbot car on lui aura autorisé la mise à d’un champ TXT précis via BIND. Cela peut être fait à la main de façon interactive (–manual), je ne vous le conseille pas.

Pour cela, nous allons créer une clé sur notre serveur BIND et configurer la zone pour qu’elle permette de mettre à jour une entrée TXT précise de la zone.

Cette clé sera donnée au client certbot sur notre reverse-proxy (dans un fichier credential) au moment de la création du certificat.

Configation de BIND

Sur le serveur BIND, créez une nouvelle clé, elle servira pour mettre à jour vos TXT de challenge letsencrypt. (ici certbot est le nom de la clé)

cd /etc/bind
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST certbot.

Cela va générer deux fichiers : Kcertbot.+NNN+YYYYY.key et Kcertbot.+NNN+YYYYY.key (les deux contiennent la clé, ils ne servent qu’à vous, et pourraient même être supprimés)

Collez les 4 lignes suivantes dans /etc/bind/named.conf en remplaçant XXXxXxXVOTRECLE== par votre clé contenu dans un des deux fichiers précédents.

key "certbot." {
  algorithm hmac-sha512;
  secret "XXXxXxXVOTRECLE==";
};

Ajoutez les lignes suivantes à votre configuration de zone DNS (sous debian : /etc/bind/named.conf.local) en remplaçant example.com par votre domaine.

zone "example.com" {
  [...]
  update-policy {
    grant certbot. name _acme-challenge.example.com. txt;
  };
};

Redémarrez bind avec

systemctl restart bind9

Configuration sur le reverse-proxy

Vous devez installer le paquet python3-certbot-dns-rfc2136 qui est une extension pour permettre à certbot de modifier votre zone DNS pour faire vérifier le challenge. Il en existe d’autres si vous avez des zones sur d’autres systèmes (OVH, gandi, cloudflare…)

apt install python3-certbot-dns-rfc2136

Créez un fichier qui contiendra les credentials pour certbot dans /etc/letsencrypt/dns-rfc2136-credentials-bind.ini et collez la configuration suivante en remplaçant IP_OR_DNS_OF_BIND et XXXxXxXVOTRECLE== votre hôte DNS et votre clé crée dans la section précédente.

dns_rfc2136_server = IP_OR_DNS_OF_BIND
dns_rfc2136_port = 53
dns_rfc2136_name = certbot.
dns_rfc2136_secret = XXXxXxXVOTRECLE==
dns_rfc2136_algorithm = HMAC-SHA512

Puis rendez le fichier non lisible par autre que root.

chmod 700 /etc/letsencrypt/dns-rfc2136-credentials-bind.ini

Création du certificat sur le reverse-proxy

certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/dns-rfc2136-credentials-bind.ini -d *.example.com

Vous avez déjà créé votre certificat en manuel ?

Si vous avez déjà créé votre certificat de façon interactive (avec l’option –manual de certbot) donc sans l’avoir fait avec une clé bind, pas de pannique ! Vous devez tout de même suivre cet article jusqu’à l’étape de création de certificat que vous pouvez remplacer par un renouvellement de vos certificat (cerbot renew)

Voici ce que vous devez mettre dans votre fichier cat /etc/letsencrypt/renewal/example.com.conf

[...]
[renewalparams]
[...]
authenticator = dns-rfc2136
dns_rfc2136_credentials = /etc/letsencrypt/dns-rfc2136-credentials-bind.ini

Vous devriez pouvoir lancez votre certbot renew…

Remarques

Voici quelques infos à savoir sur letsencrypt que je n’ai eu que tard :

Le renouvellement (certbot renew) se fait uniquement sur les certificats expirant à J-30. (les certificats sont signés pour 90 jours).
Ne pas oublier de révoquer un certificat avant de la supprimer pour éviter les alertes d'e-mails d'expiration envoyées par letsencrypt (certbot revoke --cert-path /etc/letxencrypt/live/example.com/cert.pem)
Évitez de créer des certificat pour des domaines différents, le renouvellement échouera si un seul domaine ne fonctionne pas.

Tester un serveur smtp

Il m’arrive souvent de devoir tester si un serveur est capable de relayer un email (ou l’inverse pour empecher l’open relay).

$telnet monserveur.exemple 25
helo nimportequoi
mail from: uneadresse@valide.exemple
rcpt to: uneautreadresse@valide.exemple
data
Tapez votre message
et terminez par une ligne comportant juste un point
quit

A chaque commande, le serveur doit vous répondre un code de retour et parfois une description. Ce code est standard, 2xx = ok (continuez), 4xx = erreur temporaire (ressayez plus tard), 5xx = erreur permanente (votre mail ne passera jamais)

Tags: , ,

Certificats pour serveurs

Cet article vous montre comment créer un certificat willcard signé par un tiers

Pourquoi un certificat ?

Parfois il m’arrive de ne pas pouvoir consulter mes emails car le réseau que j’utilise n’est pas sécurisé. J’entends par là que je ne sais pas qui est derrière et pourrait écouter mon trafic et capturer aisément mes identifiants.

J’ai donc décidé d’installer un certificat sur qth.fr. Comme la plupart de mes services sont en *.qth.fr j’ai choisis de faire un certificat willcard que j’ai fait signé par cacert. Le faire signer par autre que soit a l’avantage de pouvoir vérifier auprès de cacert que le certificat est valide. Il faut savoir que cacert est une autorité non reconnue par les navigateurs par défaut car son modele de confiance se base sur ses utilisateurs. (C’est les utilisateurs vérifient entre eux leur identité, cherchez « Key signing party » sur un moteur de recherche).

Ce serveur utilise donc les certificats de cacert ; pour installez le certificat root de cacert, rendez vous sur la page http://www.cacert.org/index.php?id=3 et cliquez simplment sur http://www.cacert.org/certs/root.crt . Attention, cela veux dire que vous acceptez tout les certificats signés par cacert !

Comment ça marche ? (grossièrement)

Pour sécuriser un site en SSL, le serveur doit obligatoirement connaitre un clée privée et un certificat publique signé. Il arrive qu’un ou plusieurs certificats intermédiaires soient nécessaires, j’en parlerais plus loin. Notez que les extensions varient d’un système à l’autre, mais on retrouve globalement KEY, CRT, CSR et PEM (ce dernier désigne en fait jusque c’est un fichier pour le chiffrement, j’utiliserais donc cette extension pour tous mes fichiers).

  • Le certificat privé « KEY » est un fichier généré que vous devez conserver et ne jamais le divulguer ! Il sera utilisé par votre serveur pour chiffrer votre trafic. Il peut être protégé par un mot de passe, libre à vous, personnellement je n’en met pas.
  • La demande de signature certificat « CSR » est un fichier généré à partir de la clé privée. ici je la crée en même temps. Elle peut être divulgué à votre tier de confiance. Elle contient diverses informations comme quels domaines il concerne, la durée de validité…
  • Le certificat « CRT » est le fichier généré par votre autorité de certification tiers.

Lorsque votre navigateur demande une page à votre serveur en SSL, ce dernier vous renvoie la réponse chiffrée avec le certificat publique signé par votre tiers. Votre navigateur peut donc vérifier que le certificat est valide auprès de l’autorité et déchiffrer la réponse du serveur.

Le certificat intermédiaire est parfois nécessaire lorsque l’autorité de certificat est inconnue de votre navigateur mais qui a pourtant été approuvé par une autre autorité, qui elle est connue de votre navigateur. Ce fichier doit donc être envoyé par le serveur en même temps que votre certificat signé. (Il peut y avoir plusieurs certificats intermédiaires).

Notez qu’il existe les certificats normaux et les certificats EV (Extended validate). Ces derniers permettent juste une vérification plus poussée de votre identification et provoque l’apparition de la barre d’adresse verte. (Sinon elle reste de la couleur normal)

Gérer un KEY et un CSR

Créer le fichier /usr/share/ssl-cert/ssleay-MONDOMAINE.cnf (un exemple se nome ssleay.cnf) et insérez ce texte que vous adapterez.

# -------------- BEGIN custom openssl.cnf -----
HOME                    = /etc/ssl/qth/
RANDFILE                = /dev/urandom
oid_section             = new_oids
[ new_oids ]
[ req ]
default_days            = 730            # how long to certify for (2yr)
default_keyfile         = /etc/ssl/qth/wildcard.qth.fr_key.pem
distinguished_name      = req_distinguished_name
encrypt_key             = no
string_mask = nombstr
req_extensions          = v3_req # Extensions to add to certificate request
[ req_distinguished_name ]
commonName              = Common Name (eg, YOUR name)
commonName_default      = qth.fr
commonName_max          = 64
countryName             = Country Name (2 letter code)
countryName_default             = FR
countryName_min                = 2
countryName_max                = 2
organizationName        = Organization Name (company)
organizationName_default        = QTH

localityName            = Locality Name (city, district)
localityName_default    = Paris

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = IDF
emailAddress            = ca-admin@localhost.com
emailAddress_max        = 40
[ v3_req ]
subjectAltName=DNS:qth.fr,DNS:*.qth.fr
# -------------- END custom openssl.cnf -----

Lancez la génération :

openssl req -batch -config /usr/share/ssl-cert/ssleay-wildcard.qth.fr.cnf -newkey rsa:2048 -out /etc/ssl/qth/wildcard.qth.fr_csr.pem

Faites signez votre CSR chez une autorité de confiance

Pour ma part j’utilise startssl qui permet de signer des certificat entre 1 et 3 ans en wildcard. Pour cela il est nécessaire d’être identifié en class 2, cela coute 59$ ce qui vous permet de signer des certificats pendant 1 an.

Donc si vous  vous démerdez bien, vous n’avez qu’a vous aqcuiter des 59$ une fois tous les 3 ans. Moi je suis partit pour 2 ans car je me suis trompé dans la génération du CSR car c’est là qu’est précisé la durée de validité. La révocation coûte 24$.

Configurez apache/nginx

Créez un virtualhost qui écoutera sur le port 443 et insérez la configuration suivante :

SSLEngine on
SSLCertificateFile /etc/ssl/qth/wildcard.qth.fr_crt.pem
SSLCertificateKeyFile /etc/ssl/wildcard.qth.fr_key.pem

Et si besoin les certificats intermédiaires (Ajoutez les si votre autorité en a car d’autres navigateurs peuvent se comporter différemment que le votre au moment de vos tests) :
SSLCertificateChainFile /etc/ssl/qth/wildcard.qth.fr_intermediate1.pem

Afficher

Depuis la version de 7 de firefox, le mot http:// n’aparait plus dans la barre d’adresse. Cela est embettant si comme moi, vous utilisez beaucoup le copier coller…

Pour le réafficher, tapez about:config dans la barre d’adresse puis passez à false la clé suivante : browser.urlbar.trimURLs

Tags: , ,

Ne donnez pas vos avis chez les revendeurs

Donner un avis chez un revendeur n’est pas objectif. Celui ci pourra le filtrer à sa guise en fonction de ses besoins.

Le comble est materiel.net où je cite :

J'autorise la société Domisys, éditrice du site www.materiel.net, à modifier, utiliser et reproduire librement mon commentaire sur toute publication et tout support électronique ou non.

Cela peut se traduire par : en gros, vous pouvez poster un commentaire, mais on peut le transformer complètement pour en changer le sens. Je trouve cela irrespectueux pour leurs clients.

Inondation de vidéos sur google

Je ne sais plus faire de recherche google !

Quel est cette nouvelle mode de donner des résultats vidéos dans une recherche google ??? Si j’ai envie de vidéo, je clique sur vidéo et si j’en veux pas je dois faire quoi ? Danser ?

Je veux bien que les contenu multimédia soient une nouvelle façon de diffuser du contenu, mais qu’elle ne me soit pas imposée en tête de recherche !

Mais bordel ! Utilisez la vidéo pour illustrer !!

Je ne parle pas des blogueurs qui parlent de leur vie, qui montre un chat qui joue, ou de votre exploit de dominos, quel est cette manie de lancer des vidéos qui dure 20 minutes pour expliquer ce qu’un texte le fait en 5 secondes ? Peut être car on ne sais plus écrire correctement ? A qui aura le plus de vidéos ? Voir sa tête partout sur le net ?

Les vidéos sont, je trouve une énorme perte de temps lorsqu’ils montre ce qu’un article le fait. Outre la quantité qu’il faille pour la stocker (et je ne parle pas de la bande passante quand une 20ène de personne lisent des vidéos en entreprise), ce qu’il y a a voir d’intéressant dure généralement quelques seconde ; soit une infime partie de la vidéo, le reste étant de la narration.

Je crois que nous avons trouvé la boite à image abrutissante de demain d’aujourd’hui.

 

Migration ADSL

Voilà, c’est décidé. Je migre ma connexion ADSL vers une offre plus transparente : OVH. J’étais chez free, je n’utilise ni TV, ni téléphone, et mon débit était anormalement déséquilibré entre services de streaming, et le « reste d’internet », à tel point de passer par un VPN pour que ça fonctionne bien.

Ma commande a été lancée mercredi soir ; ce vendredi, la demande de construction de ligne a été notifiée à France Télécom.

EDIT : 21 jours plus tard, je suis raccordé OVH. Aucune interruption constatée hormis l’échange de la box sur la prise 😉


Tags: ,

Etherpad – bloc note multi-utilisateur en ligne

Etherpad est un traitement de texte en ligne très léger à la manière de google doc.

Il vous permet de travailler en temps réel avec d’autres utilisateur sur un même document à la manière de google doc.Ceci tout en donnant juste un lien aux personnes qui doivent rédiger ou visualiser le document en question.

L’interface est minimaliste, l’acces se fait par un simple lien commun pour tous, une couleur par personne représente les modifications, un chat y est intégré, des exports pdf, doc txt sont possible et un historique des modifications est conservé.

Pour y acceder : http://pad.qth.fr

Tags: , , ,

Une netinstall sans internet, pourquoi des mises à jour non plus ?

Il est temps que je vous présente un script que j’utilise dans le GUL auquel je participe : un script pour squid.

Le but final ? C’est de réaliser des installs, de boots par le réseau et faire les dernières mises à jours lorsque la connexion internet est médiocre voir même innexistante.

Pour ça, on utilise déjà squid qui permet de « cacher » les fichiers téléchargés, mais nous utilisons aussi des dépots locaux sur un poste que nous gardons le plus à jour possible lors de l’install-party. Le script ne fait que traduire à squid les emplacement équivalents locaux pour des url normalement sur internet.

Ainsi, http://archive.ubuntu.com/dists/ devient http://10.9.0.72/ubuntu/dists/ pour squid. C’est donc transparent pour les utilisateurs.

Vous êtes intéressés, rendez vous sur la page du projet :

http://projects.qth.fr/projects/squidrepository

Tags: , , ,

Je n'aime pas les boîtes noires.