Trouver une alternative à BIND pour un DNS autoritaire n’est pas chose aisée, entre les usines à gaz comme PowerDNS et les serveur à la licence douteuse comme djbdns, il se dégage quand même NSD. Le challenger accepte les fichiers de zone au format BIND, équipe déjà 3 des root servers, et implémente des fonctionalités avancées comme DNSSEC et IPV6. Il reste cependant limité à une utilisation en tant que NS autoritaire car il ne sait pas effectuer de resolutions récursives.
Comme d’habitude, nous allons commencer par une installation du logiciel par les ports FreeBSD
# cd /usr/ports/dns/nsd # make install clean
Nous allons continuer avec l’édition du fichier de configuration
# cd /usr/local/etc/nsd/ # cp nsd.conf.sample nsd.conf # chmod +w nsd.conf # vi nsd.conf
Le fichier par défaut est relativement bien commenté, j’ai personnellement modifié les lignes suivantes pour avoir un serveur qui n’écoute que sur une des IPs de la box avec un pidfile dans un dossier particulier et j’en ai profité pour ajouter une zone DNS :
ip-address: 213.251.171.146 pidfile: "/var/run/nsd/nsd.pid"
zone: name: "majinboo.org" zonefile: "majinboo.org.zone" outgoing-interface: 213.251.171.146 notify: 217.174.206.169 NOKEY provide-xfr: 217.174.206.169 NOKEY
La modification du chemin du pidfile m’a permis de bypasser un bug lors du lancement du démon, il ne faut pas oublier de créer le dossier en question et d’y donner les droits à l’utilisateur bind.
Avant de lancer le démon, il ne reste plus qu’à créer un fichier de zone au format bind, de le compiler en utilisant zonec et d’ajouter nsd_enable= »YES » à la fin du /etc/rc.conf.
Il est possible d’aller plus loin, par exemple en ajouter des clef DNSSEC pour les échanges entre les serveurs primaires et secondaires.
FreeBSD 8.0 Beta 1
MAJ : La procédure de mise à jour binaire via freebsd-update est toujours accessible, elle est détaillée ici.
Une petite brève pour annoncer la disponibilité de la première bêta de FreeBSD 8.0. Cette mouture est la première déclinée en version « memstick » (pour les architectures i386 et amd64 uniquement). Cette version permet d’utiliser une clef USB en lieu et place de l’habituel CD. Ça pourra être utile pour installer une FreeBSD sur le dernier coupé sport ou les petites citadines à la mode qui n’ont pas de lecteur CD.
Malgré le retard d’une semaine sur cette première bêta, les prochaines bêta et la release date du 31 aout ne sont pas décallées.
Introduction à la programmation C sur iPhone
Un petit article sur un système BSD un peu particulier : iPhone OS en version 2.x pour l’instant mais cet article devrait normalement s’appliquer sans soucis sur un iPhone 3.0 d’ici quelques jours/semaines.
/!\ Cet article va à l’encontre de ce qu’Apple cherche à imposer sur son produit. /!\
Présentation de l’OS
L’iPhone OS est un dérivé de MacOS X lui même dérivé de FreeBSD. On se retrouve rapidement en terrain connu avec le firewall ipfw par exemple. L’OS est par défaut bridé par Apple, pour en profiter, pleinement il faut effectuer un JailBreak. Cette opération ne sera pas détaillée dans cet article (Google est très locace sur le sujet). Le système de packages le plus utilisé sur les iPhone jailbreakés est Cydia (un portage iPhone d’apt). Une fois Cydia installé, il est de bon ton d’installer BSD subsystem et OpenSSH.
Une fois l’accès SSH activé (changer le mot de passe est une très bonne idée), il est possible d’utiliser Cydia en ligne de commande :
#mise à jour de la base de packages apt-get update #recherche du package gcc apt-cache search gcc #installation du package gdb apt-get install gdb
Les logiciels suivants seront très utiles pour la suite :
- iphone-gcc : le compilateur gcc arm
- com.bigboss.20toolchain : la toolchain qui contient entre autre les fichiers d’include standards
- gdb : bien utile pour le debug
- screen : evite de perdre les programmes en cours si le signal wifi est coupé
- vim : pas besoin de le présenter
toto.c
Nous allons réaliser un programme le plus simple possible :
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char ** argv)
{
printf("%s is working !\n",argv[0]);
return 0;
}
Pour compiler ce programme, nous allons devoir préciser à gcc l’emplacement des headers standards :
# gcc toto.c -o toto -I /private/var/include/ ./toto Killed
L’iPhone a refusé d’exécuter notre programme. En effet, l’OS vérifie que le programme a bien été signé par Apple. Heuresement pour nous, il est tout à fait possible de signer nous-même le programme avec ldid (par contre cette signature ne sera reconnue que sur les iPhone jailbreakés) :
ldid -S toto ./toto toto is working !
Conclusion
Il est possible d’aller plus loin, un certain nombre de programmes et de librairies libres ont dors et déjà été portées sur iPhone. Il ne vous reste plus qu’à laisser s’exprimer votre créativité. Attention cependant, cette methode ne permet de réaliser que des programmes utilisables en ligne de commande, pour réaliser des interfaces graphiques iPhone, la meilleure solution reste l’utilisation de l’Objective C.
FreeBSD de plus en plus Xen
Utiliser FreeBSD en domU dans un hyperviseur Xen sera bientôt possible. Cela faisait déjà un moment qu’une page wiki avait été dédiée à ce projet et qu’une petite équipe travaillait dessus. D’après les derniers tests que j’ai pu faire, le domU FreeBSD est beaucoup plus stable, il reste encore quelques bugs et certains reglages kernel inhabituels sont encore nécessaires mais la solution est presque utilisable pour les bidouilleurs ayant un peu de temps à y consacrer. Pour ceux que ça intéresse, Adrian Chadd met à disposition différentes images kernel ici. Une mailling-list a aussi été dédiée à ce projet.
Pour continuer dans la virtualisation, la version 11 du client XenApp vient d’être ajoutée à l’arbre des ports par Thomas Abthorpe (net/citix_xenapp). Ce client permet donc d’éxecuter des applications Windows virtualisées par un serveur citrix XenApp sous FreeBSD. Attention cependant, ce port nécessite l’utilisation de la compatibilité Linux, les points tricky nécessaires à la mise en place de ce port sont disponibles sur cette page wiki.
FreeBSD 8.0 en approche
Le freeze du code source de la version 8 est annoncé pour bientôt. Au menu de cette nouvelle version quelques fonctionalités sympathiques dont entre autres :
- nouvelle implémentation TTY avec enfin le support de l’UTF-8
- jails hiérarchiques : des jails inclus dans d’autres jails pour plus de sécurité
- nouvelle pile USB
- suppression des verrous de la pile réseau
- corrections de bugs sur la pile 802.11
- nouveaux serveurs et clients NFS
- version 13 de ZFS (cf ce lien) qui est déjà disponible en 7.0-STABLE
Avec tout ça, il y a même un planning provisoire :
- 25 juin : code freeze
- 29 juin : 1ère Bêta
- 6 juillet : 2ème Bêta
- 13 juillet : 3ème Bêta
- 27 juillet : 1ère Release Candidate
- 17 août : 2ème Release Candidate
- 31 août : Release
Sans doute la manière la plus rapide d’ajouter un authentification SSH par clef publique :
- Génération de la clef (à ne faire qu’une seule fois)
ssh-keygen
- Ajout de la clef aux clefs autorisées sur le serveur distant
cat ~/.ssh/id_rsa.pub | ssh user_distant@fqdn_serveur_distant \ "cat - >> ~/.ssh/authorized_keys"
Simple, rapide et efficace.
Trust no one !
La plupart des protocoles réseaux utilisés de nos jours n’étant pas cryptés, il est souvent nécessaire de mettre en place un VPN afin de sécuriser certains flux. Pour cet article, nous utiliserons le daemon VPN ‘mpd‘.
Installation du serveur
Il faut tout d’abord installer le port mpd
# cd /usr/ports/net/mpd/ && make install clean
Puis éditer le fichier ‘/etc/rc.conf‘ pour que le daemon soit lancé au démarrage en background (option -b) sans que la console d’administration soit accessible de l’extérieur (option -a)
mpd_flags="-b -a 127.0.0.1" mpd_enable="YES"
Configuration du serveur
La configuration se situe dans trois fichiers, voici un exemple de configuration pour chacun des fichiers :
# Fichier /usr/local/etc/mpd/mpd.conf default: load vpn1 vpn1: new -i ng0 vpn vpn # the session value does matter, but I'm not sure why set iface session 28800 # "username" here should match "username" in mpd.secret set bundle authname "majinbox" set bundle enable compression set ccp yes mppc set ccp yes mpp-e40 set ccp yes mpp-e56 set ccp yes mpp-e128 # set this to your correct routing information set iface route 10.253.6.0/24 set link yes acfcomp protocomp set ipcp yes vjcomp set iface disable on-demand set iface idle 0 set link keep-alive 61 753 set link mtu 1460 set ccp yes mpp-stateless set link no pap set link accept chap set link enable no-orig-auth open
Cette configuration permet d’avoir un lien appellé ‘vpn1‘ pour l’utilisateur ‘majinbox‘. Dans le cas ou le VPN serait utilisé par des clients sous Windows, il est important de commenter la ligne qui active la compression. Il est possible de créer plusieurs connexions, en ajoutant ‘load vpn2‘ dans la section ‘default‘ et en créant une section contenant les directives propres à la sections.
# fichier /usr/local/etc/mpd/mpd.conf majinbox MonMotDePasseEnClair
Ce fichier contient les identifiant et mot de passes des différents utilisateurs. Les mots de passes étant stockés en clair, il faut limiter au maximum les droits en lecture sur ce fichier.
#fichier /usr/local/etc/mpd/mpd.links vpn: set link type pptp set pptp peer 217.174.206.169 set pptp enable incoming set pptp disable originate
Ce fichier permet de définir le sens des connexions VPN, dans notre cas, la connexion est entrante car nous sommes sur le serveur.
Installation et configuration du client
L’installation est la configuration du client est identique à l’exception du fichier ‘mpd.links‘. Il faut être vigilant et lancer le serveur avant le client.
Jusqu’il y a peu de temps, il fallait bidouiller le /etc/make.conf pour utiliser l’option -j de make permettant de paralléliser la compilation d’un port. En plus d’être un hack relativement laids, ce type de bidouille était incompatible avec certains ports. Ce temps là est révolu, il y maintenant une whitelist de ports qui sont d’office compilé avec autant de job en parallèle qu’il y a de cores présents sur la machine. Les ports qui ne sont pas marqué comme compatibles restent compilés sans parallélisation.
Cette fonctionnalité est activée par défaut, pour la désactiver (ce qui n’a d’intérêt que dans des cas très particuliers), il suffit d’ajouter à /etc/make.conf la directive suivante :
DISABLE_MAKE_JOBS=yes
Afin de forcer le nombre de jobs à exécuter en parallèle (option -j de make), il faut utiliser la directive suivante (toujours dans /etc/make.conf) :
MAKE_JOBS_NUMBER=6
Il existe un option pour les kamikazes téméraires qui permet de forcer l’utilisation de cette nouvelle fonctionnalité pour l’ensemble des ports (même pour ceux qui ne sont pas marqués comme compatibles) :
FORCE_MAKE_JOBS=yes
Je vous déconseille néanmoins cette solution. Si le but est de compiler quelques ports qui ne sont pour l’instant pas marqués comme validés, il suffit d’ajouter le fichier Makefile du ou des ports en question et d’y ajouter la directive suivante en dessous des déclarations de dépendances :
MAKE_JOBS_SAFE=yes
Les mainteneurs de ports peuvent aussi marquer leur port comme incompatible avec la directive :
MAKE_JOBS_UNSAFE=yes
Une petite astuce bien pratique :
openssl rsa -in server.key -out server.key.unencrypted
J’en profite pour faire un peu de pub pour StartSSL qui propose des certificats SSL gratuits mais dont l’interface impose de mettre une passphrase sur le certificat (ces certificats ne sont pas malheuresement pas reconnus par IE)
Une des raisons du succès de Firefox est le grand nombre d’extensions disponibles. Ces extensions permettent d’étendre les fonctionnalités du navigateur et il y en a vraiment pour tout les goûts. Dans cet article, nous présenterons 5 des extensions les plus utiles dans le cadre du developpement web.
FireBug
Cette extension permet de naviguer et de modifier de manière intuitive l’ensemble des éléments d’une page web : code HTML, feuille de style CSS, et script JavaScripts. Les modifications se font directement dans le navigateur et sont appliquées immédiatement. Indispensable pour tester différentes mise en page ou pendant une phase de debug de JavaScript.
Lien de téléchargement
YSlow
Attention, cette extension ne fonctionne pas si FireBug n’est pas installé. Cette extension créée par Yahoo mesure les performances d’un site web (temps d’affichage d’une page, taille de la page) et propose des optimisations pertinentes basées sur les best-practices de Yahoo.
Lien de téléchargement
HttpFox
Très bon complément à FireBug, cette extension permet d’enregistrer l’ensemble du trafic HTTP. Cette approche systématique permet d’identifier de manière simple et exhaustive les requêtes les plus lentes.
Lien de téléchargement
Firefox DNS Flusher
Il n’est pas rare de devoir forcer des résolutions DNS lors des phases de développement ou de qualification d’une nouvelle version d’un site web. Forcer la résolutions d’un nom de domaine sur un serveur de test en modifiant le fichier host est aisée. Le problème est la cache DNS de Firefox. Cette extension permet de vider le cache de Firefox et surtout d’afficher l’adresse IP réellement utilisée pour l’affichage du site.
Lien de téléchargement
Selenium IDE
Les sites web étant de plus en plus aboutis au niveaux des fonctionnalités, les scenarii de test deviennent de plus en plus complexes. Selinum IDE permet d’aider le developpeur web dans la création et l’execution d’un scenario de test en permettant d’automatiser la navigation sur un site web.
Lien de téléchargement
Cette liste n’est bien sur pas exhaustive mais permet d’avoir un bon point de départ.