Old:Creare un Access Point con Debian: differenze tra le versioni

nessun oggetto della modifica
m (+ categoria "E-zine")
Nessun oggetto della modifica
Riga 8: Riga 8:
<br/>
<br/>
<br/>
<br/>
== Introduzione ==
In questo articolo esploreremo insieme tutti i passaggi necessari a realizzare un access point wireless basato sul nostro sistema operativo preferito: GNU/Linux Debian!
Non si copriranno tutti gli aspetti che riguardano il raggiungimento di questo obiettivo (ci vorrebbe un libro intero!) ma si cercherà di fornire delle linee guida da seguire e una panoramica delle difficoltà che ci si troverà a dovere affrontare.<br />
La domanda potrebbe essere: perchè realizzare un access point software invece di acquistarne uno bello e pronto?<br />
Risposta: e perchè no?<br />
E' chiaro a tutti che acquistare un prodotto oggi molto comune sul mercato è ben più economico che "costruirsi" una custom-box; non ci sarebbe neanche bisogno di impiegare tempo ad effettuare settaggi e configurazioni.<br />
Ci sono però, a mio avviso, due grandi motivazioni che possono spingerci ad affrontare un'avventura del genere.
La prima è la flessibilità e la possibilità di personalizzazione: si vuole un firewall? Un proxy? Nat? Nessun problema.
L'altra ragione (forse la più stimolante...) è che è divertente ed anche un ottimo modo per imparare dalle difficoltà che si incontreranno lungo il cammino.
== Requisiti ==
Il computer utilizzato per questo progetto è un notebook (vecchiotto) Acer Travelmate 2300 con 512Mb Ram, CPU Celeron M a 1400MHz, sistema operativo, neanche a dirlo, una installazione minimale di Debian GNU/Linux Lenny (la stabile attuale) con kernel 2.6.26-2-686.<br />
La connettività è garantita da una scheda ethernet, da una scheda wifi pcmcia Netgear Wpn511 gestita dai driver Madwifi (presenti nei repository di Lenny e installati con module-assistant) e da un router adsl Alice Gate 2+.<br /><br />
Purtroppo non tutte le schede wireless in commercio sono capaci di accettare connessioni ed autenticazioni così come richiede un access point.<br />
Su sistemi GNU/Linux, ad oggi, solo pochi tipi di schede, ad esempio quelle gestite dai drivers ''iwlwifi'' (per chipset Intel) o da quelli ''madwifi'' (per chipset Atheros), sono capaci di assolvere a questo compito perchè riescono a supportare la modalità "'''Master'''".<br />
Considerato che tali schede hanno costi davvero contenuti (che si possono aggirare sui 30-40 €) possiamo sostenere che, con una spesa minima, ci si può dotare di una periferica che può darci davvero grandi soddisfazioni.<br /><br />
Non è proponibile, in questo contesto, affrontare tutte le problematiche d'installazione e di configurazione delle varie tipologie di schede wifi e relativi driver disponibili.<br />
Si assume quindi che il sistema operativo sia stato installato e che la scheda sia stata riconosciuta e configurata correttamente.<br />
Tutti i comandi relativi sono propri delle schede funzionanti con driver madwifi.<br /><br />
Per controllare se sul chip della scheda wifi di cui disponiamo è possibile settare il "Master mode" si può impartire il comando:
<pre>
# wlanconfig ath0 create wlandev wifi0 wlanmode master
</pre>
che, in assenza di errori segnalati in ouput, imposterà la scheda ath0 in modalità master.<br />
Lo stato della scheda è comunque visualizzabile con:
<pre>
# iwconfig ath0
</pre>
Per riportare la scheda alla condizione di partenza:
<pre>
# wlanconfig ath0 destroy
</pre>
(a volte, dopo quest'ultimo comando, la scheda "sparisce" dal pc; per riportarla in funzione basterà ricaricare il modulo che la gestisce: '''ath_pci''').
<br />
<br />
== Topologia della rete ==
Il nostro pc avrà (ovviamente) sistema operativo GNU/Linux Debian installato e, perlomeno, due schede di rete riconosciute e funzionanti, una wireless
(ath0) ed una ethernet (eth0). La prima si incaricherà di accettare o rifiutare le connessioni da parte dei clients che provano l'autenticazione e, nel caso di autenticazione avvenuta, di trasmettere i pacchetti alla seconda (eth0) che li instraderà verso la rete esterna.<br />
Per i pacchetti in entrata, ovviamente, sarà la stessa eth0 che li "passerà" ad ath0 la quale si incaricherà di inoltrarli a sua volta ai clients connessi alla rete lan.<br />
La topologia della rete che si andrà a "prefigurare" risulterà così simile a questa:
<pre>Internet <----> [router] <----> (eth0=192.168.1.4)-Debian Ap-(athn0=10.0.0.1) <----> Lan</pre>
Come si può notare, le interfacce di rete di Debian Ap, staranno su due classi differenti e per questo (lo vedremo proseguendo) avremo bisogno di
un "qualcosa" che permetta loro di "dialogare".<br /><br />
== Software necessario ==
Prima di proseguire con la configurazione della rete, ci soffermeremo giusto un attimo sull'installazione di tutti quei pacchetti che ci permetteranno di affrontare i passaggi successivi di questo articolo:
<pre># apt-get install wireless-tools hostapd hostap-utils bridge-utils dhcp3-server</pre>
dove:
* ''wireless-tools'': set di comandi per la gestione del wifi.
* ''hostapd''      : demone che si occuperà della crittografia per l'autenticazione.
* ''bridge-utils''  : tools per configurare il bridging dei pacchetti.
* ''dhcp3-server''  : server dhcp che si occuperà di assegnare gli ip ai clients autenticati.
<br /><br />
== Configurazione delle interfacce di rete ==
Prima di iniziare le varie configurazioni è consigliabile "spegnere" le schede di rete e azzerare eventuali regole di iptables:
<pre>
# ifconfig eth0 0.0.0.0 down
# ifconfig ath0 0.0.0.0 down
# /sbin/iptables -F
# /sbin/iptables -X
</pre>
Questo per poter lavorare su un sistema "incontaminato" da configurazioni o settaggi precedenti.<br />
Fatto questo, passeremo alla modifica del file /etc/network/interfaces (il "gestore" delle interfacce di rete su sistemi Debian-based):
<pre>
# ethernet settings
auto eth0
iface eth0 inet static
address 192.168.1.4
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
# wireless settings
auto ath0
iface ath0 inet static
address 10.0.0.1
netmask 255.255.255.0
broadcast 10.0.0.255
network 10.0.0.0
pre-up modprobe -r ath_pci
pre-up modprobe ath_pci autocreate=none
pre-up wlanconfig ath create wlandev wifi0 wlanmode ap
wireless-essid "debian-ap"
wirelsess-rate 54Mb
wireless txpower auto
post-up /etc/init.d/hostapd start
down /etc/init.d/hostapd stop
post-down wlanconfig ath0 destroy
post-down modprobe -r ath_pci
post-down modprobe ath_pci
</pre>
Le due schede di rete, come già detto, staranno su due network differenti: 192.168.1.0/24 e 10.0.0.0/24.
La scheda eth0 avrà come gateway e server dns il router adsl (192.168.1.1) che farà "transitare" i pacchetti da e verso internet.<br /><br />
Le righe
<pre>
pre-up modprobe -r ath_pci
pre-up modprobe ath_pci autocreate=none
pre-up wlanconfig ath create wlandev wifi0 wlanmode ap
</pre>
setteranno la scheda wireless in modalità Master.<br />
Le prime due sono necessarie per il tipo di chip utilizzato perchè quest'ultimo riesce a settarsi correttamente solo quando il modulo che lo gestisce viene caricato con l'opzione '''autocreate=none'''.<br />
E' evidente che questo è un settaggio "particolare" relativo ad un chip ben preciso e che lo stesso non si applicherà ad altri modelli di schede.<br />
Il passo successivo consiste nell'impostare il sistema affinchè i pacchetti possano passare da un'interfaccia di rete all'altra.
<br />
Questo può essere ottenuto in due modi: con il bridging o con il routing.<br /><br />
== Modalità bridge ==
Per utilizzare il bridging abbiamo bisogno di installare le bridge-utils e di riconfigurare le interfacce di rete:
<pre># apt-get install bridge-utils
# ifconfig ath0 down
# ifconfig eth0 down
# ifconfig ath0 0.0.0.0 up
# ifconfig eth0 0.0.0.0 up</pre>
Creiamo una interfaccia di bridge chiamata br0 e aggiungiamo a questa le due interfacce di rete:
<pre># brctl addbr br0
# brctl addif br0 ath0
# brctl addif br0 eth0</pre>
infine accertiamoci che le impostazioni siano corrette:
<pre># brctl show</pre>
e riavviamo hostapd:
<pre># /etc/init.d/hostapd restart</pre>
Da notare che, per poter funzionare correttamente in modalità bridging, l'ip-forwarding deve essere impostato:
<pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre>
ma non dovrà esistere nessuna regola di masquerading di iptables.
Se mai questa esistesse, bisognerà rimuoverla:
<pre># iptables -t nat -D POSTROUTING 1</pre>
Una volta configurata, sarà possibile attivare l'interfaccia di bridge virtuale br0 come una normale scheda di rete fisica sia assegnando un
ip statico che dinamico via dhcp.<br />
A questo punto si potranno collegare pc, hub, switch, etc. alla porta ethernet o a quella wifi e la "comunicazione" sarà garantita.
Queste periferiche saranno in grado di "vedersi" e comunicare l'una con l'altra senza che ci sia bisogno di impostare gli indirizzi ip su classi
differenti e senza dover impostare le regole di iptables.<br /><br />
== Modalità router ==
Per il routing, invece, è necessario avere a che fare con le regole di netfilter per mezzo di iptables.
Autorizziamo l'interfaccia ath0 ad accettare nuove connessioni e istruiamola a forwardarle verso l'esterno attraverso l'interfaccia eth0:
<pre># iptables -A FORWARD --in-interface ath0 --out-interface eth0 --source 192.168.1.0/255.255.255.0 -m state --state NEW -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
# iptables -A FORWARD -m state --state RELATED -j ACCEPT</pre>
Impostiamo il NAT per "mascherare" gli ip della lan:
<pre># iptables -t nat -A POSTROUTING -j MASQUERADE</pre>
in questo modo i pacchetti in uscita sembreranno tutti provenienti dalla linux-box che sta eseguendo il routing.
Infine attiviamo il packet forwarding a livello kernel:
<pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre>
Questo setup farà passare il traffico dalla lan ad internet ma non si preoccuperà di configurare i parametri di rete nei computer della lan.
In ognuno di essi sarà necessario impostare indirizzo ip, indirizzo del gateway, indirizzo del dns.
Se si utilizza il nostro Debian AP come NAT gateway, questo potrà essere facilmente ottenuto usando il dhcp.<br />
Le impostazioni di iptables e dell'ip_forward fin qui definite si perderebbero in caso di halt o reboot del sistema. E' quindi consigliabile
inserirle in uno script apposito da avviarsi in automatico al boot dell'ap.<br />
Si sottolinea che queste regole '''non''' si occupano di "proteggere" la rete, ma solo di permettere il routing dei pacchetti. E' utile, quindi, integrarle con regole adatte al "filtraggio" vero e proprio, per garantire la sicurezza all'interno del proprio network.<br />
Come già detto, in questo articolo sarebbe stato impensabile affrontare in maniera approfondita ogni singolo aspetto della gestione di rete. Ritengo corretto però consigliare un approfondimento teorico volto all'implementazione di un firewall robusto e modulare per mezzo di uno strumento eccellente e flessibile come ''iptables''.<br /><br />
== Crittografia ==
Perchè il nostro access point possa stabilire una politica di sicurezza autorizzando l'autenticazione con chiave crittografica (wep, wpa, wpa2, radius) sarà necessario installare il pacchetto hostapd:
<pre># apt-get install hostapd</pre>
e intervenire modificando alcune righe del suo file di configurazione ''/etc/hostapd/hostapd.conf'':
<pre>interface=ath0
driver=madwifi
...
ssid=debian-ap
hw_mode=b
channel=7
...
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
...
wpa=1
wpa_passphrase=wdebianizzati
wpa_key_mgmt=WPA-PSK</pre>
dove:
* ''hw_mode'' = (hardware mode) può assumere i valori a / b / g.
* ''channel'' = canale sul quale si vuole trasmettere.
* ''macaddr_acl'' = autenticazione basata sul macaddress (0 accetta se non espressamente negato, 1 nega se non espressamente consentito, 2 utilizza server radius).
* ''auth_algs'' = algoritmo di autenticazione (0 open system, 1 wep, 3 entrambi).
* ''ignore_broadcast_ssid'' = 0 disabilitato, 1 ssid vuoto, 2 clear ssid.
* ''wpa'' = 1 solo wpa, 2 wpa2, 3 entrambi.
<br />
Nello stesso file, inoltre, nel caso avessimo deciso di adottare la modalità di bridging, dovremmo decommentare la riga
<pre>bridge=br0</pre>
Decommentiamo inoltre, nel file ''/etc/default/hostapd'', la riga
<pre>RUN_DAEMON="yes"</pre>
<br />
A questo punto possiamo riavviare la rete e di conseguenza, per come abbiamo impostato il file /etc/network/interfaces, anche il demone hostapd:
<pre># /etc/init.d/networking start</pre>
e provare l'autenticazione da un qualsiasi pc munito di scheda wifi:
<pre># wpa_passphrase debian-ap wdebianizzati > /etc/wpa_supplicant/wpa_supplicant-custom.conf
# wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-custom.conf &</pre>
ovviamente a ''wlan0'' sostituiremo il nome dell'interfaccia wireless del client.
Se non vengono restituiti errori, l'autenticazione è avvenuta con successo.<br /><br />
== Filtri sulle connessioni ==
Per rendere più sicuro l'accesso all'acces point imposteremo un filtro sui mac address autorizzati a connettersi (previa autenticazione).<br />
La regola che vogliamo impostare è che il nostro Debian Ap '''neghi''' la connessione a '''tutti''' i mac address che ne fanno richiesta '''meno''' quelli che si vogliono autorizzare.<br />
In pratica, si stabilirà un insieme di mac address conosciuti ai quali permettere l'eventuale connessione. A tutti gli altri non facenti parte di questo insieme, la possibilità verrà negata.<br />
<br />
Questo risultato può essere raggiunto percorrendo diverse strade (come d'altronde succede in ambiente linux): si possono impostare apposite regole di iptables, ci si può avvalere nuovamente di iwpriv, etc.<br />
In questo caso si è scelto di far svolgere il lavoro al demone hostapd.<br />
Creiamo due nuovi files:
<pre>
# touch /etc/hostapd/hostapd.accept
# touch /etc/hostapd/hostapd.deny
</pre>
Il primo conterrà una lista di mac address da "accettare", il secondo da "rifiutare". Il tutto si basa sul tipo di politica da voler adottare. Noi abbiamo scelto quella del: "nega a tutti meno che a quelli appartenenti ad un insieme stabilito".<br />
Editiamo il file /etc/hostapd/hostapd.conf e sostituiamo alla riga:
<pre>
macaddr_acl=0
</pre>
la riga:
<pre>
macaddr_acl=1
</pre>
e inseriamo la riga (o decommentiamola se presente):
<pre>
accept_mac_file=/etc/hostapd/hostapd.accept
</pre>
In questo modo solo i mac address presenti in /etc/hostapd/hostapd.accept saranno autorizzati ad agganciarsi alla lan.<br />
<br />
Ad esempio:
<pre>
# echo "11:22:33:44:55:66" >> /etc/hostapd/hostapd.accept
# echo "99:88:77:66:55:44" >> /etc/hostapd/hostapd.accept
# /etc/init.d/hostapd restart
</pre>
farà in modo che questi siano gli unici due mac address autorizzati ad entrare in rete.<br /><br />
== Server dhcp ==
Come dhcp server utilizzeremo ''dhcp3-server'' avviato come demone sull'interfaccia ''wlan0'', dato che sarà questa quella che i vari clients della lan
interrogheranno per cercare autenticazione ed ottenere indirizzo ip.<br /><br />
Installato il server:
<pre># apt-get install dhcp3-server</pre>
interverremo sul file ''/etc/init.d/dhcpd'' impostando al suo interno:
<pre>INTERFACES=ath0</pre>
Nel file di configurazione ''/etc/dhcp3/dhcpd.conf'' setteremo invece le direttive riguardanti il lease time (tempo di attesa) e il range di indirizzi
ip da assegnare, nonchè le indicazioni riguardanti i dns:
<pre>
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.254;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
option domain-name-servers 208.67.222.222, 208.67.220.220;
}</pre>
In questo esempio come server di dominio sono stati impostati gli indirizzi di opendns, ma ovviamente possono essere sostituiti da quelli di eventuali dns interni alla lan.
Per applicare le modifiche, come sempre, dovremo riavviare il servizio:
<pre># /etc/init.d/dhcp3-server restart</pre>
<br />
== Considerazioni finali ==
La configurazione del nostro Debian-Ap è terminata.
Abbiamo visto come sia relativamente semplice, disponendo di hardware comune (anche datato) e di scheda wifi compatibile con la modalità master, realizzare "via software" un access point in piena regola da poter utilizzare nella nostra lan.<br />
E' chiaro che il tutto si presta a personalizzazioni e miglioramenti infiniti.<br />
Dal settare un proxy per le autenticazioni e il filtro dei contenuti, alla definizione di regole firewall ben più articolate e complete, etc. ci si può davvero sbizzarrire e dar fondo alla nostra creatività e capacità tecnica...<br />
Il tutto, ovviamente, sempre e solo con strumenti liberi ed in pieno spirito open source!<br /><br />
Happy surfing & happy Debian!
----
----
[[Utente:Pmate|pmate]] 12:12, 16 feb 2010 (CET)
[[Utente:Pmate|pmate]] 12:12, 16 feb 2010 (CET)
660

contributi