Hostap
Kategoria: Artykuły, etykiety: internet, sieć
Dodany: 2010-09-25 13:52
(zmodyfikowany: 2010-09-25 14:04)
Przez: paoolo
Wyświetleń: 17118
Instalacja Hostapd
Wymagane do użytkowania karty WiFi jako AccessPoint'a to posiadanie karty wspierającej tego typu tryb pracy. Popularne są karty oparte na chipset'cie Atheros, które w systemi Linux widoczne są jako ath5 lub ath9k (moduły). Do użytkowania trybu AP w karcie wymagane jest jeszcze posiadanie jądra z odpowienimi modułami, tj. nl80211. Obecne, testingowe jądra Debian'a najprawdopodobniej je posiadają. W przypadku ich braku, należy manualnie dokonać kompilacji jądra.
Początkowo, wykonujemy co następuje:
aptitude install hostap
Kolejno edytujemy (tworzymy, jak brak) plik /etc/hostapd.conf
# Ustawienie interfejsu
interface=wlan0
# Wymagany do obsługi AP moduł. Możliwe są inne,
# jak prism czy madwifi (patrz: example z /usr/share/docs/..)
driver=nl80211
# Komunikaty daemona.
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
# Tryb pracy. Testowane tylko na b i g.
# W przypadku n na ath9k wysypywał się.
hw_mode=g
# Kanał od 0 do 13 (bodajże).
channel=6
# Tryb pracy zabezpieczeń
wpa=1
# Łatwiejszy sposób, możliwe też jest shared key kilkunasto-znakowy.
# Dla passphrase wymagane minimum 8 znaków w tym litery oraz cyfry
wpa_passphrase=magicKey0
# Nazwa widoczna dla innych
ssid=AP
Ażeby sprawdzić poprawność konfiguracji, należy jako root wpisać w konsoli
hostapd -dddd /etc/hostapd.conf
Po chwili ujrzymy kolejno
student:/home/paoolo# hostapd -dddd /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
ctrl_interface_group=0
Opening raw packet socket for ifindex -1215631258
BSS count 1, BSSID mask ff:ff:ff:ff:ff:ff (0 bits)
SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf
nl80211: Added 802.11b mode based on 802.11g information
Allowed channel: mode=1 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=11 freq=2462 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=11 freq=2462 MHz max_tx_power=20 dBm
RATE[0] rate=10 flags=0x2
RATE[1] rate=20 flags=0x6
RATE[2] rate=55 flags=0x4
RATE[3] rate=110 flags=0x4
Passive scanning not supported
Mode: IEEE 802.11b Channel: 2 Frequency: 2417 MHz
Flushing old station entries
Deauthenticate all stations
Using interface wlan0 with hwaddr 00:02:e3:48:43:01 and ssid 'AP'
SSID - hexdump_ascii(len=2):
41 50 AP
PSK (ASCII passphrase) - hexdump_ascii(len=10):
30 30 30 30 30 30 61 62 61 63 000000abac
PSK (from passphrase) - hexdump(len=32): db 0a 93 2d ba 34 ce 46 f4 99 c5 fa a4 fb 38 4f 93 a1 99 37 80 3d 8d bf 30 5f b2 7b 23 7f dc 2a
WPA: group state machine entering state GTK_INIT (VLAN-ID 0)
GMK - hexdump(len=32): [REMOVED]
GTK - hexdump(len=32): [REMOVED]
WPA: group state machine entering state SETKEYSDONE (VLAN-ID 0)
wlan0: Setup of interface done.
MGMT (TX callback) ACK
STA c4:17:fe:46:8c:f5 sent probe request for our SSID
MGMT (TX callback) ACK
mgmt::proberesp cb
^CSignal 2 received - terminating
Flushing old station entries
Deauthenticate all stations
Lub coś podobnego. Komunikaty MGMT i STA świadczą o fakcie próby uzyskania SSID naszego Access Point'a. W przypadku autoryzacji do AP, będą poprzedzone komunikatami WPA, PSK itd.
W razie komunikatów o błędzie konfiguracji (linijka i co stanowi problem) należy dokładnie przestudiować ów komunikat, bo np. w przypadku linijki driver=*** prawdopodobnie będzie to z przyczyny braku odpowiednich modułów w jądrze (co spotykane jest w kernelach dystrybucyjnych poniżej 2.6.32, obecne testingowe posiadają go)
Jeśli jednak hostapd komunikuje o totalnym braku prawidłowego pliku konfiguracyjnego, to prawdopodobnie z powodu formatowania linijek (każda zaczynająca się od # to komentarz, musi być na pierwszym miejscu, zaś jeśli to linijka konfiguracji to na pierwszym miejscu linijki musi zaczynać się ona - hostapd nie pomija białych znaków w takim przypadku, wszelkie tab'y, pojedyncze spacje na początku linijki odpowiedzialnej za konfigurację powodują błąd w parsowaniu pliku.
Kolejno w /etc/init.d/hostapd, linijka wskazująca na config daemona
DAEMON_CONF=/etc/hostapd.conf
Teoretycznie poprawność startu z /etc/init.d/hostapd można wykonać już teraz poprzez
/etc/init.d/hostapd start
W listingu ifconfig powinno być oprócz wlan0 także i mon.wlan0. Zaś iwconfig wlan0 określi jako Master, zaś mon.wlan0 jako Monitor co widać poniżej
wlan0 IEEE 802.11bg Mode:Master Frequency:2.417 GHz Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
mon.wlan0 IEEE 802.11bg Mode:Monitor Frequency:2.417 GHz Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
Prymitywny skrypcik do obsługi forwardu, DHCP i hostap przy pomocy jednego polecenia (plik: /etc/init.d/ap, po zapisaniu dać chmod +x /etc/init.d/ap)
#!/bin/bash
### BEGIN INIT INFO
# Provides: ap
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Setting Hostapd
### END INIT INFO
[ -x /usr/sbin/hostapd ] || exit 0
. /lib/lsb/init-functions
start() {
# /etc/init.d/wicd stop
ifup wlan0
/etc/init.d/isc-dhcp-server start
/etc/init.d/iptables forward $1 wlan0 192.168.10.0/24
/etc/init.d/hostapd start
}
stop() {
/etc/init.d/hostapd stop
/etc/init.d/iptables disforward
/etc/init.d/isc-dhcp-server stop
ifdown wlan0
# /etc/init.d/wicd start
}
case "$1" in
start)
if [ $# -eq 2 ]; then
echo "Starting AP... "
start $2
echo "done."
fi
;;
stop)
echo "Stopping AP... "
stop
echo "done."
;;
*)
echo "Usage {start|stop}"
exit 0
;;
esac
Konfiguracja interfejsu wlan0 w /etc/network/interfaces
iface wlan0 inet static
address 192.168.10.1
netmask 255.255.255.0
Konfiguracja dhcp w /etc/dhcp/dhcpd.conf
option domain-name-servers 217.98.63.164;
[...]
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.2 192.168.10.32;
option routers 192.168.10.1;
}
Prymitywny skrypcik do obsługi iptables (na sztywno pewne sprawy są, plik: /etc/init.d/iptables, po zapisaniu dać chmod +x /etc/init.d/iptables)
#!/bin/sh
### BEGIN INIT INFO
# Provides: iptable
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Setting Iptables
### END INIT INFO
[ -x /sbin/iptables ] || exit 0
. /lib/lsb/init-functions
clean() {
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -t mangle -F
iptables -t mangle -X
echo -n "clean up rules.. "
}
disable() {
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo -n "disable default control.. "
}
enable() {
iptables -P INPUT DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
echo -n "enable default control.. "
}
related() {
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
echo -n "allow for established, related.. "
}
start() {
# czyszczenie po kims
clean
# ustawienie domyslnej polityki
enable
# utrzymanie polaczen nawiazanych
related
}
stop() {
# czyszczenie
clean
# wylaczenie firewall
disable
}
forward() {
# wlaczenie w kernelu forwardowania
echo 1 > /proc/sys/net/ipv4/ip_forward
echo -n "enabling forwarding.. "
# dostep do dhcp server
iptables -A INPUT -i wlan0 -p udp --dport 67 -j ACCEPT
echo -n "enable dhcp.. "
# udostepniaie internetu w sieci lokalnej
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -i $1 -o $2 -j ACCEPT
iptables -A FORWARD -i $2 -o $1 -j ACCEPT
echo -n "crossing iptables from $1 to $2.. "
iptables -t nat -A POSTROUTING -s $3 -j MASQUERADE
iptables -A FORWARD -s $3 -j ACCEPT
iptables -A INPUT -s $3 -j ACCEPT
echo -n "setting NAT for $3.. "
}
disforward() {
# wylaczenie forward
echo 0 > /proc/sys/net/ipv4/ip_forward
# czyszczenie
clean
# przywrocenie
related
}
case "$1" in
enable)
echo -n "Enable firewall... "
enable
echo "done."
;;
disable)
echo -n "Disable firewall... "
disable
echo "done."
;;
start)
echo -n "Starting iptables... "
start
echo "done."
;;
stop)
echo -n "Stoping iptables... "
stop
echo "done."
;;
restart)
echo -n "Restarting iptables... "
stop
start
echo "done."
;;
forward)
if [ $# -eq 1 ]; then
echo "No param. Abort!"
else
echo -n "Enabling forwarding... "
forward $2 $3 $4
echo "done."
fi
;;
disforward)
echo -n "Disable forwarding... "
disforward
echo "done."
;;
*)
echo "Usage $0 {enable|disable|start|stop|restart|forward}"
exit 0
;;
esac
Aby /etc/init.d/iptables sam startował (do pracy firewall'a) należy jeszcze
update-rc.d iptables default
Zaś aby /etc/init.d/hostapd nie startował wraz z systemem (a wtedy gdy to koniecznie czyli wraz z poleceniem /etc/init.d/ap start) to
update-rc.d hostapd remove
Zaś /etc/init.d/ap startuje przy pomocy /etc/init.d/ap start iface, gdzie iface to interfejs na świat.