Archives de catégorie : Linux

Certificat let’s encrypt sur synology avec validation dns

J’utilise en reseau local la fonctionnalité de reverse proxy de mon synology. Mais avoir un certificat pour chaque site n’est pas tres pratique. Nativement, le synology gere les certificats let’s encrypt mais cela necessite que le serveur soit accessible sur internet.

En mixant ,les deux articles suivants, j’ai pu reussir a faire un role ansible pour generer un certificat wildcard qui sera utilisable par tous les services.
https://buzut.net/certbot-challenge-dns-ovh-wildcard/
https://falkus.co/2019/01/a-story-about-lets-encrypt-and-my-synology-nas/

Le code source est disponible ici: https://github.com/BenoitCharret/certbot

Il est possible d’utiliser ce role avec un fichier requirements.yml:

- name: benoitcharret.certbot

On peut ensuite recuperer le role avec la commande suivante:

ansible-galaxy install -p roles -r requirements.yml -f

Le role va genérer le certificat lors de l’installation et installer une tache planifiée pour le renouvellement.

Le certificat sera installé en tant que certificat par defaut pour tous les services.

Ce qui permet d’avoir ceci.

Génération d’un certificat par validation dns avec pfsense

Pfsense propose un package pour generer des certificats let’s encrypt. Il permet aussi de valider le certificat par DNS. Différents providers dns sont disponibles. Dans mon cas, ce sera ovh.

La première étape est d’installer le module acme qui va nous installer tout ce qui est nécessaire.

Ensuite il faut se rendre dans le service « Acme Certificate »

Il faut d’abord créer un compte sur le serveur ACME dans la partie « Account keys ». Pour faire des tests, on peut utiliser le serveur de staging d’ACME. Une fois que c’est bon, on pourra passer sur le serveur de production. Le choix de l’un ou l’autre serveur ACME aura une influence sur la chaine de certification.

Dès que le compte est créé, on peut passer à la création du certificat.

Sur l’ecran de création, il faut choisir le compte acme que l’on a crée juste avant.

Dans la partie SAN, on va paramétrer en 1, le nom de domaine ciblé par le certificat en 2, la méthode de validation. Dans mon cas, ce sera une validation par DNS ovh.

Une fois le certificat enregistré, bien vérifié qu’il y a une coche sur on, sinon, il faut cliquer sur issue/renew

Et voila le certificat est disponible dans la partie certManager de pfsense. On peut s’en servir comme certificat pour l’UI de pfsense ou pour un autre service comme openvpn.

PS:

Ne pas oublier dans la partie settings d’activer le cron pour renouveler le certificat:

Limitation de traffic avec pfsense

Avec le confinement, la bande passante devient un sujet sensible. Les services de vidéos à distances et le télétravail prenant de plus en plus de place, je cherchais un moyen pour limiter la bande passante disponible en download pour mon nas afin de ne pas perturber les autres services. J’ai trouvé un moyen avec pfsense.

Voici pour commenter un résumé un schéma du reseau. Tout le traffic passe par le pfsense, il est donc facile de l’utiliser pour réguler les choses.

Pour commencer, il faut aller dans le menu Traffic Shapper.

Et choisir le menu Limiters pour utiliser la fonction de limitation. Les autres menu permettent de gerer la Qos pour prioriser le traffic entre différents services.

Dans cet écran, il faut choisir new Limiter pour ajouter un Limiter. Dans mon cas, j’ai choisi de faire un limiter pour l’upload et le download, mais je pense que l’upload n’est pas forcément nécessaire.

Sur l’écran de création, les champs importants sont:

  • Enable: permet d’activer ou desactiver l’objet. A activer dans notre cas
  • Name: pour donner un nom
  • Bandwidth: La bande passante à allouer.
  • Mask: Sur quoi va s’appliquer ce limiter. Dans notre cas, on va se baser sur l’ip source et comme on ne veut qu’une ip, le mask sera de 32.

Une fois les options définies, on peut sauvegarder

Une fois que les 2 limiters sont crées, il ne reste plus qu’a les affecter. Pour cela, il faut aller dans la section Rules > Lan de notre pfsense. Sur cette écran, choisir le bouton ADD pour ajouter la règle en premier.

Sur cet écran, on va ajouter une regle pour affecter notre limitation à l’ip du nas. Pour cela, on va definir la source sur un « single host or alias » et préciser l’ip de la machine.

Puis, il faut afficher les options avancées.

Et dans les options, ajouter les limiters dans la partie « In / Out pipe »:

Il ne restera plus qu’a appliquer les changements et à constater le résultat.

J’ai bien un download qui ne depasse pas les 2Mo/s contre 4Mo/s auparavant.

Il est aussi possible de définir des limites en fonction d’une plage horaire. Il faut d’abord créer les plages horaires dans Firewall -> Schedules.

et ensuite configurer les bandes passantes pour ces plages:

Cela permet au nas d’avoir accès à la plaine bande passante la nuit.

Ajout d’un disque LVM-thin

Pour stocker les images des conteneurs, proxmox utilise un format lvm-thin qui permet d’allouer l’espace disque lors de l’ecriture (pas de préallocation).

Pour que le volume soit reconnu par proxmox, il faut suivre cette procédure.

Création du volume group (VG). Ici le disque physique ajouté est sdc1:

Création d’un volume logique (LV):

Changement du type de LV:

Maintenant, on peut ajouter un nouveau type de stockage dans l’interface

Il ne reste plus qu’a créer des conteneurs sur ce disque (ou les migrer).

Configuration de pfsense – zabbix-agent

on peut collecter des données depuis pfsense avec zabbix.

Il faut installer un package zabbix-agent.

Dans package manager, rechercher zabbix dans les packages disponibles et installer le.

La configuration se fera via l’ecran Services > zabbix-agent

Une fois que c’est fait, on peut commencer à collecter les données:

Partage de repertoire entre conteneur

Par réflexe, j’ai commencé par partagé des répertoires via le protocole samba entre plusieurs conteneurs. Mais cela impose de d’installer les paquets samba sur proxmox.

Du coup, proxmox commence à faire plus de choses que ce pour quoi je l’ai installé (système de virtualisation).

J’ai donc chercher une autre solution.

Dans proxmox, on peut ajouter un point de montage sur un disk.

Mais le résultat n’est pas intéressant, on se retrouve avec un répertoire vm-108-disk-2 dans le local-lvm. On se retrouve donc avec des répertoires dédiés très loin du résultat recherché.

En consultant les forums, j’ai trouvé ceci.

En éditant, le fichier /etc/pve/lxc/.conf

et changer la ligne

en

On va monter le répertoire /tank/test dans le container sous le chemin /opt/test

Si on fait cela pour tous les containers, on a un moyen de partager un filesystem sans samba.

Configuration de pfsense – redirection de port

pfsense faisant office de firewall, il n’est pas possible de communiquer avec les serveurs du reseau local depuis le reseau WAN. On peut ajouter des règles pour autoriser certaines port à passer.

Par defaut, on ne peut pas utiliser de nom dns avec cette configuration. Comme tout est basé en DHCP sur ce réseau, il est compliqué d’utiliser les ips directement.

Heureusement on peut utiliser des alias qui feront ce lien.

Commencons donc par créer un alias

Et voila, mon alias est créé

Je peux maintenant ajouter une regle de redirection. Exemple, dans ce cas, je redirige le traffic du port 443 vers le serveur monserveur sur le port 443 en utilisant l’alias jefaisuntest.

et le résumé de la règle:

Il faudra éventuellement faire de meme sur le routeur ADSL pour que le traffic arrive sur le port pfsense.

 

Configuration de pfsense – dhcp

La première chose que j’ai activé sur pfsense est le service dchp.

Ce service va permettre de distribuer les adresses ips sur le reseau local et d’enregistrer la correspondance ip <-> nom dans un DNS local.

Il est important de cocher cette case pour que la resolution fonctionne.

Après sauvegarde et application des paramètres, on devrait avoir un reseau avec dhcp fonctionnel.

On peut vérifier le bon fonctionnement dans la partie Status > DHCP leases

Installation de pfsense

Pour isoler le réseau local, j’ai installé pfSense pour jouer le role de firewall (plus d’info ici).

Avant de commencer l’installation, il faut créer 2 interfaces réseau. Une sera considéré comme WAN (accès exterieur), l’autre LAN (accès local).

Sur proxmox, j’ai crée 2 bridges Linux.

vmbr1 sera le WAN et vmbr0 sera le lan.

Installation

Créer une VM dans proxmox et uploader l’iso de pfsense dans local.

Démarrer la VM, il reste à suivre les indications de la procédure d’installation.

En choisissant les options par défaut lors l’installation, j’arrive à ca:

On peut voir que les interfaces réseau ne sont pas  configurées (em0 et em1). Je vais les configurer avant de pouvoir lancer l’interface WEB.

Il faut définir les adresses IP manuellement avec l’option 2 et se laisser guider.

Si tout va bien, cela va donner quelques choses comme ca:

une fois que c’est fait, on peut accéder à l’interface d’administration de pfsense via l’url http://192.168.59.5 (adresse IP de l’interface LAN)

Il ne reste plus qu’a se connecter avec les comptes par défaut.

Nous arrivons alors sur une assistant de configuration.

Sur cet écran, on peut choisir le nom de son domaine (test.lan dans mon cas). On peut aussi définir le nom du serveur DNS primaire qui servira à résoudre les noms. J’ai mis le DNS de google à titre d’exemple mais on peut aussi mettre celui de son FAI.

Utilisation d’un serveur ntp. J’ai laissé les valeurs par défaut.

configuration de l’interface WAN. J’ai laissé sur DHCP, mais on pourrait très bien définir une IP statique.

Réglage de l’interface LAN. Ici pas de choix possible, c’est forcément, une IP statique.

Pour plus de sécurité, on peut changer le mot de passe de l’interface.

Et voila, pfSense est installé.

Il ne reste plus qu’a configurer quelques services pour ce soit pleinement fonctionnel.