Bluetooth NAP How To

Transcript

Bluetooth NAP How To
Bluetooth NAP How To
Questo how to descrive le procedure da seguire nella configurazione del demone napd
(sviluppato dal mobilab group) che fornisce servizi di accesso alla rete fissa via interfaccia
bluetooth. In pratica il demone va eseguito sulle macchine fisse che si intende dotare di
potenzialità da Access Point bluetooth. Esso è necessario alla costruzione di canali PAN
per l’utilizzo di IP su L2CAP.
Più nel dettaglio, il demone utilizza bnep (bluetooth network encapsulation protocol):
all’atto della creazione di una connessione PAN il demone pan (distribuito con lo stack
BlueZ. Lo stack ufficiale bluetooth per linux) crea un interfaccia ad-hoc denominata bnepx
(alla x-ma connessione). Più connessioni implicano la creazione di più interfacce virtuali
bnepx. Al fine di consentire la comunicazione attraverso una sola interfaccia virtuale, in
modo da poter attivare i servizi di routing e nat, bisogna creare una nuova interfaccia
virtuale (pan0) e fonderla con le interfacce bnepx via via create. A differenza del demone
pan normalmente fornito da BlueZ, le funzionalità di fusione delle interfacce sono offerte
dal napd sfruttando le funzionalità offerte dal bridge control (802.1d), normalmente
presenti come moduli nelle distribuzioni linux. I pacchetti IP possono dunque raggiungere
la rete fissa attraverso una normale interfaccia eth0, collegata con pan0 tramite natting. La
figura sotto espone quanto detto.
I requisiti e le note di configurazione di seguito riportati sono relativi ai nostri test effettuati
sul demone.
Device 0
bnep0
bridging
pan0
bnepx
natting
eth0
bridging
Access Point with NAP features
Device x
1. Requisiti di sistema:
•
•
•
Distribuzione mandrake Linux 9.1 con Kernel 2.4.19 o superiori;
Dongle USB bluetooth;
Interfaccia Ethernet (802.3 IEEE)
Created by Neevia Document Converter trial version
Fixed
network
2. Requisiti software:
•
Librerie BlueZ con supporto PAN e sdp (scaricare da bluez.sf.net ed installare i
package bluetooth libs, le utils, sdp e pan). I pakage vanno decompattati con il
comando:
# tar zxvf <nome package>
e installati con la solita sequenza:
# ./configure
# make
# install
IMPORTANTE: aggiungere i seguenti alias al file /etc/modules.conf
alias
alias
alias
alias
•
bt-proto-0
bt-proto-2
bt-proto-3
bt-proto-4
l2cap
sco
rfcomm
bnep
bridge control: per poter installare il modulo di bridging, occorre riconfigurare il
kernel. Nella directory contenente i sorgenti del kernel linux, digitare:
# make menuconfig
quindi selezionare “networking options” -> “802.1d Ethernet Bridging” come parte
del kernel o modulo (<M>). Lanciare successivamente i seguenti comandi:
# make modules
# make modules_install
infine è necessario installare un package di controllo denominato “bridge utils”
(reperibile presso http://bridge.sf.net).
NOTA IMPORTANTE: Dopo l’installazione, è necessario controllare dove è stato
installato il programma brctl, con il commando:
# whereis brctl
qualora non fosse localizzato in /usr/local/bin, bisogna correggere
appropriatamente la macro BRCTL negli script napd, makebridge e bridge-attach
forniti con il nostro codice nella directory ./scripts.
•
DHCP Daemon: Se si vuole che il NAP assegni automaticamente gli indirizzi IP ai
dispositivi, è necessario installare un demone DHCP reperibile presso:
ftp://ftp.isc.org/isc/dhcp. Per l’installazione, seguire la procedura descritta
precedentemente per le librerie BlueZ. Al termine dell’installazione è necessario
creare un file di configurazione (di nome dhcpd.conf in /etc) per i parametri del dhcp
server. Un esempio di file di configuraiozne è riportato di seguito:
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.254;
option domain-name-servers 192.168.0.1, 192.168.0.2;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.100;
range 192.168.0.150 192.168.0.200;
}
Inoltre bisogna creare un file vuoto di nome dhcpd.leases nella directory
/var/state/dhcp/. Un file vuoto può essere creato utilizzando il comando:
# touch <nome file>
Infine il dhcp daemon può essere lanciato in verbose mode e in ascolto
sull’interfaccia pan0 con il comando:
# dhcpd –d –f pan0
•
Supporto al IP forwarding e masquerading (per consentire il routing dei pacchetti
IP, rendendo il AP un NAT): per i kernel 2.4.x bisogna controllare la presenza dei
moduli necessari al IP masquerating e forwarding:
o nella directory /proc/sys/net/ipv4 devono essere presenti i seguenti
moduli: ip_dynaddr, ip_forward.
o Controllare (con /sbin/lsmod) se sono presenti i moduli ip_masquerade,
ip_conntrack e ip_tables_names. Qualora non fossero presenti, ma vi sono
in /proc/net/, allora IPMASQ è compilato staticamente ed è possibile
utilizzarlo direttamente. Altrimenti, il kernel usa IPMASQ via moduli.
Controllare dunque la presenza di moduli quali ip_conntrack.o,
ip_conntrack_ftp.o, ip_conntrack_irc.o, ip_nat_ftp.o, ip_nat_irc.o, ip_tables.o,
ipt_MASQUERADE.o, iptable_nat.o, iptable_mangle.o, iptable_filter.o, con il
commando
ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
se tali moduli sono presenti, allora IPMASQ è utilizzabile via caricamento
dinamico dei moduli.
Oltre ai moduli suddetti, è necessario installare il programma "iptables" versione
1.2.4 o superiore reperibile da http://www.netfilter.org/. Per la configurazione del
IPMASQ, vedere la sezione “Configurazione del IP masquerating”.
3. Configurazione del IP masquerating
Per il caricamento dei moduli e il setup del IPMASQ, conviene creare uno script file
come quello mostrato di seguito:
#!/bin/sh
#
echo -e "\n\nLoading simple ipmasq rules"
# Location of the iptables and kernel module programs
#
#
If your Linux distribution came with a copy of iptables,
#
most likely all the programs will be located in /sbin. If
#
you manually compiled iptables, the default location will
#
be in /usr/local/sbin
#
# ** Please use the "whereis iptables" command to figure out
# ** where your copy is and change the path below to reflect
# ** your setup
#
#IPTABLES=/sbin/iptables
IPTABLES=/usr/local/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe
# Setting the EXTERNAL and INTERNAL interfaces for the network: in our
# case, eth0 is the external interface and pan0 is the internal virtual
# interface created via brctl
#
EXTIF="eth0"
INTIF="pan0"
echo "
External Interface: $EXTIF"
echo "
Internal Interface: $INTIF"
echo -en "
loading modules: "
# Need to verify that all modules have all required dependencies
echo " - Verifying that all kernel modules are ok"
$DEPMOD -a
#Load the main body of the IPTABLES module - "iptable"
#
echo -en "ip_tables, "
$MODPROBE ip_tables
#Load the stateful connection tracking framework - "ip_conntrack"
#
echo -en "ip_conntrack, "
$MODPROBE ip_conntrack
#Load the FTP tracking mechanism for full FTP tracking
#
echo -en "ip_conntrack_ftp, "
$MODPROBE ip_conntrack_ftp
#Load the IRC tracking mechanism for full IRC tracking
#
echo -en "ip_conntrack_irc, "
$MODPROBE ip_conntrack_irc
#Load the general IPTABLES NAT code - "iptable_nat"
# - Loaded automatically when MASQ functionality is turned on
#
# - Loaded manually to clean up kernel auto-loading timing issues
#
echo -en "iptable_nat, "
$MODPROBE iptable_nat
#Loads the FTP NAT functionality into the core IPTABLES code
#
echo -en "ip_nat_ftp, "
$MODPROBE ip_nat_ftp
echo -e "
Done loading modules.\n"
#CRITICAL: Enable IP forwarding since it is disabled by default since
#
echo "
Enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward
# Enable dynamic IP users:
#
echo "
Enabling DynamicAddr.."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Enable simple IP forwarding and Masquerading
#
echo "
Clearing any existing rules and setting default policy.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
echo "FWD: Allow all connections OUT and only existing ones IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state \
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG
echo "
Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
echo -e "Configuration done.\n"
E’ possibile caricare automaticamente lo script all’avvio del sistema salvandolo col
nome rc.firewall nella directory /etc/rc.d/. Lo script rc.local provvederà al
caricamento del nostro script.
4. Compilazione ed esecuzione del NAP daemon
Una volta estratti I file sorgenti e gli script, bisogna compilare il codice lanciando il
comando:
# make
nella directory contenente il makefile. Il comando make creerà un file eseguibile
(napd) nella directory corrente (e anche dei file .o, che possono essere cancellati
con il comando make clean). Il demone può essere eseguito in diversi modi (con
privilegi root):
# ./napd
or:
(lancia il napd come daemon)
# ./napd -n
(lancia il napd come un processo normale)
# ./napd -v
(napd come un processo normale e in verbose mode)
or:
NOTA: Prima di eseguire il napd, bisogna attivare l’interfaccia Bluetooth e il service
discovery protocol daemon (sdpd), con i comandi (con privilegi root):
# hciconfig hci0 up
# sdpd
Bisogna anche eseguire lo script makebridge fornito con i nostri sorgenti nella
directory scripts:
# ./scripts/makebridge
questo script usa le finzionalità del bridge control per creare l’interfaccia pan0.
Inoltre, bisogna copiare a mano lo script bridge-attach (fornito nella directory
scripts) nella directory /etc/bluetooth. Bisogna anche verificare se tale file è
eseguibile in modalità root... in pratica, si devono eseguire i comandi:
# cp ./scripts/bridge-attach /etc/bluetooth/.
# chmod 744 /etc/bluetooth/bridge-attach
Sulle richieste entranti, il demone creerà le interface bnepx e le fonderà con la pan0
attraverso lo script bridge-attach.
5. Installazione del napd
Il napd può anche essere installato, in modo da poter essere eseguito ovunque si
stia lavorando e fornendo un’interfaccia più semplice per l’utente finale, rispetto
all’uso diretto del file eseguibile come visto nella sezione precedente. Una volta
compilato il codice (con il comando make), il demone può essere installato con:
# make install
L’installazione sposta il file eseguibile nella directory /opt (la directory può essere
cambiata editando il makefile e cambiando la macro EXECUTABLE), e copia uno
script napd nella directory /sbin. Tale script è un wrapper sull’eseguibile che offre
una semplice interfaccia per usare il demone. Il demone può essere attivato da
qualsiasi sia la directory corrente (e in root mode) con il comando:
# napd start
e può essere fermato allo stesso modo con napd stop.
Per monitorare il comportamento del demone, è possible visualizzare il file di log del
sistema, ad esempio con il comando:
# tail /var/log/messages
NOTA: dopo che il napd è stato installato e prima di eseguirlo, è necessario attivare
solo l’interfaccia Bluetooth con hciconfig hci0 up. Non c’è bisogno di lanciare
sdpd, o lo script makebridge, né di spostare il file bridge-attach.
Infine, il demone può essere disinstallato con:
# make uninstall