Installation du systeme FreeBSD10 sur un pool ZFS

11 mars 2014

Le but de ce tuto est de montrer comment installer un systeme FreeBSD a partir de rien, sur un pool ZFS multi disque (mirroir ou zraid).

L’exemple ce basera sur une install en raidz1 sur 3 disques.

Prérequis :

Une ISO du système (la version CD suffit) ou une clé usb préparée a partir de l’image « memstick.img ».

Vous trouverez tout ca par ici.

Démarrage en mode « Live ».

Démarrez sur le support (cd ou usb) préparé a cet effet (voir prérequis).

Après la procédure de boot, vous vous retrouvez sur le premier écran de l’installeur.

tutofbsdzfs1

Choisissez le mode « Live CD ».

Vous vous retrouverez alors sur un écran de login : Logguez vous en root, sans mot de passe.

Vous constaterez que le clavier est en qwerty

Pour repasser en azerty (ou toute autre version de clavier) utilisez la commande « kbdmap », sans argument.

Cette commande affiche une liste dans laquelle vous pourrez choisir votre clavier.

tutobsdzfs2

Ensuite, listons nos disques avec camcontrol.

camcontrol devlist

La commande réponds avec la liste des lecteurs de disque.

tutobsdzfs3

La référence du disque est entre parenthèses, après la virgule. Ici, nous avons, en plus du lecteur cd, 3 disques (ada0, ada1 et ada2).

Vérifions ensuite l’état de partitionnement de nos disques :

gpart show ada0 ...

Cette commande, a lancer pour chaque disque, affiche le partitionnement.

Si aucun partitionnement n’est présent, le message s’affiche :

gpart: No such geom: ada0

Nous allons repartitionner les disques avec le mode GPT. Si un partitionnement est déja présent, nous le supprimons avec la commande :

gpart destroy -F ada0

Et ce pour chaque disque.

tutofbsdzfs4

Créons ensuite les partitions :

Pour chaque disque, nous allons créer 3 partitions GPT : boot, swap, et zfs. Nous allons aligner ces partitions sur des secteurs de 4k.

gpart create -s GPT ada0
gpart add -a 4k -s 64k -t freebsd-boot ada0
gpart add -a 4k -s 2G -t freebsd-swap -l swap-disk0 ada0
gpart add -a 4k -t freebsd-zfs -l zroot-disk0 ada0

Notez que nous ajoutons un label sur les partitions swap et zfs, pensez a mettre un nom différent sur chaque disque. Nous pouvons ensuite vérifier le partitionnement avec la commande « gpart show ».

gpart show ada0

tutobsdzfs5

Faites de même pour l’ensemble des disques.

Ensuite, nous allons poser tout de suite les secteurs de boot. Il est effectivement possible de le faire dès cette étape.

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada...

Nous allons ensuite créer le pool ZFS.

Nous le monterons sur une racine alternative : /tmp/zfs. Notez que sous freebsd10, le fichier zpool.cache n’est plus nécessaire au démarrage.

La commande se décompose comme suit : zpool create -o cachefile=/tmp/zpool.cache -R /tmp/zfs nom_du_pool  [mirror|raidz1|raidz2] ada0p2 ada1p2 …

Choisissez le nom du pool. Dans notre exemple, nous choisirons « zroot« . Le type de vdev peux être mirror (disques en mirroir), raidz1 ou raidz2 (simple ou double parité). Le « p2 » suivant le nom du disque indique quelle partition nous souhaitons utiliser. Exemple :

zpool create -o cachefile=/tmp/zpool.cache -R /tmp/zfs zroot raidz1 gpt/zroot-disk0 gpt/zroot-disk1 gpt/zroot-disk2
zpool status

tutobsdzfs6

Nous allons ensuite créer les systèmes de fichier pour le système.

zfs create -o mountpoint=/ -o canmount=off  zroot/root
zfs create -o mountpoint=none zroot/root/env
zfs create -o mountpoint=/ zroot/root/env/10.0-RELEASE
zfs create -o canmount=off zroot/root/usr
zfs create zroot/root/tmp
zfs create zroot/root/home
zfs create zroot/root/usr/local
zfs create zroot/root/usr/local/etc
zfs create zroot/root/usr/src
zfs create zroot/root/usr/obj
zfs create zroot/root/usr/ports
zfs create zroot/root/var
zfs create zroot/root/var/tmp
zfs create zroot/root/var/log

Nous pouvons vérifier la bonne création de la structure avec les commandes suivantes :

zfs list
mount

tutobsdzfs7 tutobsdzfs8

Notez que zroot/root et zroot/root ne doivent PAS être montés. Ces deux FS servent a conserver l’arborescence, mais ne serons jamais montés.

Nous allons maintenant pouvoir décompresser le systeme.

Allez dans la future racine et décompressez les archives :

cd /tmp/zfs/
tar xJf /usr/freebsd-dist/base.txz
tar xJf /usr/freebsd-dist/kernel.txz
tar xJf /usr/freebsd-dist/doc.txz
tar xJf /usr/freebsd-dist/lib32.txz

Notez que doc et lib32 sont facultatifs. Seuls base et kernel sont nécessaire au bon déroulement du redémarrage systeme.
Finalisation avant premier reboot :

zpool set bootfs=zroot/root/env/10.0-RELEASE
touch /tmp/zfs/etc/fstab
echo 'zfs_enable="YES"' > /tmp/zfs/etc/rc.conf
echo 'zfs_load="YES"' > /tmp/zfs/boot/loader.conf
cp /tmp/zpool.cache /tmp/zfs/boot/zfs/zpool.cache

Vous pouvez ensuite redémarrer la machine.

Vous pourrez ensuite finaliser l’installation avec la commande bsdconfig.

Pour ce qui est de la configuration du swap : ajoutez les lignes suivantes a votre fichier /etc/fstab :

/dev/gpt/swap-disk0             none            swap    sw      0       0
/dev/gpt/swap-disk1             none            swap    sw      0       0
...

puis activez le swap avec la commande ‘swapon -a‘.

Combat contre le SPAM

11 novembre 2010

Après un long vide, me revoici. Aujourd’hui, nous allons parler mails. Plus précisément, serveurs mails et anti-spams.

Je ne fais pas confiance dans les services type GMail, yahoo, laposte.net et cie pour héberger ma messagerie, et ce pour diverses raisons : stockage limité et/ou dans des pays pas forcément respectueux de la vie privée, interprétation très personnelle du protocole IMAP (gmail), plantages, politique de sauvegarde inconnue … Possédant un serveur dédié discount chez un fournisseur bien connu, je préfère donc gérer tout ca moi même.

Comme tout administrateur de serveur mail, je me suis confronté au problème de la lute contre le SPAM (ou pourriel, courriel non solicité …). En effet, il suffit de mettre en place un serveur SMTP en ligne pour voir arriver moultes publicités, tentatives d’escroquerie et de hameçonnage. La problématique est souvent posée comme suit : « comment filtrer le spam ? ». Je préfère la poser comme celà : « Comment réduire l’impact du spam sur l’utilisation quotidienne de la messagerie ».

Les approches communément  rencontrées sont les suivantes (ou des variantes) :

  • Le serveur accepte tout les mails, et on laisse faire le client de messagerie
  • Le serveur accepte les mails, puis les transfère à l’anti-spam (ou l’antivirus), qui va décider de le conserver ou non dans la boite du destinataire. Les messages indésirables étant soit supprimés soit mis de coté (dans un dossier ou une boite au lettre dédiés).

Ces approches sont problématiques vis à vis des faux positifs. En effet, un mail légitime, mais détecté comme spam aura de fortes chances de subir un destin tragique : être supprimé sans avoir été lu.

  • Supprimé par le système anti-spam ou
  • Non attendu, et perdu au milieu des trop nombreux vrais positifs, il se fera supprimer par l’utilisateur.

Dans les deux cas, l’expéditeur n’aura aucun retour et pourra penser que le mail est arrivé à destination. C’est, pour moi, ici que le bat blesse. J’ai donc cherché, lorsque j’ai mis en place mon anti spam, à respecter ces deux principes :

  • Le nombre de mails classés comme spam doit être le plus réduit possible : le temps passé à vérifier le contenu de « la boite spam » ne doit pas être prohibitif.
  • Un mail qui n’arrive pas dans la boite du destinataire doit être refusé au serveur expéditeur, et jamais détruit en silence. Ainsi, l’expéditeur est notifié et peux agir en conséquence.

Ma solution technique :

Elle utilise les logiciels Exim, Spamassassin.

Spamassassin permet d’attribuer des « scores » aux mails. Plus le score d’un mail est haut, plus le mail à des chances d’être indésirable.

Lorsqu’un mail est recu, à la fin de la transmission, mais avant de confirmer la bonne réception et clore le dialogue SMTP, Exim le fait analyser promptement par spamassassin.  En fonction du score retourné, Exim va donc accepter ou refuser le mail. On choisira tout d’abord un score limite relativement haut (ex : 10.0).

Si le mail est accepté, mais que le score reste supérieur à un seuil défini (ex : 1.0), un tag  [SPAM xx] est ajouté, ou xx correspond au score. Ce tag permettra le classement par le client de messagerie (ou dans mon cas, par Sieve).

Les seuils pourront ensuite être ajustés après une période d’observation, et/ou en fonction de la boite mail.

Ajout du greylisting dans l’équation :

Le greylisting permet de refuser temporairement un mail douteux. Le SMTP destination demandant à l’expéditeur : « laisse moi le temps de la réflexion, recontacte moi dans 30mn ». Cette solution à deux avantages : 1. de nombreux spambots sont incapable de gérer ce type de refus, et ne renverrons jamais le message. 2. Les 30mn de délai vont permettre aux RBL (blacklists) utilisées par spamassin d’être mises à jour, et de lever le doute lors d’une éventuelle réexpédition.

Afin d’éviter d’être trop invasif, et de retarder les correspondances, le greylisting ne devra être utilisé que lorsque le score spamassassin est suffisant pour avoir un doute.

Bannissement des émetteurs récalcitrants :

Comment éviter que notre pauvre serveur se fasse harceler par de méchants spambots ?

A chaque spam refusé, j’attribue 5 points à l’IP émettrice . J’ajoute aussi 2 points lorsque le destinataire n’existe pas.

Au delà d’un certain score, Exim refuse gentiment les mails, et je rajoute 1 point à chaque fois que l’IP insiste. (un serveur légitime va ici pouvoir prévenir l’expéditeur).

Dépassé un score bien supérieur, l’IP est bannie pour 1 journée. Ce système permet de réduire fortement la charge de spamassassin.

En espérant que mon expérience pourra vous aider. Un prochain post pourra détailler la configuration des différents éléments. En attendant, vous pourrez trouver un début d’exemple là : http://struction.de/

In construction

2 février 2010

I’m rebuilding this site. Old content will re-appear soon.

En (re)construction …

1 février 2010

Après de nombreux mois d’inactivité sur ce blog, il est temps pour moi de faire du ménage. Cet espace fait peau neuve. Il ne vous parlera pas (ou peu) de ma vie, mais me servira plutôt à diffuser tutos, articles et infos diverses et variées, et sans doute aussi quelques photos. Les anciens articles seront republiés sous peu.

A très bientôt…

Soucis de compatibilité windows / hostapd

6 janvier 2008

Hostapd est un service unix permettant de gérer l’authentification et les échanges de clés pour les AP wifi softs. Celui ci est nécessaire pour les modes EAP et/ou WPA, car la carte réseau ne sais pas gérer les échanges de clé elle même.

Voulant utiliser WPA, je rencontrais jusqu’alors des déconnections intempestives. Il semblerais que le client ne reçoive pas / ne prennent pas en compte ou ne comprenne pas certains messages de mise à jour de clé.

Le problème peut être résolu en modifiant le paramètre eapol_version dans le fichier hostapd.conf.

Ce dernier porte par défaut la valeur 2. En le passant à 1, les soucis disparaissent.

Je poste cette « astuce » ici après avoir cherché sans comprendre pendant plusieurs mois. (mais avec l’EEE le wifi est vraiment indispensable). En espérant que cela puisse en aider d’autres.

Note : j’utilise une carte ralink RT2561 pour l’hostap. Le problème se manifeste indépendamment du mode choisi, dès lors qu’il y a changement de clé…

Si quelqu’un peu m’expliquer le pourquoi du comment, je suis preneur. Si vous savez ou me procurer les specs 802.1x, pareil.

6to4 et reverse – dns

4 mai 2006

Si vous avez lu mes précédents articles, vous savez que j’utilise 6to4 en attendant une « vraie » connectivité IPv6.

En effectuant quelques tests lors de la mise en place d’une zone reverse IPv6 sur mon DNS local, je suis tombé là dessus :

; <<>> DiG 9.3.1 <<>> NS 2.0.0.2.ip6.arpa
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6522
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 6

;; QUESTION SECTION:
;2.0.0.2.ip6.arpa.              IN      NS

;; ANSWER SECTION:
2.0.0.2.ip6.arpa.       172738  IN      NS      ns-ripe.6to4.nro.net.
2.0.0.2.ip6.arpa.       172738  IN      NS      ns-apnic.6to4.nro.net.
2.0.0.2.ip6.arpa.       172738  IN      NS      ns-lacnic.6to4.nro.net.
2.0.0.2.ip6.arpa.       172738  IN      NS      ns-arin.6to4.nro.net.

Traduction : il semble qu’il y ait des serveurs spécialisés pour gérer les zones 6to4.

Testons donc … : http://6to4.nro.net ! C’est qu’il y a effectivement un site là !

Pour accéder à la configuration de sa zone reverse, il suffit d’accéder au site 6to4.nro.net depuis une machine utilisant une adresse de cette zone. Traduction : ils vous faudra sans doute changer les préférences de préfixes (voir article IPv6 précédent).

Il suffit ensuite d’indiquer les serveurs DNS auquels déléguer la zone reverse, et compter quelques jours pour la mise à jour.

La zone reverse peux-être hébergée localement, mais j’ai choisi d’utiliser les services de zoneedit.

Le 6to4, c’est bien, mais…

29 mars 2006
… parfois, on aimerais que ca serve à quelque chose

En effet, pour se connecter à un site v4/v6, le système préfèrera par défaut utiliser IPv4. Normal, c’est sensé être plus rapide. Par contre, lorsque le but est de tester IPv6, c’est un peu plus gênant.

Lorsque la résolution de nom pose un problème de choix d’adresses source et destination, ce qui arrive souvent en IPv6, le système d’exploitation est sensé utiliser une table de politique de choix de préfixes (prefix policy). Sous windows, celle ci se présente de cette façon (table par défaut).

Precedence  Label  Prefix
----------  -----  --------------------------------
         5      5  3ffe:831f::/32
        10      4  ::ffff:0:0/96
        20      3  ::/96
        30      2  2002::/16
        40      1  ::/0
        50      0  ::1/128

A chaque préfixe dans la table est attribué un niveau de préférence, et un label. De manière générale, le choix se fait comme suit : On cherchera les couples sources/destination de même label, puis l’on utilisera le niveau de préférence pour les départager.

On remarque que dans la table par défaut de windows (elle est a peu près équivalente sur tout les systèmes utilisant une politique de préférence), on trouve :

  • le préfixe ::/96 , qui correspond aux adresses IPv4 mappées.
  • le préfixe ::FFFF:0:0/96, qui correspond a l’utilisation d’IPv4
  • le préfixe 2002::/16 qui est le préfixe 6to4

Ici, le label du préfixe 6to4 est différent du label du préfixe global ( ::/0 ), de ce fait, le système d’exploitation va préférer utiliser IPv4 quand c’est possible (les deux adresses IPv4 tombant sous le préfixe ::FFFF:0:0/96).

Pour pouvoir utiliser en priorité IPv6, il est nécessaire de modifier la table. On conservera une entrée distincte, pour le cas peu probable ou la destination aurait à la fois une adresse 6to4 et une adresse native. Il n’est pas nécessaire de conserver la première entrée de la table (préfixe 6bone) Correction : il s’agit du préfixe teredo, qu’il n’est pas conseillé d’utiliser, a garder dans la table, donc.

La modification s’effectue ainsi, dans une console :

C:\>netsh
netsh>interface ipv6
netsh interface ipv6>set prefix ::1/128 50 0
netsh interface ipv6>set prefix ::/0 40 1
netsh interface ipv6>set prefix 2002::/16 30 1
netsh interface ipv6>set prefix ::/96 20 3
netsh interface ipv6>set prefix ::ffff:0:0/96 10 4
netsh interface ipv6>set prefix 3ffe:831f::/32 5 5
netsh interface ipv6>show prefix
Querying active state...                           

Precedence  Label  Prefix
----------  -----  --------------------------------
        10      4  ::ffff:0:0/96
        20      3  ::/96
        30      1  2002::/16
        40      1  ::/0
        50      0  ::1/128

L’effet est immédiat. Ce qui peut-être vérifié en allant voir la tortue qui danse !

VoIP, l’interet d’IPv6 …

26 octobre 2005

Je vous parlais il y a quelques temps de l’IPv6 et de ses utilités. Le meilleur exemple pour moi étant la VoIP.

Dans les années 98-99, avec l’explosion d’internet et du multimédia, je m’imaginais déjà des communications internationales a faible cout, chaque correspondant utilisant son accès internet (56k a l’époque), bien que le payant a la durée.

L’arrivée du haut débit, ne pouvais, pour moi qu’accélérer les choses, et l’on « aurait » alors du voir apparaitre des téléphones réseau grand public, branchés directement sur Ethernet, et amenés a remplacer progressivement nos vieux postes téléphoniques sur réseau commuté, avec leur bonne vieille facturation a la durée.

Idées naïves de lycéen, sans doute …

En effet, si le transport de la voix par des paquets IP ne pose pas de réel défi technologique (la compression temps-réel de la voix est depuis une dizaine d’années a portée de nos machines grand-public, et les débits nécessaires a ce transport étaient déja assurés par le 56k), le défi est de rendre cette technologie accessible en pratique au grand public.

Le grand public a l’habitude de son téléphone, dont l’utilisation est SIMPLE :

  • Je branche, ça marche.
  • Je décroche, je compose le numéro (unique pour une personne donnée), ça sonne a l’autre bout. L’autre personne décroche où non.

En d’autres mots, le réel défi de la VoIP c’est :

  • La localisation (ou la mise en relation) des correspondants (car on ne peux plus vraiment parler d' »abonnés »). (et c’est l’idée de base des protocoles VoIP
  • La simplicité d’utilisation et donc
  • Le principe de zero-config (je branche ca marche), qui ne peux passer que par une totale compatibilité des matériels.
  • Une identification simple et fixe des correspondants.

C’est la que (cette saloperie de) nat rentre en jeu. Le soucis est là : comment contacter une machine (un pc avec un softphone, un téléphone IP) qui n’a pas d’adresse publique ? Ce n’est pas possible (ou pas simplement, de manière je branche et ca marche).

L’intérêt d’IPv6 arrive là. Cette multiplication d’adresses permettra ces contacts directs entres interlocuteurs.

Pour plus de détails, je vous renvoie sur mon rapport de projet de l’année dernière.

L’ IPv6 ? A quoi ca sert ?

7 mai 2005

En réponse a une suggestion sur un newsgroup, on réponds « L’ipv6, ouais mais nan, ca sert a rien pour le particulier… sur ce, laissez moi m’enflammer !

Donc : a quoi ca sert ? A ne pas multiplier les NATs, a répondre au besoin croissant d’IPs publiques. Dans certains pays, des FAI sont déja obligés de fournir des acces nattés par manque d’IPs. De plus, on vois apparaitre de plus en plus d’appareils qui vont se connecter au réseau dans le domicile : PDAs, portables, consoles de jeu … baladeurs numériques, télévision …

Il faut savoir que ces NATs sont le plus gros frein au déploiement de VoIP peer-peer (IP de bout en bout), il y a bien des applications qui s’en tirent (genre skype) mais a un prix fort (en gros, ca marche tant que y’a encore des gens pas Nattés/firewallés, vu que c’est sur eux que le réseau skype repose). Bon, vous me direz, cela arrange bien les opérateurs, vu qu’une communication peer-peer est dificilement facturable indépendamment 🙂 . Bref, l’IPv6 a plein d’avantages, même pour le particulier … et je dirais même : surtout pour le particulier, vu que ca va permettre au développeurs de développer des applis largement plus simples a configurer pour l’utilisateur (plus de casse tête de firewall, de routeur qui doit forwader tel ou tel port.. de passerelles applicatives qui déconnent…)

My two cents : un opérateur comme free se mettant à l’IPv6 : un grand pas en avant, vu que les autres FAI suivraient sans doute assez vite. Mais je crois plutôt que la « vague » IPv6 viendra d’abord de la corée ou du japon, voir de la chine.. des pays qui manque cruellement d’IPs. Ensuite, faudra que l’OS majoritaire supporte, et ce plus que de manière experimentale, et permette une transition douce. (portproxys automatiques, assistants bien neuneus-friendly etc… Bref, tout ca avant 2040, ca serait bien (et a mon avis, on va pas avoir le choix)