====== Point d'accès wifi sur Tor avec Raspberry ======
* Objet : création d'un point d'accès wifi Tor avec un Raspberry
* Niveau requis : moyen
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag> à-placer}}
* Création par [[user>vakuy]] 02/04/2018
* Testé par <...> le <...> FIXME
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=20502 | Lien vers le forum]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
=== Remarque préliminaire ===
les instructions ci-dessous sont pour leur majeur partie tirées de ces tutos (en anglais) :
* [[https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point]]
* [[https://learn.adafruit.com/onion-pi/overview]]
===== Introduction =====
Le but de ce tutorial est de créer, à l'aide d'un raspberry, un point d'accès wifi ("hotspot") qui route l'ensemble du traffic des appareils qui s'y connectent par Tor.
== À quoi ça sert ==
Lorsque vous connectez un appareil à ce hotspot, l'ensemble du trafic est redirigé sur Tor. Cela peut être utile dans les cas de figure suivants:
* Vous cherchez un moyen facile de faire transiter l'ensemble de votre trafic internet sur Tor.
* Vous souhaitez isoler des appareils connectés au net auxquels vous ne faites pas confiance (ex. frigos, balances, etc.)
* Vous avez envie de réaliser un projet avec votre Raspberry qui traîne
== Ce n'est probablement pas pour vous si ==
* Vous cherchez un moyen très sécurisé de vous connecter à Tor et/ou vous avez besoin d'un niveau d'anonymat et de sécurité maxium. Dans ce cas il vaut certainement mieux vous tourner vers des solutions comme Tails (https://tails.boum.org/) ou Whonix (https://www.whonix.org/).
* Vous comptez vous y connecter avec un smartphone ou tout autre appareil où vous êtes déjà identifiés à des services (ex. apps diverses, gmail, etc.).
===== Installation =====
==== Matériel requis ====
* Une connexion internet (sans blague...)
* Un Raspberry (2 ou 3 ou Zero) avec Raspbian installé
* Un ou deux adaptateurs Wifi (j'utilise un Asus USB-N13, mais il y a bien sûr beaucoup d'autres choix)
* Un câble ethernet (optionnel, pas nécessaire si vous avez deux adaptateurs wifi, ou alors un Raspberry 3 ou Zero avec carte wifi et un adaptateur)
* Optionnel, mais recommandé: [[doc:reseau:ssh|une connexion ssh]] à votre raspberry pour le configurer à distance.
===== Installation et configuration du point d'accès wifi =====
Remarque : //j'utilise ici une configuration avec un Raspberry 3 connecté en wifi avec sa puce native (wlan0) et avec une deuxième interface wifi (wlan1) correspondant à l'adaptateur wifi.//
==== 1. Premiers pas ====
On commence par une petite mise à jour du système, cela ne peut pas faire de mal :sudo apt update && sudo apt dist-upgrade
On vérifie que les deux interfaces désirées sont reconnues :ifconfig -a
eth0 Link encap:Ethernet HWaddr XXX
inet6 addr: XXX Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16514 errors:0 dropped:0 overruns:0 frame:0
TX packets:16514 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:35719859 (34.0 MiB) TX bytes:35719859 (34.0 MiB)
wlan0 Link encap:Ethernet HWaddr XXX
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::93d8:59fb:5c7a:1a86/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:378004 errors:0 dropped:0 overruns:0 frame:0
TX packets:206942 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:205328121 (195.8 MiB) TX bytes:101559626 (96.8 MiB)
wlan1 Link encap:Ethernet HWaddr XXX
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
//comme on le voit ici, l'interface wlan1, qui correspond à l'adaptateur wifi, est reconnue mais pas encore configurée. C'est elle qui servira de point d'accès wifi//
==== 2. installation des paquets ====
* hostapd
* isc-dhcpd-server et
* iptables-persistent
- Les paquets hostapd et isc-dhcpd-server vont nous permettre de créer un accès wifi avec notre Raspberry.sudo apt install hostapd isc-dhcp-server
- Le paquet iptables-persistent servira à sauvegarder les règles iptables au redémarrage du Raspberry.sudo apt install iptables-persistent
Pendant l'installation, on vous demandera si vous souhaitez sauvegarder les règles actuelles pour ipv4 et ipv6. Dites oui aux deux.
==== 3. Configuration du serveur DHCP ====
Il s'agit maintenant d'éditer le fichier ''/etc/dhcp/dhcpd.conf'', pour permettre à notre futur point d'accès d'attribuer automatiquement les plages d'adresses IP locales et de gérer les DNS.
Commencez par faire un backup du fichier :sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp dhcpd.conf.back
Ensuite remplacez l'ensemble du contenu du fichier ''/etc/dhcp/dhcpd.conf'' par les lignes suivantes :
authoritative;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.42.0 netmask 255.255.255.0
{
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
option domain-name-servers 192.168.42.1;
range 192.168.42.1 192.168.42.100;
}
Ensuite, éditez le fichier ''/etc/default/isc-dhcp-server''nano /etc/default/isc-dhcp-server
Et ajoutez remplacez ''INTERFACES=""'' par ''INTERFACES="wlan1"'' ainsi :
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="wlan1"
**Important** : si vous n'avez pas d'adaptateur wifi et que vous utilisez votre puce wifi (Raspberry 3 ou Zero) comme point d'accès, indiquez "wlan0" au lieu de "wlan1". L'interface doit être celle de votre futur point d'accès.
==== 4. Configuration de l'interface wifi du point d'accès ====
- Allez dans le fichier /etc/network/interfaces :sudo nano /etc/network/interfaces
- Supprimez ou commentez toutes références à votre interface wifi qui servira de point d'accès et ajoutez les lignes suivantes :iface wlan1 inet static
address 192.168.42.1
netmask 255.255.255.0
**Important** : même chose que précédemment, remplacez wlan1 par wlan0 si vous utilisez votre puce wifi comme point d'accès.
Après avoir sauvegardé vos modifications, attribuez l'adresse statique 192.168.42.1 à votre point d'accès :
sudo ifconfig wlan1 192.168.42.1
//ou wlan0...//
==== 5. Configuration du point d'accès ====
Nous allons maintenant configurer le point d'accès, et lui donner un mot de passe. \\
Créer un nouveau fichier ''hostapd.conf'' en entrant la commande suivante :
sudo nano /etc/hostapd/hostapd.conf
et entrez les lignes suivantes :
interface=wlan1
ssid=Onion
country_code=FR
hw_mode=g
channel=11
macaddr_acl=0
#auth_algs=1
ignore_broadcast_ssid=0
wpa=1
wpa_passphrase=raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1
**Important** : //libre à vous de modifier le nom du réseau et le mot de passe. J'ai ici choisi "Onion" comme nom de réseau (ssid) et "raspberry" comme mot de passe. Remplacez wlan1 par wlan0 en fonction de votre configuration (même remarque que précédemment).//
Une fois le fichier sauvegardez, éditez le fichier /etc/default/hostapd:
sudo nano /etc/default/hostapd
et modifiez la ligne :
#DAEMON_CONF=""
ainsi :
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Additional daemon options to be appended to hostapd command:-
# -d show more debug messages (-dd for even more)
# -K include key data in debug messages
# -t include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
#DAEMON_OPTS=""
Même chose avec le fichier /etc/init.d/hostapd, remplacez :
DAEMON_CONF=
par :
DAEMON_CONF=/etc/hostapd/hostapd.conf
sudo nano /etc/init.d/hostapd
#!/bin/sh
### BEGIN INIT INFO
# Provides: hostapd
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start: $network
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Advanced IEEE 802.11 management daemon
# Description: Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
# Authenticator
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON_SBIN=/usr/sbin/hostapd
DAEMON_DEFS=/etc/default/hostapd
DAEMON_CONF=/etc/hostapd/hostapd.conf
NAME=hostapd
DESC="advanced IEEE 802.11 management"
PIDFILE=/run/hostapd.pid
[ -x "$DAEMON_SBIN" ] || exit 0
[ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
[ -n "$DAEMON_CONF" ] || exit 0
DAEMON_OPTS="-B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF"
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
--pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
log_end_msg "$?"
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" \
--pidfile "$PIDFILE"
log_end_msg "$?"
;;
reload)
log_daemon_msg "Reloading $DESC" "$NAME"
start-stop-daemon --stop --signal HUP --exec "$DAEMON_SBIN" \
--pidfile "$PIDFILE"
log_end_msg "$?"
;;
restart|force-reload)
$0 stop
sleep 8
$0 start
;;
status)
status_of_proc "$DAEMON_SBIN" "$NAME"
exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|reload|status}" >&2
exit 1
;;
esac
exit 0
==== 6. Installation et configuration de Tor ====
Installez le paquet Tor :sudo apt install tor
Ajoutez les lignes suivantes à la fin du fichier /etc/tor/torrc:
sudo nano /etc/tor/torrc
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 192.168.42.1:9040
TransListenAddress 192.168.42.1
DNSPort 192.168.42.1:53
DNSListenAddress 192.168.42.1
**Note:** si vous utilisez une version antérieure à Debian Buster, ajoutez les lignes suivantes à la fin du fichier /etc/tor/torrc:
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.42.1
DNSPort 53
DNSListenAddress 192.168.42.1
==== 7. Configuration du NAT ====
Enclenchez l'ip forwarding au démarrage de la machine en ajoutant ''net.ipv4.ip_forward=1'' sur une nouvelle ligne tout à la fin du fichier /etc/sysctl.conf :
sudo nano /etc/systctl.conf
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
net.ipv4.ip_forward=1
Puis entrez la commande suivante pour activer l'ip forwarding immédiatement :
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
Maintenant il s'agit d'entrer [[doc:reseau:iptables|les règles iptables]] qui vont permettre de router les connexions au point d'accès (wlan1 chez moi) par Tor. \\
On commence par supprimer les règles existantes, au cas où :
sudo iptables -F
sudo iptables -t nat -F
Ensuite on entre les deux commandes suivantes :
sudo iptables -t nat -A PREROUTING -i wlan1 -p udp --dport 53 -j
REDIRECT --to-ports 53
sudo iptables -t nat -A PREROUTING -i wlan1 -p tcp --syn -j REDIRECT --to-
ports 9040
**Remarque**: remplacer wlan1 par wlan0 si besoin...
Enfin, on sauvegarde ces règles pour qu'elles persistent au redémarrage du Raspberry :
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
===== Utilisation =====
==== Premier test ====
Testez manuellement votre point d'accès en entrant la commande suivante :
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
Si tout fonctionne, vous devriez voir apparaître un nouveau réseau wifi appelé ''Onion''((ou tout autre nom que vous avez indiqué dans le fichier hostapd.conf plus haut)). \\
Essayez de vous y connecter et testez votre adresse IP dans un navigateur, en vous rendant sur une page qui vous renseigne sur votre adresse IP et votre navigateur (il en existe des centaines), comme ''whoer.net''.
Si vous voyez que vous avez une adresse qui ne correspond pas à la vôtre, d'un pays étranger, bravo, tout fonctionne comme prévu !
==== Activer le service de manière permanente ====
Entrez les commandes suivantes pour activer votre point d'accès au démarrage de la machine :
sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable
====== Remarques finales =====
Il y a des chances que vous n'y arriviez pas du premier coup.
- En cas d'erreurs, vérifiez bien tous les fichiers que vous avez modifiés, la moindre erreur de syntaxe étant fatale.
- Même lorsqu'il fonctionne, le système n'est pas d'une fiabilité totale et peut s'interrompre régulièrement.
Les commandes suivantes :
sudo service hostapd status
sudo service isc-dhcp-server status
vous permettent d'inspecter l'état des services du point d'accès. \\
Cela peut vous donner des indications précieuses en cas d'erreur.
Vous pouvez également vérifier que Tor fonctionne :
sudo service tor status
Enfin, si vous n'y arrivez vraiment pas, je vous suggère de tout reprendre depuis le début en vous référant à la documentation à l'origine d'adafruit :
* [[https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point]]
* [[https://learn.adafruit.com/onion-pi/overview]]
Peut-être qu'il vaut mieux d'abord s'assurer que vous parvenez à faire fonctionner un point d'accès wifi simple, avant d'essayer de le torréifier.
====== Remarques sur Tor ======
Ce point d'accès wifi à lui seul ne suffit pas à vous rendre anonyme ! \\
Si vous vous y connectez avec vos appareils habituels, les cookies de vos navigateurs, les préférences de vos apps, etc... suffisent à vous déanonymiser ! \\
De plus, vous pourrez rencontrer des problèmes à vous connecter à vos services habituels (messageries, etc.).
À utiliser avec précaution !