====== Pibox : Une rapsberry pour les échanges ======
J'ai testé les logiciels "piratebox" et je n'ai pas aimé, ni en tant qu'utilisatrice, ni en tant qu'administratrice. Aussi je tente ma propre interprétation de la chose.
Comme ça se base sur une raspberry pi, j'appelle ça une "pibox", c'est un peu moins inquiétant pour les gens que le terme //pirate//, mais c'est vraiment la même logique : un réseau sans fil auquel se connecter, un site web, de quoi partager des fichiers, discuter, le tout en local.
===== Installation du raspberry =====
Voir [[pratique:informatique:raspberry]].
===== Reconnaître la clé wifi =====
Il faut une carte wifi à ajouter et le bon driver pour la faire tourner. La carte (ou clé) wifi doit supporter le mode AP, ce qu'on peut voir avec la commande ''iw list'' (installer le paquet ''iw'' s'il n'y est pas), qui doit retourner quelque chose comme ''Supported interface modes: AP/VLAN'' au milieu des diverses informations.
Dans mon cas, j'ai une clé usb wifi Hercule, bien prise en charge sous linux et qui propose le mode AP. Pour connaître le modèle : ''lsusb'', c'est l'une des lignes.
lsusb
Bus 001 Device 004: ID 06f8:e010 Guillemot Corp. HWGUSB2-54-LB
Un petit tour ensuite sur la database des périphériques usb de Debian : https://wiki.debian.org/DeviceDatabase/USB où cette référence m'indique que mon pilote sera [[https://wiki.debian.org/WiFi/rt73|rt73]], installé avec firmware-ralink. J'aime quand c'est facile comme ça. À adapter à votre propre périphérique wifi !
sudo apt-get install firmware-ralink
Vérifiez que votre carte wifi est bien wlan0 avec ''ifconfig'', sinon adaptez la suite du tutoriel en remplaçant wlan0 par son identifiant.
===== Transformer la Raspberry en accès wifi =====
À noter : je ne cherche pas à sécuriser le réseau donc la configuration d'hostapd et je ne cherche pas à faire un pont vers internet.
Quelques logiciels à installer pour créer un "AP" (//Access Point//):
sudo apt-get install hostapd dnsmasq iptables-persistent
* hostapd va générer le réseau sans fil auquel se connecter.
* dnsmasq sert à la fois à gérer la partie dhcp et la partie dns : il va donner des adresses ip aux machines qui se connectent et servir de DNS.
* iptables-persistent permet de relancer la même configuration iptable d'un redémarrage à l'autre ; répondre “oui” quand il demande s'il doit sauvegarder les configurations.
Il faut aussi tripatouiller dhcpcd, installé et configuré de base. Il suffit de lui dire d'ignorer wlan0, car nous allons configurer ce dernier avec une adresse statique.
sudo nano /etc/dhcpcd.conf
Ajouter au fichier, tout au début :
denyinterfaces wlan0
==== Interface, wlan0 ====
On va configurer wlan0
sudo ifdown wlan0
sudo nano /etc/network/interfaces
Éditez-le pour qu'il ressemble à cela (commentez le reste) :
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet static
address 172.24.1.1
netmask 255.255.255.0
network 172.24.1.0
broadcast 255.0.0.0
Relancer dhcpcd pour que tout soit pris en compte.
sudo service dhcpcd restart
Et ensuite, donnez son adresse ip statique à wlan0 :
sudo ifdown wlan0
sudo ifup wlan0
sudo ifconfig wlan0 172.24.1.1
==== Hostapd ====
Modifiez le ficher de configuration d'hostapd
sudo nano /etc/hostapd/hostapd.conf
Cette configuration est particulière car elle ne demande pas de mot de passe pour se connecter. C'est un wifi ouvert !
# interface wlan du Wi-Fi
interface=wlan0
# nl80211 avec tous les drivers Linux mac80211
driver=nl80211
# Nom du spot Wi-Fi
ssid=PiBox
# mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
hw_mode=g
# canal de fréquence Wi-Fi (1-14)
channel=6
Ce qui suit peut aussi s'aouter mais pas sûre que ce soit super utile ?
# Beacon interval in kus (1.024 ms)
beacon_int=100
# DTIM (delivery trafic information message)
dtim_period=2
# Maximum number of stations allowed in station table
max_num_sta=255
# RTS/CTS threshold; 2347 = disabled (default)
rts_threshold=2347
# Fragmentation threshold; 2346 = disabled (default)
fragm_threshold=2346
Pour le driver, suivant la carte wifi, cela peut être ''driver=rtl871xdrv'' ou ''driver=nl80211'' ou même rien, dans le cas des Raspberry avec wifi interne.
Éditer ensuite les fichiers suivants pour que la configuration soit prise en compte par le daemon
* ''/etc/default/hostapd'' : Configurer DAEMON_CONF comme ceci (bien le décommenter !) ''DAEMON_CONF="/etc/hostapd/hostapd.conf"''
* ''/etc/init.d/hostapd'' : Configurer DAEMON_CONF comme ceci (bien le décommenter !) ''DAEMON_CONF="/etc/hostapd/hostapd.conf"''
Ensuite on teste si la configuration est bonne :
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
S'il y a des warning et des erreurs, corriger.
Sinon, une autre machine ayant le wifi devrait voir apparaître le réseau wifi PiBox (ou le nom que vous lui avez donné) et peut s'y connecter.
==== Dnsmasq ====
Sauvegarder le fichier de configuration d'origine, il est plein d'informations utiles, puis éditez ''/etc/dnsmasq.conf'' :
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo nano /etc/dnsmasq.conf
# Redirect all in local
address=/#/172.24.1.1
# Use interface wlan0
interface=wlan0
# Explicitly specify the address to listen on
listen-address=172.24.1.1
# Bind to the interface to make sure we aren't sending things elsewhere
bind-interfaces
# Don't forward short names
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time
dhcp-range=172.24.1.50,172.24.1.150,12h
À propos de l'option suivante :
# Redirect all in local
address=/#/172.24.1.1
''#'' agit comme un joker, toutes les requêtes (même à mabanque.com) sont redirigées vers notre serveur local.
Cela facilite le boulot lors du partage puisque toute adresse sera la "bonne", mais cela pose aussi des problèmes éthiques car c'est un DNS menteur qui permet le vol de cookies, d'identifiants...
Une autre solution consiste à mettre un nom de domaine sur son serveur, que nos visteurs doivent taper, sinon ils n'ont qu'une page d'erreur.
Vu ce à quoi je destine la pibox, je prends le risque de me faire gronder par un sysadmin de passage. Sachez cependant que lorsque vous vous connectez sur un réseau (quel qu'il soit), un administrateur peu scrupuleux peux enregistrer tout ce que vous faites passer. D'où l'importance de ne pas se connecter à sa banque depuis un hôtel ou un fast-food...
==== Donner de l'ipv4 et gérer iptable ====
Ok, l'ipv4 c'est mort, tout ça, mais vu le réseau on s'en moque.
sudo nano /etc/sysctl.conf
Enlever le commentaire devant ''net.ipv4.ip_forward=1''
sudo su
iptables -A INPUT -i wlan0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i wlan0 -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -i wlan0 -p udp -m udp --dport 67:68 -j ACCEPT
iptables -A INPUT -i wlan0 -j DROP
iptables-save > /etc/iptables/iptables.rules
==== Finitions ====
Relancez les services :
sudo service hostapd start
sudo service dnsmasq start
sudo service networking start
Vérifiez que tout tourne sans erreur :
sudo service hostapd status
sudo service dnsmasq status
sudo service networking status
Connectez-vous depuis votre autre machine sur le réseau PiBox, puis rendez-vous sur 172.24.1.1/info.php : c'est votre page !
Redémarrez la Raspberry, vérifiez que ça marche toujours... c'est bon ? Parfait !
===== Installation du serveur web =====
Raspberry étant un mini-machin, il faut préférer des outils légers. Ici, ce sera Lighttpd((Doc basique en français sur https://doc.ubuntu-fr.org/lighttpd)) plutôt qu'Apache ou Nginx. Et nous allons essayer d'éviter les bases de données et les gros logiciels.
sudo apt-get install lighttpd php5-cgi php5-gd php5-imagick php5-curl php5-intl
Tous ces modules ne vous seront pas forcément utiles, il y a surtout php5-cgi qui compte, mais le reste me sert souvent dans les CMS que j'aime utiliser donc : léger d'un coté, plein de l'autre !
Activer les modules de php :
sudo lighty-enable-mod fastcgi
sudo lighty-enable-mod fastcgi-php
Et relancer le démon :
sudo service lighttpd force-reload
Ajoutez ensuite l'utilisateur pi au groupe www-data et paramétrez les droits sur /var/www/html (dossier par défaut pour le web).
sudo usermod -a -G www-data pi
sudo chown -R www-data:www-data /var/www/
sudo chmod -R g+rwX /var/www/
Pour voir si ça marche :
echo "" > /var/www/html/info.php'
Accédez-y via l'adresse ''ip_de_ma_framboise/info.php''. À ne pas laisser, ça donne pas mal d'infos pour un éventuel attaquant (oui oui, je sais, vu la sécurité de l'ensemble...).
==== CMS à installer ====
À partir de là, tout ce qui s'installe sur un serveur web peut s'installer ici.
Je conseille quelque chose comme [[https://github.com/jvaubourg/php-piratebox|php-piratebox]], qui fournit les services habituels d'une piratebox : chat, partage de fichiers. C'est bien fait, relativement léger, par contre il faut impérativement l'installer à la racine du site.
Pour modifier la barre de menu, par exemple pour ajouter des items, éditez ''/var/www/html/views/home.html.php'' et ajoutez un élément dans ce genre :
= _("Images") ?>
J'ai aussi installé [[http://www.photoshow-gallery.com/|Photoshow-gallery]], plus élégant pour naviguer dans les photos envoyées par les gens, en indiquant que le dossier "images" était le dossier de php-piratebox :
$config->photos_dir = "../public/uploads/Images/";
J'ai tenté d'installer Dokuwiki, mais il est déjà trop lourd pour le raspberry, ça rame vite. Si vous voulez une partie "site web", ce sera probablement aussi efficace d'adapter un des thèmes de [[https://html5up.net/|html5up]] (gabarits libres, responsives et superbes).
Voici le texte que j'ai mis pour expliquer la démarche sur la Pibox
Ceci est une pibox. C'est un petit réseau local, sans FAI, sans contrôle, sans pub. Ce genre de dispositif s'appelle aussi "piratebox", mais le mot //pirate//, ça fait un peu peur, alors que c'est juste un endroit protégé. Il y a un réseau sans fil auquel se connecter, un site web, de quoi partager des fichiers, discuter. Le tout est basé sur une raspberry pi, un mini-ordinateur ; ce n'est pas très puissant, mais ça marche.
Et voici le texte à côté de la Pibox, imprimé :
Pibox : espace de libre échange numérique. Sur un réseau local non relié à Internet, partagez des fichiers,
discutez anonymement, parcourez et déposez des images, des photos...
* Réseau "Pibox"
* Adresse : pinata.local((En réalité peu importe, vu la configuration, tout redirige dessus.))
Ces deux textes sont en CC0, adaptez sans vous prendre la tête sur le droit.
=== Autres cms à voir ===
* [[http://wakaba.c3.cx/s/web/wakaba_kareha|Wakaba et Kareha]], en perl, pour un forum et un gestionnaire d'images. À tester
* [[http://blog.slucas.fr/en/oss/calibre-opds-php-server|COPS, Calibre OPDS (and HTML) PHP Server]] : de quoi proposer une bibliothèque avec un soft qui a l'air relativement léger en comparaison de Calibre.
* [[http://www.phorum.org/|Phorum]], un forum qui a l'air léger
* [[http://stackp.online.fr/?p=28|Droopy]], script python utilisé par piratebox pour partager les fichiers.
===== Liens utiles (ou pas) =====
Disons que ça m'a servi à en arriver là.
- https://doc.ubuntu-fr.org/hostapd
- http://hardware-libre.fr/2014/02/raspberry-pi-creer-un-point-dacces-wifi/
- http://www.dericbourg.net/2015/07/04/utiliser-un-raspberry-pi-comme-point-dacces-wifi/
- https://pirateboxfr.com/tutoriel-sur-raspberry-pi/
- https://wiki.debian.org/DHCP_Server
- https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/connect
- https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software
- https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/
- http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
- http://andrewmichaelsmith.com/2013/08/raspberry-pi-wi-fi-honeypot/
===== Pour trouver plus d'informations =====
Une recherche sur "raspberry wifi access point" donne des choses, on peut d'ailleurs se passer du mot //raspberry// puisque que tout ça est aussi valable pour toute machine sous linux ayant la capacité de faire du wifi comme point d'accès.
"Honeypot" est le petit mot pour dire "réseau captif" : en gros, quand on se connecte au wifi, tout est ramené dans le pot de miel, pardon la framboise.