Wi-Fi w Gnu/Linux AP-wpa2, router-wep (chip atheros)
Karty na tym chipsecie są bardzo uniwersalne i konfigurowalne można na nich postawić Access-point przełączyć w tryb monitoringu obsługują (co pewnie jest w standardzie WPA). Do obsługi tych kart mamy obecnie do wyboru sterownik ath5k (wchodzi w skład jądra Linux) oraz alternatywny sterownik madwifi (lepszy gdy chcemy coś pokombinować z kartą).
Instalacja niezbędnych pakietów
Obecnie aby postawić AP należy skorzystać ze sterowników Madwifi. Kod źródłowy sterowników możemy pobrać ze stronki http://snapshots.madwifi-projekt.org/.
Aby skompilować moduł jądra należy przede wszystkim posiadać kompilator języka C. Dla systemu Fedora dokonamy tego poleceniem
| Kod: |
| yum install gcc gcc-c++ |
Konieczne jest również posiadanie kodów źródłowych oraz plików nagłówkowych aktualnie posiadanego jądra Linux. Sprawę powinna załatwić instalacja pakietu kernel-devel
| Kod: |
| yum install kernel-devel |
Następnym krokiem jest wydanie dwóch magicznych poleceń które skompilują i zainstalują sterownik
| Kod: |
| make |
| make install |
Teraz należy sobie postawić pytanie czy potrzebujemy aby nasz AP korzystał w WPA?? Jeśli tak kolejnym krokiem będzie kompilacja demona hostapd. Kody źródłowe można pobrać z http://hostap.epitest.fi/releases (najnowszą wersją w czasie pisania tej stronki był plik hostapd-0.6.9.tar.gz)Kolejne czynności jakie należy zrobić to:
- Instalacja Hostapd w punktach
- Zmienić nazwę pliku /hostapd-0.6.9/hostapd/dconfig na /hostapd-0.6.9/hostapd/.config
- Zedytować powstały plik i w odpowiednim miejscu wskazać ścieżkę do źródeł madwifi. Wycinek z mojego pliku wygląda tak:
Kod: # Driver interface for madwifi driver CONFIG_DRIVER_MADWIFI=y CFLAGS += -I /home/tygrysek/Pobrane/madwifi-trunk-r4031-20090529 - Do prawidłowego skompilowania się demona w systemie Fedora11 brakło pakietu OpenSSL-devel (należy odinstalować)
Kod: yum install openssl-devel - Ostatnie kroki to kompilacja i instalacja. polecenia te wydajemy będąc w katalogu /hostapd-0.6.9/hostapd/
Kod: make make install
Jak zmusić System aby korzystał z madwifi
Tutaj do wykonania mamy dwa kroki. Po pierwsze musimy sprawić aby nie ładowane były moduł jądra ath5k. Czynność tą najłatwiej wykonać dopisując moduł do pliku blacklist w katalogu /etc/modprobe.d
| Kod: |
| blacklist ath5k |
A następnie spróbujemy poinformować system aby załadował sterownik madwifi i ustawił go w trybie ap. W tym celu należy stworzyć w katalogu /etc/modprobe.d plik o przykładowej nazwie ath_pci.conf z następującym wpisem:
| Kod: |
| options ath_pci autocreate=ap |
Konfiguracja AP
Aby porady były uniwersalne (działały na każdej dystrybucji) najlepiej napisać własny skrypt. Większość dystrybucji ma coś takiego jak rc.local Pusty skrypt dla użytkowników. Przed rozpoczęciem dalszej konfiguracji należy sobie zadać pytanie czy chcemy z naszego ulubionego Gnu/Linux zrobić ruter czy tylko AP, czy wystarczy nam WEP?? a może szyfrowanie WPA??, czy potrzebujemy firewalla?? od odpowiedzi na te pytania zależeć będzie dalsza konfiguracja. Obecnie korzystam z szyfrowania WPA i udostępnianie neta realizuję poprzez mostek sieciowy (laptopy widoczne są w tej samej sieci co komputer główny). Skrypt ustawiający sieć wygląda u mnie tak:
| rc.hostapd |
#!/bin/sh
# Zmienne
HOSTAPD=/usr/local/bin/hostapd
HOSTAPD_CONF=/etc/hostapd.conf
# Skrypt
hostapd_start() {
if [ $HOSTAPD ]; then
echo "Start demona HOSTAPD: $HOSTAPD"
/sbin/ifconfig wlan0 up
/sbin/ifconfig eth0 up
/sbin/iwpriv wlan0 bgscan 0
/sbin/iwpriv wlan0 mode 3
/sbin/iwconfig wlan0 channel 11
/sbin/iwconfig wlan0 rate 54M
/sbin/ifconfig wlan0 0.0.0.0
/sbin/ifconfig eth0 0.0.0.0
/usr/sbin/brctl addbr br0
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 wlan0
/sbin/dhclient br0
$HOSTAPD -B $HOSTAPD_CONF
echo "HOSTAPD funkcjonuje"
fi
}
hostapd_stop() {
if [ $HOSTAPD ]; then
echo "Zatrzymywanie demona HOSTAPD: killall hostapd"
killall hostapd
echo "Demon zabity"
fi
}
case "$1" in
'start')
hostapd_start
;;
'stop')
hostapd_stop
;;
*)
echo -e "Usage: $0 {start|stop}"
;;
esac
|
Widzimy, że na początku skryptu tworzony jest mostek sieciowy (z dwóch interfejsów eth0 i wlan0 zostanie utworzony dodatkowy interfejs br0) do tego celu potrzebne są narzędzia w postaci programu brctl. Program instalujemy
| Kod: |
| yum install bridge-utils |
Demon hostapd posiada jeszcze własny plik konfiguracyjny o którym nie należy zapominać. W pliku tym znajdują się takie dane jak nazwa sieci czy klucz WPA. Przykładowy plik konfiguracyjny demona hostapd wyglądać może tak.
| hostapd.conf |
interface=wlan0 bridge=br0 driver=madwifi dump_file=/tmp/hostapd.dump ctrl_interface=/var/run/hostapd ctrl_interface_group=0 ssid=SLACKWAREAP #macaddr_acl=1 #accept_mac_file=/etc/hostapd/accept eapol_key_index_workaround=0 eap_server=0 auth_algs=3 wpa=2 wpa_passphrase=mojehaslo wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP wpa_group_rekey=600 wpa_gmk_rekey=86400 rsn_preauth=1 wpa_strict_rekey=1 |
Ostatnim elementem aby uruchomić demona będzie dodanie wpisu do rc.local (skrypt ten w większości dystrybucji Gnu-Linux znajduje się w katalogu /etc/rc.d)
| rc.local |
| /etc/rc.d/rc.hostapd start |
Konfiguracja rutera
Czasami nie możemy sobie pozwolić lub nie chcemy robić mostka sieciowego. Innym pomysłem jest ukrycie naszej sieci za natem. Rozwiązanie to ma swoje zalety np. utrudniony dostęp do sieci z internetu (na zewnątrz nasza sieć jest wówczas widoczna jako jeden komputer). Mój skrypt do ustawienia sieci (jeszcze wtedy korzystałem z szyfrowania WEP) wyglądał jak poniżej
| rc.firewall |
#!/bin/bash
ROUTER="yes"
NAT="dynamic"
INTERFACES="lo eth0 ath0 wifi0"
if [ "$1" = "start" ]
then
echo " konfiguracja karty..."
ifconfig ath0 down
iwconfig ath0 essid SlackRouter key 45:6C:68:69:4D:68:72:65:6B:29:26:00:88
iwconfig ath0 channel 11
ifconfig ath0 192.168.0.1 up
iwpriv ath0 bgscan 0
echo "Startowanie firewall-a..."
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable public access to certain services
iptables -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --update --second 21 --hitcount 3 -j DROP
iptables -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport http -j ACCEPT
# Explicitly disable ECN
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
# Disable spoofing on all interfaces
for x in ${INTERFACES}
do
echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
done
if [ "$ROUTER" = "yes" ]
then
# We're a router of some kind, enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "wlaczony ruter na interfejsie ath0"
iptables -A FORWARD -i ath0 -s 192.168.0.13 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.13 -o eth0 -j MASQUERADE
fi
elif [ "$1" = "stop" ]
then
echo "Stopping firewall..."
iptables -F INPUT
iptables -P INPUT ACCEPT
# Turn off NAT/masquerading, if any
iptables -t nat -F POSTROUTING
# echo "zamykanie interfejsu ..."
/usr/local/bin/wlanconfig ath0 destroy
fi
|
Powyższy skrypt to skrypt prostego firewalla opartego o IpTables. Zawiera on takie elementy jak blokowanie ruchu przychodzącego na komputer pozwala tylko na połączenia ssh (zabezpieczenie przed atakiem brutalforce - po 3 nieudanych logowaniach ban na kilka sekund )oraz wypuszcza stronę www. Skrypt pozwala jeszcze na połączenie ze światem zewnętrznym przez radiówkę komputerowi o adresie 192.168.0.13 (komputer ten będzie schowany za natem)