2013-02-16 20:23

Transmission : utiliser apache comme proxy

Je suis un adepte du P2P pour télécharger mes images Linux. Jusque là, j'utilisais rtorrent, allié à l'interface web rutorrent (pour les endroits où de méchants sysadmins ont bloqué le port SSH).

Le problème de rutorrent, en dehors du fait que c'est moche, c'est qu'il faut un i7 overclocké juste pour interpréter le javascript. Autant dire que j'étais un poil juste avec mon atom...

Après quelques tests, j'ai été convaincu par Transmission : un joli fichier texte pour tout configurer, une interface web simple mais légère, et la possibilité de se connecter à distance en utilisant une interface lourde.

Par contre, utiliser Apache comme proxy pour l'interface web relève du défi : presque tout le monde bute sur l'erreur 409 de la mort :

409: Conflict

Your request had an invalid session-id header.

To fix this, follow these steps:

When reading a response, get its X-Transmission-Session-Id header and remember it
Add the updated header to your outgoing requests
When you get this 409 error message, resend your request with the updated header

This requirement has been added to help prevent CSRF attacks.

Après de longues recherches infructueuses, je me suis preque résigné. Et puis je suis tombé sur ce post, qui contient LA solution.

Il suffit en fait de ne pas mettre le "/" final lorqu'on spécifie le domaine cible, à l'aide des directive ProxyPass et ProxyPassReverse. Je donne donc ma configuration, elle sera peut être utile à d'autres :

<VirtualHost *:443>
        ServerName monServeur.fr
        ServerAlias www.monServeur.fr
        Redirect permanent / https://monServeur.fr/transmission

        RewriteEngine on
        RewriteRule /transmission[/]?$ /transmission/web/ [R=permanent]

        SSLEngine on
        SSLCertificateFile    /etc/httpd/ssl/monServeur/monCertificat.fr.crt
        SSLCertificateKeyFile /etc/httpd/ssl/monServeur/monCertificat.fr.key
 
        ProxyRequests On
        ProxyPreserveHost Off 
        <Proxy *>
        Order allow,deny
        Allow from all 
        </Proxy>

        ProxyPass /transmission http://127.0.0.1:9091/transmission
        ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
</Virtualhost>

<VirtualHost *:80>
        ServerName monServeur.fr
        ServerAlias www.monServeur.fr
        Redirect permanent / https://monServeur.fr/transmission
</Virtualhost>

À noter qu'Apache n'a pas besoin de gérer l'authentification, qui peut être configurée directement dans le fichier de conf de Transmission-daemon.


Posted by St3rk | Permanent link
- - - -

2013-02-16 19:39

NetBSD : problème au redémarrage d'Apache

J'ai récemment eu un problème étrange sur ma NetBSD. Après quelques redémarrages successifs, Apache refusait de se lancer. Dans le logs, je retrouvais l'erreur suivante :

(28)No space left on device: AH00023: Couldn't create the authdigest-opaque mutex

Pourtant, mon disque dur était loin d'être plein, et un reboot permettait de résoudre le problème. J'ai fini par trouver la solution sur ce blog.

Le soucis provenait en réalité de nombreux sémaphores, qui n'étaient pas supprimés lors de l'arrêt du démon. On peut les observer à l'aide d'ipcs :

# ipcs -s
IPC status from  as of Sat Feb 16 19:30:12 2013

Semaphores:
T        ID     KEY        MODE       OWNER    GROUP
s   2752512          0 --rw-------      www      www
s   1376257          0 --rw-------      www      www
s   1376258          0 --rw-------      www      www
s   2293763          0 --rw-------      www      www

La commande ipcrm permet de s'en débarasser :

# ipcrm -s 2752512

On peut supprimer tous les sémaphores en une ligne, grâce à perl :

# ipcs -s | grep www | perl -alne 'qx(ipcrm -s $F[1])'

Le démarrage d'Apache peut alors s'effectuer correctement.


Posted by St3rk | Permanent link
- - - -

2013-01-22 12:02

Xen, la kimsufi, et l'IPV6

J'ai profité de la nouvelle gamme de kimsufi pour changer de serveur dédié, et passer à une solution Xen + Puppet. Il est ainsi facile de créer machine de test, pour jouer pendant quelques heures avec un nouveau logiciel sans pourrir le système hôte.

Afin de déployer mon serveur rapidement, j'ai opté pour un dom0 sous Debian Wheezy (qui est déjà en phase de freeze, et devrait rapidement devenir la nouvelle Debian stable). Mais parce que j'aime FreeBSD, c'est l'OS d'un de mes domU. Et comme FreeBSD est une horreur à déployer en tant que domU, j'ai déployé un deuxième domU sous NetBSD.

Je souhaitais que chacune de mes machine soit joignable en ipv4 et ipv6. Je vais donc décrire ma démarche dans cet article.

Prérequis : posséder un dom0 avec connexion IPv4 et IPv6 fonctionnelles.


Créer le bridge


Le bridge permettra de relier plusieurs interfaces entre elles, à la manière d'un switch. On pourra ainsi connecter toutes les machines virtuelles à ce bridge, pour qu'elle puisse de joindre entre elle. On pourra également router le traffic entre l'interface physique eth0 et le bridge, pour joindre le monde extérieur.

J'ai commencé par créer le réseau virtuel. Il faut pour cela charger le module dummy :

# modprobe dummy

On peut ensuite ajouter le ligne suivante dans le fichier /etc/modules afin de le charger au démarrage :

dummy

Il faut ensuite créer une interface virtuelle dummy0, et lui attribuer une IP. On utilisera le réseaux 10.0.0.0/24 en IPv4. Pour l'IPv6, j'utiliserai une partie du /64 fourni par OVH. Je possède un stock d'adresse du type 2001:1:2:3::/64. J'utiliserai le sous-réseau 2001:1:2:3:1::/80 pour mon réseau virtuel.

Je modifie donc le fichier /etc/network/interfaces pour ajouter la section suivante :

auto br0
iface br0 inet static
        ##
        # ipv4 address
        address 10.0.0.1
        netmask 255.255.255.0
        broadcast 10.0.0.255
        ##
        # ipv6 address
        up ip -6 addr add 2001:1:2:3:1::111/80 dev br0
        down ip -6 addr del 2001:1:2:3:1::111/80 dev br0
        ##
        # Add dummy0 (virtual interface) and setup the bridge
        bridge_ports dummy0
        bridge_maxwait 5
        bridge_stp off
        bridge_fd 0

On attribue ici les adresses 10.0.0.1 et 2001:1:2:3:1::1231 au bridge br0. On connecte y l'interface virtuelle dummy0.


Router les adresses IPv6


L'interface br0 possède donc l'IPv6 2001:1:2:3:1::1231. Deux autres machines seront connectées avec les IPv6 2001:1:2:3:1::1232 et 2001:1:2:3:1::1233. Il faudra router les paquets entre les interfaces eth0 et br0. Il faut donc activer le transfert d'IP en IPv6. On ajoute les lignes suivantes à /etc/sysctl.conf :

net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

Puis on applique les changements avec la commande :
# sysctl -p

Enfin, on ajoute les routes nécessaires dans /etc/network/interfaces, en modifiant la section précedemment ajoutée :

auto br0
iface br0 inet static
        ##
        # ipv4 address
        address 10.0.0.1
        netmask 255.255.255.0
        broadcast 10.0.0.255
        ##
        # ipv6 address
        up ip -6 addr add 2001:1:2:3:1::111/80 dev br0
        down ip -6 addr del 2001:1:2:3:1::111/80 dev br0
        ##
        # Add dummy0 (virtual interface) and setup the bridge
        bridge_ports dummy0
        bridge_maxwait 5
        bridge_stp off
        bridge_fd 0
	##
        # Add routes
        post-up ip route add 2001:1:2:3:1::/80 dev br0
        post-down ip route del 2001:1:2:3:1::/80 dev br0


Transférer les paquets NDP


Il est impossible, à ce stade, de joindre le monde extérieur depuis une machine du sous-réseau 2001:1:2:3:1::/80. En effet, le routeur d'OVH s'attend à trouver un réseau "à plat". Il considère donc uniquement les adresses attribuées à eth0.

La manière la plus simple de résoudre ce problème serait de modifier les tables de routage du routeur, par exemple via une interface web. Ce n'est malheureusement pas possible. Il va donc falloir tricher un peu.

En IPv6, le protocole utilisé pour découvrir les différents appareils connectés à un lien est appelé NDP (Neighbor Discovery Protocol). C'est l'équivalent du protocle ARP en IPv4, mais avec de nombreuses fonctionnalités supplémentaires : découverte des routeurs, auto-configuration de l'interface et des routes...
Le noyeau Linux possède une fonctionnalité appelée "proxy NDP", qui permet de transférer les paquets NDP d'une interface à une autre, et de résoudre les situations telles que celle qui nous concerne.

On va donc transférer les paquets NDP des adresses 2001:41d0:8:b74d:1::1231, 2001:41d0:8:b74d:1::1232 et 2001:41d0:8:b74d:1::1233 sur l'interface eth0, et les paquets NDP de la passerelle OVH (2001:1:2:3ff:ff:ff:ff:ff) sur l'interface br0. De cette manière, la paserelle verra un réseau "plat" possédant 4 adresses (2001:41d0:8:b74d::1, 2001:41d0:8:b74d:1::1231, 2001:41d0:8:b74d:1::1232, et 2001:41d0:8:b74d:1::1233).

On commence par activer le proxy NDP en modifiant le fichier /etc/sysctl.conf :

net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1

On applique la nouvelle configuration :

# sysctl -p

On modifie la section précédemment ajoutée dans le fichier /etc/network/interfaces pour indiquer quels paquets NDP transférer, et sur quelle interface :

auto br0
iface br0 inet static
        ##
        # ipv4 address
        address 10.0.0.1
        netmask 255.255.255.0
        broadcast 10.0.0.255
        ##
        # ipv6 address
        up ip -6 addr add 2001:1:2:3:1::1/80 dev br0
        down ip -6 addr del 2001:1:2:3:1::1/80 dev br0
        ##
        # Add dummy0 (virtual interface) and setup the bridge
        bridge_ports dummy0
        bridge_maxwait 5
        bridge_stp off
        bridge_fd 0
        ##
        # Add routes and NDP proxy (to be reachable)
        post-up ip route add 2001:1:2:3:1::/80 dev br0
        post-up ip neigh add proxy 2001:1:2:3ff:ff:ff:ff:ff dev br0
        post-up ip neigh add proxy 2001:1:2:3:1::1 dev eth0
        post-up ip neigh add proxy 2001:1:2:3:1::2 dev eth0
        post-up ip neigh add proxy 2001:1:2:3:1::3 dev eth0
        post-down ip route del 2001:1:2:3:1::/80 dev br0
        post-down ip neigh del proxy 2001:1:2:3ff:ff:ff:ff:ff dev br0
        post-down ip neigh del proxy 2001:1:2:3:1::1 dev eth0
        post-down ip neigh del proxy 2001:1:2:3:1::2 dev eth0
        post-down ip neigh del proxy 2001:1:2:3:1::3 dev eth0

L'adresse 2001:1:2:3ff:ff:ff:ff:ff est celle de la passerelle OVH.


IPv4 : le NAT


OVH fournit une seule adresse IPv4. J'ai donc choisit d'utiliser le NAT pour joindre le monde extérieur en IPv4. Pour cela, il faut d'abord activer le transfert d'IP pour l'IPv4. On ajoute dans le fichier /etc/sysctl.conf :

net.ipv4.ip_forward=1

Puis on applique les changements avec la commande :
# sysctl -p

Pour faire le transfert d'adresse, on ajoute ensuite la règle iptables suivante :

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE


Connecter les domU


Comme nous avons configuré nous-même le réseau, Xen n'a pas à s'en charger. On doit donc désactiver les scripts de configuration de Xen, en commentant les différentes lignes contenant network-script dans le fichier /etc/xen/xend-config.sxp :

# #(network-script network-bridge)
#(network-script network-route)
#(network-script network-nat)

On redémarre Xen pour prendre la nouvelle configuration en compte :

# /etc/init.d/xen restart

Il ne reste plus qu'à connecter les domU à l'interface br0, en spécifiant dans le fichier /etc/xen/nom_du_domU le paramètre suivant :

vif=['bridge=br0']

On paramétrera ensuite le domU à l'aide de la console Xen, pour utiliser la passerelle 2001:1:2:3ff:ff:ff:ff:ff en ipv6, et 10.0.0.1 en ipv4.


Posted by St3rk | Permanent link
- - - -

2012-12-29 11:46

Mémo : formater une partition dans un domU FreeBSD

Je bidouille en ce moment un domU FreeBSD para-virtualisé sous Xen. Mais lors de la création d'une nouvelle partition à l'aide de sysinstall, je tombais sur l'erreur suivante :

Floating exception (core dumped)

Cette erreur est due au fait que fdisk n'est pas capable de détecter la géométrie du disque. En effet, on observe en haut de l'écran :

DISK Geometry: 0 cyls/0 heads/0 sectors

Il faut donc la lui indiquer. On peut calculer le nombre de cylindres avec l'équation suivante :

cylindres = taille du disque en octet / ( secteur * tête * taille_d'un_secteur )

Dans mon cas, avec un disque LVM de 20473Mo :

(20473*1024*1024)/(63*255*512) = 2609 cylindres

On peut arrondir à 2600 cylindres par sécurité. Il suffit ensuite de rentrer ces informations (2600/255/63) en appuyant sur la touche G.

source : list.freebsd.org


Posted by St3rk | Permanent link
- - - -

2012-02-12 15:36

Slackbuild : weboob 0.a

logo weboob

Weboob (WEB Out Of Browser, appréciez le jeu de mot) permet d'obtenir rapidement le contenu de certains sites web sans passer par un navigateur.

Il y a plusieurs intérêts à cela : éviter l'utilisation du plugin flash pour regarder une vidéo, ne pas subir des pages lourdingues bourrées de pub, ou réaliser une requête sur plusieurs sites à la fois.

En bonus : tout peut être fait dans la console.


Installer weboob


L'installation pour la plupart des distributions est très bien expliquée sur le site de weboob.

Pour l'installer sous slackware, j'ai réalisé un slackbuild qui automatise la création du paquet. Étant donné le délai nécessaire à la validation du script sur slackbuilds.org, je le met à disposition ici :

slackbuild : weboob.tar.gz
sources : weboob-0.a.tar.gz (md5sum : 15568485fd2bea4c53b69a6edb8c7e45)

Afin de pouvoir construire weboob, vous aurez besoin de pysetuptools.

Les programmes mechanize, python-dateutil, html2text, nose, feedparser, lxml, rtmpdump, et PyYAML seront ensuite nécessaires au bon fonctionnement des backends.


Utilisation


Avec la nouvelle release, les backends sont téléchargés sur les dépots de weboob la première fois qu'il y en a besoin. Il faut donc commencer par récupérer la liste de ceux qui sont disponibles :

$ weboob-config update

Ensuite, il ne reste plus qu'à tester les applications qui vous intéressent.


Videoob


Videoob permet de télécharger des vidéos disponibles en streaming sur les sites d'Arte, Canal+, DailyMotion, France Télévisions, INA, Nolife, Radio France, Youjizz, Youporn et Youtube. Bon, vous n'êtes pas obligés d'activer tous les backends, hein ;-)

Lors du premier démarrage, un menu interactif vous permettra d'activer ceux que vous souhaitez.

Par exemple pour télécharger les derniers épisodes de "Bref", on démarre l'application videoob :

$ videoob

On désactive tous les backends configurés sauf celui de canalplus :

videoob> backends disable arte dailymotion francetelevisions

On cherche les épisodes de bref :

videoob> search bref
Search pattern: bref
* (1) Bref. J'ai eu 30 ans. — Episode du 08/02 (canalplus)
            2012-02-08 16:02:00
* (2) Bref. J'ai eu une panne. — Episode du 06/02 (canalplus)
            2012-02-06 21:37:00
* (3) Bref. Je me suis fait agresser. — Episode du 02/02 (canalplus)
            2012-02-02 20:40:00
* (4) Bref. Je suis allé aux urgences. — Episode du 31/01 (canalplus)
            2012-01-31 17:02:00
* (5) Bref. J'ai un nouvel appart'. — Episode du 26/01 (canalplus)
            2012-01-26 20:50:00
* (6) Bref. J'ai pris le métro. — Episode du 24/01 (canalplus)
            2012-01-24 21:22:00
* (7) Bref. J'étais à côté de cette fille. — Episode du 18/01 (canalplus)
            2012-01-18 18:37:00
* (8) Bref. J'ai déménagé. — Episode du 12/01 (canalplus)
            2012-01-12 18:37:00
* (9) Bref. J'ai voulu partir en vacances. — Episode du 10/01 (canalplus)
            2012-01-10 18:32:00
* (10) Bref. J'y pense et je souris. — Episode du 06/01 (canalplus)
            2012-01-06 18:22:00 

On les télécharge le dernier :

videoob:/search> download 1

On peut aussi le jouer directement dans mplayer :

videoob:/search> play 1


Wetboobs


Héhé, oui, c'est possible d'aller encore plus loin dans les jeux de mots graveleux. Mais, contrairement à ce que son nom laisse supposer, wetboobs n'est pas une application réservée aux adultes : elle permet simplement de consulter la météo.

Lancer l'application :

$ wetboobs

Rechercher une ville :

wetboobs> search clermont-ferrand
* (1) Clermont-Ferrand, Auvergne, France (yahoo)
* (2) Clermont-Ferrand 63000 (meteofrance)

Consulter les prévisions météo de Clermont-Ferrand sur Yahoo :

wetboobs> forecasts 1
* 12 Feb 2012:    (-11°C - -4°C) Clear
* 13 Feb 2012:    (-1°C - 2°C) Partly Cloudy

Si on connait l'identifiant de la ville, on peut tout faire en une commande :

$ wetboobs forecasts 586242@yahoo
* 12 Feb 2012:    (-11°C - -4°C) Clear
* 13 Feb 2012:    (-1°C - 2°C) Partly Cloudy


Et tout le reste...


Il ne s'agit que d'un rapide apperçu, weboob contient de nombreuses applications et backends. Vous pourrez approfondir la question directement sur leur site.


Posted by St3rk | Permanent link
- - - -