Aller au contenu | Aller au menu | Aller à la recherche | Contact

mes essais, mes astuces, mes projets...

vendredi 8 février 2013

Raspberry : installer un proxy

Il existe plusieurs methodes pour faire transiter un trafic web. On peut faire un tunnel SSH vers le Raspberry, ca marche bien (avec quelques configurations à modifier sur le Raspberry) mais ca oblige à avoir en continu une console putty ouverte pour faire le tunnel... pas glop.
Il nous faut donc un proxy web, l'un des plus simple à configurer (5 min chrono) c'est SQUID. On va donc l'installer :
root@raspberrypi:/# apt-get install squid
une fois installé on va éditer son fichier de conf :
root@raspberrypi:/# nano /etc/squid/squid.conf
On va chercher la chaine "http_port" (avec CTRL+W) et rajouter (juste avant # TAG: https_port) :
http_port 192.168.1.10:12345
(dans mon cas, 192.168.1.10 est l'ip du raspberry et 12345 le port que j'ai choisi)
Puis on cherche la chaine "acl CONNECT method CONNECT" et on rajoute les IP que l'on souhaite autoriser :
acl moi src 192.168.1.30/255.255.255.255
acl pote1 src 192.168.1.31/255.255.255.255
acl pote2 src 192.168.1.32/255.255.255.255
Puis on cherche la chaine "http_access allow localhost" et on rajoute les 3 noms que l'on vient de définir :
http_access allow moi
http_access allow pote1
http_access allow pote2
On redémarre SQUID :
root@raspberrypi:/# /etc/init.d/squid restart
[ ok ] Restarting Squid HTTP proxy: squid.

Dans notre configuration, on a ouvert le port 12345 pour le proxy, et tout autorisé. On a limité l'accès à 3 IP locales, et interdit tout le reste. Voir la page officielle de SQUID pour autoriser une plage d'ip complete par exemple. Ce n'était pas mon but ici.
Maintenant on fait un test pour voir que ca se passe bien (après avoir réglé le proxy dans les paramètre du navigateur). J'affiche une page qui regarde le "x-fowarded" (masqué sur ma capture) et le "via" qui nous montre bien qu'on a une IP externe freemobile, et notre IP locale, via le proxy raspberry.local sur le port 12345 (masqué sur la capture)


Bien evidement, ce tuto ne parle pas de sécurité du proxy, car laisser un raspberry connecté en root aller sur l'interweb, c'est pas glop !

Revenir au début du Tuto

Raspberry : rediriger le traffic sur une interface specifique

Le but ici, c'est de rediriger tout le trafic non local (exterieur à notre LAN) sur la carte WiFi. Ainsi tout ce qui est dans notre plage d'IP passera par le LAN, tout le reste (ce qui nous interesse) passera par le WiFi. On va donc utiliser l'outil "route".
Dans mon exemple, j'ai un reseau en 192.168.1.x, avec une gateway en 192.168.1.254. J'ai édité mon fichier de conf reseau pour lui forcer une IP locale et une GW :
root@raspberrypi:/# nano /etc/network/interfaces
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.254

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa.conf
Avec cette config, tout routage passe par ma GW 192.168.1.254 :
root@raspberrypi:/# route -n
Kernel IP routing table
Destination      Gateway          Genmask           Flags Metric Ref      Use Iface
0.0.0.0          192.168.1.254    0.0.0.0           UG    0      0        0 eth0
192.168.1.0      192.168.1.254    255.255.255.0     UG    0      0        0 eth0
192.168.1.0      0.0.0.0          255.255.255.0     U     0      0        0 eth0
Il faut donc modifier les routes pour faire passer le traffic externe sur la carte wlan0. Le plus simple, c'est de le faire en dur dnas le fichier /etc/network/interfaces car taper directement "route del" ou "route add" vous obligera à le refaire à chaque boot.
On va donc dans le fichier et on rajoute tout en bas :
up route del -net 0.0.0.0 netmask 0.0.0.0 dev eth0
up route add default gw 172.20.10.1
up route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.254
On obtient maintenant un fichier de route propre qui dirige le traffic non LAN sur wlan0 et tout ce qui est LAN sur 192.168.1.254 (notre GW locale) :
root@raspberrypi:/# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.20.10.1     0.0.0.0         UG    0      0        0 wlan0
192.168.1.0     192.168.1.254   255.255.255.0   UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.20.10.0     0.0.0.0         255.255.255.240 U     0      0        0 wlan0
On relance les interfaces reseau :
root@raspberrypi:/# /etc/init.d/networking restart
Normalement, si on fait un ping google.fr, ca doit répondre.
root@raspberrypi:/# ping -c 2 google.fr
PING google.fr (173.194.34.56) 56(84) bytes of data.
64 bytes from par03s03-in-f24.1e100.net (173.194.34.56): icmp_req=1 ttl=56 time=100 ms
64 bytes from par03s03-in-f24.1e100.net (173.194.34.56): icmp_req=2 ttl=56 time=73.4 ms

--- google.fr ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms

Etape suivante : installer un proxy
Revenir au début du Tuto

Raspberry : connecter un iPhone comme modem 3G

Pour connecter un Rasberry à un iPhone on a 3 solutions :
  • en USB
  • en bluetooth
  • en WiFi
J'ai abandonné l'USB, car de toute évidence il faut un HUB alimenté pour l'USB, après avoir galéré quasi une journée à configurer le machin.
J'ai également abandonné le bluetooth, car trop galère à configurer et ca se déconnecte sans cesse.
J'ai opté pour le WiFi, plus simple à mon gout.

Tout d'abord il faut se procurer un dongle USB qui fonctionne sans HUB alimenté (voir la liste des périfériques compatibles sur elinux), j'ai opté pour le dongle Netgear WNA1000M totalement compatible, dont le driver est inclu dans la distrib Raspbian, donc rien à installer.

Une fois branché en USB, on vérifie qu'il est bien présent avec la commande "lsusb":
root@raspberrypi:/# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0846:9041 NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]


Ensuite, on va démarrer le partage de connexion sur l'iPhone :
Icone Reglages > partage de connexion :


Puis on va vérifier qu'on voit bien le reseau depuis le raspberry avec la commande "iwlist wlan0 scan" :
root@raspberrypi:/# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: AA:BB:CC:DD:EE:FF
                    ESSID:"iPhone"
                    Protocol:IEEE 802.11g
                    Mode:Master
                    Frequency:2.412 GHz (Channel 1)
                    Encryption key:on
                    Bit Rates:54 Mb/s
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Quality=100/100  Signal level=100/100
Ce qui nous interesse ici c'est le Channel1, le PSK, le WPA2 et le CCMP. Dans cet exemple la qualité et le signal sont à 100% car l'iPhone est à coté.
On va maintenant éditer le fichier de configuration des interfaces reseau, pour forcer le dhcp sur l'interface wifi et lui donner la clef WPA de l'iPhone :
root@raspberrypi:/# nano /etc/network/interfaces
On rajoute tout en bas :
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa.conf
Et maintenant on va ajouter les infos du reseau wifi en question ("iPhone" dans mon cas) dans le fichier wpa.conf :
root@raspberrypi:/# nano /etc/wpa.conf
Et on y insere ceci :
network={
ssid="votrereseau"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="votreclefWPA"
}
Puis on redémarre les interfaces réseau. Votre raspberry doit se connecter tout seul :
root@raspberrypi:/# /etc/init.d/networking restart

Etape suivante : rediriger le traffic sur une interface spécifique
Revenir au début du Tuto

Raspberry : contourner le proxy d'entreprise avec un iPhone et un Raspberry en 3 étapes

/!\ Ce tutoriel ne traite pas de sécurité. /!\ Il est évident qu'il ne faut pas rester connecté en root, qu'il faut sécuriser votre Raspberry avec des règles firewall, sécuriser votre proxy...Ce tutoriel ne parle que de l'aspect technique de l'installation.

Dans mon boulot, on a un proxy pour sortir du réseau de l'entreprise. Normal.
Du coup, tout est filtré, et seul le port 80 est ouvert, pour des raisons de sécurité; je n'ai rien contre.
Si certains gueulent car ils n'ont pas accès à Facebook, de mon coté c'est plus pour des besoins occasionnels d'accéder par exemple à son NAS pour récupérer un R.I.B, une fiche de paye, une copie de pièce d'identité.... Seule solution : contourner ce foutu proxy !

Aujourd'hui, un forfait 3G de 3Go coûte moins de 20€ (sans engagement en plus) et n'importe quel smartphone récent peut faire office de modem 3G. Partant de ce constat, on va donc se construire un mini proxy top discret dans une petite boite en carton (sur un bureau d'informaticien, il y a pleins de boites de téléphones, de boites de périphériques, de transfo branchés, de fils....) qui jouera le rôle de passerelle entre votre ordi (et ceux des copains qui vous payeront à vie un café le matin grâce à votre invention) et l'interweb, sans laisser de trace.
Il nous faut :
  • un Raspberry Pi modèle B (avec fiche RJ45)
  • un dongle USB (voir les modèles compatibles)
  • un smartphone (dans le tuto on utilise un iPhone mais ça marche avec tout autre smartphone) avec un forfait data illimité (chez Free ou autre)
  • une place sur le switch du bureau
  • quelques notions de terminal
Dans le principe, notre Raspberry se connecte à l'iPhone en WiFi, qui va rediriger le trafic non local vers le proxy http et permettre de sortir; et sur notre PC, on va passer par ce proxy pour sortir du réseau local, en ne faisant que du trafic sur notre switch local entre PC et Raspberry ^_^

Voici comment installer tout ça, en 3 étapes :
Première étape : Connecter le Raspberry a l'iPhone
Deuxième étape : rediriger le traffic sur une interface spécifique
Troisème et dernière étape : installer un proxy

Lire la suite