<?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>Geekfault &#187; bragon</title>
	<atom:link href="http://geekfault.org/author/bragon/feed/" rel="self" type="application/rss+xml" />
	<link>http://geekfault.org</link>
	<description>If it doesn&#039;t segfault, you&#039;re doing it wrong.</description>
	<lastBuildDate>Sun, 16 Oct 2011 00:54:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Devbox KVM+Libvirt perfect setup.</title>
		<link>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/</link>
		<comments>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 17:55:56 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[libvirt]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5533</guid>
		<description><![CDATA[Dans le cadre de mon boulot chez Euro-Web j&#8217;ai été amené à monter une plate forme un peu particulière pour mon client Zenexity. Leur principale activité est le développement d&#8217;applications web basées sur une technologie maison open source ( framework Play! ). J&#8217;ai donc demandé l&#8217;autorisation de faire une documentation publique sur cette installation, car je [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
<li><a href='http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/' rel='bookmark' title='PXE : Y a-t-il un bootloader sur l&#8217;réseau ?'>PXE : Y a-t-il un bootloader sur l&#8217;réseau ?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2011/02/libvirtlogo.png" title="libvirtlogo" rel="lightbox.5533"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft size-medium wp-image-5542 noborder" title="libvirtlogo" src="http://geekfault.org/wp-content/uploads/2011/02/libvirtlogo-300x240.png" alt="" width="300" height="240" /></a>Dans le cadre de mon boulot chez <a href="http://fr.euroweb.com">Euro-Web</a> j&#8217;ai été amené à monter une plate forme un peu particulière pour mon client <a href="http://www.zenexity.com">Zenexity</a>. Leur principale activité est le développement d&#8217;applications web basées sur une technologie maison open source ( <a href="http://www.playframework.org/">framework Play!</a> ).</p>
<p>J&#8217;ai donc demandé l&#8217;autorisation de faire une documentation publique sur cette installation, car je la trouve intéressante, et je n&#8217;ai rien trouvé de similaire pour le moment sur la toile.</p>
<p>Le setup part d&#8217;un gros besoin en machines virtuelles :</p>
<ul>
<li>Les développeurs ont besoin de tester leurs applications sous toutes les coutures et sont plus plutôt allergiques à certains systèmes d&#8217;exploitation, même sous forme de machines virtuelles.</li>
<li>Certaines plates formes déjà en production ont besoin d&#8217;environnement de préproduction facilement ré-initialisables. Les développeurs ont besoin d&#8217;images/VM &#8220;template&#8221; afin de pouvoir réaliser leurs tests facilement.</li>
<li>Les architectes ont besoin de valider des setups en mode pré-production sur des technologies émergentes</li>
</ul>
<div style="background: #FFFABF; padding: 4px;"><strong>Avertissement :</strong> Cet article a pour but de partager des connaissances avec un public avisé.</div>
<p><!--more--></p>
<h3>Préambule</h3>
<ul>
<li>Le setup d&#8217;origine ayant été réalisé sous Debian 6.0 la documentation présenté tel qu&#8217;elle est ici, est bien sur basé sur la machine de production Debian 6.0. Il est à noter que j&#8217;ai réalisé très facilement un clone de cette machine sous gentoo, je vous donnerai en annexe les options de compilation des différents programmes utilisés.</li>
<li>L&#8217;installation + la configuration du serveur OpenVPN ne fait pas l&#8217;objet de cet article, vous pouvez donc pour cela vous reporter aux <a href="http://geekfault.org/tag/openvpn/">autres articles de Geekfault traitant du VPN</a>.</li>
<li>En fait, réaliser ce setup, est chose plutôt aisé pour tout adminsys chevronné, (chose qui vous vous en doutez je suis :p), le plus compliqué a été de trouver des contournements pour les multitudes de soucis rencontrés.</li>
</ul>
<h3>Cahier des charges</h3>
<p>Comme expliqué plus haut le système de VM est un système très utilisé chez mon client. J&#8217;avais dans le passé monté un serveur XEN pour eux, mais la flexibilité ne convenait plus, notamment pour les grid de test Windows.</p>
<p>Il fallait donc un nouveau serveur de VM. By design, les guest Windows ne seront pas accessible depuis l&#8217;internet, et n&#8217;auront donc pas d&#8217;IP publique. En outre, les développeurs devront pouvoir accéder de façon transparente à leur Windows de test, si possible de manière sécurisée.</p>
<p>Les guests GNU/Linux, quand à eux,  pourront être accessibles via une IP publique, via VPN ou les deux à la fois.</p>
<p>La création / les duplications / la maintenance / le démarrage / l&#8217;arrêt des VM devra être très simple. (Le client souhaite  garder la main sur cela, et être maitre de la situation en matière de création de VM).</p>
<h3>Choix de la technologie</h3>
<p>Nous avons finalement retenu l&#8217;idée d&#8217;un serveur étant capable de faire cela :</p>
<ul>
<li>N&#8217;importe qui doit  pouvoir ré-amorcer un système clean : toutes les VM tourneront sur des fichiers .img stockés dans /var</li>
<li>Les gestion des ressources réseau est automatisée au maximum : les VM devront obtenir leurs IP privées ou publiques automatiquement, par DHCP.</li>
<li>La technologie de virtualisation sera Qemu/Kvm, épaulée par Libvirt.</li>
<li>Certaines VM ne seront accessible que au travers d&#8217;un VPN, alors que d&#8217;autres devront pouvoir faire office de serveur de préproduction et devront avoir des IP publiques.</li>
<li>Ce serveur devra donc être &#8220;hub&#8221; VPN et permettre la communication entre les clients du VPN, et les VM.</li>
<li>Chaque VM qui ne sera que dans le LAN VPN, devra quand même pouvoir accéder à l&#8217;internet. Nous pensons donc utiliser un bridge ethernet sur eth0 ainsi que sur l&#8217;interface VPN.</li>
<li>Chaque VM devra donc être clonable et les developpeurs pourront s&#8217;y connecter à travers le VPN,  à l&#8217;aide de ssh, ou VNC / rdesktop pour les systèmes d&#8217;exploitation de seconde zone.</li>
<li>Ce serveur devra pouvoir faire tourner des VM : Gentoo / Debian 5.0 / Debian 6.0 / CentOS / Windows (avec différentes version d&#8217;Internet Explorer, nerf de la guerre des tests d&#8217;applications web sous plate-forme windows).</li>
</ul>
<h3>Prérequis Kernel</h3>
<p>Nous avons finalement utilisé le noyau 2.6.32.27. En effet les noyaux 2.6.36 présentent <a href="http://kerneltrap.org/mailarchive/linux-kernel/2010/8/29/4612871">un bug dans le support KVM</a> qui <a href="http://comments.gmane.org/gmane.comp.emulators.kvm.devel/65852">fait freezer la machine à la coupure des VM</a>. (Nous sommes à priori victimes d&#8217;une régression dans le kernel Linux).</p>
<p>http://comments.gmane.org/gmane.comp.emulators.kvm.devel/65852</p>
<p>Nous avons donc upgradé sur le 2.6.37 mais, nous nous sommes heurtés à un nouveau bug kernel.</p>
<h4>Bug kernel avec le 2.6.37</h4>
<p><code>[76529.274129] rmap_remove: ffff88017deb37f8 1-&gt;BUG<br />
[76529.274162] ------------[ cut here ]------------<br />
[76529.274189] kernel BUG at arch/x86/kvm/mmu.c:700!<br />
[76529.274217] invalid opcode: 0000 [#1] SMP<br />
[76529.274247] last sysfs file: /sys/devices/virtual/net/lo/operstate<br />
[76529.274276] CPU 2<br />
[76529.274302] Pid: 27193, comm: kvm Not tainted 2.6.37 #1 01V648/PowerEdge R410<br />
[76529.274333] RIP: 0010:[] [] drop_spte+0xb8/0x179<br />
[76529.274389] RSP: 0018:ffff88080d987b28 EFLAGS: 00010296<br />
[76529.274417] RAX: 000000000000003b RBX: ffff88017deb37f8 RCX: ffff8800000bc380<br />
[76529.274449] RDX: 000000000000c3c3 RSI: 0000000000000046 RDI: ffffffff81918a88<br />
[76529.274480] RBP: ffff88080d987b38 R08: 0000000000000000 R09: 000000000000000a<br />
[76529.274512] R10: ffff88102f819400 R11: ffff88102f819400 R12: ffff880fe7cb0000<br />
[76529.274544] R13: ffff88080d987b98 R14: 0000000000000000 R15: ffff88017deb37f8<br />
[76529.274576] FS: 0000000000000000(0000) GS:ffff88102fc20000(0000) knlGS:0000000000000000<br />
[76529.274623] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b<br />
[76529.274652] CR2: 00007fb91807f000 CR3: 000000100aa0d000 CR4: 00000000000026e0<br />
[76529.274684] DR0: 0000000000000090 DR1: 00000000000000a4 DR2: 00000000000000ff<br />
[76529.274715] DR3: 000000000000000f DR6: 00000000ffff0ff0 DR7: 0000000000000400<br />
[76529.274747] Process kvm (pid: 27193, threadinfo ffff88080d986000, task ffff8805a1d82630)<br />
[76529.274794] Stack:<br />
[76529.274815] ffff88080da10090 ffff880fe7cb0000 ffff88080d987b88 ffffffff8100ef8f<br />
[76529.274870] ffff8805a1d82630 000000ff8109702a ffff88080d987c08 ffff880fe7cb0000<br />
[76529.274925] ffff88080da10950 ffff88080d987b98 ffff880fe7cb2320 0000000000020d93<br />
[76529.274981] Call Trace:<br />
[76529.275006] [] kvm_mmu_prepare_zap_page+0x74/0x23c<br />
[76529.275038] [] kvm_mmu_zap_all+0x41/0x6b<br />
[76529.275069] [] kvm_arch_flush_shadow+0x11/0x1e<br />
[76529.275101] [] kvm_mmu_notifier_release+0x2c/0x3f<br />
[76529.275134] [] __mmu_notifier_release+0x49/0x74<br />
[76529.275166] [] exit_mmap+0x27/0x147<br />
[76529.275198] [] mmput+0x28/0xb4<br />
[76529.275226] [] exit_mm+0x124/0x131<br />
[76529.275254] [] do_exit+0x20f/0x6a7<br />
[76529.275283] [] do_group_exit+0x71/0x99<br />
[76529.275313] [] get_signal_to_deliver+0x2fa/0x315<br />
[76529.275346] [] do_signal+0x6d/0x673<br />
[76529.275375] [] ? kill_pid_info+0x3a/0x47<br />
[76529.275404] [] ? sys_kill+0x82/0x161<br />
[76529.275433] [] do_notify_resume+0x27/0x51<br />
[76529.275464] [] int_signal+0x12/0x17<br />
[76529.275491] Code: 48 d9 71 81 31 c0 e8 2b 7f 5c 00 0f 0b eb fe 40 f6 c6 01 75 26 48 39 f3 74 15 48 89 de 48 c7 c7 63 d9 71 81 31 c0 e8 0b 7f 5c 00 &lt;0f&gt; 0b eb fe 48 c7 00 00 00 00 00 e9 ac 00 00 00 48 83 e6 fe 31<br />
[76529.275720] RIP [] drop_spte+0xb8/0x179<br />
[76529.275752] RSP<br />
[76529.276109] ---[ end trace 2d814c5436296e34 ]---<br />
[76529.276177] Fixing recursive fault but reboot is needed!</code></p>
<p>Je vous renvoie à <a href="http://www.mail-archive.com/kvm@vger.kernel.org/msg47630.html">la mailing list de kernel.org à ce sujet</a>. Ça ressemble beaucoup, le gars a le même problème sur un 2.6.36. Le mainteneur des kernel 2.4.x a posté un patch pour 2.6.36 sur le thread.</p>
<h4>Voici ce qu&#8217;il faut activer dans le noyau pour que notre setup fonctionne :</h4>
<p><code>- Networking support<br />
-- Networking options<br />
--- 802.1d Ethernet Bridging<br />
--- Network Packet Filtering framework (netfilter)<br />
---- Core Netfilter configuration (les options dont vous aurez besoin pour vos propres régles de firewalling)<br />
---- IP: Netfilter Configuration<br />
----- IP tables support<br />
----- IPv4 Connection tracking support (required for NAT)<br />
----- Full NAT<br />
----- MASQUERADE target support</code><br />
(à compléter, j&#8217;ai certainement du oublier un truc).</p>
<h3>Installation des composants indispensables</h3>
<p>Voici la liste des composants indispensables à installer avec votre package manager (apt-get sous Debian; emerge sous Gentoo) :</p>
<ul>
<li>libvirt-bin</li>
<li>libvirt0</li>
<li>virt-top</li>
<li>virtinst</li>
<li>isc-dhcp-server</li>
<li>openvpn</li>
<li>iproute</li>
<li>iptables</li>
<li>ifupdown</li>
<li>kvm</li>
<li>build-essential + libncurses5-dev</li>
<li>qemu-kvm</li>
<li>rsync</li>
<li>munin-libvirt-plugins</li>
</ul>
<h4>Use flags sous Gentoo</h4>
<p><code>/etc/portage/package.use</code><br />
<code><br />
app-emulation/libvirt libvirtd qemu lvm network nfs virt-network<br />
</code></p>
<h3>Configuration du bridge (debian ways)</h3>
<p><code>/etc/network/interfaces</code><br />
<code><br />
auto lo<br />
iface lo inet loopback<br />
# The primary network interface</code></p>
<p><code>auto eth0<br />
iface eth0 inet static<br />
address 91.x.x.x<br />
netmask 255.255.255.0<br />
network 91.x.x.0<br />
broadcast 91.x.x.255<br />
gateway 91.x.x.1</code></p>
<p><code>auto br0<br />
iface br0 inet static<br />
address 91.x.x.x<br />
netmask 255.255.255.0<br />
network 91.x.x.0<br />
broadcast 91.x.x.255<br />
gateway 91.x.x.1<br />
bridge_ports eth0<br />
bridge_stp off<br />
bridge_maxwait 5</code></p>
<p><code>auto br1<br />
iface br1 inet static<br />
address 172.16.20.1<br />
netmask 255.255.255.0<br />
network 172.16.20.0<br />
broadcast 172.16.20.255<br />
bridge_ports tap0<br />
bridge_stp off<br />
bridge_maxwait 5</code></p>
<p><code>pre-up iptables-restore -c /etc/network/iptables</code></p>
<p><code>auto eth1<br />
iface eth1 inet static<br />
address 10.191.78.4<br />
netmask 255.255.0.0<br />
network 10.191.0.0<br />
broadcast 10.191.0.255</code></p>
<h3>libvirt setup</h3>
<p><code>/etc/default/libvirt-bin</code><br />
<code>start_libvirtd="yes"<br />
libvirtd_opts="-d"</code></p>
<p>Creation du fichier de l&#8217;image :<br />
<code># qemu-img create /var/VM/gentoo-x86_64.img 10G</code></p>
<p><code>/etc/sysctl.conf</code><br />
<code>net.bridge.bridge-nf-call-ip6tables = 0<br />
net.bridge.bridge-nf-call-iptables = 1<br />
net.bridge.bridge-nf-call-arptables = 0<br />
net.ipv4.conf.all.bootp_relay = 1</code></p>
<p>Attention à l&#8217;isolation reseau des VM : <a href="https://bugzilla.redhat.com/show_bug.cgi?id=512206">https://bugzilla.redhat.com/show_bug.cgi?id=512206</a></p>
<p>Le DHCP ne doit pas envoyer de requêtes sur le reseau :<br />
<code># iptables -t filter -A FORWARD -p udp --sport 68 --dport 67 -j DROP </code></p>
<h4>Sécuriser le VNC de qemu/kvm en le forçant sur l&#8217;interface sécurisée</h4>
<p><code>/etc/libvirt/qemu.conf</code><br />
<code>vnc_listen '172.16.20.1' </code></p>
<h4>Problème de keymap bug libvirt</h4>
<p><a href="http://www.arnebrodowski.de/blog/keymap-problems-with-virt-manager.html">http://www.arnebrodowski.de/blog/keymap-problems-with-virt-manager.html</a></p>
<h4>Iptables avec le bridge et la libvirt</h4>
<p><a href="http://ddevnet.net/wiki/index.php/How_KVM_or_libVirt_IPtables_work">http://ddevnet.net/wiki/index.php/How_KVM_or_libVirt_IPtables_work</a></p>
<h4>Mise en place du dhcpd</h4>
<p><code>/etc/dhcp/dhcpd.conf</code><br />
<code>ddns-update-style none;<br />
option domain-name "zenexity.fr";<br />
option domain-name-servers 81.93.xxx.xxx, 81.93.xx.xx;<br />
default-lease-time 3600;<br />
max-lease-time 7200;</code></p>
<p><code>log-facility local7;</code></p>
<p><code>subnet 91.xxx.xx.0 netmask 255.255.255.0 {<br />
range 91.xxx.xx.20 91.xxx.xx.50;<br />
option routers 91.xxx.xx.1;<br />
}</code></p>
<p><code>subnet 172.16.20.0 netmask 255.255.255.0 {<br />
range 172.16.20.128 172.16.20.254;<br />
option routers 172.16.20.1<br />
}</code></p>
<h4>Exemple de création de VM</h4>
<ul>
<li>Une machine virtuelle gentoo n&#8217;ayant qu&#8217;une seule interface réseau sur le VPN only<br />
<code># virt-install -n gentoo -r 512 -vcpus=1 -f /var/VM/gentoo-x86_64.img -b br1 --vnc --accelerate -v -c /var/iso/gentoo.iso --os-type=linux</code></li>
<li>Une machine virtuelle debian, ayant une interface reseau publique et une interface VPN<br />
<code># virt-install -n debian -r 512 -vcpus=1 -f /var/VM/debian-x86_64.img -b br0 -b br1 --vnc --accelerate -v -c /var/iso/debian-5.iso --os-type=linux</code></li>
</ul>
<p>libvirt stocke ses fichiers de description de VM dans /etc/libvirt/qemu. Voici un exemple de fichier xml généré par libvirt :<br />
<code>/etc/libvirt/qemu/debian-50.xml</code><br />
<code><br />
<domain type='kvm'><br />
  <name>debian-50</name><br />
  <uuid>ce5fe35a-703b-8291-9508-8a83f74eb110</uuid><br />
  <memory>524288</memory><br />
  <currentMemory>524288</currentMemory><br />
  <vcpu>1</vcpu><br />
  <os><br />
    <type arch='x86_64' machine='pc-0.12'>hvm</type><br />
    <boot dev='hd'/><br />
  </os><br />
  <features><br />
    <acpi/><br />
    <apic/></p>
<pae/>
  </features><br />
  <clock offset='utc'/><br />
  <on_poweroff>destroy</on_poweroff><br />
  <on_reboot>restart</on_reboot><br />
  <on_crash>restart</on_crash><br />
  <devices><br />
    <emulator>/usr/bin/kvm</emulator><br />
    <disk type='file' device='disk'><br />
      <driver name='qemu' type='raw'/><br />
      <source file='/var/VM/debian-50.img'/><br />
      <target dev='vda' bus='virtio'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk><br />
    <disk type='block' device='cdrom'><br />
      <driver name='qemu' type='raw'/><br />
      <target dev='hdc' bus='ide'/><br />
      <readonly/></p>
<address type='drive' controller='0' bus='1' unit='0'/>
    </disk><br />
    <controller type='ide' index='0'></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller><br />
    <interface type='bridge'><br />
      <mac address='22:54:01:03:93:38'/><br />
      <source bridge='br0'/><br />
      <model type='virtio'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface><br />
    <serial type='pty'><br />
      <target port='0'/><br />
    </serial><br />
    <console type='pty'><br />
      <target type='serial' port='0'/><br />
    </console></p>
<input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='fr'/><br />
    <video><br />
      <model type='cirrus' vram='9216' heads='1'/></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video><br />
    <memballoon model='virtio'></p>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon><br />
  </devices><br />
</domain><br />
</code></p>
<p>Attention, si vous changez à la main un fichier domain.xml vous devez lancer la commande ;<br />
<code># virsh define domain.xml</code></p>
<h4>Internet pour les VM n&#8217;ayant été bind que sur le bridge du VPN</h4>
<p><code># iptables -t filter -A FORWARD -i br1 -j MARK --set-mark 1<br />
# iptables -t nat -A POSTROUTING -m mark ! --mark 1 -o br0 -j MASQUERADE</code></p>
<p>Ou, moins fin :<br />
<code># iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE</code></p>
<h3>Commandes libvirt qui vous serviront avec KVM</h3>
<ul>
<li><strong>virsh start domain :</strong> Start le domaine spécifié</li>
<li><strong>virsh shutdown domain :</strong> Shutdown le domaine spécifié</li>
<li><strong>virsh reboot domain :</strong> just reboot a domain</li>
<li><strong>virsh destroy domain :</strong> Terminate a domain</li>
<li><strong>virsh autostart domain :</strong> Autostart a domain</li>
<li><strong>virsh list :</strong> List domains</li>
</ul>
<h3>Ordre de boot des services</h3>
<p>Cette partie est la pierre angulaire de ce setup :</p>
<ol>
<li>Il faut que dhcpd soit demarré après openvpn ! en effet sinon vous ne serai pas capable de diffuser des adresses ip sur votre interface br1 (bridgé avec l&#8217;interface tap0 du vpn) si le dhcpd ne demarre pas après openvpn.</li>
<li>Il faut que la libvirt soit demarré après dhcpd, sinon vous ne serez pas capable de donner des ip à vos VM si celles-ci sont en auto start.<code>/etc/init.d/.depend.start</code><br />
<code>TARGETS = rsyslog qemu-kvm killprocs openvpn apache2 isc-dhcp-server cron acpid ssh rsync dbus exim4 libvirt-bin bootlogs munin-node single rc.local stop-bootlogd rmnologin<br />
INTERACTIVE = openvpn apache2<br />
openvpn: rsyslog<br />
apache2: rsyslog<br />
isc-dhcp-server: rsyslog<br />
cron: rsyslog<br />
acpid: rsyslog<br />
ssh: rsyslog<br />
rsync: rsyslog<br />
dbus: rsyslog<br />
exim4: rsyslog<br />
libvirt-bin: rsyslog openvpn<br />
munin-node: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
single: killprocs bootlogs<br />
rc.local: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
stop-bootlogd: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4<br />
rmnologin: rsyslog isc-dhcp-server qemu-kvm openvpn libvirt-bin apache2 bootlogs cron acpid ssh rsync dbus exim4</code></li>
<li>/etc/network/interfaces sur Debian aura toujours tendance à se lancer AVANT la création de tap0 par le service openvpn, or votre interface br1 doit être bridge sur tap0, il est donc nécéssaire de lancer ce petit script  (J&#8217;ai rajouté ce script au script d&#8217;init de openvpn, ainsi celui est lancé juste après que le vpn soit lancé, ainsi le bridge entre br1 et tap0 est fonctionnel lorsque la libvirt se lancera) :<br />
<code>/etc/zenexity/fixebr1</code><br />
<code>sleep 10<br />
ifdown br1 &#038;&#038; echo 'bridge down' >> /var/tmp/bridge<br />
sleep 1<br />
ifup br1 &#038;&#038; echo 'bridge up' >> /var/tmp/bridge<br />
sleep 1<br />
/etc/init.d/isc-dhcp-server restart<br />
</code></li>
<h3>Plugin munin pour libvirt + KVM</h3>
<p><img src="http://honk.sigxcpu.org/projects/libvirt/monitor/screenshots/cputime.png" alt="virt-cpu" /><br />
<img src="http://honk.sigxcpu.org/projects/libvirt/monitor/screenshots/memory.png" alt="virt-memory" /></p>
<p>Je vous renvoie au <a href="http://honk.sigxcpu.org/projects/libvirt/">site du plugin LibVirt pour Munin</a>.</ol>
<h3>Schema de l&#8217;infrastructure</h3>
<p><a rel="attachment wp-att-5789" href="http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/torrylin911-setup/"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   class="alignleft size-full wp-image-5789" title="torrylin911-setup" src="http://geekfault.org/wp-content/uploads/2011/03/torrylin911-setup.png" alt="" width="960" height="720" /></a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
<li><a href='http://geekfault.org/2010/05/15/pxe-ya-til-un-bootloader-sur-lreseau/' rel='bookmark' title='PXE : Y a-t-il un bootloader sur l&#8217;réseau ?'>PXE : Y a-t-il un bootloader sur l&#8217;réseau ?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2011/03/24/devbox-kvmlibvirt-perfect-setup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La nouvelle mode Geek : avoir son domaine .42</title>
		<link>http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/</link>
		<comments>http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 18:16:50 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[42registry]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[djbdns]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5508</guid>
		<description><![CDATA[Ça claque à mort non d&#8217;avoir un nom de domaine en .42 ? Vous l&#8217;avez rêvé ! Ils l&#8217;ont fait ! En clin d’œil à H2G2, pour épater un peu Marvin, et parce que la réponse universelle doit bien être ré-solvable quelque part sur le net Pour le moment pure expérimentation de la 42registry de [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/06/30/geek-en-avion/' rel='bookmark' title='Un geek en vacances'>Un geek en vacances</a></li>
<li><a href='http://geekfault.org/2010/05/11/maintenir-son-dns-menteur-avec-adblock/' rel='bookmark' title='maintenir son DNS menteur avec Adblock'>maintenir son DNS menteur avec Adblock</a></li>
<li><a href='http://geekfault.org/2010/08/12/ifconfig-me-connaitre-son-ip-publique-en-un-rien-de-temps/' rel='bookmark' title='Ifconfig.me, connaitre son IP publique en un rien de temps'>Ifconfig.me, connaitre son IP publique en un rien de temps</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/42big/" rel="attachment wp-att-5511"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/12/42big-283x300.png" alt="" title="42big" width="283" height="300" class="alignleft size-medium wp-image-5511" /></a></p>
<p>Ça claque à mort non d&#8217;avoir un nom de domaine en .42 ?<br />
Vous l&#8217;avez rêvé ! Ils l&#8217;ont fait !<br />
En clin d’œil à H2G2, pour épater un peu Marvin, et parce que la réponse universelle doit bien être ré-solvable quelque part sur le net <img src='http://geekfault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Pour le moment pure expérimentation de la 42registry de ce .42, juste avant de peut être conquérir le monde ! (L&#8217;univers et le reste !)</p>
<p><!--more--></p>
<h3> Pourquoi on vous parle de ça ? </h3>
<p>Bah parce que la <a href="http://42registry.org">42registry.org</a> ils sont cool, on les aimes bien, et on a envie de les aider.<br />
C&#8217;est des fous, et nous chez GeekFault on aime bien les fous.</p>
<p>Vous pouvez d&#8217;ailleurs remarquer que si vous savez résoudre les domaines en .42 <a href="http://geekfault.42">http://geekfault.42</a> est disponible.</p>
<p>Vous pouvez d&#8217;ailleurs remarquer que vous pouvez venir nous parler de geekfault ou de 42registry sur Geeknode : 4.irc.42 / salon #geekfault / et salon : #42</p>
<p>Votre humble serviteur est également lisible sur son .42 : <a href="http://bragon.42">http://bragon.42</a></p>
<h3> Erf, je sais pas résoudre les domaines en .42, comment je fais ? </h3>
<p>3 méthodes pour le moment :<br />
- Je possède mon propre serveur DNS bind9<br />
- Je possède mon propre serveur DNScache DJBDNS.<br />
- Je veux utiliser des serveurs DNS open qui savent résoudre .42</p>
<h4> Je possède Bind </h4>
<p>Et bah je rajoute à mon named.conf (ou named.conf.local selon les distribs): </p>
<p><code><br />
zone “42″ IN {<br />
type forward;<br />
forwarders {81.93.248.69; 81.93.248.68; 91.194.60.196; 193.17.192.53; };<br />
};<br />
</code></p>
<p>Je reload bind, et roulz.<br />
<code><br />
/etc/init.d/bind9 reload<br />
</code><br />
ou<br />
<code><br />
/etc/init.d/named reload<br />
</code></p>
<h4> J&#8217;ai DJB &#8230; Oui Je sais &#8230;. </h4>
<p><code><br />
cd /services/dnscache<br />
echo 91.191.147.246 > root/servers/42<br />
echo 91.191.147.243 >> root/servers/42<br />
svc -t /services/dnscache<br />
</code></p>
<h4> Je suis un pauvre pommé, j&#8217;ai pas de serveur de nom </h4>
<p>Et  bien j&#8217;utilise les openDNS de GeekNode.org :</p>
<p>On édite /etc/resolv.conf<br />
<code><br />
nameserver 81.93.248.69<br />
nameserver 81.93.248.68<br />
</code></p>
<h3> Hey mec ? Comment je réserve mon .42 ? </h3>
<p>Gros poulet ! t&#8217;es pas déjà sur : <a href="http://42registry.org">http://42registry.org</a>, tout est expliqué en long en large et en travers !<br />
Alors va vite réserver ton .42 et faire passer le message.</p>
<p><strong>Merci à la team 42registry pour tout l&#8217;poisson !</strong></p>
<p>(Et surtout à Colin qui se reconnaîtra ;D)</p>
<h3> Liste des domaines enregistrés </h3>
<p>Ils sont disponible ici : <a href="http://bragon.42/42.txt">http://bragon.42/42.txt</a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/06/30/geek-en-avion/' rel='bookmark' title='Un geek en vacances'>Un geek en vacances</a></li>
<li><a href='http://geekfault.org/2010/05/11/maintenir-son-dns-menteur-avec-adblock/' rel='bookmark' title='maintenir son DNS menteur avec Adblock'>maintenir son DNS menteur avec Adblock</a></li>
<li><a href='http://geekfault.org/2010/08/12/ifconfig-me-connaitre-son-ip-publique-en-un-rien-de-temps/' rel='bookmark' title='Ifconfig.me, connaitre son IP publique en un rien de temps'>Ifconfig.me, connaitre son IP publique en un rien de temps</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</title>
		<link>http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/</link>
		<comments>http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/#comments</comments>
		<pubDate>Mon, 24 May 2010 15:53:13 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[eeegw]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[QoS]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2225</guid>
		<description><![CDATA[La Quality Of Service (QOS) , qualité de service en français, intervient principalement au niveau 3 du modèle OSI. Il faut donc placer ses scripts de QOS sur la passerelle de votre réseau, c&#8217;est la raison pour laquelle, mettre en place de la QOS sur la eeegw prend tout son sens. N&#8217;hésitez pas à revenir [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/' rel='bookmark' title='Allocation d&#8217;adresses IPv4 publiques over VPN'>Allocation d&#8217;adresses IPv4 publiques over VPN</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle: Introduction à la QOS --><br />
<a href="http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/qos/" rel="attachment wp-att-4812"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/05/QOS-251x300.png" alt="" title="QOS" width="151" height="200" class="alignleft size-medium wp-image-4812" /></a></p>
<p>La Quality Of Service (QOS) , qualité de service en français, intervient principalement au niveau 3 du modèle OSI.<br />
Il faut donc placer ses scripts de QOS sur la passerelle de votre réseau, c&#8217;est la raison pour laquelle, mettre en place de la QOS sur la <strong> eeegw </strong> prend tout son sens.</p>
<p>N&#8217;hésitez pas à revenir sur les précédents articles sur la eeegw :<br />
<a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/">eeegw part I</a><br />
<a href="http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/">eeegw part II</a><br />
<!--more--><br />
Si vous avez besoin d&#8217;un rafraîchissement sur le concept, je vous oriente vers la page <a href="http://fr.wikipedia.org/wiki/Qualit%C3%A9_de_service">Qualité de service</a> de Wikipedia.</p>
<p>La partie qui clairement nous intéresse ici est décrite au chapitre Ordonnancement :<br />
<strong>L&#8217;ordonnancement désigne l&#8217;ensemble des méthodes visant à modifier l&#8217;ordre de départ des paquets, en remplacement de la règle du « premier arrivé, premier servi ».</strong></p>
<p>Une de ses applications les plus courantes consistera ainsi à donner priorité à certains types de trafic.</p>
<p>Grosso modo j&#8217;ai mis en place de la QOS sur ma eeegw car j&#8217;en avais marre que mes communications SIP (Téléphonie voir futur article :p) ne soient pas de bonne qualité, lors d&#8217;upload de pièces jointes via mon mailer ou lorsque j&#8217;avais besoin d&#8217;utiliser beaucoup d&#8217;upload en même temps qu&#8217;une communication téléphonique.</p>
<p><!--nextpage--><br />
<!--pagetitle: QOS Exemple1 : HTB --><br />
Voici mon tout premier script de QOS, ill date un peu et est loin de bien fonctionner <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Je vous le montre afin que vous voyez un peu à quoi on s&#8217;attaque en parlant de QOS :</p>
<h4> Script de QOS exemple1 basé sur HTB </h4>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

#Constantes
LOCALNET=&quot;213.41.xx.xx/255.255.255.255&quot;
MARKPRIO1=&quot;1&quot;
MARKPRIO2=&quot;2&quot;
MARKPRIO3=&quot;3&quot;
MARKPRIO4=&quot;4&quot;
MARKPRIO5=&quot;5&quot;
MARKPRIO6=&quot;6&quot;
MARKPRIO7=&quot;7&quot;

IFACE=eth0

UPRATE=&quot;8mbit&quot;
DOWNRATE=&quot;0.8mbit&quot;

PRIORATE1=&quot;5mbit&quot;
PRIORATE2=&quot;3mbit&quot;
PRIORATE3=&quot;2mbit&quot;
PRIORATE4=&quot;0.5mbit&quot;

QUANTUM1=&quot;12187&quot;
QUANTUM2=&quot;8625&quot;
QUANTUM3=&quot;5062&quot;
QUANTUM4=&quot;1500&quot;

BURST1=&quot;1000k&quot;
BURST2=&quot;400k&quot;
BURST3=&quot;200k&quot;
BURST4=&quot;10k&quot;

CBURST1=&quot;300k&quot;
CBURST2=&quot;200k&quot;
CBURST3=&quot;10k&quot;
CBURST4=&quot;1k&quot;

iptables -t mangle -F OUTPUT
iptables -t mangle -F FORWARD

iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p icmp -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p tcp --dport 687 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p udp --dport 687 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p udp --dport 687 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p udp --dport 687 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p tcp --dport 5060 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A INPUT -p udp --dport 5060 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3

iptables -t mangle -A FORWARD -p tcp --dport 143 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 143 -j MARK --set-mark $MARKPRIO3

iptables -t mangle -A FORWARD -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2
iptables -t mangle -A INPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO2

iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2
iptables -t mangle -A INPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO2

iptables -t mangle -A FORWARD -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A INPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3

ifconfig $IFACE txqueuelen 128

tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1

tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1 ceil $UPRATE quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0
tc class add dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2 ceil $UPRATE quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1
tc class add dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3 ceil $UPRATE quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2
tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $P2PRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3

tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw classid 1:101
tc filter add dev $IFACE parent 1:0 protocol ip prio 1 handle $MARKPRIO2 fw classid 1:102
tc filter add dev $IFACE parent 1:0 protocol ip prio 2 handle $MARKPRIO3 fw classid 1:103
tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw classid 1:104

tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1
tc qdisc add dev $IFACE parent 1:102 sfq perturb 16 quantum $QUANTUM2
tc qdisc add dev $IFACE parent 1:103 sfq perturb 16 quantum $QUANTUM3
tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4
</pre>
<p>Ce script est loin d&#8217;être optimisé.<br />
Son but était de marquer via iptables certain type de flux, afin de les faire passer via des règles de tc/qdisc pour en limiter la bande passante. il utilise HTB (voir plus loin)<br />
Ce script manque clairement de flexibilité.</p>
<p><!--nextpage--><br />
<!--pagetitle: Ce qu'il convient d'activer dans le noyau GNU/Linux --></p>
<p>Soyons clairs, la QOS sous GNU/Linux est un cauchemar à gérer.<br />
Autre concept à bien avoir en tête, vous ne pouvez gérer la QOS que de votre lien sortant, en aucun cas vous ne pouvez gérer ce qui rentre via votre lien. Par analogie, vous ne pouvez pas contrôler la pluie qui tombe dans votre piscine, par contre vous pouvez contrôler l&#8217;eau que vous enlevez, et l&#8217;eau que vous décidez de rajouter.<br />
Il existe quelques bidouilles afin de réussir tout de même à gérer ce trafic entrant, nous allons essayer de vous présenter ça un peu plus loin dans l&#8217;article.</p>
<p>Nous allons donc utiliser Mangle de iptables (pour qos.sh) ainsi que la fonction de mark des packets de iptables.<br />
Il faut donc aller activer cela dans le noyau.</p>
<p><code><br />
#<br />
# QoS and/or fair queueing<br />
#<br />
CONFIG_NET_SCHED=y<br />
CONFIG_NET_SCH_CBQ=m<br />
CONFIG_NET_SCH_HTB=m<br />
CONFIG_NET_SCH_CSZ=m<br />
CONFIG_NET_SCH_PRIO=m<br />
CONFIG_NET_SCH_RED=m<br />
CONFIG_NET_SCH_SFQ=m<br />
CONFIG_NET_SCH_TEQL=m<br />
CONFIG_NET_SCH_TBF=m<br />
CONFIG_NET_SCH_GRED=m<br />
CONFIG_NET_SCH_DSMARK=m<br />
CONFIG_NET_SCH_INGRESS=m<br />
CONFIG_NET_QOS=y<br />
CONFIG_NET_ESTIMATOR=y<br />
CONFIG_NET_CLS=y<br />
CONFIG_NET_CLS_TCINDEX=m<br />
CONFIG_NET_CLS_ROUTE4=m<br />
CONFIG_NET_CLS_ROUTE=y<br />
CONFIG_NET_CLS_FW=m<br />
CONFIG_NET_CLS_U32=m<br />
CONFIG_NET_CLS_RSVP=m<br />
CONFIG_NET_CLS_RSVP6=m<br />
CONFIG_NET_CLS_POLICE=y<br />
</code></p>
<p><!--nextpage--></p>
<p><!--pagetitle: Mise en place des outils. --></p>
<h3> Scheduler / Ordonnanceur </h3>
<h4> Mise en place des outils </h4>
<p>En tout premier lieu vous aurez besoin de iptables et de iproute2<br />
iproute2 est une suite d&#8217;utilitaires en ligne de commande qui vous permettent de manipuler les structures kernel liées aux couches réseau de votre machine.</p>
<p>Gentoo :</p>
<p><code><br />
emerge -av iproute2 iptables<br />
</code></p>
<p>Debian :<br />
<code><br />
apt-get install iptables iproute2<br />
</code></p>
<p>Verifiez que vous avez bien l&#8217;utilitaire tc :</p>
<p><code></p>
<p>eeegw:~# tc<br />
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }<br />
       tc [-force] -batch file<br />
where  OBJECT := { qdisc | class | filter | action | monitor }<br />
       OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -p[retty] | -b[atch] [file] }</p>
<p></code></p>
<h4> Traduction du manuel de tc </h4>
<p>Les &#8220;classful qdiscs&#8221; sont :</p>
<li> <strong> CBQ </strong> </li>
<p>  &#8220;Class  Based  Queueing&#8221;  implémente une hierarchie de classes.  il contient des éléments de shaping  comme des fonctions de prioritisations.  Le shape est calculé à partir de latence et de taille de packets</p>
<li> <strong>HTB</strong> </li>
<p>  &#8220;Hierarchy Token Bucket&#8221;<br />
HTB permet de garantir de la bande passante a une classe, définir des limites entre les classes et de fixer des priorités entre elles.</p>
<li><strong>PRIO</strong>
<li>
PRIO qdisc n&#8217;effectue pas de traffic shapping en tant que tel, il permet juste de fixer des priorités entre les différents type de protocoles transitant dans le lien.<br />
PRIO permet de classifier les classes qui prennent en priorité de la bande passante, en ne laissant aux autres que ce qui reste de bande passante disponible.</p>
<h4> Qu&#8217;est-ce qu&#8217;une classe </h4>
<p>Une classe forme, en fait, un arbre avec des branches.<br />
Le but est de former une classe root qui va permettre de faire rentrer tout le trafic et, en fonction des protocoles, on va faire passer le traffic dans différentes branches.</p>
<p>ici nous définissons nos classes root :</p>
<pre class="brush: bash; title: ; notranslate">
## On met en place la classe root pour la BP disponible.
/sbin/tc qdisc add dev $EXTERNAL_IFACE root handle 1: cbq avpkt 1000 bandwidth $BNDWIDTH
## Match ici l'upload de la connexion
/sbin/tc class add dev $EXTERNAL_IFACE parent 1: classid 1:1 cbq rate ${UPLINK}kbit allot 1500 prio 5 bounded isolated
</pre>
<h3> Datagrame IPv4 et Type Of Service : TOS </h3>
<p><a href="http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/ipformat/" rel="attachment wp-att-4754"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/05/ipformat-300x241.png" alt="" title="ipformat" width="300" height="241" class="aligncenter size-medium wp-image-4754" /></a></p>
<h4> Tableau des TOS possible dans un Datagram IPv4 </h4>
<p><TABLE CELLPADDING=3 BORDER="1"><TR><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Binaire</SPAN></TH><TH ALIGN="LEFT"><SPAN CLASS="textbf">Décimal</SPAN></TH><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Signification</SPAN></TH></TR><TR><TD ALIGN="LEFT">1000</TD><br />
<TD ALIGN="LEFT">8</TD><TD ALIGN="LEFT">Minimise le Délai (Minimize delay) (md)</TD></TR><TR><TD ALIGN="LEFT">0100</TD><TD ALIGN="LEFT">4</TD><TD ALIGN="LEFT">Maximalise le Débit (Maximize throughput) (mt)</TD></TR><TR><TD ALIGN="LEFT">0010</TD><TD ALIGN="LEFT">2</TD><TD ALIGN="LEFT">Maximalise la Fiabilité (Maximize reliability) (mr)</TD></TR><TR><TD ALIGN="LEFT">0001</TD><TD ALIGN="LEFT">1</TD><TD ALIGN="LEFT">Minimalise le Coût Monétaire (Minimize monetary cost) (mmc)</TD></TR><TR><TD ALIGN="LEFT">0000</TD><TD ALIGN="LEFT">0</TD><TD ALIGN="LEFT">Service Normal</TD></TR></TABLE></p>
<p><TABLE CELLPADDING=3 BORDER="1"><TR><TH ALIGN="LEFT"><SPAN  CLASS="textbf">TOS</SPAN></TH><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Binaire</SPAN></TH><TH ALIGN="CENTER"><SPAN  CLASS="textbf">Décimal</SPAN></TH><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Signification</SPAN></TH><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Priorité</SPAN> <SPAN  CLASS="textbf">Linux</SPAN></TH><TH ALIGN="LEFT"><SPAN  CLASS="textbf">Bande</SPAN></TH></TR><TR><TD ALIGN="LEFT">0&#215;0</TD><TD ALIGN="LEFT">0000</TD><TD ALIGN="CENTER">0</TD><TD ALIGN="LEFT">Service Normal</TD><TD ALIGN="LEFT">0 Best Effort</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0&#215;2</TD><TD ALIGN="LEFT">0001</TD><TD ALIGN="CENTER">1</TD><TD ALIGN="LEFT">Minimise le Coût Monétaire (mmc)</TD><TD ALIGN="LEFT">1 Filler</TD><TD ALIGN="LEFT">2</TD></TR><TR><TD ALIGN="LEFT">0&#215;4</TD><TD ALIGN="LEFT">0010</TD><TD ALIGN="CENTER">2</TD><TD ALIGN="LEFT">http://fr.wikipedia.org/wiki/Mod%C3%A8le_OSI</TD><TD ALIGN="LEFT">0 Best Effort</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0&#215;6</TD><TD ALIGN="LEFT">0011</TD><TD ALIGN="CENTER">3</TD><TD ALIGN="LEFT">mmc+mr</TD><TD ALIGN="LEFT">0 Best Effort</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0&#215;8</TD><TD ALIGN="LEFT">0100</TD><TD ALIGN="CENTER">4</TD><TD ALIGN="LEFT">Maximalise le Débit (mt)</TD><TD ALIGN="LEFT">2 Masse</TD><TD ALIGN="LEFT">2</TD></TR><TR><TD ALIGN="LEFT">0xa</TD><TD ALIGN="LEFT">0101</TD><TD ALIGN="CENTER">5</TD><TD ALIGN="LEFT">mmc+mt</TD><TD ALIGN="LEFT">2 Masse</TD><TD ALIGN="LEFT">2</TD></TR><TR><TD ALIGN="LEFT">0xc</TD><TD ALIGN="LEFT">0110</TD><TD ALIGN="CENTER">6</TD><TD ALIGN="LEFT">mr+mt</TD><TD ALIGN="LEFT">2 Masse</TD><TD ALIGN="LEFT">2</TD></TR><TR><TD ALIGN="LEFT">0xe</TD><TD ALIGN="LEFT">0111</TD><TD ALIGN="CENTER">7</TD><TD ALIGN="LEFT">mmc+mr+mt</TD><TD ALIGN="LEFT">2 Masse</TD><TD ALIGN="LEFT">2</TD></TR><TR><TD ALIGN="LEFT">0&#215;10</TD><TD ALIGN="LEFT">1000</TD><TD ALIGN="CENTER">8</TD><TD ALIGN="LEFT">Minimise le Délai (md)</TD><TD ALIGN="LEFT">6 Interactive</TD><TD ALIGN="LEFT">0</TD></TR><TR><TD ALIGN="LEFT">0&#215;12</TD><TD ALIGN="LEFT">1001</TD><TD ALIGN="CENTER">9</TD><TD ALIGN="LEFT">mmc+md</TD><TD ALIGN="LEFT">6 Interactive</TD><TD ALIGN="LEFT">0</TD></TR><TR><TD ALIGN="LEFT">0&#215;14</TD><TD ALIGN="LEFT">1010</TD><TD ALIGN="CENTER">10</TD><TD ALIGN="LEFT">mr+md</TD><TD ALIGN="LEFT">6 Interactive</TD><TD ALIGN="LEFT">0</TD></TR><TR><TD ALIGN="LEFT">0&#215;16</TD><TD ALIGN="LEFT">1011</TD><TD ALIGN="CENTER">11</TD><TD ALIGN="LEFT">mmc+mr+md</TD><TD ALIGN="LEFT">6 Interactive</TD><TD ALIGN="LEFT">0</TD></TR><TR><TD ALIGN="LEFT">0&#215;18</TD><TD ALIGN="LEFT">1100</TD><TD ALIGN="CENTER">12</TD><TD ALIGN="LEFT">mt+md</TD><TD ALIGN="LEFT">4 Int. Masse</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0x1a</TD><TD ALIGN="LEFT">1101</TD><TD ALIGN="CENTER">13</TD><TD ALIGN="LEFT">mmc+mt+md 4 Int. Masse 1</TD><TD ALIGN="LEFT">4 Int. Masse</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0x1c</TD><TD ALIGN="LEFT">1110</TD><TD ALIGN="CENTER">14</TD><TD ALIGN="LEFT">mr+mt+md</TD><TD ALIGN="LEFT">4 Int. Masse</TD><TD ALIGN="LEFT">1</TD></TR><TR><TD ALIGN="LEFT">0x1e</TD><TD ALIGN="LEFT">1111</TD><TD ALIGN="CENTER">15</TD><TD ALIGN="LEFT">mmc+mr+mt+md</TD><TD ALIGN="LEFT">4 Int. Masse</TD><TD ALIGN="LEFT">1</TD></TR></TABLE></p>
<h4> Exemple de ce qu&#8217;on peut faire avec TOS </h4>
<p>L&#8217;intérêt de la QoS sous Linux est très souvent associé à la priorisation de flux interactifs via iptables.<br />
Par exemple, vous ne souhaitez pas que votre session ssh lag à cause d&#8217;un utilisateur qui est en train de monopoliser la bande passante de votre réseau en téléchargeant une bande annonce sur internet ?<br />
Nous allons ici, à titre d&#8217;exemple, optimiser les trafics courants avec iptables, à savoir ssh :</p>
<pre class="brush: bash; title: ; notranslate">
# Priorisation des connexions ftp et ssh
iptables -A PREROUTING -t mangle -p tcp -sport ssh -j TOS -set-tos Minimize-Delay
# On donne un maximum de débit aux transferts scp
iptables -A PREROUTING -t mangle -p tcp -sport ssh -j TOS -set-tos Maximize-Throughput
</pre>
<p><!--nextpage--></p>
<p><!--pagetitle: Script final --><br />
Voici le script de QOS final basé sur CTB et PRIO (celui que j&#8217;utilise en production)</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
### Script de reservation de bande passante par bragon

## On fixe quelques variables

EXTERNAL_DOWNLINK_KBPS=&quot;6400&quot;
## je sais downloader à  ~800ko/s ma limite est donc a 6400 Kbps
EXTERNAL_DL_IPSEC_KBPS=&quot;1024&quot;
EXTERNAL_DL_PPTP_KBPS=&quot;&quot;
EXTERNAL_DL_ICA_KBPS=&quot;&quot;
EXTERNAL_DL_TSE_KBPS=&quot;128&quot;
EXTERNAL_DL_SMTP_KBPS=&quot;512&quot;
EXTERNAL_DL_HTTP_KBPS=&quot;1024&quot;
EXTERNAL_DL_OTHERTCP_KBPS=&quot;2048&quot;
EXTERNAL_DL_OTHERTCP_PORT=&quot;2048&quot;
## je sais uploader à environ 80Ko/s je fixe donc ma limite a 512 afin d'être sûr de ne pas engendrer de lag.
EXTERNAL_UPLINK_KBPS=&quot;512&quot;
EXTERNAL_UL_IPSEC_KBPS=&quot;&quot;
EXTERNAL_UL_IPSEC_SHARE=&quot;&quot;
EXTERNAL_UL_PPTP_KBPS=&quot;&quot;
EXTERNAL_UL_PPTP_SHARE=&quot;&quot;
EXTERNAL_UL_ICA_KBPS=&quot;&quot;
EXTERNAL_UL_ICA_SHARE=&quot;&quot;
EXTERNAL_UL_TSE_KBPS=&quot;512&quot;
EXTERNAL_UL_TSE_SHARE=&quot;512&quot;
EXTERNAL_UL_SMTP_KBPS=&quot;256&quot;
EXTERNAL_UL_SMTP_SHARE=&quot;256&quot;
EXTERNAL_UL_HTTP_KBPS=&quot;32&quot;
EXTERNAL_UL_HTTP_SHARE=&quot;&quot;
EXTERNAL_UL_OTHERTCP_KBPS=&quot;&quot;
EXTERNAL_UL_OTHERTCP_SHARE=&quot;&quot;
EXTERNAL_UL_OTHERTCP_PORT=&quot;&quot;
EXTERNAL_UL_VOIP_KBPS=&quot;256&quot;
EXTERNAL_UL_VOIP_SHARE=&quot;isolated&quot;
EXTERNAL_DEV_BANDWIDTH=&quot;&quot; 

## CE script de QOS s'applique à toutes les interface dans MON cas cela convient.
## Je vous conseille de retirer votre interface LAN du match si vous avez plusieurs interfaces reseau.
## La commande va permettre de lister toutes les interfaces et d'appliquer les regles de QOS dessus.
## On match aussi les interfaces tap

if [ -n &quot;$EXTERNAL_DOWNLINK_KBPS&quot; ] &amp;&amp; [ -n &quot;$EXTERNAL_UPLINK_KBPS&quot; ] &amp;&amp; echo $INTERFACE | egrep -q &quot;(eth[023]|ppp[0-9]|ippp0|tap[0-3])&quot; ; then

#In kilobits
DOWNLINK=$EXTERNAL_DOWNLINK_KBPS
UPLINK=$EXTERNAL_UPLINK_KBPS
BNDWIDTH=$EXTERNAL_DEV_BANDWIDTH

if [ -z &quot;$BNDWIDTH&quot; ]; then
    BNDWIDTH=&quot;100mbit&quot;
fi

## on clean deja les parametres en tout premier lieu
## On vide toutes les regles pouvant deja etre en place.
/sbin/tc qdisc del dev $EXTERNAL_IFACE root    2&gt; /dev/null &gt; /dev/null
/sbin/tc qdisc del dev $EXTERNAL_IFACE ingress 2&gt; /dev/null &gt; /dev/null

# install root CBQ # On met en place la policy root, les autres policies seront liées à celle-ci
## cbq avpkt : la taille moyenne des packets en bytes sont necessaire afin de calculer l'idle maximum
## bandwidth rate : pour determiner l'idle time cbq doit forcement connaitre la bande passante de l'interface physique.
/sbin/tc qdisc add dev $EXTERNAL_IFACE root handle 1: cbq avpkt 1000 bandwidth $BNDWIDTH

## allot bytes : utile pour calculer le temps de transmission des packets entre tables, valeur liée à avpkt
/sbin/tc class add dev $EXTERNAL_IFACE parent 1: classid 1:1 cbq rate ${UPLINK}kbit allot 1500 prio 5 bounded isolated

# voip (udp sip 5060 et asterisk 4569)
## Tout ce qui match cette règle possede une reservation CBQ de $EXTERNAL_UL_VOIP_KBPS | priorité numéro 1 !
if [ -n &quot;$EXTERNAL_UL_VOIP_KBPS&quot; ]; then
/sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:5 cbq rate ${EXTERNAL_UL_VOIP_KBPS}kbit allot 1600 prio 1 avpkt 1000 $EXTERNAL_UL_VOIP_SHARE

## pfifo : pure 'premier entré premier sortie' qdisc, évite la congestion de packet dans la classid 1:5
/sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:5 handle 5: pfifo limit 10

 # sip prioritaire 5 !
## filter: utile afin de savoir dans quel classfull qdisc, un packet va etre envoye.
## on peut filter les packets a partir de leur TOS : Type Of Service
/sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 5 u32 match ip sport 5060 0xffff match ip protocol 17 0xff flowid 1:5
/sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 5 u32 match ip dport 5060 0xffff match ip protocol 17 0xff flowid 1:5

# rtp (tos 0x10 et udp) (voir le tableau recap de TOS)
/sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 5 u32 match ip tos 0x10 0xff match ip protocol 17 0xff flowid 1:5

let UPLINK=UPLINK-EXTERNAL_UL_VOIP_KBPS
fi

# SMTP
if [ -n &quot;$EXTERNAL_UL_SMTP_KBPS&quot; ]; then
 /sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:44 \
 cbq rate ${EXTERNAL_UL_SMTP_KBPS}kbit allot 1600 prio 1 avpkt 1000 $EXTERNAL_UL_SMTP_SHARE
 /sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:44 handle 44: sfq perturb 10

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 44 u32 \
 match ip dport 25 0xffff match ip protocol 6 0xFF match ip firstfrag flowid 1:44

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 44 u32 \
 match ip dport 2525 0xffff match ip protocol 6 0xFF match ip firstfrag flowid 1:44

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 44 u32 \
 match ip dport 587 0xffff match ip protocol 6 0xFF match ip firstfrag flowid 1:44

let UPLINK=UPLINK-EXTERNAL_UL_SMTP_KBPS
fi

# HTTP
if [ -n &quot;$EXTERNAL_UL_HTTP_KBPS&quot; ]; then
 /sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:46 \
 cbq rate ${EXTERNAL_UL_HTTP_KBPS}kbit allot 1600 prio 1 avpkt 1000 $EXTERNAL_UL_HTTP_SHARE
 /sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:46 handle 46: sfq perturb 10

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 46 u32 \
 match ip dport 80 0xffff match ip protocol 6 0xFF match ip firstfrag flowid 1:46
 let UPLINK=UPLINK-EXTERNAL_UL_HTTP_KBPS
fi

# OTHERTCP
if [ -n &quot;$EXTERNAL_UL_OTHERTCP_KBPS&quot; ]; then
 /sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:48 \
 cbq rate ${EXTERNAL_UL_OTHERTCP_KBPS}kbit allot 1600 prio 1 avpkt 1000 $EXTERNAL_UL_OTHERTCP_SHARE
 /sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:48 handle 48: sfq perturb 10

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 48 u32 \
 match ip dport $EXTERNAL_UL_OTHERTCP_PORT 0xffff match ip protocol 6 0xFF match ip firstfrag \
 flowid 1:48
 let UPLINK=UPLINK-EXTERNAL_UL_OTHERTCP_KBPS
fi

if [ $UPLINK -gt 0 ]; then

# classe interactive
/sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit allot 1600 prio 2 avpkt 1000
/sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:10 handle 10: sfq perturb 10

 # TOS Minimum Delay (ssh, NOT scp) in 1:10: donc on lui donne un priorité de 1000
 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 1000 u32 match ip tos 0x10 0xff  flowid 1:10

 # ICMP (ip protocol 1) dans la classe interactive 1:10 donc on lui donne un priorité de 1001
 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1:0 protocol ip prio 1001 u32 match ip protocol 1 0xff flowid 1:10

 # Pour accélérer le downaload lorsqu'un upload est en court il faut bien faire les ACK dans la classe interactive.

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1: protocol ip prio 1002 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

# classe bulk

 /sbin/tc class add dev $EXTERNAL_IFACE parent 1:1 classid 1:20 cbq rate $[9*$UPLINK/10]kbit \
   allot 1600 prio 3 avpkt 1000
 /sbin/tc qdisc add dev $EXTERNAL_IFACE parent 1:20 handle 20: sfq perturb 10

 /sbin/tc filter add dev $EXTERNAL_IFACE parent 1: protocol ip prio 1003 u32 \
   match ip dst 0.0.0.0/0 flowid 1:20

else
 echo &quot;Error: no bandwidth left for uplink on $EXTERNAL_IFACE: $UPLINK&quot; 1&gt;&amp;2
 /sbin/tc qdisc del dev $EXTERNAL_IFACE root    2&gt; /dev/null &gt; /dev/null
fi

#
# Il faut ralentir les download afin d'éviter que l'ISP mette en queue ce qui engendre le lag
# Les ISP ont tendance à avoir des queues énormes afin d'être sûrs que les downloads seront rapides.
#
# police ingress:

/sbin/tc qdisc add dev $EXTERNAL_IFACE handle ffff: ingress

# voip
# tout ce qui est voip ne doit pas être limité, donc on fait un match simple
# iax2

/sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
  match ip sport 4569 0xffff match ip protocol 17 0xff flowid :1
 /sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
  match ip dport 4569 0xffff match ip protocol 17 0xff flowid :1

# sip # priorite 5 !
/sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
  match ip sport 5060 0xffff match ip protocol 17 0xff flowid :1
/sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
  match ip dport 5060 0xffff match ip protocol 17 0xff flowid :1

/sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
match ip sport 5061 0xffff match ip protocol 17 0xff flowid :1

# rtp (tos 0x10 et udp) # priorte 5 !
/sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 5 u32 \
  match ip tos 0x10 0xff match ip protocol 17 0xff flowid :1

# SMTP
if [ -n &quot;$EXTERNAL_DL_SMTP_KBPS&quot; ]; then
 /sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 44 u32 \
 match ip sport 25 0xffff match ip protocol 6 0xFF match ip firstfrag \
 police rate ${EXTERNAL_DL_SMTP_KBPS}kbit burst 10k drop flowid :1
 let DOWNLINK=DOWNLINK-EXTERNAL_DL_SMTP_KBPS
fi

# HTTP
if [ -n &quot;$EXTERNAL_DL_HTTP_KBPS&quot; ]; then
 /sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 46 u32 \
 match ip sport 80 0xffff match ip protocol 6 0xFF match ip firstfrag \
 police rate ${EXTERNAL_DL_HTTP_KBPS}kbit burst 10k drop flowid :1
 let DOWNLINK=DOWNLINK-EXTERNAL_DL_HTTP_KBPS
fi

# OTHERTCP qui ne matchent pas les règles précédentes
if [ -n &quot;$EXTERNAL_DL_OTHERTCP_KBPS&quot; ]; then
 /sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 48 u32 \
 match ip sport $EXTERNAL_DL_OTHERTCP_PORT 0xffff match ip protocol 6 0xFF match ip firstfrag \
 police rate ${EXTERNAL_DL_OTHERTCP_KBPS}kbit burst 10k drop flowid :1
 let DOWNLINK=DOWNLINK-EXTERNAL_DL_OTHERTCP_KBPS
fi

##règles de burst
if [ $DOWNLINK -gt 0 ]; then
 /sbin/tc filter add dev $EXTERNAL_IFACE parent ffff: protocol ip prio 1000 u32 \
 match ip src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
else
 echo &quot;Error: no bandwidth left for downlink on $EXTERNAL_IFACE: $DOWNLINK&quot; 1&gt;&amp;2
 /sbin/tc qdisc del dev $EXTERNAL_IFACE ingress 2&gt; /dev/null &gt; /dev/null
fi

# initial if (are the 2 required variables defined?)
fi
</pre>
<p>N&#8217;hésitez pas à le tester, il déboite <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/' rel='bookmark' title='Allocation d&#8217;adresses IPv4 publiques over VPN'>Allocation d&#8217;adresses IPv4 publiques over VPN</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>bash and shell tips and tricks</title>
		<link>http://geekfault.org/2010/05/20/bash-and-shell-tips-and-tricks/</link>
		<comments>http://geekfault.org/2010/05/20/bash-and-shell-tips-and-tricks/#comments</comments>
		<pubDate>Thu, 20 May 2010 10:44:57 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=4416</guid>
		<description><![CDATA[Le but de cet l&#8217;article est de partager avec vous des petits &#8220;trucs&#8221;, que nous rédacteur geekfault utilisons dans nos consoles préférées tous les jours, et souhaitons échanger avec vous petits scarabées. En faite mon idée est partie de ce petit délire que m&#8217;a sorti khemael : tr -c "[:digit:]" " " < /dev/urandom &#124; [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2010/05/11/maintenir-son-dns-menteur-avec-adblock/' rel='bookmark' title='maintenir son DNS menteur avec Adblock'>maintenir son DNS menteur avec Adblock</a></li>
<li><a href='http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/' rel='bookmark' title='La nouvelle mode Geek : avoir son domaine .42'>La nouvelle mode Geek : avoir son domaine .42</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Le but de cet l&#8217;article est de partager avec vous des petits &#8220;trucs&#8221;, que nous rédacteur geekfault utilisons dans nos consoles préférées tous les jours, et souhaitons échanger avec vous petits scarabées.</p>
<p>En faite mon idée est partie de ce petit délire que m&#8217;a sorti khemael :</p>
<p><code><br />
tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"<br />
</code></p>
<p>Les astuces sont livrées de façon brute de fonderie.<br />
Noob s'abstenir.</p>
<p>Nota Noob : Ne tappe pas une commande sur ton shell que tu ne comprends pas.</p>
<p><!--more--></p>
<h3> Some of madx's tricks </h3>
<h4> Redirections </h4>
<p><code><br />
commande 1> fichier : Redirige stdout dans fichier<br />
commande 2> fichier : Redirige stderr dans fichier<br />
commande 2>&#038;1       : Redirige stderr vers stdout<br />
commande &#038;> fichier : Redirige stdout et stderr dans fichier<br />
</code></p>
<h4> Fork bomb ! Warning, ne pas utiliser ça sur un serveur non protégé <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h4>
<p><code><br />
 f(){ f|f&#038;};f<br />
</code></p>
<h4> Bash and perl regexp </h4>
<p><code><br />
 for i in * ; do mv "$i" "`echo $i | perl -pe 's/foo_regex/bar/' `"; done<br />
 for i in *.gif ; do convert "$i" "`echo $i | perl -pe 's/gif$/png/' `"; done<br />
</code></p>
<h4> scp resume </h4>
<p><code><br />
 rsync --partial --progress -e ssh file user@host:/dir<br />
</code></p>
<h4> Remote backup </h4>
<p><code><br />
 tar -cv / | ssh user@host -T -e none "cat > backup.tar"<br />
 ssh root@host "tar -c /" | cat > backup.tar<br />
</code></p>
<h4> burning </h4>
<p><code><br />
 mkisofs -v -R -r -V "dvd title" -o dvd.iso file1 file2 ...<br />
 cdrecord -v -dao -fs=500m -dev=/dev/sg1 -data dvd.iso<br />
 cdrecord -dev=/dev/sg1 blank=fast<br />
</code></p>
<h4> perl regex sur un fichier </h4>
<p><code><br />
perl -pi -e 's/^(#)?TIMEZONE=.*$/TIMEZONE="Europe\/Paris"/' /etc/conf.d/clock<br />
</code></p>
<h4> encode to theora/ogg </h4>
<p><code><br />
 ffmpeg -i whatever.avi -f ogg -vcodec libtheora -vb 2000k -acodec libvorbis -ab 128k -y whatever.ogg<br />
</code></p>
<p><!--nextpage--></p>
<h3> Some of bragon's tricks </h3>
<h4> Perfect rsync + remote </h4>
<p><code><br />
#!/bin/sh<br />
time /usr/bin/rsync \<br />
        --rsh="ssh -2 -l root" \<br />
        --verbose \<br />
        --archive \<br />
        --hard-links \<br />
        --numeric-ids \<br />
        --progress \<br />
        --stats \<br />
        --delete \<br />
        --exclude "/proc/*" \<br />
        --exclude "/sys/*" \<br />
        --exclude "/vservers/*/proc/*" \<br />
        --exclude "/vservers/*/dev/*" \<br />
        --exclude "/vservers/*/sys/*" \<br />
        --exclude "/data/*" \<br />
   /vservers/sam/ gerontius:/vservers/sam/<br />
</code></p>
<h4> config backup </h4>
<p><code><br />
cp /etc/httpd/conf/httpd.conf{,.bak}<br />
</code><br />
<code><br />
for file in * ; do cp $file $file.bak; done<br />
</code></p>
<h4> Afficher un calendrier rapidement </h4>
<p><code><br />
cal -3<br />
</code></p>
<h4> La date d'aujourd'hui </h4>
<p><code><br />
date +%d-%b-%Y<br />
16-May-2010</p>
<p>today=$(date +%d-%b-%Y)</p>
<p>echo $today<br />
16-May-2010<br />
</code></p>
<h4> repeting an argument </h4>
<p><code><br />
mkdir /path/to/exampledir<br />
cd !$<br />
</code></p>
<h4> Majuscule are useless </h4>
<p><code><br />
bragon@shaytan ~ $ shopt -s cdspell<br />
bragon@shaytan ~ $ cd Downloads/<br />
bragon@shaytan ~/Downloads $ cd<br />
bragon@shaytan ~ $ cd downloads<br />
Downloads<br />
bragon@shaytan ~/Downloads $<br />
</code></p>
<h4> Socket information sur ta workstation </h4>
<p><code><br />
ss -ari<br />
ss -arn<br />
</code></p>
<h4> Change user shell<br />
<h4>
<code><br />
chsh -s /bin/bash utilisateur # lui definir bash en tant que shell<br />
chsh -s /bin/false utilisateur # pas de shell<br />
chsh -s /bin/zsh utilisateur # zsh<br />
</code></p>
<h4> iptables line del </h4>
<p><code><br />
iptables -L -n --line-numbers<br />
iptables -D INPUT 34 # vires la ligne 34<br />
</code></p>
<h4> history clean / dmesg clean </h4>
<p><code><br />
history -c<br />
dmesg -c<br />
</code></p>
<h4>petit script de screenshot</h4>
<p><code><br />
#!/bin/bash<br />
export DISPLAY=":1"<br />
/usr/bin/firefox --display :1 "$1" > /dev/null 2> /dev/null &#038;<br />
/bin/sleep 10<br />
/usr/bin/import -window root -display :1 "$2"<br />
killall firefox-bin<br />
</code></p>
<h4> Se déconnecter d'un ssh quand on a timeout pour récupérer sa console </h4>
<p><code><br />
~.<br />
</code></p>
<p><!--nextpage--></p>
<h3> Some of khemael's tricks </h3>
<h4> Relancer la commande en root </h4>
<p><code><br />
su -c !!<br />
</code></p>
<h4> nice output of mount </h4>
<p><code><br />
mount | column -t<br />
</code></p>
<h4> Query wikipedia à travers le  DNS </h4>
<p><code><br />
dig +short txt <keyword>.wp.dg.cx<br />
</code></p>
<h4> afficher les 10 processus les plus gourmant en RAM </h4>
<p><code><br />
ps aux | sort -nk +4 | tail<br />
</code></p>
<h4> "BEEP" when the IP comes online </h4>
<p><code><br />
ping -a IP_address<br />
</code></p>
<h4> Extract a tarball without local saving. </h4>
<p><code><br />
wget -qO - "http://www.tarball.com/tarball.gz" | tar zxvf -<br />
</code></p>
<h4> My cool terminal clock <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h4>
<p><code><br />
watch -t -n1 "date +%T|figlet"<br />
</code></p>
<h4> Binary clock </h4>
<p><code><br />
watch -n 1 'echo "obase=2;`date +%s`" | bc'<br />
</code></p>
<h4> Quick share of a file through a port </h4>
<p><code><br />
nc -w 5 -v -l -p 80 < file.ext<br />
</code></p>
<h4> Stream youtube url directly to mplayer (no cclive needed) </h4>
<p><code><br />
mplayer -fs $(echo "http://youtube.com/get_video.php?$(curl -s $youtube_url | sed -n "/watch_fullscreen/s;.*\(video_id.\+\)&#038;title.*;\1;p")")<br />
</code></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2010/05/11/maintenir-son-dns-menteur-avec-adblock/' rel='bookmark' title='maintenir son DNS menteur avec Adblock'>maintenir son DNS menteur avec Adblock</a></li>
<li><a href='http://geekfault.org/2010/12/19/la-nouvelle-mode-geek-avoir-son-domaine-42/' rel='bookmark' title='La nouvelle mode Geek : avoir son domaine .42'>La nouvelle mode Geek : avoir son domaine .42</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/05/20/bash-and-shell-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</title>
		<link>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/</link>
		<comments>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/#comments</comments>
		<pubDate>Thu, 13 May 2010 12:52:48 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Geeklife]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[batterie optimisation]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[powertop]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=4331</guid>
		<description><![CDATA[Le but de cet article est de faire économiser de la batterie à votre laptop sous Linux. Avec quelques tips, c&#8217;est possible très facilement. On peut gagner 1h de batterie avec quelques méthodes simples. Follow the white rabbit Outils indispensable Déjà il va vous falloir vous munir d&#8217;un outils indispensable développé par intel nommé : [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/attachment/308/" rel="attachment wp-att-4334"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/05/308-300x300.jpg" alt="" title="308" width="300" height="300" class="alignleft size-medium wp-image-4334" /></a></p>
<p>Le but de cet article est de faire économiser de la batterie à votre laptop sous Linux.</p>
<p>Avec quelques tips, c&#8217;est possible très facilement.<br />
On peut  gagner 1h de batterie avec quelques méthodes simples.</p>
<p>Follow the white rabbit</p>
<p><!--more--></p>
<h3> Outils indispensable </h3>
<p>Déjà il va vous falloir vous munir d&#8217;un outils indispensable développé par intel nommé : powertop<br />
Le gars qui cherche à économiser de la batterie et qui n&#8217;a pas installé powertop c&#8217;est vraiment un gros naz <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code><br />
emerge -av powertop<br />
</code></p>
<p><code><br />
apt-get install powertop<br />
</code></p>
<p>Lancez powertop en root, et suivez le guide, tout est expliqué directement dans l&#8217;interface ncurses.</p>
<h3> Désactive le superflu dans l&#8217;bios petite loutre </h3>
<p>Il convient d&#8217;aller désactiver les choses dont vous ne vous servez jamais dans le bios.<br />
Exemple :</p>
<li>Désactiver le bluetooth</li>
<li>Désactiver le wake on lan sur eth0</li>
<li>Désactiver l&#8217;extension Wimax de votre carte wifi.</li>
<li>Désactiver le lecteur CD si vous ne vous en servez jamais.</li>
<p>Etc &#8230; etc &#8230;</p>
<p>ça permet d&#8217;économiser déjà pas mal de batterie.</p>
<h3> Modifies ton sysctl.conf petit castor </h3>
<p>Quelques réglages à avoir dans le sysctl.conf</p>
<p>modifier : /etc/sysctl.conf<br />
<code><br />
vm.laptop_mode = 5  # Activating laptop mode, power friendly I/Os<br />
vm.dirty_writeback_centisecs = 2000<br />
kernel.nmi_watchdog = 0<br />
vm.swappiness = 5<br />
</code></p>
<p>Le writeback du cache du système de fichiers sur le disque dur se fait assez fréquemment. Pour réduire la consommation, il suffit de le faire moins fréquemment.<br />
Par defaut le writeback est à 500</p>
<h3> fout ça dans ton /sys petit scarabée </h3>
<p><code><br />
echo 10 > /sys/module/snd_hda_intel/parameters/power_save<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy<br />
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy<br />
</code></p>
<h3> Actives le power management dans ta carte wifi Intel petite fourmis des bois </h3>
<p><code><br />
iwconfig wlan0 power on<br />
</code></p>
<h3>  Mon petit script à la con, lis ça petit phasmid </h3>
<p><code></p>
<p>#!/bin/bash</p>
<p>#echo 5 > /sys/bus/pci/drivers/iwlagn/*/power_level<br />
echo 5 > /sys/bus/pci/drivers/iwlagn/0000\:03\:00.0/power_level</p>
<p>echo 1 > /sys/devices/system/cpu/sched_mc_power_savings</p>
<p>echo 1500 > /proc/sys/vm/dirty_writeback_centisecs</p>
<p>echo 5 > /proc/sys/vm/laptop_mode</p>
<p># passe en economie d'energie la carte son<br />
echo 10 > /sys/module/snd_hda_intel/parameters/power_save<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy<br />
# desactive le wake on lan sur eth0<br />
ethtool -s eth0 wol d<br />
# met la luminosité à 30%<br />
xbacklight -set 30<br />
# Passe le frequency scaling en "on demand"<br />
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor</p>
<p>## Spécifique thinkpad x300 ou equivalent<br />
# desactive le bluetooth<br />
echo disable > /proc/acpi/ibm/bluetooth<br />
# desactive le modem 3G<br />
echo disable > /proc/acpi/ibm/wan<br />
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy</p>
<p></code></p>
<p>Le paramètre sched_smt_power_savings sous /sys/devices/system/cpu/ contrôle le multithreading. Par défaut, il vaut 0 pour des performances optimales<br />
Mettez le à 1 pour avoir plus de batterie, ainsi vous ne vous servirez du second cœur de votre cpu qu&#8217;en cas de besoin ! :</p>
<p><code><br />
echo 1 > /sys/devices/system/cpu/sched_smt_power_savings<br />
</code></p>
<h3> Conclusion </h3>
<p>Cet article n&#8217;est pas complet car j&#8217;ai également des optimisations dans mon kernel, mais ça peut déjà vous donner une bonne base de travail.<br />
N&#8217;hésitez pas à faire des bench avec powertop à CHAQUE modification pour voir ce que ça change sur votre consommation en Watts.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/' rel='bookmark' title='Partager la connexion de son laptop'>Partager la connexion de son laptop</a></li>
<li><a href='http://geekfault.org/2009/08/14/faille-critique-dans-tous-les-noyaux-linux/' rel='bookmark' title='Faille critique dans tous les noyaux Linux'>Faille critique dans tous les noyaux Linux</a></li>
<li><a href='http://geekfault.org/2009/05/31/chromium-google-chrome-sous-linux/' rel='bookmark' title='Chromium, le Google Chrome sous Linux sans émulation'>Chromium, le Google Chrome sous Linux sans émulation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Filtrer ses mails ! Un cauchemard !</title>
		<link>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/</link>
		<comments>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 17:18:10 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2808</guid>
		<description><![CDATA[Le but de ce howto est de vous présenter ma façon de filtrer mes mails de tous mes comptes pop/imap, afin de les centraliser dans une même interface. Afin de filtrer les mails qui arrivent nous allons utiliser &#8220;sieve&#8221; un merveilleux ajout disponible dans le packet dovecot, qui permet de filtrer les messages directement AVANT [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction et objectifs--><a href="http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/casserole3/" rel="attachment wp-att-2887"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/04/casserole3-300x200.jpg" alt="" title="casserole3" width="300" height="200" class="alignleft size-medium wp-image-2887" /></a>Le but de ce howto est de vous présenter <strong>ma</strong> façon de filtrer mes mails de tous mes comptes pop/imap, afin de les centraliser dans une même interface.<br />
Afin de filtrer les mails qui arrivent nous allons utiliser &#8220;sieve&#8221; un merveilleux ajout disponible dans le packet dovecot, qui permet de filtrer les messages directement <strong> AVANT </strong> qu&#8217;ils arrivent dans la casserole IMAP.<br />
<!--more--></p>
<h3>Les mails sans rangement c&#8217;est immangeable, ceci est une petite recette d&#8217;assaisonnement </h3>
<p>Centraliser mes mails m&#8217;apporte plusieurs choses :<br />
<strong><br />
- Faciliter le filtrage.<br />
- Faciliter le rangement dans différents dossiers.<br />
- Effectuer un backup de tous mes comptes IMAP/POP.<br />
- Faire apprendre à mon antispam mes différents réglages.<br />
</strong></p>
<p>Cette recette ne couvre pas l&#8217;installation de Apache + php + MySQL<br />
Nous supposons ici que vous savez faire ce type d&#8217;installation.</p>
<p>Cette recette ne couvre pas non plus l&#8217;utilisation de mutt (je mettrai tout de même en ligne ma configuration).<br />
En effet, l&#8217;utilisation de mutt mérite un article à lui seul !</p>
<p>Postulat1 : Les mails seront stockés dans cette recette ici : /home/utilisateur/.maildir<br />
Postulat2 : Nous supposons que vous avez plusieurs comptes email à rapatrier.<br />
Postulat3 : Nous supposons que vous disposez d&#8217;une machine GNU/Linux sous Gentoo et/ou Debian pour effectuer ce howto.<br />
Postulat4 : Nous supposons que vous stockez vos mails dans le format Maildir ! (se reporter au Howto Sur la conversion mbox => maildir en cas de soucis) Allez lire : <a href="http://geekfault.org/2010/04/09/maildir-mbox-la-migration/">http://geekfault.org/2010/04/09/maildir-mbox-la-migration/</a></p>
<h3> Résultat une fois que la recette est en place </h3>
<p><a href="http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtermail-2/" rel="attachment wp-att-2969"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/04/filtermail1.jpeg" alt="" title="filtermail" width="662" height="945" class="aligncenter size-full wp-image-2969" /></a></p>
<p><!--nextpage--><!--pagetitle:Aux fourneaux !-->  </p>
<h3> Logiciels nécessaires pour &#8220;MailFiltrés&#8221; </h3>
<li> MySQL-5 </li>
<li> Apache-2.2 </li>
<li> Php-5.2 </li>
<li> RoundCube + plugins &#8220;Report Junk&#8221; et &#8220;Manage Sieve&#8221; </li>
<li> Dovecot (pop/imap) + Sieve + ManageSieve </li>
<li> SpamAssassin + MySQL </li>
<li> Postfix </li>
<li> mutt + sidebar </li>
<li> Fetchmail </li>
<h3> Remplir la casserole </h3>
<p>Pour trier le manger dans la casserole nous devons tout d&#8217;abord la remplir !</p>
<p>Pour effectuer ce howto il nous faut tout d&#8217;abord des emails.<br />
Il va donc nous falloir configurer fetchmail.<br />
Attention ne pas lancer fetchmail de suite ! Sinon vous risquez de rapatrier les emails sans même les faire passer dans la moulinette avant de les déposer dans les bons compartiments de la casserole !</p>
<h4> Récupérer les ingrédients et les mettre dans la casserole </h4>
<p>* Gentoo<br />
<code><br />
USE="ssl" emerge -av net-mail/fetchmail<br />
</code></p>
<p>* Debian<br />
<code><br />
apt-get install fetchmail<br />
</code></p>
<p>* .fetchmailrc</p>
<p><code><br />
## les mails mondomaine.info<br />
poll pop.geekmx.org<br />
protocol pop3<br />
username bragon@mondomaine.info<br />
password ""<br />
#mda '/usr/bin/procmail -d %T' ### petit commentaire pour vous faire voir comment faire pour faire passer vos mails dans la moulinette procmail avant de les donner à manger à dovecot !!<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here ### Nom de l'utilisateur local pour déposer les mails.<br />
keep ### Laisses mes mails sur l'imap distant ! Mechant !</p>
<p>## ensuite on recup les mails geeknode<br />
poll pop.geekmx.org<br />
protocol pop3<br />
username utilisateurvalide@g33kn0de.org<br />
password ""<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here<br />
keep</p>
<p>## apres on passe au compte gmail<br />
poll imap.gmail.com<br />
proto imap<br />
user "bragon.unuser@gmail.com"<br />
password ""<br />
ssl<br />
keep<br />
mda "/usr/libexec/dovecot/deliver"<br />
is 'bragon' here</p>
<p>## On synchronise le compte blackberry pour virification<br />
#poll imap.geekmx.org<br />
#proto imap<br />
#user "unuser@undomaine.info"<br />
#password ""<br />
#ssl<br />
#keep<br />
#mda "/usr/libexec/dovecot/deliver"<br />
#is 'bragon' here</p>
<p>## preparation pour les mails EW<br />
#<br />
poll trucmail.euro-web.fr<br />
protocol imap<br />
username "truc.plop[_at_]euro-web[point_dot]fr" ## Mettre ici une vraie adresse mail<br />
password "" ## Mettre ici un vrai mot de passe.<br />
folder 'INBOX.sdf' ## Recupère spécifiquement un dossier IMAP<br />
folder 'INBOX.task'<br />
folder 'INBOX.sysadmin'<br />
folder 'INBOX.netavous'<br />
folder 'INBOX.frnog'<br />
folder 'INBOX.TODO'<br />
folder 'INBOX' ## Recupère le dossier imap principal<br />
keep ## Laisse les mails sur le serveur<br />
mda "/usr/libexec/dovecot/deliver" ## Utilise dovecot en tant que deliver local<br />
is 'bragon' here ## Mets les mails dans le répertoire courant de l'utilisateur bragon.</p>
<p></code></p>
<h3> Filtrer / Découper  les ingrédients Juste avant la casserole </h3>
<p><code><br />
emerge -av =net-mail/dovecot-1.2.6<br />
</code><br />
ou<br />
<code><br />
apt-get install dovecot  # Je crois que de base dans Debian dovecot est compilé avec sieve.<br />
</code></p>
<p>* Flag de compilation nécéssaire pour dovecot : &#8220;berkdb bzip2 ipv6 maildir managesieve mysql pam sieve ssl zlib -caps -cydir -dbox -doc -kerberos -ldap -mbox -postgres -sqlite -suid -vpopmail&#8221;</p>
<p>Via ces directives de compilation dovecot supporte maintenant les fichiers de filtrage &#8220;.sieve&#8221;<br />
Il vous suffit de déposer n&#8217;importe quel fichier sieve dans /home/utilisateur/sieve pour que dovecot utilise vos filtres.</p>
<p>Voici un exemple de syntaxe :  tamereenshortsurunCISCO7603.sieve</p>
<p><code><br />
# rule:[cron]<br />
elsif anyof (header :contains "Subject" "root@gn",<br />
        header :contains "From" "root@astaroth",<br />
        header :contains "From" "bragon@tobold",<br />
        header :contains "From" "root@aec-ri.com",<br />
        header :contains "From" "root@mail.geekmx.org",<br />
        header :contains "From" "root@bender")<br />
{<br />
        fileinto "cron";<br />
}<br />
</code></p>
<p>Second exemple de syntaxe : tonpapaesttellementvieuxque&#8230;.sieve</p>
<p><code><br />
# rule:[SYSADMIN ML]<br />
elsif anyof (header :contains "From" "sysadmin@domaine.net",<br />
        header :contains "Subject" "Liste Franophone Administrateur systeme")<br />
{<br />
        fileinto "boulot.sysadmin";<br />
        redirect "smartphone[at]bragon[point]info"; ## Mettre ici une adresse mail valide<br />
}<br />
# rule:[Debian Security Advertise]<br />
elsif anyof (header :contains "Subject" "[SECURITY][DSA")<br />
{<br />
        fileinto "boulot.dsa";<br />
}<br />
</code></p>
<h3> Virer les ingrédients moisis en les mettant dans un compartiment de la casserole </h3>
<p><code><br />
emerge -av =mail-filter/spamassassin-3.2.5-r2<br />
</code></p>
<p>* Flag de compilation nécessaire pour spamassassin : "berkdb ipv6 mysql ssl -doc -ldap -postgres -qmail -sqlite -tools"</p>
<p>* Voir les configurations de spamd ci-après.</p>
<h3> Renvoyer certains ingrédients au cuisinier </h3>
<p><code><br />
emerge -av =mail-mta/postfix-2.6.5<br />
</code></p>
<p>* Flag de compilation nécessaire pour postfix : "dovecot-sasl ipv6 mysql pam ssl -cdb -hardened -ldap -mbox -nis -postgres -sasl (-selinux) -vda"</p>
<p>* Voir le fichier de configuration main.cf ci-après.</p>
<p>Le postfix me sert uniquement pour transférer certaines régles sieve vers une autre adresse mail.<br />
Cette adresse mail est popé via mon smartphone.<br />
Ainsi je reçois <strong> N'importe ou </strong> Certains mails qui "matchent" une régle de filtrage spécifique !</p>
<p>Le postfix peut me servir également à faire réply dans l'interface roundcube ou mutt . (mais je l'utilise rarement car ce postfix n'a ni domainkeys ni spf pour mes domaines pro / geeknode / gmail) Et le mail bien que délivré arrivera dans la boite à spam du correspondant fréquemment.</p>
<p>Ce postfix n'est là que pour dépanner, et pour transférer mes mails super important via mon smartphone.</p>
<h3> Faire mijoter à feu doux ! </h3>
<p>Placer ce crontab pour l'utilisateur qui va devoir récupérer les mails.</p>
<p><code><br />
crontab -e<br />
*/10 * * * * /usr/bin/fetchmail > /dev/null 2>&#038;1<br />
</code></p>
<p>Les mails vont donc être récupérés toutes les dix minutes, et directement déposés dans le MDA ( Mail Délivery Agent).<br />
Le MDA de ma configuration fetchmail étant dovecot, et dovecot lisant tous mes filtres, cela devrait bien se passer <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!--nextpage--><!--pagetitle:Exemple de présentation--></p>
<h3> Présentation sur un joli plat du résultat. </h3>

<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/mailfilter_indesirable/' title='MailFilter_Indésirable'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/MailFilter_Indésirable-150x150.png" class="attachment-thumbnail" alt="MailFilter_Indésirable" title="MailFilter_Indésirable" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/spam_roundcube/' title='Spam_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Spam_Roundcube-150x150.png" class="attachment-thumbnail" alt="Spam_Roundcube" title="Spam_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/ultimate_mailfilter_roundcube-3/' title='Ultimate_Mailfilter_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Ultimate_Mailfilter_Roundcube2-150x150.png" class="attachment-thumbnail" alt="Ultimate_Mailfilter_Roundcube" title="Ultimate_Mailfilter_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtre_roundcube/' title='Filtre_Roundcube'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/Filtre_Roundcube-150x150.png" class="attachment-thumbnail" alt="Filtre_Roundcube" title="Filtre_Roundcube" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/casserole3/' title='casserole3'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/casserole3-150x150.jpg" class="attachment-thumbnail" alt="casserole3" title="casserole3" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/mutt-screenshot/' title='mutt-screenshot'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/mutt-screenshot-150x150.png" class="attachment-thumbnail" alt="mutt-screenshot" title="mutt-screenshot" /></a>
<a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/filtermail-2/' title='filtermail'><img width="150" height="150" src="http://geekfault.org/wp-content/uploads/2010/04/filtermail1-150x150.jpg" class="attachment-thumbnail" alt="filtermail" title="filtermail" /></a>

<p><!--nextpage--><!--pagetitle:Finition et garnitures--></p>
<h3> La configuration de dovecot aka "Le déversoir"</h3>
<p><code><br />
base_dir = /var/run/dovecot/<br />
protocols = imap managesieve ## Je suppose que vous n'avez pas besoin de pop pour votre interface centralisé.<br />
shutdown_clients = yes<br />
disable_plaintext_auth = no<br />
ssl = no       ## ce howto ne couvre pas la sécurité de l'imap</p>
<p># Si vous désirez utiliser seulement TLS<br />
## Pour le moment ce HowTo n'a pas été pensé pour le SSL, mais on peut très facilement l'ajouter.<br />
## disable_plaintext_auth = yes<br />
## ssl = yes<br />
## ssl_cert_file = /var/qmail/control/servercert.pem<br />
## ssl_key_file = /var/qmail/control/servercert.pem</p>
<p>login_dir = /var/run/dovecot/login<br />
login_process_per_connection = yes<br />
login_greeting = Imap ready.<br />
mail_debug = no<br />
mail_uid = 1000<br />
mail_gid = 100<br />
first_valid_uid = 1000 ### Premier utilisateur système<br />
last_valid_uid = 1001 ### Vous pouvez mettre en place cet imap pour plus de deux utilisateurs en augmentant cette directive.<br />
first_valid_gid = 100<br />
last_valid_gid = 1000<br />
mail_location = maildir:~/.maildir ### Expliqué dans le postulat de l'introduction</p>
<p>## on active le deliver local</p>
<p>protocol lda {<br />
  postmaster_address = bragon[at_at_at]bragon[dot_point_dot]info ### Mettre ici une adresse mail valide !!!<br />
  # remember to give proper permissions for these files as well<br />
  log_path = /var/log/dovecot-deliver-errors.log<br />
  info_log_path = /var/log/dovecot-deliver.log<br />
  #auth_socket_path = /var/run/dovecot/auth-master<br />
mail_plugins = sieve<br />
}</p>
<p>## On log correctement<br />
##<br />
## Logging<br />
##<br />
# Log file to use for error messages, instead of sending them to syslog.<br />
# /dev/stderr can be used to log into stderr.<br />
log_path = /var/log/dovecot/error</p>
<p># Log file to use for informational and debug messages.<br />
# Default is the same as log_path.<br />
info_log_path = /var/log/dovecot/info</p>
<p>protocol imap {<br />
         listen = 81.93.247.***:143 ### Mettre l'ip de la machine ici<br />
        login_executable = /usr/libexec/dovecot/imap-login<br />
        mail_max_userip_connections = 10<br />
        mail_plugin_dir = /usr/lib/dovecot/imap<br />
        mail_plugins = quota imap_quota<br />
}</p>
<p>plugin {<br />
        quota = maildir:User quota<br />
          # Used by both the Sieve plugin and the ManageSieve protocol<br />
          sieve=~/.dovecot.sieve ## Répertoire ou serons stockés les regles de filtrage de dovecot.<br />
          sieve_dir=~/sieve         ## Répertoire ou serons stockés les regles de filtrage de l'utilisateur  (elles sont lu par dovecot)        </p>
<p>}</p>
<p>protocol managesieve {<br />
  # Specify an alternative address:port the daemon must listen on<br />
  # (default: *:2000)<br />
listen = 81.93.247.***:2000 ## ip de votre box à mettre ici</p>
<p>  managesieve_logout_format = bytes ( in=%i : out=%o )<br />
}</p>
<p>plugin {<br />
  # Used by both the Sieve plugin and the ManageSieve protocol<br />
  sieve=~/.dovecot.sieve<br />
  sieve_dir=~/sieve<br />
}</p>
<p>auth_verbose = yes<br />
auth_debug = yes</p>
<p>auth default {                  ### On se log ici directement à la base d'utilisateur unix du système courant.<br />
        mechanisms = plain login</p>
<p>passdb pam { args = "*"<br />
}</p>
<p>userdb passwd { args = blocking=yes </p>
<p>}</p>
<p>}</p>
<p></code></p>
<h3> Configuration de .muttrc aka le rouleau à patisserie </h3>
<p>Placer ce fichier .muttrc à la racine du répertoire utilisateur : </p>
<p><code></p>
<p>### pour voir les sous dossiers</p>
<p>set spoolfile="/home/bragon/.maildir/"<br />
set folder="/home/bragon/.maildir/"<br />
set mask="!^\\.[^.]"<br />
set record="+.Sent"<br />
set postponed="+.Drafts"</p>
<p>mailboxes ! + `\<br />
for file in /home/bragon/.maildir/.*; do \<br />
  box=$(basename "$file"); \<br />
  if [ ! "$box" = '.' -a ! "$box" = '..' -a ! "$box" = '.customflags' \<br />
      -a ! "$box" = '.subscriptions' ]; then \<br />
    echo -n "\"+$box\" "; \<br />
  fi; \<br />
done`</p>
<p>### activer la sidebar de mutt<br />
macro index c "<change-folder>?<toggle-mailboxes>" "open a different folder"<br />
macro pager c "<change-folder>?<toggle-mailboxes>" "open a different folder"</p>
<p># Sidebar<br />
set sidebar_visible=yes<br />
set sidebar_width=50<br />
color sidebar_new yellow default</p>
<p># ctrl-n, ctrl-p to select next, prev folder<br />
# ctrl-o to open selected folder<br />
bind index \Cp sidebar-prev<br />
bind index \Cn sidebar-next<br />
bind index \Cb sidebar-open<br />
bind pager \Cp sidebar-prev<br />
bind pager \Cn sidebar-next<br />
bind pager \Cb sidebar-open</p>
<p>## mon editeur est emacs et je t'emmerde !!!<br />
set editor="emacs -nw"</p>
<p></code></p>
<h3> Configuration de postfix aka "Le renvoyeur" </h3>
<p><code><br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = //usr/lib/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
myhostname = tobold.mondomaine.info<br />
mydomain = tobold.mondomaine.info<br />
myorigin = $myhostname</p>
<p>unknown_local_recipient_reject_code = 550</p>
<p>debug_peer_level = 2</p>
<p>debugger_command =<br />
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin<br />
         ddd $daemon_directory/$process_name $process_id &#038; sleep 5</p>
<p>sendmail_path = /usr/sbin/sendmail</p>
<p>newaliases_path = /usr/bin/newaliases</p>
<p>mailq_path = /usr/bin/mailq</p>
<p>setgid_group = postdrop</p>
<p>html_directory = /usr/share/doc/postfix-2.6.5/html</p>
<p>manpage_directory = /usr/share/man</p>
<p>sample_directory = /etc/postfix</p>
<p>readme_directory = /usr/share/doc/postfix-2.6.5/readme<br />
home_mailbox = .maildir/</p>
<p></code></p>
<h3> Configuration SpamAssassin/MySQL </h3>
<p>* Afin de générer un bon local.cf utilisez : <a href="http://www.yrex.com/spam/spamconfig.php">http://www.yrex.com/spam/spamconfig.php</a></p>
<p>* Insérer dans une base MySQL<br />
<code><br />
CREATE TABLE userpref (<br />
username varchar(100) NOT NULL default '',<br />
preference varchar(50) NOT NULL default '',<br />
value varchar(100) NOT NULL default '',<br />
prefid int(11) NOT NULL auto_increment,<br />
PRIMARY KEY (prefid),<br />
KEY username (username)<br />
);<br />
  CREATE TABLE bayes_expire (<br />
          id                    int(11)         NOT NULL default '0',<br />
          runtime               int(11)         NOT NULL default '0',<br />
          KEY bayes_expire_idx1 (id)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_global_vars (<br />
          variable              varchar(30)     NOT NULL default '',<br />
          value                 varchar(200)    NOT NULL default '',<br />
          PRIMARY KEY           (variable)<br />
          ) TYPE=MyISAM;</p>
<p>      INSERT INTO bayes_global_vars VALUES ('VERSION','3');</p>
<p>      CREATE TABLE bayes_seen (<br />
          id                    int(11)         NOT NULL default '0',<br />
          msgid                 varchar(200) binary NOT NULL default '',<br />
          flag                  char(1)         NOT NULL default '',<br />
          PRIMARY KEY           (id,msgid)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_token (<br />
          id                    int(11)         NOT NULL default '0',<br />
          token                 char(5)         NOT NULL default '',<br />
          spam_count            int(11)         NOT NULL default '0',<br />
          ham_count             int(11)         NOT NULL default '0',<br />
          atime                 int(11)         NOT NULL default '0',<br />
          PRIMARY KEY           (id, token),<br />
          INDEX (id, atime)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE bayes_vars (<br />
          id                    int(11)         NOT NULL AUTO_INCREMENT,<br />
          username              varchar(200)    NOT NULL default '',<br />
          spam_count            int(11)         NOT NULL default '0',<br />
          ham_count             int(11)         NOT NULL default '0',<br />
          token_count           int(11)         NOT NULL default '0',<br />
          last_expire           int(11)         NOT NULL default '0',<br />
          last_atime_delta      int(11)         NOT NULL default '0',<br />
          last_expire_reduce    int(11)         NOT NULL default '0',<br />
          oldest_token_age      int(11)         NOT NULL default '2147483647',<br />
          newest_token_age      int(11)         NOT NULL default '0',<br />
          PRIMARY KEY           (id),<br />
          UNIQUE bayes_vars_idx1 (username)<br />
          ) TYPE=MyISAM;</p>
<p>      CREATE TABLE awl (<br />
          username              varchar(100)    NOT NULL default '',<br />
          email                 varchar(200)    NOT NULL default '',<br />
          ip                    varchar(10)     NOT NULL default '',<br />
          count                 int(11)         default '0',<br />
          totscore              float           default '0',<br />
          PRIMARY KEY           (username,email,ip)<br />
          ) TYPE=MyISAM;</p>
<p></code></p>
<p>* secret.cf</p>
<p><code></p>
<p>##(Tell Spamassassin to use MySQL for bayes data<br />
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL<br />
bayes_sql_dsn                   DBI:mysql:sa:localhost:3306<br />
bayes_sql_username              sa<br />
bayes_sql_password              somepwd</p>
<p>##(Tell Spamassassin to use MySQL for AWL data<br />
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList<br />
user_awl_dsn                    DBI:mysql:sa:localhost:3306<br />
user_awl_sql_username           sa<br />
user_awl_sql_password           somepwd</p>
<p></code></p>
<p>* local.cf</p>
<p><code><br />
# SpamAssassin config file for version 3.x<br />
# NOTE: NOT COMPATIBLE WITH VERSIONS 2.5 or 2.6<br />
# See http://www.yrex.com/spam/spamconfig25.php for earlier versions<br />
# Generated by http://www.yrex.com/spam/spamconfig.php (version 1.50)</p>
<p># How many hits before a message is considered spam.<br />
required_score           5.0</p>
<p># Change the subject of suspected spam<br />
rewrite_header subject         [SPAM]</p>
<p># Encapsulate spam in an attachment (0=no, 1=yes, 2=safe)<br />
report_safe             1</p>
<p># Enable the Bayes system<br />
use_bayes               1</p>
<p># Enable Bayes auto-learning<br />
bayes_auto_learn              1</p>
<p># Enable or disable network checks<br />
skip_rbl_checks         0<br />
use_razor2              1<br />
#use_dcc                 1<br />
use_pyzor               1</p>
<p># Mail using languages used in these country codes will not be marked<br />
# as being possibly spam in a foreign language.<br />
# - english french<br />
#ok_languages            en fr </p>
<p># Mail using locales used in these country codes will not be marked<br />
# as being possibly spam in a foreign language.<br />
#ok_locales              en fr<br />
</code></p>
<h3> Ajouter les clous de girofles dans RoundCube </h3>
<p><a href="http://www.tehinterweb.co.uk/roundcube/#pisieverules">http://www.tehinterweb.co.uk/roundcube/#pisieverules</a></p>
<p>Il vous faut installer les plugins ManageSieve et ReportasJunk<br />
Suivez la documentation officielle, elle s'en sortira mieux que moi afin de vous expliquer tout cela.</p>
<ul>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/sieverules.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/sieverules.README.txt</a></li>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/sauserprefs.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/sauserprefs.README.txt</a></li>
<li><a href=http://www.tehinterweb.co.uk/roundcube/plugins/markasjunk2.README.txt>http://www.tehinterweb.co.uk/roundcube/plugins/markasjunk2.README.txt</a></li>
</ul>
<h3> Laissez refroidir </h3>
<p><strong>Voilà c'est prêt  !</strong></p>
<p>Awesome non ?</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/04/09/maildir-mbox-la-migration/' rel='bookmark' title='Maildir mbox &#8211; La migration'>Maildir mbox &#8211; La migration</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2009/05/16/rsnapshot/' rel='bookmark' title='Mise en place d&#8217;un système de backup avec Rsnapshot'>Mise en place d&#8217;un système de backup avec Rsnapshot</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</title>
		<link>http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/</link>
		<comments>http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 18:44:39 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[eeegw]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2122</guid>
		<description><![CDATA[Vous vous souvenez dans l&#8217;article : http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/ Je vous ai parlé de plein de petits ajouts afin de rendre votre eeegw MUST. Je vous avais parlé de : Pouvoir mettre en place un proxy transparent pour votre connexion pour mettre en cache les pages les plus souvent demandées et ainsi économiser de la bande passante. [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/img00263-2/" rel="attachment wp-att-2127"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/IMG00263-300x225.jpg" alt="" title="IMG00263" width="300" height="225" class="alignleft size-medium wp-image-2127" /></a></p>
<p>Vous vous souvenez dans l&#8217;article : <a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/">http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/</a> Je vous ai parlé de plein de petits ajouts afin de rendre votre eeegw MUST.</p>
<p>Je vous avais parlé de :</p>
<p><strong>Pouvoir mettre en place un proxy transparent pour votre connexion pour mettre en cache les pages les plus souvent demandées et ainsi économiser de la bande passante.</strong></p>
<p>Finalement j&#8217;ai trouvé le soft parfait pour faire ça : <a href="http://www.pps.jussieu.fr/~jch/software/polipo/">http://www.pps.jussieu.fr/~jch/software/polipo/</a></p>
<p><!--more--></p>
<h4> Choix du soft de proxy cache </h4>
<p><strong> Pourquoi ne pas avoir choisi squid ? </strong></p>
<p>- Parce qu&#8217;il est trop gourmand en ressource pour la eeegw.<br />
- Parce que sa conf est imbittable pour un non initié.</p>
<p><strong> Pourquoi avoir choisi Polipo ?</strong></p>
<p>- Parce qu&#8217;il consomme que dalle en ressource et en espace disque.<br />
- Parce que sa configuration est assez implicite.<br />
- Polipo à toutes les fonctions d&#8217;un bon web proxy.<br />
- Polipo  est parfaitement adapté aux petits reseaux, mais pourrait parfaitement fonctionner sur un gros réseau bien qu&#8217;il n&#8217;ai pas spécialement été design dans ce but.<br />
- Polipo sait filtrer, ainsi si on souhaite totalement interdire facebook.com ou msn.con/live.com sur son reseau <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  On peut très facilement.<br />
- Polipo sait causer ipv4 et ipv6, Ainsi polipo peut être utilisé en tant que bridge pour permettre aux clients ipv6 d&#8217;accéder à l&#8217;internet v4 et vis et versa.<br />
- Polipo sait parler SOCKS, ainsi il peut très facilement se coupler (ou s&#8217;accoupler au choix :p) avec tor afin de surfer de façon anonyme.</p>
<h4> Installation et configuration de Polipo </h4>
<p>Sur eeegw rien de plus simple :</p>
<p><code><br />
apt-get install polipo<br />
</code></p>
<p>Allé on va le configurer : /etc/polipo/config</p>
<p><code></p>
<p>proxyAddress = "::0"        # both IPv4 and IPv6<br />
# proxyAddress = "0.0.0.0"    # IPv4 only<br />
proxyPort = 8118<br />
# If you are enabling 'proxyAddress' above, then you want to enable the<br />
# 'allowedClients' variable to the address of your network, e.g.<br />
allowedClients = 127.0.0.1, 10.0.69.0/24<br />
# Uncomment this if you want your Polipo to identify itself by<br />
# something else than the host name:<br />
proxyName = "polipo.eeegw.bragon.info"<br />
# Uncomment this if you want to use a parent SOCKS proxy:<br />
# socksParentProxy = "localhost:9050"<br />
# socksProxyType = socks5<br />
### Memory<br />
### ******<br />
# Uncomment this if you want Polipo to use a ridiculously small amount<br />
# of memory (a hundred C-64 worth or so):<br />
# chunkHighMark = 819200<br />
# objectHighMark = 128<br />
# Uncomment this if you've got plenty of memory:<br />
chunkHighMark = 50331648<br />
objectHighMark = 16384<br />
## me permet d'acceder a http://10.0.69.250:8118/polipo/index pour voir ce qui est mis en cache<br />
disableIndexing = false<br />
disableServersList = false<br />
### HTTP<br />
### ****<br />
# Note that PMM is somewhat unreliable.</p>
<p>pmmFirstSize = 16384<br />
pmmSize = 8192</p>
<p># Suggestions from bragon<br />
maxConnectionAge = 10m<br />
maxConnectionRequests = 1024<br />
serverMaxSlots = 16<br />
serverSlots = 4<br />
tunnelAllowedPorts = 1-65535</p>
<p></code></p>
<p>/etc/polipo/forbidden</p>
<p><code><br />
microsoft.com<br />
live.com<br />
msn.com<br />
hotmail.fr<br />
hotmail.com<br />
facebook.fr<br />
facebook.com<br />
</code></p>
<p>Laissez le fichier option de base.</p>
<h4> On peut faire feu </h4>
<p><code><br />
/etc/init.d/polipo start<br />
</code></p>
<p>http://ip.eeegw:8118/polipo/</p>
<p>Vous pourrez ainsi voir la configuration ainsi que pas mal de chose étant mis en cache.</p>
<p>http://ip.eeegw:8118/polipo/index?</p>
<h4> Le choix s&#8217;offre à vous </h4>
<p>Deux solutions :<br />
- Soit vous dites à vos clients d&#8217;utiliser dans leur firefox/chromium comme proxy : ip.polipo:8118<br />
- Soit via une règle iptables vous dites simplement à votre eeegw que tout traffic sortant via le port 80 doit d&#8217;abord passer par polipo.</p>
<p>Croyez moi vous allez économiser de la bande passante <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/' rel='bookmark' title='Allocation d&#8217;IPv6 over OpenVPN'>Allocation d&#8217;IPv6 over OpenVPN</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Monitoring &#8211; Munin</title>
		<link>http://geekfault.org/2010/02/20/monitoring-munin/</link>
		<comments>http://geekfault.org/2010/02/20/monitoring-munin/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 17:40:17 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[serveur]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1893</guid>
		<description><![CDATA[Je vais ici vous parler de Munin. C&#8217;est un outils de génération de graphs basé sur rrdtool. Il permet de grapher toute sorte de chose vachement bien, et comme j&#8217;en suis pleinement convaincu, je vais vous le présenter ici. L&#8217;intégration de plugins supplémentaire afin de grapher des choses non prévu à la base est enfantine. [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/munin_logo/" rel="attachment wp-att-2099"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2010/02/Munin_logo.png" alt="" title="Munin_logo" width="305" height="80" class="alignleft size-full wp-image-2099" /></a></p>
<p>Je vais ici vous parler de Munin.<br />
C&#8217;est un outils de génération de graphs basé sur rrdtool.<br />
Il permet de grapher toute sorte de chose vachement bien, et comme j&#8217;en suis pleinement convaincu, je vais vous le présenter ici.<br />
L&#8217;intégration de plugins supplémentaire afin de grapher des choses non prévu à la base est enfantine.<br />
Il existe pas mal de munin publique qui peuvent vous permettre de vous rendre compte de la puissance de l&#8217;outils.<br />
Allez par exemple visualiser : <a href="https://supervision.globenet.org/munin">https://supervision.globenet.org/munin/</a></p>
<p>Geeknode génére sa page statistique grace à des plugins Munin homemade également :<br />
Allez visualiser : <a href="http://www.geeknode.org/statistiques.html">http://www.geeknode.org/statistiques.html</a></p>
<p>J&#8217;espère ainsi vous avoir donné l&#8217;envie d&#8217;aller voir plus loin avec ce soft très bien fait.</p>
<p><!--more--></p>
<h4> Munin se décompose en 2 parties : </h4>
<p>Le grapheur munin sur une machine qui va se charger de la surveillance, c&#8217;est la machine qui va s&#8217;occuper d&#8217;interroger tous les nodes, et de générer les graphiques à partir des fichiers rrd collectés.</p>
<p>Le démon munin-node sur chaque machine qui va fournir son état au grapheur.</p>
<p>Evidement, si vous n&#8217;avez qu&#8217;un seul serveur vous aurez a exécuter munin-graph et munin-node sur la même machine.</p>
<p>munin-node.conf doit binder sur 127.0.0.1 (host) et n&#8217;a pas besoin d&#8217;accepter autre chose que 127.0.0.1 (allow) dans le cas d&#8217;une machine simple.</p>
<p>Si vous avez plusieurs machines à grapher vous devez bien sur écouter sur une ipv4 publique afin que le grapher puisse récupérer vos données.</p>
<h4>Pour firewaller munin-node : </h4>
<p><code><br />
INPUT TCP IP.SRC.MUNIN.GRAPH/32 4949 sur les munin-node<br />
OUTPUT TCP 4949 sur le munin-graph<br />
</code></p>
<h3> On install munin-node sur les machines à surveiller </h3>
<p>MUNIN-NODE est à installer sur toutes les machines que l&#8217;on veut grapher.</p>
<p>Installation du daemon munin-node  sous Gentoo :<br />
<code><br />
echo 'net-analyzer/munin minimal -ssl -mysql' >> /etc/portage/package.use<br />
emerge -av net-analyzer/munin<br />
</code></p>
<p>Installation du daemon munin-node sous Debian<br />
<code><br />
apt-get install munin-node<br />
</code></p>
<h3> Configuration du daemon munin-node </h3>
<p>On importe les plugins sous gentoo :<br />
On ajoute les plugins de base<br />
Sous debian les plugins de base en fonction des services tournant sur la machine sont par defaut activés.</p>
<p><code><br />
cd /etc/munin/plugins<br />
ln -s /usr/libexec/munin/plugins/swap<br />
ln -s /usr/libexec/munin/plugins/memory<br />
ln -s /usr/libexec/munin/plugins/processes<br />
ln -s /usr/libexec/munin/plugins/if_ /etc/munin/plugins/if_eth0<br />
ln -s /usr/libexec/munin/plugins/if_ /etc/munin/plugins/if_eth1<br />
ln -s /usr/libexec/munin/plugins/uptime<br />
ln -s /usr/libexec/munin/plugins/cpu<br />
ln -s /usr/libexec/munin/plugins/load<br />
ln -s /usr/libexec/munin/plugins/df<br />
ln -s /usr/libexec/munin/plugins/interrupts<br />
ln -s /usr/libexec/munin/plugins/iostat<br />
ln -s /usr/libexec/munin/plugins/netstat<br />
ln -s /usr/libexec/munin/plugins/users<br />
</code></p>
<h4> On ajoute les plugins apache</h4>
<p><code><br />
ln -s /usr/libexec/munin/plugins/apache_accesses<br />
ln -s /usr/libexec/munin/plugins/apache_processes<br />
ln -s /usr/libexec/munin/plugins/apache_volume<br />
</code></p>
<h3> On autorise le serveur à grapher à accéder au munin-node </h3>
<p>* /etc/munin/munin-node.conf<br />
 allow ^IP\.PRIVE\.DU-SERVEUR-QUI-GRAPH\.ETH1$</p>
<p>* au passage on bind le munin-node sur eth1 aussi, ça évite d&#8217;écouter inutilement sur toutes les autres interfaces<br />
 host IP.PRIVE.DE.CETTE.MACHINE</p>
<h4> Exemple de fichier munin-node.conf </h4>
<p><code><br />
log_level 4<br />
log_file /var/log/munin/munin-node.log<br />
port 4949<br />
pid_file /var/run/munin/munin-node.pid<br />
background 1<br />
setseid 1</p>
<p># Which port to bind to;<br />
host *<br />
user root<br />
group root<br />
setsid yes</p>
<p># Regexps for files to ignore</p>
<p>ignore_file ~$<br />
ignore_file \.bak$<br />
ignore_file %$<br />
ignore_file \.dpkg-(tmp|new|old|dist)$<br />
ignore_file \.rpm(save|new)$</p>
<p>allow ^10\.0\.69\.250$<br />
</code></p>
<h3> Installation du grapheur </h3>
<p>Sous Gentoo :<br />
<code><br />
echo 'net-analyzer/munin -minimal -mysql' > /etc/portage/package.use<br />
emerge -av munin<br />
</code></p>
<p>Sous Debian :<br />
<code><br />
apt-get install munin<br />
</code></p>
<h4> Exemple de fichier munin.conf </h4>
<p><code></p>
<p>dbdir   /var/lib/munin<br />
htmldir /var/www/munin<br />
logdir  /var/log/munin<br />
rundir  /var/run/munin<br />
tmpldir /etc/munin/templates</p>
<p>[localhost.localdomain]<br />
    address 127.0.0.1<br />
    use_node_name yes</p>
<p>[brag-nas]<br />
        address 10.0.69.240<br />
        use_node_name yes</p>
<p>[satanas.bragon.info]<br />
        address 10.0.69.45<br />
        use_node_name yes<br />
[lucifer.bragon.info]<br />
        address 10.0.69.1<br />
        use_node_name yes</p>
<p></code></p>
<h4> crontab </h4>
<p>Une crontab doit logiquement s&#8217;etre ajouté lors de l&#8217;installation sur le grapher pour l&#8217;utilisateur munin :<br />
<code><br />
crontab -u munin -l<br />
# m h  dom mon dow   command<br />
*/5     * * * *         [ -x /usr/bin/munin-cron ] &#038;&#038; /usr/bin/munin-cron<br />
</code></p>
<p>Si la crontab ne s&#8217;est pas mise en place rajoutez la.</p>
<p><code><br />
crontab -u munin -e<br />
</code></p>
<h3> Exemples de graphs </h3>
<p>Et enjoy les supra bien graph <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/acpi-month/" rel="attachment wp-att-2102"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/acpi-month.png" alt="" title="acpi-month" width="501" height="275" class="aligncenter size-full wp-image-2102" /></a></p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/openvpn_clients-week/" rel="attachment wp-att-2103"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/openvpn_clients-week.png" alt="" title="openvpn_clients-week" width="501" height="275" class="aligncenter size-full wp-image-2103" /></a></p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/sdf_mysql_queries-day/" rel="attachment wp-att-2104"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/sdf_mysql_queries-day.png" alt="" title="sdf_mysql_queries-day" width="501" height="347" class="aligncenter size-full wp-image-2104" /></a></p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/cps_0-week/" rel="attachment wp-att-2105"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/cps_0-week.png" alt="" title="cps_0-week" width="501" height="347" class="aligncenter size-full wp-image-2105" /></a></p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/nfsd-week/" rel="attachment wp-att-2108"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/nfsd-week.png" alt="" title="nfsd-week" width="501" height="527" class="aligncenter size-full wp-image-2108" /></a></p>
<p><a href="http://geekfault.org/2010/02/20/monitoring-munin/if_eth0-day/" rel="attachment wp-att-2109"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2010/02/if_eth0-day.png" alt="" title="if_eth0-day" width="501" height="275" class="aligncenter size-full wp-image-2109" /></a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/03/01/nginx-et-python-le-perfect-setup/' rel='bookmark' title='nginx et python &#8211; le perfect setup'>nginx et python &#8211; le perfect setup</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
<li><a href='http://geekfault.org/2010/04/09/filtrer-ses-mails-un-cauchemard/' rel='bookmark' title='Filtrer ses mails ! Un cauchemard !'>Filtrer ses mails ! Un cauchemard !</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/20/monitoring-munin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Geekfault cherche des rédacteurs.</title>
		<link>http://geekfault.org/2010/02/20/geekfault-cherche-des-redacteurs/</link>
		<comments>http://geekfault.org/2010/02/20/geekfault-cherche-des-redacteurs/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 16:53:05 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Geekfault]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[Redacteur]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=2092</guid>
		<description><![CDATA[Geekfault cherche des rédacteurs francophones.
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/04/18/nouveautes-sur-geekfault/' rel='bookmark' title='Nouveautés sur Geekfault'>Nouveautés sur Geekfault</a></li>
<li><a href='http://geekfault.org/2009/05/19/migration-de-geekfault/' rel='bookmark' title='Migration de Geekfault'>Migration de Geekfault</a></li>
<li><a href='http://geekfault.org/2009/06/29/reprise-dactivite-de-geekfault/' rel='bookmark' title='Reprise d&#8217;activité de Geekfault'>Reprise d&#8217;activité de Geekfault</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/04/geekfault.png" alt="" title="Logo Geekfault" width="128" height="128" class="alignleft size-full wp-image-203" /></p>
<p>Si vous vous sentez l&#8217;âme d&#8217;un geek.<br />
Si vous avez des projets open source qui vous tiennent à cœur à présenter.<br />
Si vous avez l&#8217;âme d&#8217;un rédacteur d&#8217;article.<br />
Si vous vous sentez seul et souhaitez partager vos découvertes glanées sur la toile.<br />
Si vous pensez qu&#8217;il est plus important de partager la connaissance que d&#8217;en avoir réellement <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Dans ce cas, vous êtes fait pour être rédacteur Geekfault.</p>
<p>Proposez nous des articles en commentaire avec un email valide, et nous vous contacterons si vos idées nous plaisent.</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/04/18/nouveautes-sur-geekfault/' rel='bookmark' title='Nouveautés sur Geekfault'>Nouveautés sur Geekfault</a></li>
<li><a href='http://geekfault.org/2009/05/19/migration-de-geekfault/' rel='bookmark' title='Migration de Geekfault'>Migration de Geekfault</a></li>
<li><a href='http://geekfault.org/2009/06/29/reprise-dactivite-de-geekfault/' rel='bookmark' title='Reprise d&#8217;activité de Geekfault'>Reprise d&#8217;activité de Geekfault</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2010/02/20/geekfault-cherche-des-redacteurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EeeGW : Créer soi-même une passerelle réseau</title>
		<link>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/</link>
		<comments>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 11:44:59 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[eeegw]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[how]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[routeur]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1711</guid>
		<description><![CDATA[Le routeur-passerelle (gateway, en anglais) est le lien entre votre réseau local et l&#8217;Internet. Sans doute utilisez-vous simplement la box fournie par votre FAI ou un autre modem-routeur acheté en magasin, mais installer et configurer soi-même son gateway présente de nombreux avantages. Je vous présente via cet article ma transformation d&#8217;un EeePC, qui ne me [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/05/20/firmware-linksys-wag200g/' rel='bookmark' title='Firmware modifié pour Linksys WAG200G'>Firmware modifié pour Linksys WAG200G</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction--><a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/img00263/" rel="attachment wp-att-1864"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/12/IMG00263-300x225.jpg" alt="" title="IMG00263" width="300" height="225" class="alignleft size-medium wp-image-1864" /></a>Le routeur-passerelle (gateway, en anglais) est le <strong>lien entre votre réseau local et l&#8217;Internet</strong>. Sans doute utilisez-vous simplement la box fournie par votre FAI ou un autre modem-routeur acheté en magasin, mais installer et configurer soi-même son gateway présente de nombreux avantages.</p>
<p>Je vous présente via cet article ma transformation d&#8217;un <strong>EeePC</strong>, qui ne me servait à rien, en routeur-passerelle réseau. Je vous présente mon travail, mais il est très facile d&#8217;adapter ce travail à votre utilisation et à votre propre machine afin de la transformer en un super routeur Linux qui tue tout <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<!--more--></p>
<h3>Article illustré par l&#8217;exemple</h3>
<p>Cette documentation est adapté à mon LAN qui est paramétré sur le subnet 10.0.69.0/24. Le eeegw, comme je l&#8217;appelle, prend donc l&#8217;adresse 10.0.69.250/24 est sera la gateway de mon réseau afin que mes autres machines puissent accéder à l&#8217;internet.</p>
<h3>À quoi ça sert de monter sa propre Gateway ? </h3>
<ul>
<li>Ne pas avoir à redémarrer sa connexion internet chaque fois qu&#8217;on a envie de toucher aux règles de firewalling. En effet les box des FAI nécessitent de redémarrer pour prendre en compte de nouveaux paramètres</li>
<li>Ne pas avoir une boite noire à la place de routeur : on peut surveiller son réseau et savoir quels sont les packets qui y passent</li>
<li>Pouvoir loguer via iptables et ulogd par exemple <em>(futur article)</em></li>
<li>Pouvoir grapher via rrdtool / Mrtg la bande passante qui passe par vos liens</li>
<li>Pouvoir héberger un petit blog (par exemple) directement sur votre passerelle</li>
<li>Pouvoir mettre en place un proxy transparent pour votre connexion pour mettre en cache les pages les plus souvent demandées et ainsi économiser de la bande passante <em>(futur article)</em></li>
<li>Savoir exactement ce qui se passe avec votre connexion internet</li>
<li>Mettre en place des outils de détection d&#8217;attaques sur votre réseau via SNORT <em>(futur article)</em></li>
</ul>
<h3>Choisir le bon matériel</h3>
<p>N&#8217;importe quel ordinateur avec un tant soit peu de puissance est suffisant pour faire un bon gateway, il suffit que cette machine soit munie de <strong>plusieurs interfaces réseau</strong>.</p>
<p>Durant des années j&#8217;ai eu en tant que passerelle un PII 266Mhz muni de 128MB de ram et d&#8217;un disque dur de 2Go. Pour cette nouvelle gateway j&#8217;ai choisi le <strong>EeePC 7&#8243;</strong> que j&#8217;ai baptisé <strong>eeegw</strong> <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pourquoi ce choix? Parce que le EeePC dispose de beaucoup d&#8217;avantages à être transformé en Gateway :</p>
<ul>
<li>Il est muni d&#8217;une batterie donc non affecté par une coupure de courant éventuelle</li>
<li>Il dispose d&#8217;une interface réseau ethernet et d&#8217;une interface wifi </li>
<li>La carte wifi intégrée est une Atheros et supporte donc (via le pilote madwifi) les multi wireless WAN </li>
<li>Sa puissance est honorable (512 de RAM / 900Mhz / 4Go de SSD)</li>
<li>On peut très facilement installer une distribution GNU/Linux dessus </li>
<li>On peut installer un serveur web dessus en toute tranquillité</li>
<li>Son matériel est pleinement supporté par le noyau Linux</li>
<li>Sa consommation est très faible, permettant donc d&#8217;être allumé 24/24 sans détruire son budget EDF </li>
</ul>
<h3>Installer la bonne distribution</h3>
<p>Si comme moi vous souhaitez transformer un EeePC, je vous conseille Debian. Personnelement j&#8217;aurais bien choisi Gentoo, mais le EeePC prendrait trop de temps à compiler, et ne refroidit pas spécialement bien.</p>
<p>Installer la distribution Debian sur un EeePC est très bien documenté, il vous suffit de créer une clée usb bootable. Je vous renvoie à la documentation de Debian : <a href="http://wiki.debian.org/DebianEeePC/HowTo/Install">EeeDebian</a>.</p>
<h3>Glossaire des packets Debian nécessaires pour ce howto </h3>
<ul>
<li>iproute</li>
<li>iptables</li>
<li>apache2</li>
<li>munin munin-node</li>
<li>wireless-tools</li>
</ul>
<p><!--nextpage--><!--pagetitle:Connexions internet--></p>
<h3> Se connecter aux FAI sur les interfaces concernées </h3>
<p>Je dispose pour ma part d&#8217;une connexion au web fournie via le fournisseur d&#8217;accès Nerim (j&#8217;établis donc la connexion en <strong>PPPoE</strong> comme avec la plupart des fournisseurs ADSL). Je dispose d&#8217;une seconde connexion via du <strong>WiFi</strong> fourni par un de mes voisins (qui accepte que je me serve de sa connexion).</p>
<p>Ne vous inquiétez pas si vous n&#8217;avez qu&#8217;une seule connexion, ou si vous avez Free+Numericable ou n&#8217;importe quelle autre combinaison, cet article est facilement adaptable à votre configuration.</p>
<h3>Connexion PPP</h3>
<p>Configurez la connexion PPPoE:<br />
<code>/etc/ppp/peers/dsl-provider</code><br />
<code> # Minimalistic default options file for DSL/PPPoE connections<br />
noipdefault<br />
defaultroute<br />
replacedefaultroute<br />
hide-password<br />
#lcp-echo-interval 30<br />
#lcp-echo-failure 4<br />
noauth<br />
persist<br />
#mtu 1492<br />
#persist<br />
#maxfail 0<br />
#holdoff 20<br />
plugin rp-pppoe.so eth0<br />
user "plopplop@adslc.fai.fai"<br />
usepeerdns </code></p>
<p>Et enregistrez vos identifiants:<br />
<code>/etc/ppp/chap-secret</code><br />
<code># Secrets for authentication using CHAP<br />
# client server secret IP addresses<br />
"plopplop@adslc.fai.fai" * "mdpdelamortquituedevotreFAI"</code> </p>
<p>Et créez le script qui initiera cette connexion:<br />
<code>/etc/eeegw/fai.sh</code><br />
<code>#!/bin/bash<br />
/usr/sbin/pppd call dsl-provider</code> </p>
<p>Placez ensuite ce script fai.sh dans les régles de pre-up du fichier Debian /etc/network/interfaces. Votre connexion ppp sera ainsi demarré au boot de la eeegw. Voir, pour exemple, le mien en fin d&#8217;article.</p>
<p>Finalement, un script pour s&#8217;assurer que votre connexion PPP est bien up avec votre fournisseur d&#8217;accès ADSL. Il est lancé via un cron toutes les 5 minutes ainsi, si la connexion tombe, ce script lui permettra de se relancer automatiquement.<br />
<code>/etc/eeegw/nerim.sh</code><br />
<code lang="bash">#!/bin/bash</p>
<p>#SERVERS="62.4.16.36 feth1-0-thevenin.nerim.net www.nerim.net hsrp1-telehouse.nerim.net feth0-0-julo.nerim.net"<br />
SERVERS2=irc.geeknode.org<br />
STATUS_LINK=0</p>
<p>USER=`id -u`</p>
<p>if [ ! "$USER" = "0" ];<br />
then<br />
  echo "you're not root, you can't check adsl."<br />
  exit<br />
fi</p>
<p>if [ -f /var/run/checkadsl ]<br />
then<br />
  echo already running<br />
  exit<br />
fi</p>
<p>if ! /sbin/ifconfig ppp0 > /dev/null<br />
then<br />
  echo "No pppd running. Restarting NOW."<br />
  killall pppd<br />
  /etc/init.d/networking restart<br />
  exit<br />
fi</p>
<p>touch /var/run/checkadsl</p>
<p>## recupere l'ip du peer<br />
ip=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)<br />
SERVERS=$ip</p>
<p>for i in $SERVERS;<br />
do<br />
  ping -c 3 $i<br />
#1>/dev/null 2>/dev/null<br />
  if [ "$?" = "0" ];<br />
  then<br />
    STATUS_LINK=1<br />
    rm -f /var/run/checkadsl<br />
    echo "exit c est ok on passe au deuxieme test"<br />
  exit 0<br />
  fi<br />
done</p>
<p># on sen bat du test maintenant<br />
if [ "$STATUS_LINK" = "0" ];<br />
then<br />
  echo "ADSL Link DOWN. Restarting NOW."</p>
<p>  /etc/init.d/net.ppp0 restart<br />
  rm -f /var/run/checkadsl<br />
fi</p>
<p>rm -f /var/run/checkadsl</code></p>
<h3>Connexion wifi</h3>
<p>Voici une simple configuration de l&#8217;interface WiFi. Je vous renvoie à la documentation adaptée pour plus de détails.</p>
<p>Placez la clé wep dans /etc/eeegw/fb.key puis créez le script<br />
<code>/etc/eeegw/wifi.sh</code><br />
<code>#!/bin/bash<br />
wlanconfig ath0 destroy<br />
wlanconfig ath0 create wlandev wifi0 wlanmode sta<br />
sleep 5<br />
ifconfig ath0 up<br />
iwconfig ath0 essid freebox key `cat /etc/eeegw/fb.key`<br />
dhclient ath0</code> </p>
<p>Ajoutez /etc/eeegw/wifi.sh à vos régles pre-up du fichier /etc/network/interfaces</p>
<h3>Autre type de connexion </h3>
<p>Si par exemple vous êtes chez Free, je vous conseille de monter votre Freebox en mode <strong>bridge</strong>. Ainsi votre eeegw n&#8217;aura plus qu&#8217;à effectuer un bound dhcp sur eth0 afin d&#8217;obtenir l&#8217;IP publique Free et tous les packets arriveront donc directement sur votre eeegw.</p>
<p>Pour redispatcher la connexion, vous pouvez soit le faire via une seconde carte réseau sur votre eeegw (ou votre pc équivalent), soit transformer votre eeegw en point d&#8217;accès WiFi! Transformer un eeepc en eeeap est expliqué ici : <a href="http://geekshell.org/~bragon/doku/doku.php?id=ap.sh">eeeAP</a> </p>
<p><!--nextpage--><!--pagetitle:Répartition entre plusieurs connexions--></p>
<h3>Faire fonctionner les deux connexions ensemble</h3>
<p>Plusieurs choix s&#8217;offrent à vous:</p>
<ul>
<li>Vous n&#8217;avez qu&#8217;un seul lien vers une seule connexion internet. Passez directement à l&#8217;étape suivante.</li>
<li>Vous avez deux connexions web qui ont le même débit et vous souhaitez partager symétriquement le débit</li>
<li>Vous avez deux connexions web qui n&#8217;ont pas le même débit et vous souhaitez partager asymétriquement le débit</li>
<li>Vous avez deux connexions web qui ont ou pas le même débit : une en tant que connexion principale et l&#8217;autre en secours ou pour certaines routes en particulier</li>
<p>Personnellement j&#8217;utilise cette dernière solution, mais je vais aussi vous expliquer les deux autres possibilités de répartiton.</p>
<h3>Activer IP Forwarding </h3>
<p>Quel que soit les choix que vous ferrez par la suite vous avez besoin d&#8217;activer ip_forward dans votre noyau.</p>
<p>Indispensable pour que votre routeur fonctionne!<br />
<code>/etc/sysctl.conf</code><br />
<code>net.ipv4.ip_forward = 1<br />
net.ipv6.conf.all.forwarding = 1</code></p>
<p>Et rechargez la configuration:<br />
<code># sysctl -p</code></p>
<h3>Distribuer sur deux connexions ayant le même poids</h3>
<p>Imaginons que nous ayons FAI-1 derrière eth1 et FAI-2 derrière eth2. Ce deux connexions sont relativement identiques et nous souhaitons donc simplement distribuer équitablement le traffic et ainsi profiter du débit des deux connexions.</p>
<p>eth1: net=192.168.1.0/24, IP=192.168.1.130, Gateway=192.168.1.1<br />
eth2: net=192.168.2.0/24, IP=192.168.2.131, Gateway=192.168.2.1</p>
<p><code>ip route add 192.168.1.0 dev eth1 src 192.168.1.130 table fai1<br />
ip route add default via 192.168.1.1 table fai1</p>
<p>ip route add 192.168.2.0 dev eth2 src 192.168.2.131 table fai2<br />
ip route add default via 192.168.2.1 table fai2</p>
<p>ip route add 192.168.1.0 dev eth1 src 192.168.1.130 ip route add 192.168.2.0 dev eth2 src 192.168.2.131</p>
<p>ip rule add from 192.168.1.130 table fai1<br />
ip rule add from 192.168.2.131 table fai2</p>
<p>ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 nexthop via 192.168.2.1 dev eth2 weight 1</code></p>
<h3>Distribuer sur deux réseaux de poids différents</h3>
<p>Petit schéma explicatif de ce qu&#8217;on peut espérer faire avec une passerelle comme <strong>eeegw</strong></p>
<p>(schéma a compléter)</p>
<p>Un script pour <strong>loadbalancer</strong> les connexions sur <strong>deux wan</strong> ayant différents poids : <strong>Notre eeegw devient multi lien ou dualwan</strong></p>
<p><code lang="bash">#!/bin/bash</p>
<p>##ip rule flush</p>
<p>## recupere l'ip du peer<br />
peer=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)</p>
<p>ip route add ${peer} dev ppp0 table uplink1<br />
#ip route add default via 213.41.185.56 table uplink1</p>
<p>ip route add 192.168.0.0/24 dev ath0 src 192.168.0.12 table uplink2<br />
#ip route add default via 192.168.1.1 table uplink2</p>
<p>ip rule add from 192.168.0.12 table uplink2<br />
ip rule add from 213.41.185.56 table uplink1</p>
<p>ip route add default scope global nexthop via 192.168.0.254 dev ath0 weight 1 nexthop via ${peer} weight 3</code></p>
<p>Le but du script share_wan.sh est d&#8217;enlever les deux routes par defaut engendré par le faite de se connecter en ppp et avec dhcp sur le wifi.<br />
Ensuite il faut mettre en route par defaut soit le lien ppp soit le lien wifi.<br />
La dernière ligne sert a donner un poids de 3 à la connexion Nerim et un poid de 1 à la connexion wifi.</p>
<p>Ainsi on enverra 3 fois plus de packets à Nerim qu&#8217;au WiFi.</p>
<p><code>/etc/eeegw/share_wan.sh</code><br />
<code lang="bash"><br />
#!/bin/bash<br />
ip route del default dev ppp0  scope link<br />
ip route del default via 192.168.0.254 dev ath0<br />
ip route add default scope global nexthop via 192.168.0.254 dev ath0 weight 1 nexthop via ${peer} weight 3<br />
</code></p>
<h3>Routes par defaut / routes statiques</h3>
<p>J&#8217;utilise ce système de route static via mon script route_static.sh pour définir via quel FAI je préfère me rendre pour tel ou tel service. C&#8217;est très pratique. (Je rappelle que j&#8217;utilise le cas numero 4, c&#8217;est à dire que ma connexion ppp est ma connexion principale, mais la connexion wifi ne me sert que ne backup au cas ou, et pour des routes particulières).</p>
<p><code>/etc/eeegw/route_static.sh</code><br />
<code lang="bash">#!/bin/bash</p>
<p>## recupere l'ip du peer PPP<br />
peer=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)</p>
<p># telephone passe par la connexion ppp<br />
ip route add 81.93.243.132 via ${peer}</p>
<p># vpn perso passe par la connexion wifi<br />
ip route add 81.93.247.160 via ${peer}<br />
ip route add 193.47.184.2 via ${peer}<br />
ip route add 94.23.219.37 via 192.168.0.254</code> </p>
<p><!--nextpage--><!--pagetitle:Réseau local--></p>
<h3>Serveur DHCP</h3>
<p>L&#8217;eeegw doit donner des IPs via DHCP aux différentes machines du réseau.<br />
<code># apt-get install dhcpd </code></p>
<p><code>/etc/dhcp3/dhcpd.conf</code><br />
<code># option definitions common to all supported networks...<br />
option domain-name "lucifer.bragon.info";<br />
option domain-name-servers 8.8.8.8;</p>
<p>ddns-update-style none;</p>
<p>authoritative;</p>
<p>default-lease-time 86400;<br />
max-lease-time 86400;</p>
<p>subnet 10.0.69.0 netmask 255.255.255.0 {<br />
  range 10.0.69.10 10.0.69.199;<br />
 option routers 10.0.69.250;<br />
}</p>
<p># Réservations<br />
host satanas {<br />
     hardware ethernet 00:02:b3:21:40:c0;<br />
     fixed-address 10.0.69.18;<br />
     option routers 10.0.69.250;<br />
     option broadcast-address 10.0.69.255;<br />
}</code></p>
<h3>Rajouter des VPN</h3>
<p>Vous pouvez bien sûr rajouter des connexions VPN sur votre eeegw.<br />
En effet cela vous permettra de directement propager la connectivité au VPN à toutes les machines de votre lan.<br />
Pour se faire je vous renvoi vers les articles de target0 et moi même concernant les VPN.</p>
<p><a href="http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/">http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/</a><br />
<a href="http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/">http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/</a></p>
<h3>Quality Of Service / tc qdisc</h3>
<p>La qualité de service sur le reseau est très importante si vous ne voulez pas que vos utilisateurs se plaignent de lags.</p>
<p>Par exemple lorsqu&#8217;un appel en VoIP est émit, il est très désagréable de se mettre à laguer tout d&#8217;un coup car un de vos collaborateurs envoie un e-mail avec une pièce jointe énorme. Pour éviter d&#8217;avoir ce genre de désagrements, il faut mettre des priorités sur le traffic entrant et sortant.</p>
<p>J&#8217;ai décidé de faire un article prochainement afin de vous expliquer comment je gère la QOS de ma eeegw.</p>
<p><!--nextpage--><!--pagetitle:Firewalling et NAT--></p>
<h3>Firewalling</h3>
<p><code>/etc/eeegw/firewall.sh</code><br />
<code lang="bash">#!/bin/bash<br />
# REMISE à ZERO des règles de filtrage<br />
iptables -F<br />
iptables -t nat -F</p>
<p># DEBUT des "politiques par défaut"<br />
# Je veux que les connexions entrantes soient bloquées par défaut<br />
iptables -P INPUT DROP</p>
<p># Je veux que les connexions destinées à être forwardées soient acceptées par défaut<br />
iptables -P FORWARD ACCEPT</p>
<p># Je veux que les connexions sortantes soient acceptées par défaut<br />
iptables -P OUTPUT ACCEPT</p>
<p># FIN des "politiques par défaut"<br />
# Pas de filtrage sur l'interface de "loopback"<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A INPUT -i eth0 -j ACCEPT</p>
<p>#on ne filtre pas les vpn<br />
iptables -A INPUT -i tap0 -j ACCEPT<br />
iptables -A INPUT -i tap1 -j ACCEPT<br />
iptables -A INPUT -i ethylix0 -j ACCEPT</p>
<p># J'accepte le protocole ICMP (i.e. le "ping")<br />
iptables -A INPUT -p icmp -j ACCEPT</p>
<p># J'accepte le protocole IGMP (pour le multicast)<br />
iptables -A INPUT -p igmp -j ACCEPT</p>
<p># J'accepte les packets entrants relatifs ? des connexions d?j? ?tablies<br />
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</p>
<p>#ssh<br />
iptables -A INPUT -p tcp --dport 22 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 2605 -j ACCEPT</p>
<p>#apache<br />
iptables -A INPUT -p tcp --dport 80 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 443 -j ACCEPT</p>
<p>#tftp<br />
iptables -A INPUT -p udp --dport 69 -j ACCEPT</p>
<p>#mon smtp<br />
iptables -A INPUT -p tcp --dport 25 -j ACCEPT</p>
<p>#vpn<br />
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT</p>
<p># voip<br />
#iptables -A INPUT -p tcp --dport 5060 -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport 5061 -j ACCEPT</p>
<p># supervision zabbix</p>
<p>iptables -A INPUT -p tcp --dport 10050 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 10051 -j ACCEPT</p>
<p>#Munin<br />
iptables -A INPUT -p tcp --dport 4949 -j ACCEPT</p>
<p># La règle par défaut pour la chaine INPUT devient "REJECT" (il n'est pas possible de mettre REJECT comme politique par défaut)<br />
#iptables -A INPUT -j REJECT</p>
<p>#forward de la connection<br />
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o tap1 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o ethylix0 -j MASQUERADE</p>
<p>iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu</code></p>
<p>Le but du script de firewall est d&#8217;être lancé une première fois, puis d&#8217;être sauvegardé comme la Debian-Way le suggère. Pocédons donc comme suit :<br />
<code># sh /etc/eeegw/firewall.sh<br />
# iptables-save > /etc/network/firewall</code><br />
Ainsi au boot des interfaces la machine lancera les règles iptables sauvegardées. </p>
<h3>Firewall en sortie</h3>
<p>NB : Dans cette exemple le firewall n&#8217;agit qu&#8217;en entrée, c&#8217;est à dire que par defaut nous laissons tout sortir sur le réseau. Vous pourriez sans aucun soucis filtrer en sortie. </p>
<p>Exemple de regles de filtrage en sortie :<br />
<code># A mettre en début de script pour n'accepter explicitement QUE ce qui est autorisé.<br />
iptables -P OUTPUT DROP</p>
<p># Règles output fonctionnement de base<br />
iptables -A OUTPUT -p tcp -o eth0 --dport domain -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport domain -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ntp -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport ntp -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport rsync -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport rsync -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport http -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport smtp -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ssh -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ftp -j ACCEPT</code></p>
<h3> Explication fonctionnement du NAT </h3>
<p>Imaginons que vous ayez un serveur FTP sur la machine A.<br />
Imaginons que vous ayez un serveur Web sur la machine B.<br />
Afin qu&#8217;un client puisse s&#8217;y connecter en venant de l&#8217;internet vous ne pouvez pas lui donner comme adresse afin de s&#8217;y connecter une des ip de votre LAN, mais l&#8217;ip que vous a attribué le FAI lors de votre connexion à celui-ci.<br />
Le NAT est le fait que la eeegw sache vers quelle machine transmettre le traffic de tel ou tel service.<br />
Ainsi le client établi une connexion FTP vers votre IP publique, la connexion FTP arrive sur votre eeegw qui va savoir qu&#8217;il faut qu&#8217;elle transmette ce traffic vers la machine A.</p>
<p>Pour plus d&#8217;explication sur comment faire ça, allez voir la partie firewall de la documentation.<br />
Pour plus d&#8217;explication n&#8217;hésitez pas à aller lire la <a href="http://fr.wikipedia.org/wiki/Network_address_translation">documentation Wikipédia sur le sujet</a>.</p>
<h3>Régles de NAT</h3>
<p>Vous avez besoin d&#8217;ouvrir un port sur votre eeegw qui redirige sur une des machines de votre lan ?<br />
Rien de plus simple. Procédez comme suit si vous avez par exemple un serveur web derrière 10.0.69.1 :</p>
<p><code># iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 10.0.69.1:80</code></p>
<p>Ensuite on save la nouvelle régle dans les régles devant se lancer au boot :<br />
<code># iptables-save > /etc/network/firewall</code></p>
<p>Votre nouvelle règle de NAT/Firewall est donc automatiquement activée sans avoir à faire quoi que ce soit de plus sur votre eeegw.</p>
<p><!--nextpage--><!--pagetitle:Exécution des scripts au boot--></p>
<h3> Automatiser le lancement des scripts eeegw_script au boot</h3>
<p><code>/etc/network/interfaces</code><br />
<code>auto lo<br />
iface lo inet loopback</p>
<p># The primary network interface<br />
allow-hotplug eth0<br />
iface eth0 inet static<br />
        address 10.0.69.250<br />
        netmask 255.255.255.0<br />
        network 10.0.69.0<br />
        broadcast 10.0.69.255<br />
        pre-up iptables-restore -c /etc/network/firewall</p>
<p>auto ath0<br />
iface ath0 inet dhcp<br />
wireless_mode Managed</p>
<p>pre-up /etc/eeegw/wifi.sh<br />
pre-up /etc/eeegw/nerim.sh<br />
pre-up /etc/eeegw/route_static.sh<br />
pre-up /etc/eeegw/ethylix.sh<br />
pre-up /etc/eeegw/QOS/qos.sh</code></p>
<p><!--nextpage--><!--pagetitle:Monitoring--></p>
<h3>Et si on monitorait /graphait tout ça ?</h3>
<p>Exemple de graph que l&#8217;on va pouvoir obtenir grace à ce super howto  (vu mensuel de ma connexion internet) :<br />
<a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/if_eth0-month-2/" rel="attachment wp-att-1862"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/if_eth0-month-300x169.png" alt="" title="if_eth0-month" width="300" height="169" class="aligncenter size-medium wp-image-1862" /></a></p>
<p>Second Exemple: vue journalière de l&#8217;utilisation d&#8217;une connexion par un vpn.<br />
<a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/if_ethylix0-day-2/" rel="attachment wp-att-1863"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/if_ethylix0-day-300x169.png" alt="" title="if_ethylix0-day" width="300" height="169" class="aligncenter size-medium wp-image-1863" /></a></p>
<h3>Installation</h3>
<p><code># apt-get install munin apache2 munin-node<br />
# cd /usr/share/munin/plugins/<br />
# ls</code></p>
<p>Repérez ici les choses qu&#8217;il serait intéressant de grapher sur votre munin puis :<br />
<code># cd /etc/munin/plugins<br />
# ln -s /usr/share/munin/plugins/acpi<br />
# ln -s /usr/share/munin/plugins/apache_processes<br />
# ln -s /usr/share/munin/plugins/cpu<br />
# ln -s /usr/share/munin/plugins/df<br />
# ln -s /usr/share/munin/plugins/swap<br />
[....]</code></p>
<p><code>/etc/munin/munin.conf</code><br />
<code>[localhost.localdomain]<br />
    address 127.0.0.1<br />
    use_node_name yes</code></p>
<p>Relancez munin-node<br />
<code># /etc/init.d/munin-node restart</code></p>
<p>Ça devrait grapher tout simplement comme ça sous debian (l&#8217;installation sous gentoo demande un peu plus de délicatesses). Pour plus de détails : <a href="http://eeegw-ip-adresse/munin">http://eeegw-ip-adresse/munin</a>.</p>
<p><!--nextpage--><!--pagetitle:Annexe et exemples--></p>
<h3>Sortie de ifconfig</h3>
<p><code>ath0      Link encap:Ethernet  HWaddr 06:15:af:8d:37:37<br />
          inet adr:192.168.0.12  Bcast:192.168.0.255  Masque:255.255.255.0<br />
          adr inet6: fe80::415:afff:fe8d:3737/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:13848732 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4385032 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:0<br />
          RX bytes:1482140328 (1.3 GiB)  TX bytes:307281227 (293.0 MiB)</p>
<p>eth0      Link encap:Ethernet  HWaddr 00:1f:c6:28:71:9e<br />
          inet adr:10.0.69.250  Bcast:10.0.69.255  Masque:255.255.255.0<br />
          adr inet6: fe80::21f:c6ff:fe28:719e/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:256988818 errors:0 dropped:0 overruns:0 frame:4160<br />
          TX packets:258912344 errors:0 dropped:0 overruns:0 carrier:6<br />
          collisions:0 lg file transmission:1000<br />
          RX bytes:3516383801 (3.2 GiB)  TX bytes:0 (0.0 B)<br />
          MÃ©moire:fbfc0000-fc000000 </p>
<p>ethylix0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00<br />
          inet adr:194.110.69.23  P-t-P:194.110.69.17  Masque:255.255.255.255<br />
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1<br />
          RX packets:4099 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:3932 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:500<br />
          RX bytes:286787 (280.0 KiB)  TX bytes:399957 (390.5 KiB)</p>
<p>lo        Link encap:Boucle locale<br />
          inet adr:127.0.0.1  Masque:255.0.0.0<br />
          adr inet6: ::1/128 Scope:HÃ´te<br />
          UP LOOPBACK RUNNING  MTU:16436  Metric:1<br />
          RX packets:4493171 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4493171 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:0<br />
          RX bytes:532519851 (507.8 MiB)  TX bytes:532519851 (507.8 MiB)</p>
<p>ppp0      Link encap:Protocole Point-Ã -Point<br />
          inet adr:213.41.185.56  P-t-P:62.4.16.251  Masque:255.255.255.255<br />
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1<br />
          RX packets:6108340 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4219070 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:3<br />
          RX bytes:2251583910 (2.0 GiB)  TX bytes:836111670 (797.3 MiB)</p>
<p>tap0      Link encap:Ethernet  HWaddr 00:ff:b7:de:c8:b4<br />
          inet adr:10.0.1.2  Bcast:10.0.1.255  Masque:255.255.255.0<br />
          adr inet6: 2001:758:f00:8:2ff:b7ff:fede:c8b4/64 Scope:Global<br />
          adr inet6: fe80::2ff:b7ff:fede:c8b4/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:4716451 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:2796718 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:100<br />
          RX bytes:4275489693 (3.9 GiB)  TX bytes:358571500 (341.9 MiB)</p>
<p>tap1      Link encap:Ethernet  HWaddr 00:ff:63:b8:57:ea<br />
          inet adr:81.93.X.X  Bcast:81.93.X.X  Masque:255.255.255.128<br />
          adr inet6: 2001:758:f00:cafe:2ff:63ff:feb8:57ea/64 Scope:Global<br />
          adr inet6: fe80::2ff:63ff:feb8:57ea/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:43229918 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:26631144 errors:0 dropped:1826 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:100<br />
          RX bytes:3891532561 (3.6 GiB)  TX bytes:4009241435 (3.7 GiB)</p>
<p>wifi0     Link encap:UNSPEC  HWaddr 00-15-AF-8D-37-37-65-74-00-00-00-00-00-00-00-00<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:226972539 errors:0 dropped:0 overruns:0 frame:6623910<br />
          TX packets:5796868 errors:44600 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:280<br />
          RX bytes:2128136633 (1.9 GiB)  TX bytes:515534254 (491.6 MiB)<br />
          Interruption:18 </code></p>
<h3>Sortie de iproute</h3>
<p><code>194.110.69.17 dev ethylix0  proto kernel  scope link  src 194.110.69.23<br />
216.165.129.135 via 192.168.0.254 dev ath0<br />
140.211.166.134 via 192.168.0.254 dev ath0<br />
213.186.33.19 via 192.168.0.254 dev ath0<br />
149.20.20.135 via 192.168.0.254 dev ath0<br />
130.239.17.6 via 192.168.0.254 dev ath0<br />
94.23.219.37 via 192.168.0.254 dev ath0<br />
217.23.9.148 via 192.168.0.254 dev ath0<br />
204.152.191.39 via 192.168.0.254 dev ath0<br />
78.41.233.57 via 192.168.0.254 dev ath0<br />
213.251.172.23 via 192.168.0.254 dev ath0<br />
156.56.247.195 via 192.168.0.254 dev ath0<br />
62.4.16.251 dev ppp0  proto kernel  scope link  src 213.41.185.56<br />
81.93.247.0/25 dev tap1  proto kernel  scope link  src 81.93.247.10<br />
193.200.171.0/24 via 81.93.247.1 dev tap1<br />
10.0.69.0/24 dev eth0  proto kernel  scope link  src 10.0.69.250<br />
91.199.232.0/24 via 81.93.247.1 dev tap1<br />
10.0.1.0/24 dev tap0  proto kernel  scope link  src 10.0.1.2<br />
195.190.3.0/24 via 81.93.247.1 dev tap1<br />
192.168.0.0/24 dev ath0  proto kernel  scope link  src 192.168.0.12<br />
193.200.226.0/24 via 81.93.247.1 dev tap1<br />
91.198.105.0/24 via 81.93.247.1 dev tap1<br />
91.209.245.0/24 via 81.93.247.1 dev tap1<br />
193.200.181.0/24 via 81.93.247.1 dev tap1<br />
78.41.232.0/21 via 81.93.247.1 dev tap1<br />
91.191.144.0/20 via 81.93.247.1 dev tap1<br />
81.93.240.0/20 via 81.93.247.1 dev tap1<br />
169.254.0.0/16 dev eth0  scope link  metric 1000<br />
10.0.0.0/8 via 10.0.1.1 dev tap0<br />
default dev ppp0  scope link</code></p>
<h3>Ma eeegw en production <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p><a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/img00260-2/" rel="attachment wp-att-1869"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/IMG00260-580x435.jpg" alt="" title="IMG00260" width="580" height="435" class="aligncenter size-large wp-image-1869" /></a></p>
<p><!--nextpage--><!--pagetitle:Bibliographie--></p>
<h3>Les liens interessants </h3>
<p><a href="http://upload.wikimedia.org/wikipedia/fr/3/3e/Netfilter_schema.png">http://upload.wikimedia.org/wikipedia/fr/3/3e/Netfilter_schema.png</a><br />
<a href="http://wiki.gcu.info/doku.php?id=linux:openvpn_multi-listeners_debian">http://wiki.gcu.info/doku.php?id=linux:openvpn_multi-listeners_debian</a><br />
<a href="http://forums.whirlpool.net.au/forum-replies-archive.cfm/983045.html">Dual wan Cisco</a><br />
<a href="http://www.dslreports.com/forum/remark,16388383?hilite=ip+sla">http://www.dslreports.com/forum/remark,16388383?hilite=ip+sla</a><br />
<a href="http://pauldotcom.com/2009/05/modding-the-asus-eee-4g-surf-f.html">Antenne wifi externe sur sa eeegw</a><br />
<a href="http://chris.olstrom.com/blog/howto/setup-dual-wan/">http://chris.olstrom.com/blog/howto/setup-dual-wan/</a><br />
<a href="http://tldp.org/HOWTO/Traffic-Control-HOWTO/">http://tldp.org/HOWTO/Traffic-Control-HOWTO/</a><br />
<a href="http://markmail.org/message/aronyjanpuxenvug">http://markmail.org/message/aronyjanpuxenvug</a><br />
<a href="http://lartc.org/howto/lartc.rpdb.multiple-links.html">http://lartc.org/howto/lartc.rpdb.multiple-links.html</a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/05/20/firmware-linksys-wag200g/' rel='bookmark' title='Firmware modifié pour Linksys WAG200G'>Firmware modifié pour Linksys WAG200G</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Allocation d&#8217;IPv6 over OpenVPN</title>
		<link>http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/</link>
		<comments>http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 18:01:01 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[proxy_ndp]]></category>
		<category><![CDATA[radvd]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1493</guid>
		<description><![CDATA[Nous avons vu comment allouer des IPv4 over VPN. Nous pouvons aller plus loin et allouer des IPv6 via le VPN, plus particulièrement OpenVPN. Cette méthode pourrait même être une bonne solution pour offrir une connectivité IPv6 à vos machines alors que votre FAI s&#8217;embourbe encore en IPv4. Dans cet article, tap0 est l&#8217;interface du [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/' rel='bookmark' title='Allocation d&#8217;adresses IPv4 publiques over VPN'>Allocation d&#8217;adresses IPv4 publiques over VPN</a></li>
<li><a href='http://geekfault.org/2009/08/28/geekfault-disponible-en-ipv6/' rel='bookmark' title='Geekfault disponible en IPv6'>Geekfault disponible en IPv6</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/08/ipv6.jpg" alt="IPv6 - Spread the love" title="IPv6 - Spread the love" width="223" height="223" class="alignleft size-full wp-image-1460" />Nous avons vu comment <a href="http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/">allouer des IPv4 over VPN</a>. Nous pouvons aller plus loin et allouer des IPv6 via le VPN, plus particulièrement OpenVPN. Cette méthode pourrait même être une bonne solution pour <strong>offrir une connectivité IPv6 à vos machines alors que votre FAI s&#8217;embourbe encore en IPv4</strong>.</p>
<p>Dans cet article, tap0 est l&#8217;interface du serveur VPN. C&#8217;est via cette interface qu&#8217;on réalise le lien. La première étape est donc d&#8217;attribuer une IPv6 à votre interface tap0. </p>
<p>tap0 représentant le mode &#8220;bridge&#8221; d&#8217;OpenVPN ,<br />
<code><br />
# "dev tun" will create a routed IP tunnel,<br />
# "dev tap" will create an ethernet tunnel.<br />
</code></p>
<p>Nous somme donc sur le même segment Ethernet que le client du VPN. Ainsi, nous pouvons envoyer des trames d&#8217;autoconfiguration IPv6 aux clients de notre VPN !</p>
<div style="background: #FFFABF; -moz-border-radius: 6px; padding: 4px;"><strong>Avertissement :</strong> Cet article a pour but de partager des connaissances avec un public avisé.</div>
<p><!--more--></p>
<h3>Configuration exemple d&#8217;un serveur OpenVPN TCP/TAP</h3>
<p><code>port 1194<br />
proto tcp-server<br />
dev tap<br />
dev-type tap<br />
# Clefs:<br />
ca keys/ca.crt<br />
cert keys/server.crt<br />
key keys/server.key<br />
dh keys/dh1024.pem<br />
server 10.0.98.0 255.255.255.0<br />
# On push la route pour que les autres VPN soient visibles<br />
# push "route 10.75.1.0 255.255.255.0"<br />
# push "dhcp-option DNS 10.75.1.1"<br />
ifconfig-pool-persist ipp.txt<br />
float<br />
# permet le trafic entre les clients du VPN<br />
client-to-client<br />
keepalive 10 120<br />
tls-auth keys/ta.key 0 # This file is secret<br />
cipher AES-256-CBC<br />
max-clients 200<br />
user vpn<br />
group vpn<br />
persist-key<br />
persist-tun<br />
status /var/log/openvpn/openvpn-status.log<br />
status-version 2<br />
log-append /var/log/openvpn/openvpn.log<br />
verb 4<br />
mute 20</code></p>
<h3>Configuration exemple d&#8217;un client OpenVPN TCP/TAP</h3>
<p><code>client<br />
dev tap1<br />
proto tcp-client<br />
remote xx.xx.xx.xx 1194<br />
resolv-retry infinite<br />
nobind<br />
user nobody<br />
group nobody<br />
persist-key<br />
persist-tun<br />
tls-client<br />
ca ipv6/ca.crt<br />
cert ipv6/ipv6.crt<br />
key ipv6/ipv6.key<br />
ns-cert-type server<br />
tls-auth ipv6/ta.key 1<br />
cipher AES-256-CBC<br />
verb 3</code></p>
<h3>Vif du sujet</h3>
<p>10.0.98.1 (concentrateur VPN) et 10.0.98.4 (client VPN) se pinguent en IPv4 sur le segment ethernet du VPN.<br />
Nous pouvons désormais avancer</p>
<ul>
<li>Activons l&#8217;IPv6 forwarding sur notre concentrateur VPN <code># echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf<br />
# sysctl -p</code></li>
<li>Activons le proxy NDP (qui va nous servir a relayer les packets IPv6 entre eth0 et tap0) <code># echo "net.ipv6.conf.all.proxy_ndp = 1" >> /etc/sysctl.conf<br />
# sysctl -p</code><br />
Notre Concentrateur VPN est quasiment prêt à forwarder des trames IPv6.</li>
<li>Installons radvd et configurons-le (/etc/radvd.conf) :<br />
<code>interface tap0<br />
{<br />
       AdvSendAdvert on;<br />
       MinRtrAdvInterval 3;<br />
       MaxRtrAdvInterval 10;</p>
<p>       prefix 2001:758:f00:x::/64<br />
       {<br />
               AdvOnLink on;<br />
               AdvAutonomous on;<br />
               AdvRouterAddr on;<br />
       };<br />
};</code></li>
<li>Attribuons une adresse IPv6 a notre interface tap0: <code># ip -6 a add  2001:758:f00:x:x::1/64 dev tap0</code></li>
<li>Nous pouvons lancer radvd <code># /etc/init.d/radvd start</code></li>
<li>Vérifions sur le client que nous avons bien des trames IPv6 qui arrivent (si tap1 est l&#8217;interface VPN du côté client) <code># tcpdump -t -n -i tap1 -s 512 -vv ip6 or proto ipv6</code> devrait donner des trames ainsi : <code>IP6 (hlim 255, next-header ICMPv6 (58) payload length: 56) fe80::94c7:eaff:fe5e:ea46 > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 56<br />
        hop limit 64, Flags [none], pref medium, router lifetime 30s, reachable time 0s, retrans time 0s<br />
          prefix info option (3), length 32 (4): 2001:758:f00:8::/64, Flags [onlink, auto, router], valid time 2592000s, pref. time 604800s<br />
            0x0000:  40e0 0027 8d00 0009 3a80 0000 0000 2001<br />
            0x0010:  0758 0f00 0008 0000 0000 0000 0000<br />
          source link-address option (1), length 8 (1): 96:c7:ea:5e:ea:46<br />
            0x0000:  96c7 ea5e ea46</code></li>
<li>Notre client VPN obtient une IPv6 grâce au radvd de notre concentrateur VPN (par exemple 2001:758:f00:x:ffff:ffff:ffff:ffff/64)</li>
<li>Configuration ndp proxy du concentrateur <code># ip -6 neigh add proxy 2001:758:f00:x:x::1 dev tap0<br />
# ip -6 neigh add proxy 2001:758:f00:x:ffff:ffff:ffff:ffff dev eth0</code> Ainsi les packets a destination de 2001:758:f00:x:ffff:ffff:ffff:ffff arrivant sur eth0 seront automatiquement traite par 2001:758:f00:x:x::1 se trouvant sur le meme segment ethernet que 2001:758:f00:x:ffff:ffff:ffff:ffff</li>
<li>Test de la configuration :
<ul>
<li>Sur le client OpenVPN <code># ping6 2001:758:f00:x:x::1</code></li>
<li>Sur le concentrateur OpenVPN <code># ping6 2001:758:f00:x:ffff:ffff:ffff:ffff</code></li>
</ul>
<p>Si les deux ping6 passent vous pouvez continuer, sinon vous avez un soucis lors d&#8217;une des etapes précédentes.</li>
</ul>
<h3>Tests de pings</h3>
<p>On peut essayer de pinger Google depuis le client <code># ping6 ipv6.google.com</code></p>
<p>Et pinger le client depuis une machine hors du VPN <code># ping6 2001:758:f00:x:ffff:ffff:ffff:ffff</code></p>
<p>Si tout passe c&#8217;est gagné, vous avez donné une connectivité IPv6 à une machine over VPN!</p>
<h3> ERRATA </h3>
<p>Attention openvpn à chaque connexion attribura dynamiquement et aléatoirement une adresse mac à l&#8217;interface tap1 du client du vpn.<br />
Ainsi radvd se basant sur l&#8217;adresse mac de l&#8217;interface reseau afin d&#8217;attribuer une ipv6 pourra poser des problèmes du coté du concentrateur.<br />
En effet il faut lancer la commande permettant au concentrateur via le proxy ndp de forwarder les trames.<br />
C&#8217;est donc ultra pas pratique.<br />
Plusieurs solutions s&#8217;offrent à vous en outre.<br />
1) attribuer un nouveau subnet ipv6 (autre que celui attribué à eth0) sur votre tap0 du concentrateur vpn, ainsi vous vous évitez toute la partie concernant le proxy ndp.<br />
2) Attribuer des ips fixes aux clients qui devront les donner manulement de leur coté à leur interface.<br />
3) scripter via les scripts up.sh et down.sh fourni avec openvpn en natif.</p>
<h3>Annexes</h3>
<p>Côté serveur<br />
<code>2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100<br />
    link/ether 00:30:48:82:ec:0e brd ff:ff:ff:ff:ff:ff<br />
    inet 81.93.xx.xx/24 brd 81.93.xx.xx scope global eth0<br />
    inet6 2001:758:f00:330:xx:xx:xx:xx/64 scope global<br />
       valid_lft forever preferred_lft forever<br />
    inet6 2001:758:f00:x::1/64 scope global<br />
       valid_lft forever preferred_lft forever<br />
    inet6 fe80::230:48ff:fe82:ec0e/64 scope link<br />
       valid_lft forever preferred_lft forever</p>
<p>7: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100<br />
    link/ether 96:c7:ea:5e:ea:46 brd ff:ff:ff:ff:ff:ff<br />
    inet 10.0.98.1/24 brd 10.0.98.255 scope global tap0<br />
    inet6 2001:758:f00:x:x::1/64 scope global<br />
       valid_lft forever preferred_lft forever<br />
    inet6 fe80::94c7:eaff:fe5e:ea46/64 scope link<br />
       valid_lft forever preferred_lft forever</code></p>
<p>Côté client<br />
<code>2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000<br />
    link/ether 00:1c:c0:a7:b9:1f brd ff:ff:ff:ff:ff:ff<br />
    inet 95.xx.xx.xx/24 brd 95.xx.xx.255 scope global eth0<br />
    inet6 fe80::xx:xx:xx:xx/64 scope link<br />
       valid_lft forever preferred_lft forever<br />
9: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100<br />
    link/ether 00:ff:51:47:f0:57 brd ff:ff:ff:ff:ff:ff<br />
    inet 10.0.98.4/24 brd 10.0.98.255 scope global tap1<br />
    inet6 2001:758:f00:x:ffff:ffff:ffff:ffff/64 scope global dynamic<br />
       valid_lft 2591993sec preferred_lft 604793sec<br />
    inet6 fe80::2ff:51ff:fe47:f057/64 scope link<br />
       valid_lft forever preferred_lft forever</code></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/' rel='bookmark' title='Allocation d&#8217;adresses IPv4 publiques over VPN'>Allocation d&#8217;adresses IPv4 publiques over VPN</a></li>
<li><a href='http://geekfault.org/2009/08/28/geekfault-disponible-en-ipv6/' rel='bookmark' title='Geekfault disponible en IPv6'>Geekfault disponible en IPv6</a></li>
<li><a href='http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/' rel='bookmark' title='EeeGW : Créer soi-même une passerelle réseau'>EeeGW : Créer soi-même une passerelle réseau</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geekfault disponible en IPv6</title>
		<link>http://geekfault.org/2009/08/28/geekfault-disponible-en-ipv6/</link>
		<comments>http://geekfault.org/2009/08/28/geekfault-disponible-en-ipv6/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 16:04:03 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Geekfault]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1454</guid>
		<description><![CDATA[Bonjour. Peut être l&#8217;avez vous remarqué ? Geekfault est désormais accessible totalement en IPv6 ! Sa superbe IPv6 2001:758:1664::42 en fait frémir plus d&#8217;un Nous prévoyons d&#8217;ailleurs, avec LeCoyote (nouveau contributeur Geekfault), de vous parler en long et en large de ce protocole qu&#8217;internet sera bien obligé d&#8217;adopter d&#8217;ici quelques années. ENJOY ! Si vous [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/08/17/partenariat-geekfault/' rel='bookmark' title='Geekfault recherche des partenaires'>Geekfault recherche des partenaires</a></li>
<li><a href='http://geekfault.org/2009/12/22/difficultes-techniques-de-geekfault/' rel='bookmark' title='Difficultés techniques de Geekfault'>Difficultés techniques de Geekfault</a></li>
<li><a href='http://geekfault.org/2010/02/17/ipv6-pour-les-nulswgeeks/' rel='bookmark' title='IPv6 pour les nuls^Wgeeks'>IPv6 pour les nuls^Wgeeks</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/08/ipv6.jpg" alt="IPv6 - Spread the love" title="IPv6 - Spread the love" width="223" height="223" class="alignleft size-full wp-image-1460" />Bonjour.</p>
<p>Peut être l&#8217;avez vous remarqué ? Geekfault est désormais accessible totalement en IPv6 ! Sa superbe IPv6 <strong>2001:758:1664::42</strong> en fait frémir plus d&#8217;un <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nous prévoyons d&#8217;ailleurs, avec LeCoyote (nouveau contributeur Geekfault), de vous parler en long et en large de ce protocole qu&#8217;internet sera bien obligé d&#8217;adopter d&#8217;ici quelques années.</p>
<p>ENJOY !</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/08/17/partenariat-geekfault/' rel='bookmark' title='Geekfault recherche des partenaires'>Geekfault recherche des partenaires</a></li>
<li><a href='http://geekfault.org/2009/12/22/difficultes-techniques-de-geekfault/' rel='bookmark' title='Difficultés techniques de Geekfault'>Difficultés techniques de Geekfault</a></li>
<li><a href='http://geekfault.org/2010/02/17/ipv6-pour-les-nulswgeeks/' rel='bookmark' title='IPv6 pour les nuls^Wgeeks'>IPv6 pour les nuls^Wgeeks</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/08/28/geekfault-disponible-en-ipv6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mise en place d&#8217;un système de backup avec Rsnapshot</title>
		<link>http://geekfault.org/2009/05/16/rsnapshot/</link>
		<comments>http://geekfault.org/2009/05/16/rsnapshot/#comments</comments>
		<pubDate>Sat, 16 May 2009 14:15:28 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=511</guid>
		<description><![CDATA[rsnapshot la solution pour backuper incrémentalement en local ou à distance.
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/10/24/backup-dun-compte-gmail/' rel='bookmark' title='Backup d&#8217;un compte Gmail'>Backup d&#8217;un compte Gmail</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_527" class="wp-caption alignleft" style="width: 310px"><a href="http://geekfault.org/wp-content/uploads/2009/05/rsnapshot1.png" title="Schéma de la solution à déployer" rel="lightbox.511"><img src="http://geekfault.org/wp-content/uploads/2009/05/rsnapshot1-300x195.png" alt="Schéma de la solution à déployer" title="Schéma de la solution à déployer" width="300" height="195" class="size-medium wp-image-527" /></a><p class="wp-caption-text">Schéma de la solution à déployer</p></div>Qui ne s&#8217;est jamais retrouvé dans la merde après ne pas avoir sauvegardé ses données? Je vous propose aujourd&#8217;hui un petit tutoriel qui va vous permettre d&#8217;effectuer des backups réguliers sous GNU/Linux.</p>
<p>Avec <strong>rsnapshot</strong> il est possible de faire des <strong>backups locaux</strong> (une copie régulière d&#8217;un disque sur un autre) ou des <strong>backups distants</strong> (via une connexion SSH), soit les deux en même temps !<br />
<!--more--></p>
<h3>Principe de Rsnapshot</h3>
<p>Basé sur <strong>SSH et rsync</strong>, rsnapshot est en fait une boite à outil. Pour ceux qui ne connaissent pas rsync, c&#8217;est un outil de synchronisation de fichiers libre et puissant qui ne copie que les différences entre deux backups, et non l&#8217;entièreté du système, pour économiser de la bande passante.</p>
<p>Rsnapshot est un logiciel qui tourne <strong>sur le serveur de backup</strong>. La machine qui se voit ainsi sauvegardée est totalement passive, il faut juste qu&#8217;elle ait un serveur SSH activé.</p>
<p>Quelques scripts rsync/ssh pourraient évidemment faire la même chose que rsnapshot, mais rsnapshot est fiable et sa configuration triviale, alors pourquoi s&#8217;en passer?</p>
<h3>Installation</h3>
<p><strong>Première étape</strong> : Installez rsnapshot sur le serveur où seront stockés les backups. Je ne décris pas cette installation qui est triviale et propre à chaque distribution.</p>
<p><strong>Deuxième étape</strong> : Permettez à ce serveur de se connecter automatiquement en SSH sur la machine à sauvegarder. Je vous renvoie vers l&#8217;article <a href="http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/"><strong>SSH sans mot de passe</strong></a> qui explique comment générer une paire de clés publique/privée afin de chiffrer la connexion SSH avec le protocole RSA.</p>
<p><strong>Troisième étape</strong> (facultative) : Modifiez votre fichier <strong>/etc/hosts</strong>, qui permet d&#8217;utiliser des short-names dans la configuration de rsnapshot (c&#8217;est plus propre et plus joli).</p>
<p><strong>Quatrième étape</strong> : Configurez rsnapshot dans <strong>/etc/rsnapshot.conf</strong>. Vous pouvez vous inspirer de <a href="http://geekshell.org/~bragon/doku/doku.php?id=rsnapshot.conf#rsnapshot.conf">cet exemple</a>.</p>
<h3>Lancer le backup</h3>
<p>Vous êtes maintenant prêt pour votre premier backup! Lancez la commande suivante:<br />
<code>/usr/bin/rsnapshot -cv /etc/rsnapshot.conf daily</code></p>
<p>Si tout se passe bien, vous n&#8217;avez plus qu&#8217;à ajouter cette commande à votre <strong>crontab</strong> afin d&#8217;automatiser la procédure.</p>
<h3>Problèmes connus</h3>
<ul>
<li>La toute première connection ssh du serveur de backup vers la machine à backuper doit être établi manuellement.</li>
<li>Le fichier <em>rsnapshot.conf</em> doit être réécrit en séparant les valeurs avec des <strong>tabulations</strong>. Si vous ne remplacez pas les espaces par des tabulations, rsnapshot ne fonctionnera pas.</li>
</ul>
<h3>Liens de référence</h3>
<ul>
<li><a href="http://rsnapshot.org" target="_blank">Site du projet</a></li>
<li><a href="http://geekshell.org/~bragon/doku/doku.php?id=rsnapshot.conf">Exemple de configuration</a></li>
</ul>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/10/24/backup-dun-compte-gmail/' rel='bookmark' title='Backup d&#8217;un compte Gmail'>Backup d&#8217;un compte Gmail</a></li>
<li><a href='http://geekfault.org/2009/05/19/authentification-avec-une-cle-usb/' rel='bookmark' title='S&#8217;authentifier avec une clé USB'>S&#8217;authentifier avec une clé USB</a></li>
<li><a href='http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/' rel='bookmark' title='SSH sans mot de passe'>SSH sans mot de passe</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/05/16/rsnapshot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

