Old:Creare un Access Point con Debian: differenze tra le versioni
Nessun oggetto della modifica |
m (spaziatura/box iniziale) |
||
(10 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Old|Per le versioni correnti di Debian si raccomandano le seguenti guide: | ||
* [[Wireless Access Point (WAP) personalizzato]] | |||
* [[Ethernet Bridging]] | |||
* [[Debian e iptables#Wireless access point | configurazione iptables]] | |||
| | * [[Un server DNS e DHCP su Debian | configurazione server DNS e DHCP]] | ||
| | }} | ||
__TOC__ | |||
{{E-zine | |||
|num=1 | |||
|articoli=[http://e-zine.debianizzati.org/web-zine/numero_1/?page=8 Creare un Access Point con Debian] | |||
}} | }} | ||
== Introduzione == | == 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! | In questo articolo esploreremo insieme tutti i passaggi necessari a realizzare un access point wireless basato sul nostro sistema operativo preferito: GNU/Linux Debian!<br/> | ||
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 /> | 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: | La domanda potrebbe essere: perché realizzare un access point software invece di acquistarne uno bello e pronto?<br /> | ||
Risposta: e perchè no?<br /> | Risposta: e perchè no?<br /> | ||
È 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. | 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. | La prima è la flessibilità e la possibilità di personalizzazione: si vuole un firewall? Un proxy? Nat? Nessun problema. | ||
Riga 21: | Riga 22: | ||
== Requisiti == | == 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 /> | 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 | La connettività è garantita da una scheda ethernet, da una scheda Wi-Fi PCMCIA Netgear Wpn511 gestita dai driver Madwifi (presenti nei repository di Lenny e installati con <code>module-assistant</code>) e da un router ADSL Alice Gate 2+.<br /> | ||
Purtroppo non tutte le schede wireless in commercio sono capaci di accettare connessioni ed autenticazioni così come richiede un access point.<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 | Su sistemi GNU/Linux, ad oggi, solo pochi tipi di schede, ad esempio quelle gestite dai driver ''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. | 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 /> | ||
Non è proponibile, in questo contesto, affrontare tutte le problematiche d'installazione e di configurazione delle varie tipologie di schede | Non è proponibile, in questo contesto, affrontare tutte le problematiche d'installazione e di configurazione delle varie tipologie di schede Wi-Fi 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 /> | 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. | Tutti i comandi relativi sono propri delle schede funzionanti con driver madwifi.<br /> | ||
Per controllare se sul chip della scheda | Per controllare se sul chip della scheda Wi-Fi di cui disponiamo è possibile settare il "Master mode" si può impartire il comando: | ||
<pre> | <pre> | ||
# wlanconfig ath0 create wlandev wifi0 wlanmode master | # wlanconfig ath0 create wlandev wifi0 wlanmode master | ||
</pre> | </pre> | ||
che, in assenza di errori segnalati in | che, in assenza di errori segnalati in output, imposterà la scheda <code>ath0</code> in modalità master.<br /> | ||
Lo stato della scheda è comunque visualizzabile con: | Lo stato della scheda è comunque visualizzabile con: | ||
<pre> | <pre> | ||
Riga 41: | Riga 42: | ||
# wlanconfig ath0 destroy | # wlanconfig ath0 destroy | ||
</pre> | </pre> | ||
(a volte, dopo quest'ultimo comando, la scheda "sparisce" dal | (a volte, dopo quest'ultimo comando, la scheda "sparisce" dal PC; per riportarla in funzione basterà ricaricare il modulo che la gestisce: '''ath_pci'''). | ||
== Topologia della rete == | == Topologia della rete == | ||
Il nostro | Il nostro PC avrà (ovviamente) sistema operativo GNU/Linux Debian installato e, perlomeno, due schede di rete riconosciute e funzionanti, una wireless (<code>ath0</code>) ed una ethernet (<code>eth0</code>). La prima si incaricherà di accettare o rifiutare le connessioni da parte dei client che provano l'autenticazione e, nel caso di autenticazione avvenuta, di trasmettere i pacchetti alla seconda (<code>eth0</code>) che li instraderà verso la rete esterna.<br /> | ||
(ath0) ed una ethernet (eth0). La prima si incaricherà di accettare o rifiutare le connessioni da parte dei | Per i pacchetti in entrata, ovviamente, sarà la stessa <code>eth0</code> che li "passerà" ad <code>ath0</code> la quale si incaricherà di inoltrarli a sua volta ai client connessi alla rete LAN. | ||
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 | |||
La topologia della rete che si andrà a "prefigurare" risulterà così simile a questa: | 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> | <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 | 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". | ||
un "qualcosa" che permetta loro di "dialogare". | |||
== Software necessario == | == 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: | 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> | <pre># apt-get install wireless-tools hostapd hostap-utils bridge-utils dhcp3-server</pre> | ||
dove: | dove: | ||
* ''wireless-tools'': set di comandi per la gestione del | * ''wireless-tools'': set di comandi per la gestione del Wi-Fi. | ||
* ''hostapd'' : demone che si occuperà della crittografia per l'autenticazione. | * ''hostapd'' : [[demone]] che si occuperà della crittografia per l'autenticazione. | ||
* ''bridge-utils'' : tools per configurare il bridging dei pacchetti. | * ''bridge-utils'' : tools per configurare il bridging dei pacchetti. | ||
* ''dhcp3-server'' : server | * ''dhcp3-server'' : server DHCP che si occuperà di assegnare gli IP ai client autenticati. | ||
== Configurazione delle interfacce di rete == | == Configurazione delle interfacce di rete == | ||
Prima di iniziare le varie configurazioni è consigliabile "spegnere" le schede di rete e azzerare eventuali regole di iptables: | Prima di iniziare le varie configurazioni è consigliabile "spegnere" le schede di rete e azzerare eventuali regole di <code>iptables</code>: | ||
<pre> | <pre> | ||
# ifconfig eth0 0.0.0.0 down | # ifconfig eth0 0.0.0.0 down | ||
Riga 81: | Riga 75: | ||
</pre> | </pre> | ||
Questo per poter lavorare su un sistema "incontaminato" da configurazioni o settaggi precedenti. | Questo per poter lavorare su un sistema "incontaminato" da configurazioni o settaggi precedenti. | ||
Fatto questo, passeremo alla modifica del file <code>/etc/network/interfaces</code> (il "gestore" delle interfacce di rete su sistemi Debian-based): | |||
<pre> | <pre> | ||
# ethernet settings | # ethernet settings | ||
Riga 115: | Riga 108: | ||
</pre> | </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. | Le due schede di rete, come già detto, staranno su due network differenti: 192.168.1.0/24 e 10.0.0.0/24.<br/> | ||
La scheda eth0 avrà come gateway e server | La scheda <code>eth0</code> avrà come gateway e server DNS il router ADSL (192.168.1.1) che farà "transitare" i pacchetti da e verso internet.<br/> | ||
Le righe | Le righe: | ||
<pre> | <pre> | ||
pre-up modprobe -r ath_pci | pre-up modprobe -r ath_pci | ||
Riga 124: | Riga 117: | ||
</pre> | </pre> | ||
setteranno la scheda wireless in modalità Master.<br /> | setteranno la scheda wireless in modalità Master.<br /> | ||
Le prime due sono necessarie per il tipo di chip utilizzato | 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 /> | ||
È evidente che questo è un settaggio "particolare" relativo ad un chip ben preciso e che lo stesso non si applicherà ad altri modelli di schede. | |||
Il passo successivo consiste nell'impostare il sistema | Il passo successivo consiste nell'impostare il sistema affinchÉ i pacchetti possano passare da un'interfaccia di rete all'altra.<br /> | ||
<br /> | Questo può essere ottenuto in due modi: con il bridging o con il routing. | ||
Questo può essere ottenuto in due modi: con il bridging o con il routing. | |||
== Modalità bridge == | == Modalità bridge == | ||
Per utilizzare il bridging abbiamo bisogno di installare le bridge-utils e di riconfigurare le interfacce di rete: | Per utilizzare il bridging abbiamo bisogno di installare le <code>bridge-utils</code> e di riconfigurare le interfacce di rete: | ||
<pre># apt-get install bridge-utils | <pre># apt-get install bridge-utils | ||
Riga 141: | Riga 133: | ||
# ifconfig eth0 0.0.0.0 up</pre> | # ifconfig eth0 0.0.0.0 up</pre> | ||
Creiamo una interfaccia di bridge chiamata br0 e aggiungiamo a questa le due interfacce di rete: | Creiamo una interfaccia di bridge chiamata <code>br0</code> e aggiungiamo a questa le due interfacce di rete: | ||
<pre># brctl addbr br0 | <pre># brctl addbr br0 | ||
# brctl addif br0 ath0 | # brctl addif br0 ath0 | ||
Riga 148: | Riga 139: | ||
infine accertiamoci che le impostazioni siano corrette: | infine accertiamoci che le impostazioni siano corrette: | ||
<pre># brctl show</pre> | <pre># brctl show</pre> | ||
e riavviamo hostapd: | e riavviamo <code>hostapd</code>: | ||
<pre># /etc/init.d/hostapd restart</pre> | <pre># /etc/init.d/hostapd restart</pre> | ||
Da notare che, per poter funzionare correttamente in modalità bridging, l'ip-forwarding deve essere impostato: | 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> | <pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre> | ||
Riga 160: | Riga 149: | ||
Se mai questa esistesse, bisognerà rimuoverla: | Se mai questa esistesse, bisognerà rimuoverla: | ||
<pre># iptables -t nat -D POSTROUTING 1</pre> | <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 | Una volta configurata, sarà possibile attivare l'interfaccia di bridge virtuale <code>br0</code> come una normale scheda di rete fisica sia assegnando un ip statico che dinamico via DHCP.<br /> | ||
ip statico che dinamico via | |||
A questo punto si potranno collegare | A questo punto si potranno collegare PC, hub, switch, etc. alla porta ethernet o a quella Wi-Fi e la "comunicazione" sarà garantita.<br/> | ||
Queste periferiche saranno in grado di "vedersi" e comunicare l'una con l'altra senza che ci sia bisogno di impostare gli indirizzi | 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 <code>iptables</code>. | ||
differenti e senza dover impostare le regole di | |||
== Modalità router == | == Modalità router == | ||
Per il routing, invece, è necessario avere a che fare con le regole di netfilter per mezzo di iptables. | Per il routing, invece, è necessario avere a che fare con le regole di <code>netfilter</code> per mezzo di <code>iptables</code>. | ||
Autorizziamo l'interfaccia ath0 ad accettare nuove connessioni e istruiamola a forwardarle verso l'esterno attraverso l'interfaccia eth0: | Autorizziamo l'interfaccia <code>ath0</code> ad accettare nuove connessioni e istruiamola a forwardarle verso l'esterno attraverso l'interfaccia <code>eth0</code>: | ||
<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 | <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 | ||
Riga 180: | Riga 166: | ||
# iptables -A FORWARD -m state --state RELATED -j ACCEPT</pre> | # iptables -A FORWARD -m state --state RELATED -j ACCEPT</pre> | ||
Impostiamo il NAT per "mascherare" gli | Impostiamo il NAT per "mascherare" gli IP della LAN: | ||
<pre># iptables -t nat -A POSTROUTING -j MASQUERADE</pre> | <pre># iptables -t nat -A POSTROUTING -j MASQUERADE</pre> | ||
in questo modo i pacchetti in uscita sembreranno tutti provenienti dalla | 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: | Infine attiviamo il packet forwarding a livello kernel: | ||
Riga 190: | Riga 176: | ||
<pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre> | <pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre> | ||
Questo setup farà passare il traffico dalla | 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 | 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 | 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' | Le impostazioni di <code>iptables</code> e dell'IP_forward fin qui definite si perderebbero in caso di halt o reboot del sistema. È quindi consigliabile inserirle in uno [[script]] apposito da avviarsi in automatico al boot dell'AP. | ||
inserirle in uno script apposito da avviarsi in automatico al boot dell' | |||
Si sottolinea che queste regole '''non''' si occupano di "proteggere" la rete, ma solo di permettere il routing dei pacchetti. | Si sottolinea che queste regole '''non''' si occupano di "proteggere" la rete, ma solo di permettere il routing dei pacchetti. È 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''. | 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''. | ||
== Crittografia == | == 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 <code>hostapd</code>: | |||
<pre># apt-get install hostapd</pre> | <pre># apt-get install hostapd</pre> | ||
Riga 228: | Riga 213: | ||
* ''channel'' = canale sul quale si vuole trasmettere. | * ''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). | * ''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 | * ''auth_algs'' = algoritmo di autenticazione (0 open system, 1 WEP, 3 entrambi). | ||
* ''ignore_broadcast_ssid'' = 0 disabilitato, 1 | * ''ignore_broadcast_ssid'' = 0 disabilitato, 1 SSID vuoto, 2 clear SSID. | ||
* ''wpa'' = 1 solo | * ''wpa'' = 1 solo WPA, 2 WPA2, 3 entrambi. | ||
Nello stesso file, inoltre, nel caso avessimo deciso di adottare la modalità di bridging, dovremmo decommentare la riga | Nello stesso file, inoltre, nel caso avessimo deciso di adottare la modalità di bridging, dovremmo decommentare la riga: | ||
<pre>bridge=br0</pre> | <pre>bridge=br0</pre> | ||
Decommentiamo inoltre, nel file ''/etc/default/hostapd'', la riga | Decommentiamo inoltre, nel file ''/etc/default/hostapd'', la riga: | ||
<pre>RUN_DAEMON="yes"</pre> | <pre>RUN_DAEMON="yes"</pre> | ||
A questo punto possiamo riavviare la rete e di conseguenza, per come abbiamo impostato il file <code>/etc/network/interfaces</code>, anche il demone <code>hostapd</code>: | |||
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> | <pre># /etc/init.d/networking start</pre> | ||
e provare l'autenticazione da un qualsiasi | e provare l'autenticazione da un qualsiasi PC munito di scheda Wi-Fi: | ||
<pre># wpa_passphrase debian-ap wdebianizzati > /etc/wpa_supplicant/wpa_supplicant-custom.conf | <pre># wpa_passphrase debian-ap wdebianizzati > /etc/wpa_supplicant/wpa_supplicant-custom.conf | ||
Riga 253: | Riga 236: | ||
ovviamente a ''wlan0'' sostituiremo il nome dell'interfaccia wireless del client. | ovviamente a ''wlan0'' sostituiremo il nome dell'interfaccia wireless del client. | ||
Se non vengono restituiti errori, l'autenticazione è avvenuta con successo. | Se non vengono restituiti errori, l'autenticazione è avvenuta con successo. | ||
== Filtri sulle connessioni == | == Filtri sulle connessioni == | ||
Riga 259: | Riga 242: | ||
Per rendere più sicuro l'accesso all'acces point imposteremo un filtro sui mac address autorizzati a connettersi (previa autenticazione).<br /> | 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 /> | 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. | 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. | ||
Questo risultato può essere raggiunto percorrendo diverse strade (come d'altronde succede in ambiente | Questo risultato può essere raggiunto percorrendo diverse strade (come d'altronde succede in ambiente Linux): si possono impostare apposite regole di <code>iptables</code>, ci si può avvalere nuovamente di iwpriv, etc.<br /> | ||
In questo caso si è scelto di far svolgere il lavoro al demone hostapd | In questo caso si è scelto di far svolgere il lavoro al demone <code>hostapd</code>. | ||
Creiamo due nuovi | Creiamo due nuovi file: | ||
<pre> | <pre> | ||
# touch /etc/hostapd/hostapd.accept | # touch /etc/hostapd/hostapd.accept | ||
Riga 270: | Riga 253: | ||
</pre> | </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 /> | 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: | Editiamo il file <code>/etc/hostapd/hostapd.conf</code> e sostituiamo alla riga: | ||
<pre> | <pre> | ||
macaddr_acl=0 | macaddr_acl=0 | ||
Riga 282: | Riga 265: | ||
accept_mac_file=/etc/hostapd/hostapd.accept | accept_mac_file=/etc/hostapd/hostapd.accept | ||
</pre> | </pre> | ||
In questo modo solo i mac address presenti in /etc/hostapd/hostapd.accept saranno autorizzati ad agganciarsi alla | In questo modo solo i mac address presenti in <code>/etc/hostapd/hostapd.accept</code> saranno autorizzati ad agganciarsi alla LAN. | ||
Ad esempio: | Ad esempio: | ||
<pre> | <pre> | ||
Riga 290: | Riga 273: | ||
# /etc/init.d/hostapd restart | # /etc/init.d/hostapd restart | ||
</pre> | </pre> | ||
farà in modo che questi siano gli unici due mac address autorizzati ad entrare in rete. | farà in modo che questi siano gli unici due mac address autorizzati ad entrare in rete. | ||
== Server | == Server DHCP == | ||
Come | 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 /> | ||
interrogheranno per cercare autenticazione ed ottenere indirizzo | |||
Installato il server: | Installato il server: | ||
Riga 304: | Riga 286: | ||
<pre>INTERFACES=ath0</pre> | <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 | 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> | <pre> | ||
Riga 315: | Riga 296: | ||
}</pre> | }</pre> | ||
In questo esempio come server di dominio sono stati impostati gli indirizzi di | In questo esempio come server di dominio sono stati impostati gli indirizzi di <code>OpenDNS</code>, ma ovviamente possono essere sostituiti da quelli di eventuali DNS interni alla LAN. | ||
Per applicare le modifiche, come sempre, dovremo riavviare il servizio: | Per applicare le modifiche, come sempre, dovremo riavviare il servizio: | ||
<pre># /etc/init.d/dhcp3-server restart</pre> | <pre># /etc/init.d/dhcp3-server restart</pre> | ||
== Considerazioni finali == | == Considerazioni finali == | ||
La configurazione del nostro Debian-Ap è terminata. | La configurazione del nostro Debian-Ap è terminata.<br/> | ||
Abbiamo visto come sia relativamente semplice, disponendo di hardware comune (anche datato) e di scheda | Abbiamo visto come sia relativamente semplice, disponendo di hardware comune (anche datato) e di scheda Wi-Fi compatibile con la modalità master, realizzare "via software" un access point in piena regola da poter utilizzare nella nostra LAN.<br /> | ||
È 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 /> | 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! | Il tutto, ovviamente, sempre e solo con strumenti liberi ed in pieno spirito open source! | ||
Happy surfing & happy Debian! | Happy surfing & happy Debian! | ||
{{Autori | |||
[[Utente:Pmate|pmate]] | |Autore=[[Utente:Pmate|pmate]] | ||
}} | |||
Versione attuale delle 11:40, 25 giu 2016
Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica. Per le versioni correnti di Debian si raccomandano le seguenti guide: |
Questa guida è basata sui seguenti articoli presenti all'interno del numero 1 dell'e-zine di Debianizzati.org : |
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.
La domanda potrebbe essere: perché realizzare un access point software invece di acquistarne uno bello e pronto?
Risposta: e perchè no?
È 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.
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.
La connettività è garantita da una scheda ethernet, da una scheda Wi-Fi 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+.
Purtroppo non tutte le schede wireless in commercio sono capaci di accettare connessioni ed autenticazioni così come richiede un access point.
Su sistemi GNU/Linux, ad oggi, solo pochi tipi di schede, ad esempio quelle gestite dai driver 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".
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.
Non è proponibile, in questo contesto, affrontare tutte le problematiche d'installazione e di configurazione delle varie tipologie di schede Wi-Fi e relativi driver disponibili.
Si assume quindi che il sistema operativo sia stato installato e che la scheda sia stata riconosciuta e configurata correttamente.
Tutti i comandi relativi sono propri delle schede funzionanti con driver madwifi.
Per controllare se sul chip della scheda Wi-Fi di cui disponiamo è possibile settare il "Master mode" si può impartire il comando:
# wlanconfig ath0 create wlandev wifi0 wlanmode master
che, in assenza di errori segnalati in output, imposterà la scheda ath0
in modalità master.
Lo stato della scheda è comunque visualizzabile con:
# iwconfig ath0
Per riportare la scheda alla condizione di partenza:
# wlanconfig ath0 destroy
(a volte, dopo quest'ultimo comando, la scheda "sparisce" dal PC; per riportarla in funzione basterà ricaricare il modulo che la gestisce: ath_pci).
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 client che provano l'autenticazione e, nel caso di autenticazione avvenuta, di trasmettere i pacchetti alla seconda (eth0
) che li instraderà verso la rete esterna.
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 client connessi alla rete LAN.
La topologia della rete che si andrà a "prefigurare" risulterà così simile a questa:
Internet <----> [router] <----> (eth0=192.168.1.4)-Debian Ap-(athn0=10.0.0.1) <----> Lan
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".
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:
# apt-get install wireless-tools hostapd hostap-utils bridge-utils dhcp3-server
dove:
- wireless-tools: set di comandi per la gestione del Wi-Fi.
- 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 client autenticati.
Configurazione delle interfacce di rete
Prima di iniziare le varie configurazioni è consigliabile "spegnere" le schede di rete e azzerare eventuali regole di iptables
:
# ifconfig eth0 0.0.0.0 down # ifconfig ath0 0.0.0.0 down # /sbin/iptables -F # /sbin/iptables -X
Questo per poter lavorare su un sistema "incontaminato" da configurazioni o settaggi precedenti.
Fatto questo, passeremo alla modifica del file /etc/network/interfaces
(il "gestore" delle interfacce di rete su sistemi Debian-based):
# 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
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.
Le righe:
pre-up modprobe -r ath_pci pre-up modprobe ath_pci autocreate=none pre-up wlanconfig ath create wlandev wifi0 wlanmode ap
setteranno la scheda wireless in modalità Master.
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.
È evidente che questo è un settaggio "particolare" relativo ad un chip ben preciso e che lo stesso non si applicherà ad altri modelli di schede.
Il passo successivo consiste nell'impostare il sistema affinchÉ i pacchetti possano passare da un'interfaccia di rete all'altra.
Questo può essere ottenuto in due modi: con il bridging o con il routing.
Modalità bridge
Per utilizzare il bridging abbiamo bisogno di installare le bridge-utils
e di riconfigurare le interfacce di rete:
# 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
Creiamo una interfaccia di bridge chiamata br0
e aggiungiamo a questa le due interfacce di rete:
# brctl addbr br0 # brctl addif br0 ath0 # brctl addif br0 eth0
infine accertiamoci che le impostazioni siano corrette:
# brctl show
e riavviamo hostapd
:
# /etc/init.d/hostapd restart
Da notare che, per poter funzionare correttamente in modalità bridging, l'ip-forwarding deve essere impostato:
# echo 1 > /proc/sys/net/ipv4/ip_forward
ma non dovrà esistere nessuna regola di masquerading di iptables.
Se mai questa esistesse, bisognerà rimuoverla:
# iptables -t nat -D POSTROUTING 1
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.
A questo punto si potranno collegare PC, hub, switch, etc. alla porta ethernet o a quella Wi-Fi 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
.
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
:
# 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
Impostiamo il NAT per "mascherare" gli IP della LAN:
# iptables -t nat -A POSTROUTING -j MASQUERADE
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:
# echo 1 > /proc/sys/net/ipv4/ip_forward
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.
Le impostazioni di iptables
e dell'IP_forward fin qui definite si perderebbero in caso di halt o reboot del sistema. È quindi consigliabile inserirle in uno script apposito da avviarsi in automatico al boot dell'AP.
Si sottolinea che queste regole non si occupano di "proteggere" la rete, ma solo di permettere il routing dei pacchetti. È utile, quindi, integrarle con regole adatte al "filtraggio" vero e proprio, per garantire la sicurezza all'interno del proprio network.
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.
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
:
# apt-get install hostapd
e intervenire modificando alcune righe del suo file di configurazione /etc/hostapd/hostapd.conf:
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
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.
Nello stesso file, inoltre, nel caso avessimo deciso di adottare la modalità di bridging, dovremmo decommentare la riga:
bridge=br0
Decommentiamo inoltre, nel file /etc/default/hostapd, la riga:
RUN_DAEMON="yes"
A questo punto possiamo riavviare la rete e di conseguenza, per come abbiamo impostato il file /etc/network/interfaces
, anche il demone hostapd
:
# /etc/init.d/networking start
e provare l'autenticazione da un qualsiasi PC munito di scheda Wi-Fi:
# 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 &
ovviamente a wlan0 sostituiremo il nome dell'interfaccia wireless del client.
Se non vengono restituiti errori, l'autenticazione è avvenuta con successo.
Filtri sulle connessioni
Per rendere più sicuro l'accesso all'acces point imposteremo un filtro sui mac address autorizzati a connettersi (previa autenticazione).
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.
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.
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.
In questo caso si è scelto di far svolgere il lavoro al demone hostapd
.
Creiamo due nuovi file:
# touch /etc/hostapd/hostapd.accept # touch /etc/hostapd/hostapd.deny
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".
Editiamo il file /etc/hostapd/hostapd.conf
e sostituiamo alla riga:
macaddr_acl=0
la riga:
macaddr_acl=1
e inseriamo la riga (o decommentiamola se presente):
accept_mac_file=/etc/hostapd/hostapd.accept
In questo modo solo i mac address presenti in /etc/hostapd/hostapd.accept
saranno autorizzati ad agganciarsi alla LAN.
Ad esempio:
# 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
farà in modo che questi siano gli unici due mac address autorizzati ad entrare in rete.
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.
Installato il server:
# apt-get install dhcp3-server
interverremo sul file /etc/init.d/dhcpd impostando al suo interno:
INTERFACES=ath0
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:
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; }
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:
# /etc/init.d/dhcp3-server restart
Considerazioni finali
La configurazione del nostro Debian-Ap è terminata.
Abbiamo visto come sia relativamente semplice, disponendo di hardware comune (anche datato) e di scheda Wi-Fi compatibile con la modalità master, realizzare "via software" un access point in piena regola da poter utilizzare nella nostra LAN.
È chiaro che il tutto si presta a personalizzazioni e miglioramenti infiniti.
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...
Il tutto, ovviamente, sempre e solo con strumenti liberi ed in pieno spirito open source!
Happy surfing & happy Debian!
Guida scritta da: pmate | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |