Archives 2018
#Gnu/Linux, Planet Libre, nas linux qnap openmediavault
Mise en place des Snapshots avec BTRFS et Open Media Vault
Ce NAS contient tous mes documents non structurés.
J'ai bien sur de la backup quotidienne via le formidable outil Urbackup
Même si Urbackup est souple, j'ai eut besoin de pouvoir avoir une souplesse et une granularité de restauration plus souple.
Ayant la plupart du temps un poste client sous Windows, j'ai eu envie de pouvoir utiliser la notion de "versions précedentes."

C'est assez simple à mettre en oeuvre quand on à un serveur de fichier sous Windows.
Mais avec un serveur de fichier Gnu/Linux OMV comment faire ???
En glanant les informations sur le net, j'ai vu que c'était possible via les fonctionnalités
du système de fichiers BTRFS !!!
J'ai donc décidé de mettre en place cela sur un disque de mon NAS et de rendre
cela un peu automatisé.
Plusieurs étapes:
Formatage du disque : File Systeme BTRFS ( prononcé butterFS)Le disque en question est /dev/sdc

Le formater en BTRFS et le monter

A partir de là vous avez un FS en BTRFS
La particularité de BTRFS est qu'il permet de vréer des subvolumes
Ces subvolumes, sans être des disques blocs à proprement parlés
Pourront être utitilisé par l'OS commes des disques.
avec la commande mount, vous pouvez voir sous quel nom
est monté votre FS
Pou rmoi par exemple:
#mount
/dev/sdc1 on /srv/dev-disk-by-label-NASLV1 type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/
Création du subvolume:
Création du partage SMB utilisant ce subvolume dans OMV:btrfs subvolume create
/srv/dev-disk-by-label-NASLV1/
@NASLV1
lister les subvolume:
root@nas:/srv/dev-disk-by-id-scsi-1ATA_ST1000DM003-1CH162_S1DE8V17-part1/NASLV2# btrfs subvolume list /srv/dev-disk-by-label-NASLV1/
ID 257 gen 1071 top level 5 path @NASLV1
Vous voyez que votre subvolume @NASLV1 peut etre selectionné directement comme un disque !!


Création du subvolume de snapshot:
De la même nanière on crée un subvolume pour les futurs snapshots.
btrfs subvolume create
/srv/dev-disk-by-label-NASLV1/
@NASLV1/.snapshots
#/srv/dev-disk-by-id-scsi-1ATA_ST1000DM003-1CH162_S1DE8V17-part1/NASLV2# btrfs subvolume list /srv/dev-disk-by-label-NASLV1/
ID 257 gen 1071 top level 5 path @NASLV1
ID 258 gen 1053 top level 257 path @NASLV1/.snapshots
Modification des options de partages pour que les snapshots soient visibles dans Windows:
Dans "options supplémentaires" du partage omv
Ajouter :
vfs objects = shadow_copy2
shadow:format = @GMT_%Y.%m.%d-%H.%M.%S
shadow:sort = desc
shadow:snapdir = .snapshots
Cela va permettre à Windows de peupler "versions précédentes"

Création d'un snapshot de test:
# btrfs subvolume snapshot /srv/dev-disk-by-label-NASLV1/@NASLV1 /srv/dev-disk-by-label-NASLV1/@NASLV1/.snapshots/@GMT_`date +%Y.%m.%d-%H.%M.%S`
Ce qui donne en retour
Create a snapshot of '/srv/dev-disk-by-label-NASLV1/@NASLV1' in '/srv/dev-disk-by-label-NASLV1/@NASLV1/.snapshots/@GMT_2018.11.13-23.32.28
Montons le partage sous Windows et vérifions l'onglet "versions précedentes."
Nos snapshots sont apparus

si on montre les fichiers cachés on voit aussi notre .snapshots

Programmons les snapshots et la rétention de nos snapshots.
Je n'ai rien trouvé d'automatisé pour créer les snapshots régulièrement et les purger.
J'ai donc créer quelques scripts pour automatiser cela:
take-btrfs-snap.sh
#!/bin/bash
pathsubvol="/srv/dev-disk-by-label-NASLV1/@NASLV1"
pathsnap="$pathsubvol/.snapshots"
snapname="@GMT_`date +%Y.%m.%d-%H.%M.%S`"
btrfs subvolume snapshot $pathsubvol $pathsnap/$snapname
purge-btrfs-snap.sh ( supprime les snapsshots de + de 7 jours)
#!/bin/bash
#Max Age of snapshots in days
agesnapday="7"
#Path snapshots
pathsnap="/srv/dev-disk-by-label-NASLV1/@NASLV1"
#Delete old snapshot
find $pathsnap -mindepth 1 -maxdepth 10 -mtime +$agesnapday -name "@GMT_*" -exec btrfs subvolume delete {} \;
list-btrfs-vol.sh
#!/bin/bash
pathsubvol="/srv/dev-disk-by-label-NASLV1/@NASLV1"
#pathsnap="$pathsubvol/.snapshots"
#snapname="@GMT_`date +%Y.%m.%d-%H.%M.%S`"
btrfs subvolume list $pathsubvol
usage-btrfs-snap.sh ( basé sur btrfs-du qu'il faudra installer)
#!/bin/bash
pathsubvol="/srv/dev-disk-by-label-NASLV1/@NASLV1"
btrfs-du $pathsubvol
Attention pour utiliser btrfs-du il faut activer les quotas sur votre subvolume
btrfs quota enable /srv/dev-disk-by-label-NASLV1/@NASLV1/

Il suffit d'ajouter ces commandes en tant que Tache planifiés sur OMV
J'ai décidé de faire 2 snapshots par jours à 00h00 et 12h00
Et tous les jours purger les snapshots de + de 7 jours

Vous pouvez maintenant avoir accès à des versions antérieurs de vos dossiers/fichiers
Et les copier/coller simplement

Edit 26-11-2018
Je me suis rendu compte au bout de 7 jours que mon script de purge effacait tous les snapshots.
La raison est simple : Les snapshots garde tous la date de leur dossier parent !!!!
Il faut le savoir
On ne peut donc pas se baser sur le find mtime pour effacer les snapshots.
J'ai donc revu ma façon de fonctionner:
- Ajout du temps unix en seconde dans le nom de mes snapshots
- Adaptation du script pour se baser sur un calcul du temps unix
- Adaption des options de partages smb
Les nouveaux scripts :
take-btrfs-snap.sh
#!/bin/bash
pathsubvol="/srv/dev-disk-by-label-NASLV1/@NASLV1"
pathsnap="$pathsubvol/.snapshots"
snapname="@GMT_`date +%Y.%m.%d-%H.%M.%S-%s`"
urge-btrfs-snap.sh ( supprime les snapsshots de + de 7 jours)
#!/bin/bash
#Max Age of snapshots in days
agesnapday="7"
agesnapsec=$(($agesnapday * 86400))
date=$(date +%s)
agesnaplimit=$(($date - $agesnapsec))
logfile=/var/log/snap.log
echo > $logfile
snaplistfile=/tmp/snaplist.txt
#Path snapshots
pathsnap="/srv/dev-disk-by-label-NASLV1/@NASLV1"
ls $pathsnap/.snapshots/ | grep GMT > $snaplistfile
listnap=$(cat $snaplistfile)
#echo $listnap
for i in $listnap
do
agesnap=$(echo $i | awk -F"-" '{print $3}')
if (("$agesnap" < "$agesnaplimit"))
then
echo "snapshot $i superieur a $agesnapday Jour" >> $logfile
echo "supression de $i" >> $logfile
btrfs subvolume delete $pathsnap/.snapshots/$i
else
echo "snapshot $i inferieur a $agesnapday Jour" >> $logfile
echo "pas de supression de $i" >> $logfile
fi
done
Adptation du share smb dans OMV pour prendre en compte le changement de nom
vfs objects = shadow_copy2
shadow:format = @GMT_%Y.%m.%d-%H.%M.%S-%s
shadow:sort = desc
shadow:snapdir = .snapshots

14 novembre 2018
Aucun commentaire
#Gnu/Linux, Planet Libre, jeedom, pfsense
Sécuriser les équipements IOT en Wifi
J'utilise Jeedom comme solution domotique, j'ai plus de 50 objets connectés.
Les équipements IOT sont en général moins bien sécurisés que les autres équipements connectés.
La sécurité par design n'est pas encore dans l'esprit des constructeurs ( pas tous )
Il n'est pas rare de voir des équipements dialoger au niveau réseau avec des serveurs américains ou chinois.
Les informations qu'ils envois ne sont pas controllées.
Il n'est pas rare non plus que les équipements connectés soient utilisés dans des attaques de Botnet
J'ai donc cherché un moyen d'isoler mes équipements Wifi à risque du reste de mon réseau.
Il n'y a guère d'autre solution que de créer des DMZ afin de les isoler.
Les équipements à ma dispositon:
- 1 routeur PFSENSE ( Carte APU 2C4)
- 1 Switch NetGear GS108
- 1 Switch Unifi S8
- 1 AP WIFI Unifi AC PRO



Voiçi le réseau cible : ( simplifié, car j'ai beaucoup d'autre équipements)

La cible à atteindre est de créer 2 réseaux WIFI
Pour cela pas de secret , il va falloir creer des VLANs et des DMZ
- WIFI-MAISON ( Réseau LAN DATA - Full Access)
- WIFI-IOT ( Réseau DMZ-INTERNER - Accès filtré)
Pour cela j'ai dut revoir tout mon réseau, car de base en général un réseau domestique n'utilise pas la notion de VLAN.
Un suel VLAN ( le 1 en général est utilisé de facon transparente)
Pour mon usage, j'ai décidé de ne plus utiliser le VLAN 1
Le VLAN 10 sera mon réseau LAN DATA
Le VLAN 200 ma DMZ- Interne
Je ne parlerai pas ici de la DMZ Publique que j'ai créer sur une interface dédiée de mon pfsense.
Le plan d'action est donc le suivant:
- Création de 2 VLAN ( et des interfaces associées)
- Création des IP des interface ( 10.0.0.254/24 pour le LAN / 172.20.0./24 pour la dmz)
- Création d'étendue DHCP
- Tagg de ces 2 VLAN Depuis PFsense --> Switch Netgear --> Switch Unifi --> AP Unifi
- Paramétrage du Wifi Unifi pour diffuser des SSID sur des VLAN diffrérents
Coté PFSense
Création de 2 VLAN ( et des interfaces associées)Je ne vais pas détailler toutes les actions mais les principales.


La ce qui est important à savoir
C'est que l'interface associée a vos VLAN ne doit porter aucune autre interface logique.
Sinon vous serez obliger de transmporter sur cette interface du vlan untag et du tagged, de qui n'est pas une bonne chose.
La bonne pratique est qu'un port d'interconnexion ne doit transporter que du VLAN Tagged
Par défaut pfsense associe l'interface logique WAN à votre interface physique sur le VLAN1 en untag.
Autrement dit coté pfsense il faut supprimer votre interface logique LAN et la remplacer par un VLAN ( ici le 10)
Vous ne devez avoir que des VLAN sur votre interfaces
Rien ne vou sempeche de la rappeler LAN comme moi
En ayant que des VLAN sur votre interfaces Pfsense, impicitement Pfsense va tagger les 2 VLANs
en sortie de l'interface.
Mettre une IP Statique sur l'interface qui correspondra a votre plan d'adressage
Pour le LAN

Pour la DMZ Interne

Pensez bien à mettre un /24 car sinon la partie DHCP ne sera pas accessible sous Pfsense.
Création des étendues DHCP.


Création d'une règle de Firewall temporaire.
Pour les tests créer une regle de firewall autorisant tout sur la DMZ.
Cela permettra de tester.
Vous fermerez tout plus tard.

Attention à partir de là quand vous validez : Vous perdez l'accès à votre pfsense depuis votre réseau local;
Normal les vlan arrive taggé vers le netgear, mais le netgear n'est pas encore a meme de les recevoir.
Je vous conseille de garder un accès WAN à votre pfsense ( a travers une partage 4g par exemple)
Cela vous permettre de toujours pouvoir agir sur le pfsense même si vous n'y avez plus accès à partir du LAN
Coté Switch Netgear GS108
Le port d'interco relié entre mon PFSENSE et mon netgear sera le 1
Sur le Switch Netgear --> Le port d'interco relié entre mon Sw netgear et mon Switch Unifi sera le 3
Création des VLAN sur le netgear
On voit bien le 10 et le 200

On Tag les ports qui nous interesse
On voit ici que j'ai taggé le VLAN 10 sur les ports 1 et 3
On voit ici que j'ai untag le VLAN 10 sur les autres ports ( port ou seront branché des equipements dans le VLAN 10 - LAN classique)

On voit ici que j'ai taggé le VLAN 200 sur les ports 1 et 3
Rien sur les autres concernant le 200

Il faut aussi mettre les PVID sur les ports
Le Pvid n'a pas d'importance sur les port taggé 1 et 3
Les autres ont le PVID 10

Comme je vous l'ai dit j'ai décidé de remplacer le VLAN 1 historique
Par le VLAN 10
je vais donc mettre ce VLAN 10 comme VLAN de management du switchs

Voila le Netgear est paramétré
Attention vous risquez aussi de vous couper la patte sur le switch
Garder provisoirement un port dans le VLAN1 avant de changer le Management VLAN ID
Coté SwitchUnifi S8
La j'ai pas mal galéré , car autant l'interface Netgear me paraissait logique et old scholl.Très proche des switchs que je manipule souvent ( avaya, cisco)
Autant le paramétrage du switch unifi par le controleur est nouveau.
Il vous faut donc un controlleur Unifi installé ( a minima pour le paramétrage)
Je ne décrit pas la découverte du switch et son provisionning qui est autimatique dans Unifi.
Même si le switch fonctionne en DHCP
Je vous conseille de le mettre en IP Fixe.
Cela évite de se couper la patte quand on taggera.

La partie VLAN se trouve dans Settings / Networks



Quand les Vlan sont crées, il faut les associer à des profiles:

Un profile VLAN-DATA ( Associé au VLAN10)
Cela signifie en langage Switch UNTAG le VLAN 10

Un Profile VLAN-DMZ-INTERNE ( Associé au VLAN 200)
Cela signifie en langage Switch UNTAG le VLAN 200

Et un Profile Interco ( Regroupant les 2 VLAN 10 et 200) Mais cette fois en TAGGED
Cela signifie en langage Switch TAGGED VLAN 10 et 200

Sur le Switch Unifi --> Le port d'interco relié entre mon Sw netgear et mon Switch Unifi sera le 1
Je vous rappelle que le port 3 du Netgear est relié au port 1 de UNIFI
Donc le port 1 de Unifi doit etre taggé des VLAN 10 et 200
Cela se passe sur le port 1 du switch:

Et voilà votre port 1 utilise le profil Interco en taggant les VLAN 10 et 200
Comme le netgear j'ai décidé de mettre le VLAN Management du switch Unifi en VLAN10 ( Profile VLAN-DATA)

Voilà coté Tagging et réseau on est bon.
Attention j'ai du réinitialiser plusieurs fois le switch avant de trouver tout ces paramètres.
Je me suis coupé la patte plus d'une fois.
Soyez vigilant et poser votre schéma sur papier et mesurer les impacts de chaque manipulations.
Coté WIFI Unifi AC PRO
Si vou savez eut le courage de suivre, nous avons réussi à tagged les VLAN 10 et 200
Depuis le pfsense , en passant par le Switch Netgear, jusqu'au Switch Unifi
Tout est prêt pour pouvoir diffuser des Réseaux Wifi portant différent VLAN.
Création du WIFI-MAISON
Tout se passe dans Settings / Wireless Networks
Création d'un SSID nommé WIFI-MAISON
Utilisant le VLAN10
Je vous conseille une bonne clé WPA2 chiffrement AES

réation d'un SSID nommé WIFI-IOT
Utilisant le VLAN200
Je vous conseille une bonne clé WPA2 chiffrement AES

Et voilà.
Si tout va bien, vos 2 SSID sont diffusés:

Si on se connecte sur WIFI-MAISON
On tombe bien dans le VLAN 10
Pfsense nous a donné une IP en 10.0.0.0/24

Si on se connecte sur WIFI-IOT
On tombe bien dans le VLAN 200
Pfsense nous a donné une IP en 172.20.0.0/24

Voilà a partir de là vous pouvez affiner vos règle de filtrage Firewall sur Pfsense sur la DMZ.
Exmple n'accepter que la DMZ n'accede qu'au LAN et pas Internet

Et commencer à voir des flux bloqués :)
C'est là ou le plus dur commence.
Arriver à identifier les flux minimum d'un équipement IOT
09 septembre 2018
Aucun commentaire