<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Emile "iMil" Heitor 's home &#187; NetBSD</title>
	<atom:link href="http://imil.net/wp/tag/netbsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://imil.net/wp</link>
	<description>life, unix and stuff</description>
	<lastBuildDate>Sun, 13 May 2012 10:43:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>sysutils/conky</title>
		<link>http://imil.net/wp/2012/05/13/sysutilsconky/</link>
		<comments>http://imil.net/wp/2012/05/13/sysutilsconky/#comments</comments>
		<pubDate>Sun, 13 May 2012 09:35:02 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[envsys]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgsrc]]></category>
		<category><![CDATA[proplib]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=727</guid>
		<description><![CDATA[Tout ça, c&#8217;est la faute à Guigui2. Et à Nils aussi.
Y&#8217;a quoi, 2/3 semaines, ces deux là me disent que ce serait tellement bieeeen si on avait conky dans pkgsrc et que patati le challeeenge et que patata tellement c&#8217;est beau tellement y&#8217;a des thèmes de ouf et j&#8217;en passe et des meilleures.
Et je regarde.
Et [...]]]></description>
			<content:encoded><![CDATA[<p>Tout ça, c&#8217;est la faute à Guigui2. Et à Nils aussi.</p>
<p>Y&#8217;a quoi, 2/3 semaines, ces deux là me disent que ce serait tellement bieeeen si on avait <a href="http://conky.sourceforge.net/">conky</a> dans <i>pkgsrc</i> et que patati le challeeenge et que patata tellement c&#8217;est beau tellement y&#8217;a des thèmes de ouf et j&#8217;en passe et des meilleures.</p>
<p>Et je regarde.</p>
<p>Et c&#8217;est l&#8217;engrenage.</p>
<p>Deux semaines plus tard donc, je viens d&#8217;importer <code>sysutils/conky</code> dans <i>pkgsrc current</i> avec le support des <i>sensors</i> usuels, CPU (SMP), load, mémoire, réseau, disque ainsi que batterie et température. Et ces deux derniers, c&#8217;étaient pas les plus simples.</p>
<p>En effet, si par exemple <a href="http://www.freebsd.org">FreeBSD</a> dispose de <a href="http://en.wikipedia.org/wiki/Sysctl">sysctl</a> fort conviviaux du type <code>hw.acpi.battery.time</code> ou <code>hw.acpi.battery.life</code>, bin <a href="http://www.NetBSD.org">nous</a> non. Nous on préfère se faire chier avec <a href="http://www.daemon-systems.org/man/envsys.4.html">envsys(3)</a> dont l&#8217;utilisation est expliquée de manière parfaite par ce commentaire trouvé dans <i>sysutils/torsmo</i>:</p>
<pre>
    /*
     * Using the envsys API is like pulling teeth without anesthetic.
     * so just popen envstat and parse the output instead.
     */
</pre>
<p>Ça résume assez bien la situation.<br />
Mais comme je suis un peu sado-maso sur les bords, et que je souhaitais présenter un peu plus que le pourcentage de charge de la batterie, je me suis lancé dans l&#8217;écriture d&#8217;une petite fonction qui simplifie grandement l&#8217;accès aux ressources d&#8217;envsys. En gros ça donne ça:</p>
<pre>
#include &lt;sys /envsys.h&gt;
#include &lt;prop /proplib.h&gt;

#define _DEV_SYSMON "/dev/sysmon"

#define P_BOOL      0
#define P_UINT8     1
#define P_INT64     2
#define P_STRING    3

typedef struct Devquery {
    int         type;
    char        *dev;
    char        *key;
    char        *row;
} Devquery;

int             sysmon_fd;

int8_t envsys_get_val(Devquery, void *);

void
sysmon_open()
{
    sysmon_fd = open(_DEV_SYSMON, O_RDONLY);
}

void
sysmon_close()
{
    if (sysmon_fd > -1)
        close(sysmon_fd);
}

int8_t
envsys_get_val(Devquery dq, void *val)
{
    char *descr;
    const char *cval;
    prop_dictionary_t dict;
    prop_object_t device;
    prop_object_iterator_t iter;
    prop_object_t obj;
    bool rc = false;

    if (sysmon_fd < 0)
        return -1;

    if (prop_dictionary_recv_ioctl(sysmon_fd, ENVSYS_GETDICTIONARY, &#038;dict)
        != 0)
        return -1;

    if ((device = prop_dictionary_get(dict, dq.dev)) == NULL)
        return -1;

    iter = prop_array_iterator(device);

    while((obj = prop_object_iterator_next(iter)))  {
        descr = (char *)prop_string_cstring_nocopy(prop_dictionary_get(obj,
                "description"));
        if (descr != NULL &#038;&#038; *descr) {
            if(strcmp(descr, dq.key) == 0) {
                switch(dq.type) {
                case P_BOOL:
                    rc = prop_dictionary_get_bool(obj,
                        dq.row, (bool *)val);
                case P_UINT8:
                    rc = prop_dictionary_get_uint8(obj,
                        dq.row, (uint8_t *)val);
                    break;
                case P_INT64:
                    rc = prop_dictionary_get_int64(obj, dq.row,
                        (int64_t *)val);
                    break;
                case P_STRING:
                    rc = prop_dictionary_get_cstring_nocopy(obj,
                        dq.row, &#038;cval);
                    val = (void *)cval;
                    break;
                }
            }
        }
    }

    prop_object_iterator_release(iter);
    prop_object_release(dict);

    if (rc == false) {
        val = NULL;
        return -1;
    }

    return 0;
}
</pre>
<p>On utilise la fonction de cette façon:
</pre>
<pre>
    Devquery dq_ac = { P_BOOL, "acpiacad0", "connected", "cur-value" };

    if (envsys_get_val(dq_ac, (void *)&#038;connected) < 0)
</pre>
<p>Dans cet exemple, <code>connected</code> sera placé à 1 si l'élément <code>acpiacad0</code> est connecté, 0 autrement.</p>
<p>Le package n'est pas encore parfait, mais il est désormais tout à fait utilisable. <i>Upstream</i> a été contacté et l'integration de mes patchs est en cours.</p>
<p>Mandatory screenshot:<br />
<a href="http://imil.net/gfx/NetBSD-conky-full.png"><img src="/gfx/NetBSD-conky-full.png"/></a></pre>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/05/13/sysutilsconky/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Une brêve histoire de design</title>
		<link>http://imil.net/wp/2012/04/23/une-breve-histoire-de-design/</link>
		<comments>http://imil.net/wp/2012/04/23/une-breve-histoire-de-design/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 20:31:40 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[screen]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=721</guid>
		<description><![CDATA[Tout commence la semaine dernière, un innocent freelance que nous faisons bosser sur un projet secret de domination des informations galactiques me montre son boulot et ne résiste pas à l&#8217;envie de me montrer des bouts de code. Je ne manque pas de remarquer que son éditeur de texte ne ressemble à rien de connu, [...]]]></description>
			<content:encoded><![CDATA[<p>Tout commence la semaine dernière, un innocent <i>freelance</i> que nous faisons bosser sur un projet secret de domination des informations galactiques me montre son boulot et ne résiste pas à l&#8217;envie de me montrer des bouts de code. Je ne manque pas de remarquer que son éditeur de texte ne ressemble à rien de connu, mais brille par sa simplicité et son élégance. Il m&#8217;annonce fièrement qu&#8217;il travaille sous <i>Sublime Text 2</i>.<br />
Curieux, je recherche l&#8217;outil en question et m&#8217;aperçois avec effroi que non seulement il n&#8217;est pas Libre, mais qu&#8217;en plus que son prix est exorbitant: 59$ pour *une* licence utilisateur, on se croirait revenu à l&#8217;âge d&#8217;or des <i>shareware</i>.<br />
Mais il est sexy son truc. En particulier les couleurs. Bien choisies, harmonieuses. Sexy.</p>
<p>Je fais mon <i>C</i> sous <a href="http://www.gnu.org/software/emacs/">emacs</a> en console, il en a toujours été ainsi, j&#8217;ai mes habitudes de programmation sur cet éditeur, et si je préfère <a href="http://www.vim.org/">vim</a> pour le scripting et l&#8217;édition de texte simple, <i>emacs</i>, depuis 15 ans maintenant, accompagne la totalité de mes projets en <i>C</i>.<br />
Jusqu&#8217;à ce week-end, je ne m&#8217;étais jamais vraiment préoccupé de problématiques liées aux couleurs, aux thèmes où autres considérations futiles. Jusqu&#8217;à ce week-end.</p>
<p>D&#8217;abord, je comprend que mon terminal <i>screené</i> n&#8217;affiche pas plus de 8 couleurs, cela parce que l&#8217;option <code>PKG_OPTIONS.screen+= ncurses</code> n&#8217;est pas présente dans mon <code>/etc/mk.conf</code>, et que cela a pour conséquence que cette condition:</p>
<pre>
.if !empty(PKG_OPTIONS:Mncurses)
CURSES_DEFAULT= ncurses
CONFIGURE_ARGS+=        --enable-colors256
.endif
</pre>
<p>n&#8217;est pas remplie. Résultat, toute tentative d&#8217;utiliser un quelconque thème muni de couleurs un peu originales se solde par un vague pâté difforme à 8 couleurs.<br />
L&#8217;utilisation du script <a href="http://www.frexx.de/xterm-256-notes/data/256colors2.pl">256colors2.pl</a> me confirme qu&#8217;à l&#8217;issue de la recompilation de <i>screen</i> avec les bonnes options, on obtient bien de jolis dégradés:<br />
<img src="/gfx/256colors.png"/></p>
<p><i>Emacs</i> refusait de m&#8217;annoncer plus de 8 couleurs à son tour, quand bien même le terminal qui l&#8217;héberge était désormais muni de super pouvoirs. Rien à faire, <code>M-x list-colors-display</code> ne m&#8217;affichait que 8 ignobles couleurs standard.<br />
Deux choses à faire ici, ajouter un <code>~/.termcap</code> décrivant un terminal de type <code>xterm-256color</code>, et ensuite, démarrer le monsieur de cette façon:</p>
<pre>
$ TERM=xterm-256color emacs
</pre>
<p>N&#8217;exportez pas cette variable dans votre <code>~/.profile</code>, bien d&#8217;autres emmerdes vous attendraient au tournant. J&#8217;ai préféré un vilain <i>alias</i>.</p>
<p>Finalement, je me rend compte que les couleurs présentées par un <i>emacs screené</i> sont assez différentes d&#8217;un <i>emacs non screené</i>. De fil en aiguille, je tombe sur <a href="http://www.xvx.ca/~awg/emacs-colors-howto.txt">cette page</a> sur laquelle on trouve <a href="http://www.splode.com/~friedman/software/emacs-lisp/src/term/xterm-256color.el">ce fichier</a> à placer dans votre <code>~/.emacs.d/term</code> afin de retrouver des couleurs adéquates.</p>
<p>Après des heures de bataille, j&#8217;ai enfin pu bidouiller un des thèmes présents sur <a href="http://www.emacswiki.org/emacs/ColorThemeCollection">emacswiki</a> pour obtenir ceci:<br />
<img src="/gfx/emacs-monokai.png"/><br />
Je suis pas fâché du résultat.</p>
<p>Et comme j&#8217;aime bien partager, voici le <a href="http://imil.net/stuff/color-theme-imil.el">thème</a> et le <a href="http://imil.net/stuff/init.el">init.el</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/04/23/une-breve-histoire-de-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ça va pas être possible avec vos baskets</title>
		<link>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/</link>
		<comments>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 08:42:57 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[naxsi]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/</guid>
		<description><![CDATA[Dans ma boîte, l&#8217;équipe sécurité a publié voila quelques mois de cela un module pour nginx: un firewall applicatif du nom de naxsi.
Ce module, sous licence GPLv2, je viens de le publier dans pkgsrc current sous la forme d&#8217;une option de www/nginx. Je me propose de vous montrer ici comment sécuriser simplement votre serveur web [...]]]></description>
			<content:encoded><![CDATA[<p>Dans <a href="http://www.nbs-system.com">ma boîte</a>, l&#8217;équipe sécurité a publié voila quelques mois de cela un module pour <a href="http://wiki.nginx.org/Main">nginx</a>: un firewall applicatif du nom de <a href="http://code.google.com/p/naxsi/">naxsi</a>.</p>
<p>Ce module, sous licence GPLv2, je viens de le publier dans <i>pkgsrc current</i> sous la forme d&#8217;une option de <code>www/nginx</code>. Je me propose de vous montrer ici comment sécuriser simplement votre serveur web / proxy inverse <i>nginx</i> grâce à <i>naxsi</i>.</p>
<p>Premièrement, si comme moi (et comme il se doit) vous utilisez une branche stable de <i>pkgsrc</i>, mettez simplement à jour <code>www/nginx</code> comme ceci:</p>
<pre>
$ cd /usr/pkgsrc/www/nginx
# cvs up -rHEAD -dP
</pre>
<p>Puis spécifiez à <i>pkgsrc</i> que vous souhaitez activer l&#8217;option <i>naxsi</i> pour le paquet <i>nginx</i>:</p>
<pre>
$ grep nginx /etc/mk.conf
PKG_OPTIONS.nginx+=     naxsi
</pre>
<p>Ceci fait, reconstruisez le paquet comme d&#8217;habitude:</p>
<pre>
$ cd /usr/pkgsrc/www/nginx
$ sudo make update clean
</pre>
<p>Dans la configuration de <i>nginx</i>, incluez les règles par défaut de <i>naxsi</i> de cette façon:</p>
<pre>
http {
    include       /usr/pkg/etc/nginx/mime.types;
    include       /usr/pkg/etc/nginx/naxsi_core.rules; # < --- ici
    default_type  application/octet-stream;
</pre>
<p>Comme vous pourrez le constater, le fichier <code>/usr/pkg/etc/nginx/naxsi_core.rules</code> contient un <i>set</i> de règles déjà très efficaces contre bon nombre d'attaques connues.<br />
Reste alors à activer le filtrage sur une <code>location</code> et choisir quels types d'attaques vous souhaitez bloquer; par exemple:
</pre>
<pre>
        location / {
            SecRulesEnabled;
            CheckRule "$SQL >= 8" BLOCK;
            CheckRule "$RFI >= 8" BLOCK;
            CheckRule "$TRAVERSAL >= 4" BLOCK;
            CheckRule "$EVADE >= 4" BLOCK;
            CheckRule "$XSS >= 8" BLOCK;
</pre>
<p>Un redémarrage de <i>nginx</i> plus loin, on essayera par exemple d&#8217;accéder à une adresse louche:</p>
<pre>
$ wget -O- http://coruscant/?../../etc/passwd
--2012-04-22 10:21:01--  http://coruscant/?../../etc/passwd
Resolving coruscant... 192.168.1.2
Connecting to coruscant|192.168.1.2|:80... connected.
HTTP request sent, awaiting response... No data received.
</pre>
<p>Et de constater dans <code>/var/log/nginx/error.log</code>:</p>
<pre>
2012/04/22 10:21:01 [error] 25353#0: *15 NAXSI_FMT: ip=192.168.1.1&#038;server=192.168.1.2&#038;uri=/&#038;total_processed=1&#038;total_blocked=1&#038;zone0=ARGS&#038;id0=1200&#038;var_name0=, client: 192.168.1.1, server: localhost, request: "GET /?../../etc/passwd HTTP/1.0", host: "192.168.1.2"
</pre>
<p>Moi j&#8217;trouve ça assez classe tout de même.</p>
<p>Toutes les infos relatives à la configuration de <i>naxsi</i> sont disponibles <a href="http://code.google.com/p/naxsi/wiki/TableOfContents?tm=6">sur le Wiki</a> de ce dernier.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin 0.5.2.3</title>
		<link>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/</link>
		<comments>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 10:19:06 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Ma vie, mon oeuvre]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=716</guid>
		<description><![CDATA[!@#!@# de bug.
Des mois que je cherchais au mauvais endroit, en effet, uniquement chez certains utilisateurs (évidemment), un pkgin up / fug proposait d&#8217;installer l&#8217;univers. Problème dans le moteur de dépendances me dis-je; que de temps perdu à décortiquer ce qui fonctionnait parfaitement, pour finalement tomber sur ceci:

static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const [...]]]></description>
			<content:encoded><![CDATA[<p>!@#!@# de bug.</p>
<p>Des mois que je cherchais au mauvais endroit, en effet, <strong>uniquement</strong> chez certains utilisateurs (évidemment), un <code>pkgin up / fug</code> proposait d&#8217;installer l&#8217;univers. Problème dans le moteur de dépendances me dis-je; que de temps perdu à décortiquer ce qui fonctionnait parfaitement, pour finalement tomber sur ceci:</p>
<pre>
static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const char	*conflicts;
	const char	*requires;
	const char	*provides;
	const char	*end;
} sumsw[] = {
	{
		LOCAL_SUMMARY,
		"LOCAL_PKG",
		"LOCAL_DEPS",
		"LOCAL_CONFLICTS",
		"LOCAL_REQUIRES",
		"LOCAL_PROVIDES",
		NULL
	},
	{
		REMOTE_SUMMARY,
		"REMOTE_PKG",
		"REMOTE_DEPS",
		"REMOTE_CONFLICTS",
		"REMOTE_REQUIRES",
		"REMOTE_PROVIDES",
		NULL
	},
};

[...]

	for (ptbl = __UNCONST(sum.tbl_name), i = 0;
		 i < nelms;
		 ptbl += ((strlen(ptbl) + 1) * sizeof(char)), i++) {
</pre>
<p>Il ne faut PAaaaaaaas coder avec de l'alcool dans le sang, il ne faut <strong>pas</strong>, parce qu'après, on se retrouve avec des bouts de trucs ni faits ni à faire qui supposent que les membres d'une structure seront forcément alignés, et des effets de bords qui n'ont rien à voir.</p>
<p>Bref, <i>stacktic</i> m'a proposé cette méthode, bien plus élégante:
</pre>
<pre>
static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const char	*conflicts;
	const char	*requires;
	const char	*provides;
	const char	*end;
} sumsw[] = {
	[LOCAL_SUMMARY] = {
		LOCAL_SUMMARY,
		"LOCAL_PKG",
		"LOCAL_DEPS",
		"LOCAL_CONFLICTS",
		"LOCAL_REQUIRES",
		"LOCAL_PROVIDES",
		NULL
	},
	[REMOTE_SUMMARY] = {
		REMOTE_SUMMARY,
		"REMOTE_PKG",
		"REMOTE_DEPS",
		"REMOTE_CONFLICTS",
		"REMOTE_REQUIRES",
		"REMOTE_PROVIDES",
		NULL
	},
};

[...]

	/* (REMOTE[LOCAL)_PKG is first -> skip */
	for (arr = &#038;(sum.tbl_name) + 1; *arr != NULL; ++arr) {
</pre>
<p>Aaah, bah oui, tout de suite c&#8217;est moins dégueulasse hein.</p>
<p><i>0.5.2.3</i> est dans <i>current</i>, et le <a href="http://www.netbsd.org/developers/releng/pullups.html">pullup request</a> vient de partir.</p>
<p>meh.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin@FOSDEM 2012</title>
		<link>http://imil.net/wp/2012/02/09/pkginfosdem-2012/</link>
		<comments>http://imil.net/wp/2012/02/09/pkginfosdem-2012/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 22:31:28 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[FOSDEM]]></category>
		<category><![CDATA[NetBSD]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=698</guid>
		<description><![CDATA[De retour du FOSDEM 2012; 2 jours exceptionnels, des amis, du prosélytisme, des rencontres, des échanges. D&#8217;excellents souvenirs et le rendez-vous est d&#8217;ores et déjà pris pour l&#8217;année prochaine. Merci à tous, et tout particulièrement aux lutins du jardin magique.
Le stand NetBSD que je tenais avec Nicolas, Marc, Nod et Vera était bien animé, bon [...]]]></description>
			<content:encoded><![CDATA[<p>De retour du <a href="http://fosdem.org/2012/">FOSDEM 2012</a>; 2 jours exceptionnels, des amis, du prosélytisme, des rencontres, des échanges. D&#8217;excellents souvenirs et le rendez-vous est d&#8217;ores et déjà pris pour l&#8217;année prochaine. Merci à tous, et tout particulièrement aux lutins du jardin magique.<br />
Le stand NetBSD que je tenais avec Nicolas, Marc, Nod et Vera était bien animé, bon nombre de visiteurs ont montré un fort intérêt pour le projet, ça fait plaisir :)</p>
<p>Voici la présentation <a href="http://imil.net/NetBSD/pkgin-FOSDEM-2012.pdf">traitant de pkgin</a> que j&#8217;ai faite aux BSD devrooms.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/02/09/pkginfosdem-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mmmmm les bons spaghettis</title>
		<link>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/</link>
		<comments>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 13:39:05 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pf]]></category>
		<category><![CDATA[route-to]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=668</guid>
		<description><![CDATA[Ça commence à sentir le vieux sac de lacets sur ma routing box.
Pour rappel, j&#8217;utilise un domU NetBSD hébergé quelque part pour différencier mon traffic sortant. Ce domU est controllé par un dom0 Debian Squeeze, et a ceci de particulier que sa route par défaut part vers la suède. Seuls quelques services répondent directement sur [...]]]></description>
			<content:encoded><![CDATA[<p>Ça commence à sentir le vieux sac de lacets sur ma <a href="http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/">routing box</a>.<br />
Pour rappel, j&#8217;utilise un domU NetBSD hébergé <i>quelque part</i> pour différencier mon traffic sortant. Ce domU est controllé par un dom0 Debian Squeeze, et a ceci de particulier que sa route par défaut part vers la suède. Seuls quelques services répondent directement sur l&#8217;IP publique &#8220;réelle&#8221;, sur laquelle j&#8217;opère du <a href="http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html">SNAT et du DNAT</a>.</p>
<p>Tout ceci manquait cruellement d&#8217;un soupçon d&#8217;IPv6. Ainsi, après m&#8217;être frotté à SixXs et son système de <a href="http://www.sixxs.net/faq/account/?faq=credits">crédits</a> aussi ingénieux que pénible, j&#8217;ai finalement opté pour <a href="http://tunnelbroker.net">Hurricane Electric</a> qui a en plus le bon goût de posséder un <i>endpoint</i> à <a href="http://en.wikipedia.org/wiki/Coruscant">Paris</a>.</p>
<p>Si la configuration d&#8217;un tunnel v4/v6 se réalise le plus simplement du monde depuis plus de 10 ans via des <a href="http://www.netbsd.org/docs/network/ipv6/">tunnels gif</a>, l&#8217;opération n&#8217;est pas complètement triviale lorsque le endpoint se trouve être NATté et qu&#8217;en plus ce dernier utilise une route par défaut différente de l&#8217;IP publique officielle du dom0.</p>
<p>Ainsi, après avoir souscrit à un <i>endpoint</i> IPv6 chez <i>HE</i>, quelques opérations sont nécessaires au bon fonctionnement du routage. Nous considèrerons que l&#8217;ip du <i>endpoint gif IPv4</i> chez Hurricane est <code>1.2.3.4</code> et que notre IPv4 publique, sur le dom0 donc, est <code>5.6.7.8</code>.</p>
<p>La première chose à faire sur notre dom0 est de rediriger tout le traffic en provenance de HE vers notre domU, dont nous considèrerons que l&#8217;IPv4 privée est <code>192.168.0.1</code>.</p>
<pre># iptables -t nat -A PREROUTING -i eth0 -s 1.2.3.4 -j DNAT --to-destination 192.168.0.1</pre>
<p>Il faudra évidemment, si cela n&#8217;est pas déjà fait, appliquer du <i>SNAT</i> afin que votre domU puisse &#8220;sortir&#8221; et se présenter avec notre IPv4 publique au monde. Par exemple:</p>
<pre># iptables -t nat -A POSTROUTING -s 192.168.0.1/32 -o eth0 -j SNAT --to-source 5.6.7.8</pre>
<p>C&#8217;est l&#8217;unique configuration à effectuer sur le dom0. Jusqu&#8217;ici tout va bien.</p>
<p>Sur notre domU NetBSD, nous créons l&#8217;interface de <i>tunneling</i> comme ceci:</p>
<pre>
# ifconfig gif0 create
# ifconfig gif0 tunnel 192.168.0.1 1.2.3.4
# ifconfig gif0 inet6 2001:470:1e31:b2c::2 2001:470:1e31:b2c::1 prefixlen 128
</pre>
<p>Notez que c&#8217;est bien l&#8217;IPv4 <strong>privée</strong> que nous utilisons pour monter le tunnel <code>gif</code>, le <i>SNAT</i> du dom0 s&#8217;occuppera de transformer cette IP au vol.<br />
Cette seule configuration, compte tenu du <a href="http://imil.net/wp/2011/07/24/jouons-a-cache-cache/">routage particulier</a> de notre domU, ne suffira pas au bon fonctionnement du tunnel. Deux opérations sont nécessaires:</p>
<ul>
<li>Ajouter une route explicite vers le <i>endpoint HE</i></li>
<li>Forcer la sortie vers l&#8217;interface réelle du dom0 lorsqu&#8217;on essaye de joindre une adresse IPv6</li>
</ul>
<p>Execution:</p>
<pre># route add -host 1.2.3.4 192.168.0.254</pre>
<p>Ici, 192.168.0.254 est l&#8217;adresse passerelle du dom0.</p>
<pre># grep he_tunnel /etc/pf.conf-ovpn
he_tunnel="1.2.3.4/32"
pass out quick route-to ($real_if $gateway) from any to $he_tunnel
</pre>
<p><code>$real_if</code> représente l&#8217;interface <code>xennet0</code>, et <code>$gateway</code> l&#8217;adresse de notre passerelle coté dom0, à savoir <code>192.168.0.254</code>.<br />
Reste à appliquer une route par défaut pour les adresses IPv6:</p>
<pre>
route -n add -inet6 default 2001:470:1e31:b2c::1
</pre>
<p>Et nous y sommes. Enfin, il faut evidemment automatiser toutes ces manipulations afin de retrouver notre état fonctionnel à chaque <i>reboot</i>, cela est réalisé en créant le fichier <code>/etc/ifconfig.gif0</code> avec ce contenu:</p>
<pre>create
tunnel 192.168.0.1 1.2.3.4
inet6 2001:470:1e31:b2c::2 2001:470:1e31:b2c::1 prefixlen 128
!route add -host 1.2.3.4 192.168.0.254
!route -n add -inet6 default 2001:470:1e31:b2c::1
</pre>
<p>And voila, Danse petite tortue, danse !</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SMTP AUTH sous NetBSD, vite fait</title>
		<link>http://imil.net/wp/2011/11/11/smtp-auth-sous-netbsd-vite-fait/</link>
		<comments>http://imil.net/wp/2011/11/11/smtp-auth-sous-netbsd-vite-fait/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 12:15:56 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[SASL]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[TLS]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=659</guid>
		<description><![CDATA[Heureux possesseur d&#8217;un téléphone Android, j&#8217;utilise comme bon nombre de mes compères le logiciel K9-mail, probablement le meilleur MUA disponible sur cette plateforme, et qui a le bon goût d&#8217;être Libre, au contraire des centaines de milliers d&#8217;applis merdiques à 0.99€.
Jusqu&#8217;à présent, je n&#8217;utilisais K9 que pour lire mon mail, essentiellement dans le metro, &#8220;on [...]]]></description>
			<content:encoded><![CDATA[<p>Heureux possesseur d&#8217;un téléphone Android, j&#8217;utilise comme bon nombre de mes compères le logiciel <a href="https://github.com/k9mail/k-9/wiki/">K9-mail</a>, probablement le meilleur MUA disponible sur cette plateforme, et qui a le bon goût d&#8217;être Libre, au contraire des centaines de milliers d&#8217;applis merdiques à 0.99€.<br />
Jusqu&#8217;à présent, je n&#8217;utilisais K9 que pour lire mon mail, essentiellement dans le metro, &#8220;on the go&#8221;. Et puis finalement, je suis dit qu&#8217;il serait fort convivial de pouvoir utiliser mon serveur mail perso depuis un peu partout.<br />
Mon serveur mail, est-il besoin de le préciser, est un domU NetBSD sur lequel sont executés <a href="http://www.sendmail.com/sm/open_source/">Sendmail</a> et <a href="http://dovecot.org/">dovecot</a>.<br />
Il y a <a href="http://imil.net/wp/2005/09/18/chula-chupala/">un certain temps de cela</a>, j&#8217;avais documenté la méthode pour FreeBSD, et assez étrangement, jamais pour NetBSD. Je vais donc corriger le tir de ce pas.</p>
<p>La première chose à faire est de préciser que nous souhaitons bénéficier du support TLS et SASL dans sendmail. Ceci est réalisé dans le fichier <code>/etc/mk.conf</code>:</p>
<pre>
PKG_OPTIONS.sendmail=   tls sasl
</pre>
<p>Je ne sais pas si cela est lié au fait que la machine sur laquelle j&#8217;ai mené l&#8217;opération est &#8220;encore&#8221; en 5.0.2, mais la compilation de <i>cyrus-sasl</i> a misérablement échoué dans sa configuration par défaut. Ceci:</p>
<pre>
db_ndbm.c: In function '_sasldb_getdata':
db_ndbm.c:95: warning: passing argument 3 of 'utils->getcallback' from incompatible pointer type
</pre>
<p>M&#8217;a mis sur la voie, et j&#8217;ai donc ajouté dans mon <code>/etc/mk.conf</code> la ligne suivante:</p>
<pre>
SASL_DBTYPE=            berkeley
</pre>
<p>Un <code>make update clean</code> plus loin, tout était installé. Il est à noter que, par défaut, <i>cyrus-sasl</i> ne fournit aucun plugin, aussi, il sera nécessaire d&#8217;en installer au moins un, par exemple:</p>
<pre>
# cd /usr/pkgsrc/security/cy2-login
# make install clean
</pre>
<p>Qui nous permettra d&#8217;utiliser le couple <i>login/password</i> de notre système. Deux étapes sont nécessaires pour utiliser cette méthode, tout d&#8217;abord, il faut installer le démon <code>saslauthd</code>, en charge des échange d&#8217;authentification <i>plain text</i>:</p>
<pre>
# cd /usr/pkgsrc/security/cyrus-saslauthd/
# make install clean
# cp /usr/pkg/share/examples/rc.d/saslauthd /etc/rc.d
# echo "saslauthd=YES" >> /etc/rc.conf
# /etc/rc.d/saslauthd start
</pre>
<p>Puis de préciser au <i>plugin SASL</i> qu&#8217;il devra utiliser le démon <code>saslauthd</code> pour l&#8217;authentification en provenance de <i>sendmail</i>.</p>
<pre>
# cat /usr/pkg/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd
</pre>
<p>Nous ajoutons maintenant à <i>sendmail</i> la gestion de ces deux nouvelles fonctionnalités:</p>
<pre>
# cd /usr/pkg/share/sendmail/cf
# cat monserveur.mc
[...]
dnl ### SMTP AUTH
define(`confAUTH_MECHANISMS', `LOGIN')dnl
TRUST_AUTH_MECH(`LOGIN')dnl
dnl ### STARTTLS
dnl ### Ces sertificats sont en provenance de CACert.org. Il ne s'agit pas de certificats auto-signés
define(`confCACERT_PATH',`/etc/mail/certs/')dnl
define(`confCACERT', `/etc/mail/certs/cacert.crt')
define(`confSERVER_CERT',`/etc/mail/certs/certificat_serveur.pem')dnl
define(`confSERVER_KEY',`/etc/mail/certs/certificat_privatekey.pem')dnl
[...]
</pre>
<p>Puis nous compilons et installons la nouvelle configuration:</p>
<pre>
# make install-cf CF=monserveur
rm -f monserveur.cf
m4 ../m4/cf.m4 monserveur.mc > monserveur.cf || ( rm -f monserveur.cf &#038;&#038; exit 1 )
echo "### monserveur.mc ###" >>monserveur.cf
sed -e 's/^/# /' monserveur.mc >>monserveur.cf
chmod 444 monserveur.cf
/usr/bin/install -c -o root -g wheel -m 0444 monserveur.cf /etc/mail/sendmail.cf
/usr/bin/install -c -o root -g wheel -m 0444 monserveur.cf /etc/mail/submit.cf
</pre>
<p>À l&#8217;issue d&#8217;un <code>/etc/rc.d/sendmail restart</code>, nous devrions constater les choses suivantes:</p>
<pre>
# sendmail -d0.1 -bv root | grep SASL
                SASLv2 SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
</pre>
<p>Et également:</p>
<pre>
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220monserveur ESMTP Sendmail 8.14.5/8.14.5; Fri, 11 Nov 2011 13:13:17 +0100 (CET)
ehlo localhost
250-monserveur Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE 5000000
250-DSN
250-ETRN
250-AUTH LOGIN
250-STARTTLS
250-DELIVERBY
250 HELP
</pre>
<p>Ne reste alors qu&#8217;à configurer votre MUA pour qu&#8217;il utilise votre serveur SMTP sur le port 587 <b>en TLS</b> avec la méthode LOGIN, avec les <i>login/passwd</i> de l&#8217;utilisateur souhaité.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/11/11/smtp-auth-sous-netbsd-vite-fait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MIX ALL THE SOURCES!!!</title>
		<link>http://imil.net/wp/2011/10/31/mix-all-the-sources/</link>
		<comments>http://imil.net/wp/2011/10/31/mix-all-the-sources/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 16:00:55 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[domU]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=657</guid>
		<description><![CDATA[Ce matin, j&#8217;ai mis à jour le dom0 Debian d&#8217;une de mes machines. Passionnant me direz-vous. L&#8217;opération a consisté en la migration de Lenny vers Squeeze. De plus en plus interessant hein ? L&#8217;upgrade s&#8217;est effectué sans trop de peine, après quelques apt-get -f install et autres réinstallations de packages ayant sauté dans la bataille, [...]]]></description>
			<content:encoded><![CDATA[<p>Ce matin, j&#8217;ai mis à jour le dom0 Debian d&#8217;une de mes machines. Passionnant me direz-vous. L&#8217;opération a consisté en la migration de Lenny vers Squeeze. De plus en plus interessant hein ? L&#8217;<i>upgrade</i> s&#8217;est effectué sans trop de peine, après quelques <code>apt-get -f install</code> et autres réinstallations de packages ayant sauté dans la bataille, rien de palpitant. Me voici donc avec un kernel 2.6.35-2 sur un Xen 4 flambant neuf.</p>
<p>Ce dom0 accueille des domU NetBSD. Des NetBSD 5.0.2 pour être précis. Et c&#8217;est le drame: Le <a href="http://gnats.netbsd.org/44743">PR 44743</a> indique en effet:<br />
<i><br />
Subject: Network doesn&#8217;t work on DomU NetBSD 5.1 which is run on Debian Squeeze Dom0 (Xen 4)<br />
</i><br />
Ce à quoi Dieu^WManuel Bouyer répond:<br />
<i><br />
No, copy mode support was added to the backend (dom0) before 5.1, but<br />
 it was added to the frontend (domU) after 5.1 was released. So you need<br />
 something newer from the netbsd-5 branch.<br />
</i><br />
Vous voyez poindre le bordel ? &#8220;Mais migre, bigre de couillon&#8221; me direz-vous, et vous aurez raison, seulement cette machine construit des packages (via <i>bulk build</i>, voir le post précédent) pour un certain nombre d&#8217;autres machines, elles aussi en 5.0.2. Bref, rien n&#8217;est simple. J&#8217;ai donc adopté une méthode &#8220;alternative&#8221; (aussi appelée la méthode *rhon* *rhon* *huiiiiii*): patcher le noyau 5.0.2 avec les <i>bits and pieces</i> nécessaires en provenance de <i>netbsd-5</i>. Finalement, cela n&#8217;a pas été si compliqué. Il suffit de <code>cvs up -rnetbsd-5 -dP</code> dans <code>src/sys/arch/xen</code> et <code>src/sys/arch/x86</code> puis de relancer un <code>config, make depend, make</code> pour obtenir un noyau domU 5.0.2 muni du support <i>copy mode</i>.</p>
<p>&#8220;All went better than expected&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/10/31/mix-all-the-sources/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>pkgin (probably not weekly) news</title>
		<link>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/</link>
		<comments>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 21:10:05 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[DragonFlyBSD]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=634</guid>
		<description><![CDATA[Foreword: this post will be written in english as many pkgin users don&#8217;t speak french. Sorry to my french readers then, and sorry also to my english readers as i&#8217;m not as fluent in english as i am in french :)
I subscribed to jmmv&#8217;s blog, The Julipedia, a while ago and found his idea of [...]]]></description>
			<content:encoded><![CDATA[<p><i>Foreword: this post will be written in english as many <code>pkgin</code> users don&#8217;t speak french. Sorry to my french readers then, and sorry also to my english readers as i&#8217;m not as fluent in english as i am in french :)</i></p>
<p>I subscribed to jmmv&#8217;s blog, <a href="http://blog.julipedia.org/">The Julipedia</a>, a while ago and found his idea of the <a href="http://blog.julipedia.org/2011/09/kyua-weekly-status-report_26.html">&#8220;Kyua: Weekly status report&#8221;</a> very inspiring, that&#8217;s a good way to keep your users informed on how the project is moving and keeps you focused on your TODO (although i hate TODO&#8217;s&#8230;). I doubt i&#8217;ll have the time to write a weekly report, but at last i&#8217;ll try to write a post whenever important updates are made to <a href="http://pkgin.net/">my beloved project</a>.</p>
<p>So let&#8217;s begin !<br />
As you, pkgin users, may be aware of, i&#8217;m working on the future 0.5 release, which includes massive internal changes plus some features that have been asked and i found interesting. So, in addition to the features i already listed in <a href="http://mail-index.netbsd.org/pkgsrc-users/2011/08/29/msg014870.html">this mail</a> sent to <i>pkgsrc-users@</i>, here are some hilights on recent changes:</p>
<ul>
<li>pkgin now has a <a href="http://imil.net/gfx/pkgin-logo-new.png">new logo</a> !</li>
<li>it is now possible to export / import your keep-list, pretty much like <code>dpkg</code>&#8216;s <code>get/set-selection</code>. The exported list is in <code>pkg_chk</code>&#8216;s format. Thanks wiz@ for the idea</li>
<li>pkgin install can now take a &#8220;blob&#8221; as an argument, i.e. <code>pkgin in 'mysql-server&lt;5.5'</code>, thanks filip@ for the idea</li>
<li>pkgin now uses pkgsrc&#8217;s <code>pkg_install</code> for NetBSD also</li>
<li>added the <code>-t</code> modifier, mostly for debugging purposes, in order to trace the dependency tree and impact lists</li>
<li><code>pkg_install</code> error logs are handled in a nicer way</li>
<li>enlisted pkgin&#8217;s code to <a href="http://www.ohloh.net/p/pkgin">ohloh</a> (click on &#8220;i use this&#8221; !)</li>
<li>plus usual bugfixes</li>
</ul>
<p>Yeah, these were fairly productive holidays :) Of course most of these changes are only available in CVS, see http://pkgin.net for details. Some of them have already made their way to <a href="http://pkgsrc-wip.sourceforge.net/">pkgsrc-wip</a>, i try not to insert big changes now, so wip and CVS should be sync&#8217;ed quite often.</p>
<p>Needs to be done:</p>
<ul>
<li>make pkgin&#8217;s pkgsrc <strong>package</strong> depend on pkgsrc&#8217;s <code>pkg_install</code></li>
<li>reproduce and fix 2 different bugs two users had</li>
<li>optimize the dependency loop regarding packages that exists in many versions (i.e. bash)</li>
<li>check if <code>pkg_install</code> is to be upgraded and then push it on top of ordered list</li>
<li>test Minix 3.2.0</li>
</ul>
<p>Hope i&#8217;ll make it to <i>pkgsrc 2011Q4</i> !</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mais tu t&#8217;ennuies dans la vie en fait ?</title>
		<link>http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/</link>
		<comments>http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 08:41:30 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[anonymity]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[IPsec]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[OpenVPN]]></category>
		<category><![CDATA[pf]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/</guid>
		<description><![CDATA[Depuis que j&#8217;ai commencé la serie de billets qui parlent de tunnels, on me demande en substance &#8220;c&#8217;est chouette et tout mais&#8230; tu vas ou là ?&#8221;. Rappelez-vous, le premier billet de cette serie parlait de tunnels suédois, et bien évidemment, je ne suis pas le seul à désirer contrôler plus finement le chemin qu&#8217;empruntent [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis que j&#8217;ai commencé la serie de billets qui parlent de tunnels, on me demande en substance &#8220;c&#8217;est chouette et tout mais&#8230; tu vas ou là ?&#8221;. Rappelez-vous, le premier billet de cette serie parlait de <a href="http://imil.net/wp/2011/07/24/jouons-a-cache-cache/">tunnels suédois</a>, et bien évidemment, je ne suis pas le seul à désirer contrôler plus finement le chemin qu&#8217;empruntent les paquets IP qui sortent de mes machines. Aussi, avec quelques amis, avons nous décidé de mettre en place un réseau possiblement sécurisé, interconnecté, et hautement disponible. Ainsi, l&#8217;objectif est de pouvoir contacter nos réseaux à travers des liens cryptés, et de sortir sur le Net en utilisant differents tunnels, ces routes se construisant dynamiquement grâce au protocole <a href="http://fr.wikipedia.org/wiki/Border_Gateway_Protocol">BGP</a>.<br />
Hormis l&#8217;aspect purement pratique de la chose, le projet est passionnant et les techniques employées sont élégantes et interessantes. For teh lulz quoi.</p>
<p>Plus précisemment, considérons une machine, hébergée quelque part sur l&#8217;Internet. Cette machine fait office de routeur BGP à l&#8217;aide du logiciel <a href="http://www.quagga.net/">Quagga</a>. Ce routeur BGP est connecté à d&#8217;autres routeurs représentant autant de <a href="http://fr.wikipedia.org/wiki/Autonomous_System">Systèmes Autonomes (AS)</a>, privés bien entendu, on parle ici d&#8217;EBGP (Exterior Border Gateway Protocol). À ce routeur, je connecte ma passerelle maison, qui fait partie de mon AS privé. C&#8217;est un lien IBGP (Interior Border Gateway Protocol).</p>
<p>Lorsqu&#8217;un noeud, que j&#8217;ai déclaré dans la configuration du routeur, se connecte à notre réseau, ce dernier annonce les routes qu&#8217;il souhaite. Par exemple un réseau d&#8217;échange ou encore une route par defaut. Un système de poids fera préférer tel ou tel chemin pour joindre un point du réseau.</p>
<p>Voici un exemple de configuration, très simple, de l&#8217;un des routeurs de bordure:</p>
<pre>
password trescomplique
enable password trestrescomplique
!
router bgp 65535
 bgp router-id 10.0.1.1
 network 192.168.10.0/24
 neighbor 10.0.1.2 remote-as 65535
 neighbor 10.0.2.1 remote-as 65536
!
ip forwarding
</pre>
<p>On établit ici une liaison IBGP vers 10.0.1.2 et EBGP vers 10.0.2.1, et on annonce sur ces réseaux comment joindre 192.168.10.0/24.</p>
<p>Comme vous vous en doutiez, ces routeurs sont <strong>tous</strong> reliés entre eux par une <a href="http://imil.net/wp/2011/07/29/ya-plus-simple-mais-cest-moins-rigolo/">liaison point à point IPsec</a>, routent leur traffic à travers des <a href="http://imil.net/wp/2011/08/06/i-herd-you-liek-tunnels/">tunnels gre(4) sur les liaisons IPsec</a>, et sortent tous par défaut sur Internet <a href="http://imil.net/wp/2011/07/24/jouons-a-cache-cache/">via la Suède</a>.</p>
<p>Ce dernier point n&#8217;est pas anodin d&#8217;un point de vue routage; en effet, il est contre-productif qu&#8217;une partie du traffic, celui de l&#8217;infrastructure, emprunte la suède pour communiquer avec ses pairs. Pire, dans certains cas cela provoquera des cas de routage asymétrique. Aussi, il est indispensable de mettre en place des règles de gestion de routage&#8230; en amont de la table de routage ainsi que de la SPD d&#8217;IPsec. La solution ? <a href="http://www.openbsd.org/faq/pf/">PF</a> bien sûr :)</p>
<p>Voici la configuration que j&#8217;utilise pour m&#8217;assurer que tout le traffic lié à l&#8217;infrastructure emprunte bien des chemins optimaux (explication dans la conf):</p>
<pre>
real_if="xennet0"
tun_if="tap0"
gateway="192.168.0.254"

openvpn="{ 1194 10010 10020 }"
direct_ports="{ 22 53 80 179 443 500 4500 }"
ipsec="{ 179 500 4500 }" # ipsec protocols + BGP

# comme vu dans un billet precedent, on s'assure de repondre via notre IP
# publique "reelle" lorsque l'on est interroges sur $direct_ports
pass in quick log on $real_if reply-to ($real_if $gateway) proto { tcp, udp } \
        from any to any port $direct_ports

# meme methode pour les protocoles utilises par IPsec
pass in quick log on $real_if reply-to ($real_if $gateway) proto { ah, esp } \
        from any to any

# on route les protocoles d'echange de cle (isakmp) sur l'interface
# reelle $real_if
pass out quick log route-to ($real_if $gateway) proto { tcp, udp } \
        from any to any port $ipsec
# on route tout le traffic AH/ESP via $real_if
pass out quick log route-to ($real_if $gateway) proto { ah, esp } \
        from any to any

# on bloque tout le traffic se dirigeant vers l'interface reelle $real_if
# sauf OpenVPN et les protocoles utilises par IPsec
block out log on $real_if
pass out on $real_if proto { tcp, udp } from any to any port $openvpn
pass out on $real_if proto { ah, esp } from any to any
</pre>
<p>Ces règles doivent être chargées <strong>après</strong> le chargement d&#8217;OpenVPN, on peut réaliser cette séquence très simplement à l&#8217;aide de la directive <code>up</code> du fichier de configuration du logiciel:</p>
<pre>
script-security 2
up /home/imil/bin/pf-up.sh
</pre>
<p>Le script en question est trivial:</p>
<pre>
#!/bin/sh

/sbin/pfctl -f /etc/pf.conf-ovpn
</pre>
<p>Moyennant quoi, à chaque démarrage d&#8217;OpenVPN, ces règles viendront s&#8217;assurer qu&#8217;aucun paquet hors contrôle ne transitera par l&#8217;IP publique &#8220;réelle&#8221; de notre serveur, tout le traffic non lié à l&#8217;infrastructure devant passer par le tunnel Suédois.</p>
<p>Le projet est toujours en cours de construction et il reste encore quelques boulons à serrer, mais &#8216;vous inquiétez pas, vous serez les permiers au courant des évolutions ;)</p>
<p>Un dernier mot, certains lecteurs m&#8217;envoient depuis quelque jours leur setup à debugger et m&#8217;expliquent en détail les problèmes qu&#8217;ils rencontrent, vous comprendrez aisemment que je ne peux humainement pas dépiler tout ça tout seul, mais n&#8217;oubliez pas que, <a href="http://wiki.gcu.info/doku.php?id=de_la_bienseance_sur_le_canal_irc">modulo votre bienséance</a>, vous êtes bienvenu sur le canal <i>#gcu@freenode</i> !<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: imil.net @ 2012-05-22 23:24:32 by W3 Total Cache -->
