Securiser l’appli pour iPhone « VLC remote » pour l’accès depuis internet

Pour ceux qui ne connaissent pas, l’appli VLC remote permet de contrôler VLC depuis son iPhone ( même à l’autre bout de la planette si besoin ). Avec la version payante, on peux naviguer dans l’arborescence distante de son PC à la recherche des fichiers médias qu’on lit habituellement avec VLC et ses nombreux codecs installés par défaut.
Afin d’avoir accès à VLC depuis la téléphonie 3G, il faut passer par le net si on a pas d’adresse IP locale, d’où l’intèret du présent billet. Ceux qui ont toujours le wifi disponible ne sont pas concernés par ce hack, il leur suffit de configurer VLC remote avec l’adresse ip locale wifi ( type 172.18.* 192.168.* 10.0.* ) ; en effet, comme l’adresse IP n’est pas routable, il n’est pas nécessaire de faire une configuration spécifique, le but ici étant de sécuriser un minimum le processus tout en gardant VLC en écoute sur son PC pour toutes les IPs, ce qui est fait sur le port 8080 par défaut. Ensuite, on va forwarder un port TCP arbitraire depuis son routeur ( Freebox par exemple ou autres *box ), ce qui va permettre une sécurité accrue car le service en écoute sera difficilement détectable avec un scanneur de port de type nmap. En plus de ça, on va créer une règle iptables pour refuser toutes connexion qui ne se conforme pas aux règles qu’on va établir.
On va éditer sur l’iPhone le fichier /etc/hosts et on va y mettre une nouvelle ligne avec :

123.123.123.123 nomArbitraire

où 123.123.123.123 est votre ip publique ( voir http://www.sputnick-area.net/ip pour l’obtenir ) et nomArbitraire, comme son nom l’indique, un nom d’hôte arbitraire qui sera maintenant un hôte pleinement accessible sur le réseau ( En quelque sorte, on fait une résolution de nom DNS en dur. ) qui ne sera connue que de vous. Il sera très difficile pour un éventuel attaquant d’adresser les paquets à la bonne machine sur le bon port sans connaitre le nom d’hôte que vous seul connaissez si vous avez suivi ^^
On va refuser toutes les requêtes HTTP de VLC remote ou de n’importe quel appli qui se connecte sur le port en écoute de VLC sans donner le nom d’hote arbitraire :

iptables -I INPUT -p tcp --dport 8080 -m string --to 700 --algo bm --string 'Host: <IP PUBLIQUE>' -j DROP
iptables -I INPUT -p tcp --dport 8080 -m string --to 700 --algo bm --string 'HTTP/1.0' -j DROP

où 8080 est le port par défaut. On force l’utilisation du protocole HTTP version 1.1, qui necessite le nom d’hote.
Choisissez un port de préférence entre 1024 et 65535, car plage n’est pas prise en compte par défaut avec les scanneurs de ports.
Un exemple de configuration du routeur pour une Freebox, ça donne par exemple cette ligne :
VLC remote PAT

Pour la conf de VLC remote sur le iPhone, il faut « clicker » sur « ajouter un ordinateur » et entrer le nom puis le nom d’hôte et le port séparés de :, exemple :

Conf VLC remote iPhone

Clicker sur « utiliser comme client distant »

Pour lancer vlc avec l’interface HTTP activée, soit vous furetez dans les menus ou plus efficacement et simplement vous appelez vlc de cette façon :

vlc --control http

soit dans un terminal ou alors dans la fenêtre qui s’ouvre après avoir tapé alt+f2 ( Gnome, KDE, XFCE… ).

Voilà, ça devrais fonctionner maintenant :)