Installation d'un réseau wifi sous openbsd
Dans cette documentation, nous allons voir comment installer et configurer une
carte wifi sous openbsd. Je n'utilise pas le wep, par contre, je protege
l'accés au réseau à l'aide d'authpf.
La carte:
pour les cartes supportées, voir man 4 wi.
dans cette documentation, la carte utilisée est une dlink dwl 520
Installation:
brancher la carte, au démarage, si vous avez le message suivant:
wi0 at pci0 dev 9 function 0 "Intersil PRISM2.5 Mini-PCI WLAN" rev 0x01: irq 12
wi0: PRISM2.5 ISL3874A(Mini-PCI), Firmware 1.0.7 (primary), 1.3.6 (station), address xx:xx:xx:xx:xx:xx
c'est que la carte est bien installée et reconnu par le système. Sinon, soit
votre carte n'est pas supportée, soit utilisez google pour voir ce qui cloche.
Configuration de la carte:
mon réseau est composé de 4 machines, et il est découpé de la façon suivante:
machine A: la passerelle, avec 3 interfaces réseau:
- vr0 pour le lan cablé (avec une ip en 192.168.0.x)
- ne3 pour le modem adsl
- wi0 pour le lan wireless (avec une ip en 10.0.0.x)
machine B et C sont connectées par le reseau cablé, en passant par un switch.
machine D passe par le reseau wifi.
Pour configurer la carte, créer un fichier `hostname.wi0`, avec le contenu
suivant:
inet 10.0.0.1 255.255.255.0 10.0.0.255
!/sbin/wicontrol \$if -n nomreseauwifi -s nomhote -p 6
la commande wicontrol (man 8 wicontrol) controle les opérations du lan wireless
pour les cartes utilisant le driver `wi` (man 4 wi).
l'option -n spécifie le nom du réseau wireless, -s le nom de la machine, -p 6
pour déclarer la carte en 'hostap mode', c'est à dire en point d'accès.
L'IP de cette carte est 10.0.0.1
Le réseau possède un serveur dns et un serveur dhcp.
La configuration du dhcp est la suivante:
shared-network LOCAL-NET {
option domain-name "nomdureseau";
option domain-name-servers 192.168.100.xx;
subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
range 10.0.0.3 10.0.0.127;
}
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.xx;
range 192.168.100.127 192.168.100.200;
}
}
Il y a donc 2 réseaux, un réseau pour le wifi, avec des IP 10.0.0.x et un autre
réseau avec les ip 192.168.100.x.
La configuration du dns est tout ce qu'il y a de plus classique. (consulter
la doc suivante: http://www.openbsd-france.org/documentations/OpenBSD-bind.html)
Configuration du firewall:
Je n'utilise pas le wep, mais je n'ai pas pour autant envie que tout le monde
se connecte à mon réseau. Pour cela, j'utilise un magnifique outil: authpf.
Les utilisateurs voulant se connecter sur mon réseau wifi, doivent avoir un
compte sur la gateway, et se logguer en ssh dessus.
Pour cela, j'ai procédé de la maniere suivante:
D'abord, un petit proxy web. Ajouter cette ligne dans votre inetd.conf:
#www proxy
127.0.0.1:5000 stream tcp nowait nobody /usr/bin/nc nc -w 20 192.168.100.xx 8080
On utilise nc pour en faire un petit proxy web, qui redirige toutes les requetes web sur un site se
trouvant sur votre lan, sur le port 8080. Cela vous permet de mettre un joli petit texte sur ce site du style:
"pour utiliser mon réseau wireless, vous devez vous autentifier d'abord via authpf."
Ensuite, la configuration d'authpf:
le fichier authpf.conf doit exister, s'il n'est pas présent, un simple
touch /etc/authpf.conf
ensuite, dans authpf.allow, le nom des utilisateurs qui peuvent se connecter en utilisant authpf
et authpf.message un petit texte (pas utile, mais pratique), du style:
Welcome on xxxxx, the 802.11 OpenBSD's gateway
with this access point you can:
- http(s)
- smtp
- pop3
- irc
dans /etc/login.conf, créer une classe "wifi":
wifi:\
:shell=/usr/sbin/authpf:\
:tc=default:
ensuite, dans le répertoire /etc/authpf/users, vous créez un repertoire par utilisateur que vous souhaitez
voir connecté via authpf. Dans ce repertoire, placer un fichier authpf.rules, avec les regles suivantes:
wifi_if = "wi0"
ext_if = "tun0"
dns_servers = "{ 10.10.10.1 }"
nat on $ext_if from $user_ip to any -> ($ext_if)
no rdr on wi0 proto tcp from $user_ip to any port 80
pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \
port domain keep state
pass in quick on $wifi_if proto tcp from $user_ip to any port { smtp, pop3 } \
flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, https } \
flags S/SA keep state
Ces regles permettent à l'utilisateur de faire du ssh, http, https, pop3 et smtp. On rajoute une regle
également pour le NAT.
Maintenant la configuration de /etc/pf.conf:
($wi0_if est wi0 chez moi, $int_if est vr0, $priv_nets est 127.0.0.0/8, 10.0.0.0/24, 192.168.100.0/24)
Dans la section "nat/rdr":
rdr-anchor authpf
nat-anchor authpf
### toutes les requetes vers le port 80 sont rdr sur une page locale
rdr on $wi0_if proto tcp from $priv_nets to any port 80 \
-> 127.0.0.1 port 5000
dans la section network policy:
### authpf pour le wireless
### on laisse passer le dhcp, dns, web et ssh
pass in quick on $wi0_if proto tcp from $wi0_if/24 to $int_if/32 port = 22 flags S/SA keep state
pass in quick on $wi0_if proto tcp from $wi0_if/24 to $loo_if port = 5000 flags S/SA keep state
pass in quick on $wi0_if proto { tcp,udp } from $wi0_if/24 to $int_if/32 port = 67 keep state
pass in quick on $wi0_if proto { tcp,udp } from $wi0_if/24 to $int_if/32 port = 53 flags S/SA keep state
block in quick on $wi0_if from any to $wi0_if/24
# OUTGOING: pass all.
pass out quick on $wi0_if proto { tcp,udp } from any to $wi0_if/24 keep state
pass out on $wi0_if inet proto icmp all keep state
# Appel les regles d'authpf pour l'utilisateur
anchor authpf
maintenant, votre utilisateur n'a plus qu'à se connecter en ssh sur la passerelle, et il pourra ainsi surfer.
Quelqu'un qui essayerai de se connecter sur votre réseau n'aura accès (pour le web) qu'à la page que vous aurez définis
par votre proxy web