Odpowiedź: oprócz ciekawych min studentów, którzy chcą skorzystać z sieci otrzymamy dość fajny i prosty sposób na zarządzanie oraz filtrowanie dostępu do sieci bezprzewodowej. Jak to zrobić? "To proste" :)
Potrzebujemy trochę hardware'u:

  • Telefon z kartą sim umożliwiającą odbieranie smsów oraz połączenia bluetooth (w roli głównej: nokia 6020) oraz ładowarką
  • USB Bluetooth dongle (w tej roli: mały, niebieski prztynks :P)
  • Router bezprzewodowy (albo do neostrady, albo do dsl, albo do czegokolwiek, aby miał switch oraz wifi) (w tej roli: 3Com OfficeConnect 3CRWDR101A-75)
  • Komputer z GNU/Linux na pokładzie (w roli tytułowej: HP Coś tam stojące na biurku w pracy i nie robiące hałasu z dwoma kartami sieciowymi - jedną zintegrowaną a drugą PCI Realtek)

Trochę software'u:

  • IPtables
  • Squid3
  • Dansguardian
  • Serwer dhcp3
  • Gnokii

Teraz jak to wszystko połączyć?

Bluetooth, nokia i komputer

W pierwszej części zajmiemy się połączeniem bluetooth telefonu do komputera. Po włączeniu w telefonie połączeń bluetooth i podłączeniu przytnksa do usb w komputerze instalujemy obsługę bluetooth poeceniem:

sith-mobile:/home/cox# aptitude update && aptitude install bluetooth

sprawdzamy, czy dmesg pokazuje nam informacje dotyczące prztynksa:

sith-mobile:/home/cox# dmesg
9717.144082 usb 4-1: new full speed USB device using uhci_hcd and address 2
9727.310265 usb 4-1: configuration #1 chosen from 1 choice
9727.364789 Bluetooth: Generic Bluetooth USB driver ver 0.5
9727.364931 usbcore: registered new interface driver btusb

jeżeli mamy coś takiego na końcu, to gites. Wykryty jest prztynks i załadowane moduły. Teraz sprawdzamy, czy jest dobrze rozpoznane urządzenie:

sith-mobile:/home/cox# hciconfig
hci0: Type: USB
BD Address: 11:11:11:11:11:11 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN
RX bytes:1131 acl:0 sco:0 events:48 errors:0
TX bytes:452 acl:0 sco:0 commands:48 errors:0

Urządzenie wykryte, sterowniki załadowane. Super! teraz zobaczmy, czy widzimy telefon w ogóle:

sith-mobile:/home/cox# hcitool scan
Scanning ...
00:17:B0:59:17:58 Uoi

Bomba! widać i telefon, który nazwałem Uoi - Uczelniany Ośrodek Informatyczny (szpan, nie? :P )
Stwórzmy połączenie z telefonem:

sith-mobile:/home/cox# /usr/share/doc/bluez/examples/simple-agent hci0 00:17:B0:59:17:58
RequestPinCode (/org/bluez/4114/hci0/dev_00_17_B0_59_17_58)
Enter PIN Code: 1234
Release
New device (/org/bluez/4114/hci0/dev_00_17_B0_59_17_58)

W miejse Enter PIN wpisujemy dowolne cyferki, które będą pinem połączenia. W telefonie wpisujemy te same cyfry jak zapyta o pin połączenia. Ustawmy jeszcze w telefonie aby nie pytał czy akceptować to połączenie (to już zależne od telefonu) I tyle. Mamy połączenie z telefonem. Teraz zaczniemy je wykorzystywać dzięki gnokii.

Gnokii - instalacja, konfiguracja, konfrontacja :)

Instalujemy program gnokii:

sith-mobile:~# aptitude update && aptitude install gnokii

Na początek bierzemy się za pliczek konfiguracyjny. Tutaj pewna przestroga i luka w zabezpieczeniach - oczywiście można ją ominąć, ale ja nie zadawałem sobie trudu. Pliczek konfiguracyjny, oraz całe gnokii będzie potem uruchamiane z konta root automatycznie. To jest ta luka bezpieczeństwa. A teraz konfiguracja:

sith-work:~# nano -w /root/.gnokiirc

global
# This is default phone config section
port = 00:17:B0:59:17:58
model = 6021
initlength = default
connection = bluetooth
use_locking = no
serial_baudrate = 19200
serial_write_usleep = 10000
smsc_timeout = 20

i sprawdzamy, czy możemy odbierać z telefonu smsy:

sith-work:~# gnokii --getsms IN 1 end -F /root/skrypty/sms
GNOKII wersja 0.6.27
Zapisuję do /root/skrypty/sms
blablabla
:
:
:
blablabla

Więc działa? to teraz drogie dzieci, jako pracę domową macie zastanowienie się jak odebrać I (tutaj jest duże i) wykasować smsy ze skrzynki odbiorczej w telefonie. Teraz wiadomości pozostają. A do czego to możemy wykorzystać? Mając połączenie z komputerem, mając telefon i kartę sim, możemy odczytywać smsy, a w nich np. zawarte adresy mac kart sieciowych ludków, którzy chcą się do netu dostać. Fajne, prawda? Ale jak to zrobić?

Wyrażenia wuglarne (c) Antoni

Do pracy zaprzęgniemy iptables oraz dhcp. Aby studenci / użyszkodnicy mogli dostać się do wifi, muszą wysłać sms w treści którego będzie adres mac w postaci xx:xx:xx:xx:xx:xx. Skrypcik, który zaraz napiszemy, sam zajmie się firewallem, dhcp i innymi pierdółkami nam potrzebnymi. Oto on:

sith-work:~# less /root/skrypty/firewall

#!/bin/bash
FIREWALL=/etc/init.d/firewall
echo "" > $FIREWALL
cat /root/skrypty/firewall_baza_start >> $FIREWALL
gnokii --getsms IN 1 end -F /root/skrypty/sms

echo "" > /root/skrypty/mac.list
echo "# Configuration files firewall" >> /root/skrypty/mac.list
echo "# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" >> /root/skrypty/mac.list
echo "# | MAC |" >> /root/skrypty/mac.list
echo "# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" >> /root/skrypty/mac.list
egrep -o '([:xdigit:]{2}(:|-)){5}[:xdigit:]{2}' /root/skrypty/sms >> /root/skrypty/mac.list

grep -E -v "^#|^$" /root/skrypty/mac.list | while read mac ;
do
echo "iptables -A FORWARD -m mac --mac-source $mac -j ACCEPT " >> $FIREWALL
done
cat /root/skrypty/firewall_baza_end >> $FIREWALL
chmod a+x $FIREWALL
$FIREWALL

Skrypcik ten uzupełni nam regułki firewalla o dostęp do internetu komputerów z mac adresami z sms-a. Jedyne co potrzebujemy, aby wszystko działało ślicznie i w ogóle, to pliki firewall_baza_start i firewall_baza_end. Ale nie udostępnię tego tak po prostu wpisując tutaj kod, nad którym siedziałem sporo czasu. Jeżeli ktoś potrzebuje tego i nie potrafi sobie sam poradzić - piszcie, postaram się pomóc. Ale radzę wysilić mózgownice i samemu postarać się coś stworzyć. Tak czy tak, to w zasadzie tyle. Jeżeli chodzi o dhcp, to nie musimy utrudniać i tworzyć wyuzdanej konfiguracji. Prosta konfiguracja wystarczy. To mój plik konfiguracyjny (filtrowanie i tak jest po macadresach, a nie po adresach IP):

sith-work:~# less /etc/dhcp3/dhcpd.conf
option domain-name "UOI_104";
option domain-name-servers 10.0.255.10;
option subnet-mask 255.255.255.0;
default-lease-time 600;
subnet 10.104.104.0 netmask 255.255.255.0 {
range 10.104.104.5 10.104.104.250;
option broadcast-address 10.104.104.255;
option routers 10.104.104.254;
}

I od strony software'owej połaczenie z siecią już mamy. Potrzebujemy teraz część hardware'ową :) Ale to jest jeszcze łatwiejsze.

Konfguracja AP / routera oraz połączenia

Jeżeli mamy AP to sprawa jest bardzo prosta - Access Point to urządzenie, które "przedłuża" nam sieć fizyczną ethernet w sieć bezprzewodową wifi. Więc nic nie trzeba robić, tylko wpiąć w kartę sieciową w komputerze (tą od sieci wewnętrznej). W przypadku routerków też nie ma problemu. Routery które są do neostrady to tak naprawdę trzy urządzenia: modem adsl / dsl, switch oraz AP w jednej obudowie. My wykorzystujemy tylko dwie części - moduł odpowiedzialny za switchowanie oraz wifi. Konfigurujemy sobie połączenie wifi, zabezpieczająć WPA/WPA2 (WAŻNE). Switch podpinamy do komputera, port oznaczony WAN nas nie interesuje - urządzenie nie będzie robić za router. I tyle. Do zarządzania nadajmy adres naszemu ruterkowi poza zakresem dhcp, najlepiej w ogóle z innej sieci. Po uwierzytelnieniu powinniśmy dostać adres z dhcp z naszego serwerka. Dodając filtrowanie - mamy prawie wszystko za sobą. Czyli w skrócie:

  • Konfigurujemy AP/Router wg. naszego uznania - część odpowiedzialną za routing/połączenie z WAN zostawiamy pustą - nie wykorzystujemy tego
  • Podłączamy AP bezpośrednio do komputera, a router poprzez switch wbudowny do komputera
  • Konfigurujemy WPA/WPA2 i łączymy się z siecią bezprzewodową
  • Adres AP/Routerka dajemy z innej podsieci - tak dla bezpieczeństwa

Po poprawnym podłączeniu wszystkiego i uwierzytelnieniu w sieci WLAN powinniśmy uzyskać adres IP z puli, którą zdefiniowaliśmy w dhcpd.conf.
Bomba! część z smsami i udostępnieniem mamy zasobą. Przerwa na piwo i 50 pompek :) Teraz część z filtrowaniem.

Squid3, Dansguardian i regułki iptables - "spoko loko, luz i spontan - nie takie rzeczy się robiło" :)

Ta część jest w zasadzie najłatwiesza. Instalujemy dansguardiana (filtr treści) oraz squid'a (serwer proxy):

sith-work:~# aptitude update && aptitude install squid3 dansguardian

Plik konfiguracyjny dansguardiana i squida dodaję w postaci załączników. Regułki iptables potrzebne do przekierowania ruchu całego na serer proxy squid (transparentne proxy - miła rzecz :) ):

iptables -t nat -A PREROUTING -i $WEWNETRZNY -p tcp --dport 80 -j DNAT --to 10.104.104.254:8080
iptables -t nat -A PREROUTING -i $ZEWNETRZNY -p tcp --dport 80 -j REDIRECT --to-port 3128

WEWNETRZNY i ZEWNETRZNY to interfejsy eth0 i eth1 wewnatrz lanu i internetowy, 10.104.104.254:8080 to adres ip interfejsu wewnetrznego wraz z portem, na ktorym nasluchuje squid, naotmiast port 3128 to port, na ktorym jest filtrowany ruch z zewnatrz przez dansguardiana. Prawda, że proste? Też tak myślę. W dansguardianie nic nie trzeba w zasadzie zmieniać (oprócz dodania # na prawie początku) natomiast do squida dodajemy acl uoi104. Tyle. Sprawdzamy wchodząc na jakąś stronę z treścią nieodpowiednią. W pliku /etc/dansguardian/lists/xxx znajdują się listy stron zablokowanych/odblokowanych oraz rozszerzeń zablokowanych/odblokowanych.