Praktikum Protokolle Praktikum Protokolle Thema Kontrollierte WLAN Zugänge Dimitri Langlitz [email protected] Matrikelnummer: 5008546 Norbert Otten [email protected] Matrikelnummer: 5008436 Index 1. 2. 3. 4. 5. 6. Aufgabenbeschreibung ................................ Projektziel ..................................................... Funktionsmodell ........................................... Projektaufbau ............................................... 4.1 Linksys WLAN Router ......................... 4.2 Chillispot ................................................ 4.3 Apache .................................................... 4.4 MySQL ................................................... 4.5 Freeradius .............................................. 4.6 Asterisk ................................................... 4.7 Perl Skript .............................................. 4.8 Projekt Plan ........................................... Anhang .......................................................... 5.1 Dialup Admin ......................................... 5.2 Protokolle ............................................... 5.2.1 Radius ...................................... 5.2.2 Session Initiation Protocol ...... Literatur ........................................................ 1 2 2 3 5 5 7 9 10 12 15 18 20 21 21 22 22 24 25 Praktikum Protokolle 1. Aufgabenbeschreibung Ein WLAN-Zugang soll nur individuell kontrolliert stattfinden können. Das WLAN wird unverschlüsselt betrieben. Nach Einbindung in das WLAN soll dem Client-System zunächst nur der Zugang zu einer HTTP-Anmeldeseite ermöglicht werden. Erst nach erfolgreicher Anmeldung wird der Clientrechner für den allgemeinen Netzwerkbetrieb freigegeben. Die Zuteilung der Anmeldedaten erfolgt im Endbetrieb durch ein SMS-System. Der Anwender wählt eine vorgegebene Telefonnummer an, gibt seine Handynummer als Zusatzinformation ein und erhält die Anmeldedaten per SMS. Die Anmeldedaten sind individuell und nur für eine Anmeldung gültig. In einer Datenbank sollen die Verbindungsdaten hinterlegt werden. Folgende Informationen sollen zugänglich sein: - Online-Zeit eines bestimmten Anwenders (die Abmeldung vom Netzwerk muss erkannt werden können, ohne dass sich der Anwender explizit abmeldet). - Zuordnung der Verbindungen ins Internet zu einem bestimmten Anwender (Handy-Nummer). Stellen Sie zunächst ein komplettes Funktionsmodell auf. Prüfen Sie, welche Informationen Sie benötigen und wie Sie an diese Informationen gelangen können. Prüfen Sie, mit welchen Mitteln Sie einzelne Funktionen realisieren können. Vor einer Implementation ist eine Abstimmung mit mir notwendig. Das Projekt ist mit einem Bericht und einer Kurzpräsentation abzuschließen. 2. Projektziel Ein System, dass einem Benutzer einen Internetzugang über einen WLAN Zugriffspunkt zur Verfügung stellt, wird auch als Hot Spot bezeichnet. Ein Ziel des Projekts ist der Aufbau eines solchen Systems. Die Anmeldedaten der Benutzer müssen in der Regel manuell bearbeitet werden. Ein weiteres Ziel des Projekts besteht darin, die Bearbeitung dieser Daten zu automatisieren. Ein Benutzereintrag soll automatisch, nach bestimmten Kriterien, erstellt oder gelöscht werden. Ein Kriterium für das Löschen eines Benutzers könnte die verbrauchte Onlinezeit oder das überschreiten einer bestimmten Download Menge sein. Die Installation der verwendeten Komponenten wird in der Dokumentation nicht beschrieben. 2 Praktikum Protokolle 3. Funktionsmodell Einen grundlegenden Aufbau stellt das Funktionsmodell dar. Der Zugang zum WLANNetz ist als Open System Authentication realisiert. Das bedeutet jeder Client kann sich ohne zusätzlichen Schlüssel am WLAN-Netz anmelden. Einen Zugang zum Internet erhält der Client allerdings erst nach erfolgreicher Anmeldung auf einer speziellen Webseite. Nach Eingabe der korrekten Anmeldedaten kann der Benutzer auf das Internet zugreifen. Um die Anmeldedaten zu erhalten, ruft der Benutzer einen Call Server an und gibt über die Telefontastatur seine Handynummer ein. Nach erfolgreicher Eingabe wird eine SMS mit den Anmeldedaten an den User gesendet. Client Internetzugriffspunkt (Open WLAN) WLAN Router Server HTTP Radius SQL NAS Gateway Internet Client Anmeldedaten PSTN Call Server SMS SQL Abbildung 1 : Projektplan 3 Praktikum Protokolle Für den Projektaufbau werden ausschließlich Open-Source Komponenten verwendet. In der Dokumentation wird die Konfiguration der einzelnen Komponenten beschrieben. 1. Linksys WRT54GS WLAN Router Mit diesem Router stellen wir einen WLAN Zugangspunkt zur Verfügung. 2. Chillispot Diese Software dient als NAS (Network Access Server). Ein NAS sendet alle Authentifizierungsanfragen und Accounting-Informationen an einen Radius Server weiter. 3. Apache Der Webserver Apache wird für eine Login Seite verwendet. Auf dieser Seite können die Benutzern ihre Anmeldedaten für den Hot Spot eingeben. 4. MySQL Das Datenbanksystem MySQL benötigen wir für die Anmeldedaten. Dort werden Benutzername, Passwort, Onlinezeit und weitere Accounting-Informationen gespeichert. 5. Freeradius Den Radius Server realisieren wir mit der Software Freeradius. Hierbei handelt es sich um einen zentralen Authentifizierungs-Server. Die Authentifizierung der Benutzer kann über ein Datenbanksystem, verschiedene Verzeichnisdienste oder über Konfigurationsdateien erfolgen. 6. Asterisk Asterisk ist eine Telefonanlagensoftware die uns eine flexible Anbindung an das öffentliche Telefonnetz (PSTN) bietet. Die Anbindung kann über Analog-, ISDN– und VoIP-Telefonie realisiert werden. Ein Leistungsmerkmal ist das integrierte IVR (Interactive Voice Response) das wir für die Annahme der Anrufer verwenden. Das IVR System ist ein automatisiertes Dialogsystem, es spielt dem Anrufer bestimmte Ansagen vor und reagiert auf Telefoneingaben. 7. Dialup Admin Der Dialup Admin ist ein PHP Web Interface für die Bearbeitung der Radius Benutzer. Für unser Projekt ist er nicht notwendig, bietet aber hilfreiche Funktionen zur Administration. Der Dialup Admin ist im Paket des Freeradius enthalten und wird im Anhang beschrieben. PSTN Apache Chillispot Freeradius Asterisk MySQL Internet Abbildung 2 : Projekt Komponenten 4 Praktikum Protokolle 4. Projektaufbau 4.1 Linksys WLAN Router Für den Linksys WRT54GS gibt es eine GNU/Linux Distribution die eine Hot Spot Funktionalität bietet. Als Teil des Betriebssystem ist die Open Source Software Chillispot bereits implementiert. Nach dem Flashen des Routers sind die Einstellungen über eine grafische Oberfläche zugänglich. Die folgenden Abbildungen zeigen, welche Änderungen für unser Projekt vorgenommen wurden. Die genaue Beschreibung der Distribution befindet sich auf der Internetseite http://www.dd-wrt.com/wiki. Der DHCP Server wird an dieser Stelle deaktiviert. Die IP Adressvergabe übernimmt der Chillispot. Abbildung 3 : Konfiguration der Netzwerkeinstellungen 5 Praktikum Protokolle Linksys Router 192.168.1.0 // Im Projekt nicht verwendet. Freeradius 192.168.0.64 Gateway Internet Chillispot 192.168.0.9 192.168.0.66 Abbildung 4 : Netzwerkübersicht Die Radiusfunktion wird an dieser Stelle deaktiviert. Die Kommunikation mit dem Radius Server übernimmt der Chillispot. Abbildung 5 : Linksys Radiusfunktion An dieser Stelle wird der Security Mode deaktiviert damit der Client freien Zugang zum WLAN-Netz hat. Abbildung 6 : Linksys Open Authentication 6 Praktikum Protokolle 4.2 Chillispot Die Software Chillispot dient als Network Access Server (NAS). Ein NAS nimmt die Authentifizierungsanfragen vom Benutzer entgegen und leitet sie an den eingetragenen Radius Server weiter. Der Radius Server informiert den NAS, welche Attribute er für den Benutzer vorliegen hat. Im Anhang befindet sich ein detaillierter Protokollablauf. hotspotlogin.cgi Abbildung 7 : Chillispot Konfiguration Radius Server : Die IP Adresse vom Radius Server. DNS IP : Die IP Adresse vom Internet Gateway. Redirect URL : URL der Login Seite für die Eingabe der Anmeldedaten. Zu dieser URL werden alle Clientanfragen umgeleitet (hotspotlogin.cgi). Shared Key : Über diesen geheimen Schlüssel authentifiziert sich der Chillispot am Freeradius. Der Key muss auf dem Freeradius Server in der Datei clients.conf eingetragen werden. UAM Secret : Mit diesem Passwort hat Chillispot den Zugang zur Login Seite für die Benutzeranmeldung. Die Login Seite ist ein CGI und hat den Namen hotspotlogin.cgi. In der Datei wird das UAM Secret eingetragen. UAM Allowed : Hier können Adressen eingetragen werden, die für das WLAN Netz frei zugänglich sind. Damit die Benutzer sich anmelden können ist die Login Seite freigegeben. Additional O. : In dem Eingabefenster können Parameter angegeben werden, die Chillispot beim Start ausführt. 7 Praktikum Protokolle Bevor es zum nächsten Schritt geht wird geprüft ob der Chillispot funktionstüchtig ist. Hierzu kann man eine Telnet Verbindung zum Router aufbauen und sich die ProzessTabelle mit dem Befehl ps anzeigen lassen. Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'. DD-WRT v23 SP2 std (c) 2006 NewMedia-NET GmbH Release: 09/15/06 (SVN revision: 3932) Linksys login: bla Password: ========================================================== ____ ___ __ ______ _____ ____ _____ | _ \| _ \ \ \ / / _ \_ _| __ _|___ \|___ / || | || ||____\ \ /\ / /| |_) || | \ \ / / __) | |_ \ ||_| ||_||_____\ V V / | _ < | | \ V / / __/ ___) | |___/|___/ \_/\_/ |_| \_\|_| \_/ |_____|____/ DD-WRT v23 SP2 http://www.dd-wrt.com ========================================================== DD-WRT VeryBusyBox v1.2.1 (2006.09.15-18:06+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. ~ # ps PID Uid 1 root 2 root 3 root 4 root 5 root 6 root 11 root 14 root 64 root 97 root 100 root 106 root 109 root 178 root 223 root 381 root 489 root 491 root VmSize Stat Command 384 S /sbin/init noinitrd SW [keventd] RWN [ksoftirqd_CPU0] SW [kswapd] SW [bdflush] SW [kupdated] SW [mtdblockd] 256 S /sbin/watchdog 304 S resetbutton 396 S /usr/sbin/telnetd 556 S httpd 324 S dnsmasq --conf-file /tmp/dnsmasq.conf 296 S /sbin/wland 340 S process_monitor 276 S /usr/sbin/cron 4828 S /usr/sbin/chilli -c /tmp/chilli.conf 528 S -sh 404 R ps Abbildung 8 : Chillispot auf dem Linksys Router Sollte der WLAN Router keine Hot Spot Funktion anbieten, kann Chillispot auch auf einem Linux Rechner betrieben werden. Die Konfigurationseinstellungen der Software befinden sich in der Datei chilli.conf. Weitere Information zum Chillispot gibt es auf der Internetseite http://www.chillispot.org/. Zusammenfassung Alle Verbindungsanfragen werden bis zur korrekten Authentifizierung vom Chillispot abgelehnt. Http Anfragen werden auf die hotspotlogin.cgi Seite umgeleitet. Die geheimen Schlüssel befinden sich in den Dateien clients.conf (Freeradius) und hotspotlogin.cgi (Apache). 8 Praktikum Protokolle 4.3 Apache Um den Benutzern eine Anmeldeseite zur Verfügung zu stellen wird ein HTTP Server benötigt. Wir haben uns für den Apache Web Server Version 2.2 entschieden und beschreiben in diesem Kapitel die Konfiguration. Nach der Installation von Apache wird die Datei hotspotlogin.cgi in das cgi-bin Verzeichnis kopiert und der Eintrag $uamsecret = angepasst (siehe Seite 6). cp /usr/share/doc/chillispot-1.0/hotspotlogin.cgi /Pfad zum/cgi-bin chmod 755 hotspotlogin.cgi Um eine verschlüsselte Verbindung vom Browser des Benutzers zum Apache zu realisieren, wird als erstes ein SSL Zertifikat benötigt. Der Befehl apache2-sslcertificate führt einige Abfragen durch und erstellt das Zertifikat apache.pem. Mit dem Befehl a2enmod ssl wird das SSL Modul für den Apache aktiviert. Als nächstes erfolgt die Verzeichniskonfiguration. cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl Die Datei ssl um folgende Einträge erweitern: NameVirtualHost *:443 <virtualhost *:443> ServerAdmin webmaster@localhost SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem ... ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </directory> ... </virtualhost> Zum Schluss wird in der Datei ports.conf der Eintrag Listen 443 hinzugefügt. Jetzt kann man einen Browser starten um die Einstellungen zu testen. => https://192.168.0.9/cgi-bin/hotspotlogin.cgi Abbildung 9 : SSL Zertifikat 9 Praktikum Protokolle 4.4 MySQL Für die Verwaltung der Benutzerdaten und der Accounting-Informationen verwenden wir das Datenbanksystem MySQL. Das Listing 1 zeigt die durchgeführten Konfigurationsschritte. # sudo mysql mysql> create database radius; mysql> grant all privileges on radius.* to 'user'@'localhost' identified by 'passwort'; mysql> flush privileges; Abbildung 10 : MySQL Datenbank für Freeradius Es wird eine Datenbank mit dem Name radius angelegt und der Benutzer user mit dem Passwort passwort definiert. Über diesen Account kann der Freeradius später auf die Datenbank zugreifen. Im Verzeichnis \freeradius-1.x.y\doc\examples befindet sich ein SQL Schema für die Benutzerdaten und das Accounting. Das Schema kann wie folgt in die Datenbank radius importiert werden. cat /freeradius/examples/mysql.sql | mysql -D radius -u user -p passwort Für die Accounting-Informationen benötigen wir noch vier zusätzliche Tabellen. Diese Tabellen befinden sich im sql Verzeichnis des Dialup Admin. > mysql -D radius -u user -p passwort < badusers.sql > mysql -D radius -u user -p passwort < mtotacct.sql > mysql -D radius -u user -p passwort < totacct.sql > mysql -D radius -u user -p passwort < userinfo.sql Abbildung 11 : MySQL Schema Die Datenbank radius sollte jetzt die dargestellten Tabellen besitzen. Ein Testuser kann mit diesem Befehl angelegt werden: > INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('Test', 'Password', 'passwort'); Abbildung 12 : MySQL Tabellen 10 Praktikum Protokolle Die Abbildungen auf dieser Seite zeigen die wichtigsten Tabellen der radius Datenbank. In der Tabelle radacct werden alle Accounting-Informationen gespeichert. Man findet hier unter anderem die Onlinezeit (AcctSessionTime) und die IP-Adresse des Benutzers (FramedIPAdress). Abbildung 13 : Die Tabelle radacct Die Anmeldedaten der Benutzer befinden sich in der Tabelle radcheck. Die Tabelle wird vom Freeradius zur Verifizierung der Anmeldedaten verwendet. Abbildung 14 : Die Tabelle radcheck In der Tabelle userinfo stehen zusätzliche Informationen zum Benutzer. Für die Authentifizierung ist die Tabelle nicht relevant. Abbildung 15 : Die Tabelle userinfo 11 Praktikum Protokolle 4.5 Freeradius Mit dem Chillispot, Apache und dem MySQL Datenbanksystem haben wir jetzt alle Komponenten zusammen die der Freeradius benötigt. Die Konfiguration der Freeradius Software wird in den Dateien clients.conf, sql.conf und radiusd.conf vorgenommen. WLAN Router Server Chillispot Apache MySQL 192.168.0.64 192.168.0.9 Freeradius Gateway 192.168.0.66 Internet Abbildung 16 : Netzwerkübersicht In der Datei clients.conf wird der Chillispot Zugang eingestellt. client 192.168.0.64 { secret = test shortname = linksys nastype = other } Abbildung 17 : Passwort Positionen Die folgende Änderungen werden in der Datei sql.conf vorgenommen. sql { # Database type # Current supported are: rlm_sql_mysql, rlm_sql_postgresql, # rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds driver = "rlm_sql_mysql" # Connect info server = "localhost" login = "user" password = "passwort" # Database table configuration radius_db = "radius" ... Abbildung 18 : SQL Einstellungen für Freeradius 1 12 Praktikum Protokolle Damit der Freeradius die Informationen für den Benutzer aus der SQL Datenbank nimmt, wird die Datei radiusd.conf angepasst. authorize { preprocess chap mschap # auth_log # digest suffix sql # file # eap # etc_smbpasswd # ldap } accounting { acct_unique detail # counter unix sql radutmp # sradutmp } session { sql } Abbildung 19 : SQL Einstellungen für Freeradius 2 Der Freeradius ist nun konfiguriert und kann mit freeradius –X gestartet werden. Meldet sich ein Benuzter am WLAN-Netz an und öffnet anschließend im Browser eine URL wird er auf die Login Seite umgeleitet. Nach Eingabe der Anmeldedaten sendet der Chillispot eine Authentifizierungsanfrage an den Freeradius. Dieser überprüft ob der Username und das Passwort in der Datenbank radius vorhanden sind. Ist das der Fall wird der Zugang zum Internet freigegeben. Die Ausgabe auf der Konsole sieht dann wie in Abbildung 21 aus. Abbildung 20 : Login Seite rad_recv: Accounting-Request packet from host 192.168.0.64:1025, id=2, length=134 Acct-Status-Type = Start User-Name = "manuell" Calling-Station-Id = "00-40-F4-81-48-20" Called-Station-Id = "00-14-BF-3B-FD-57" NAS-Port-Type = Wireless-802.11 NAS-Port = 0 NAS-Port-Id = "00000000" NAS-IP-Address = 0.0.0.0 NAS-Identifier = "Linksys" Framed-IP-Address = 192.168.182.3 Acct-Session-Id = "4641192000000000" Processing the preacct section of radiusd.conf ... radius_xlat: 'manuell' rlm_sql (sql): sql_set_user escaped user --> 'manuell' radius_xlat: 'INSERT into radacct ... ... modcall[accounting]: module "radutmp" returns ok for request 4 Sending Accounting-Response of id 2 to 192.168.0.64 port 1025 Finished request 4 Going to the next request Cleaning up request 4 ID 2 with timestamp 4640fe07 Waking up in 6 seconds... --- Walking the entire request list --Abbildung 21 : Konsolenausgabe Freeradius 13 Praktikum Protokolle Die Abbildung 22 zeigt den Ablauf vom Anmelden des Benutzers bis zur Verbindung zum Internet. 1 WLAN Router Chillispot 2 Redirect SSL : hotspotlogin Apache 3 User OK ? Freeradius 5 User OK ! 4 User: manuell My Pass: ***** SQL 6 Gateway Internet Abbildung 22 : Authentifizierungsablauf 1 Der Benutzer stellte ein Funkverbindung zum WLAN Netz her und erhält eine IP-Adresse. 2 Der Internet-Browser des Benutzers wird auf die Anmeldeseite umgeleitet. 3 Nach Eingabe der Anmeldedaten sendet der Chillispot einen Access-Request an den Radius Server. 4 Der Radius Server überprüft die Anmeldedaten mit den Einträgen in der Datenbank. 5 Sind die eingegebenen Anmeldedaten korrekt sendet der Radius Server ein Access-Accept an den Chillispot. 6 Nun erhält der Benutzer die Freigabe für den Internet Datenverkehr. Zusammenfassung Der Apache Webserver stellt dem Benutzer die Login Seite zur Verfügung. Chillispot leitet die Authentifizierungsanfragen an den Radius Server weiter. Akzeptiert der Radius Server die Anmeldedaten erfolgt die Freigabe der Internetverbindung. 14 Praktikum Protokolle 4.6 Asterisk Mit den eingesetzten Komponenten Chillispot, Freeradius, Apache und MySQL ist der Hot Spot Funktionstüchtig. Das System hat aber noch einen Nachteil. Die Benutzerdaten müssen manuell in der Datenbank bearbeitet werden. Für die Aufgabenstellung benötigen wir einen Weg, über den die Anmeldedaten automatisch in die Datenbank gelangen. Um das zu realisieren sind mehrere Schritte notwendig. Als erstes benötigen wir eine Telefonnummer die der Benutzer anrufen kann um seine Handynummer einzugeben. Anschließend wird für den User ein Account mit beschränkter Lebensdauer generiert und in die Datenbank eingetragen. Zum Schluss werden die erstellten Anmeldedaten als SMS an die eingegebene Handynummer gesendet. Für die Anrufannahme verwenden wir ein IVR-System (Interactive Voice Response). Client Internetzugriffspunkt (Hot Spot) Das IVR-System wird durch die Software Asterisk realisiert. Das System nimmt den Anruf Anruf entgegen und spielt dem Anrufer IVR My einen Ansagetext vor. Die SQL Ansage fordert den Anrufer auf, die Handynummer einzugeben. Anschließend werden die Anmeldedaten generiert und in die Datenbank geschrieben sowie als SMS an den User SMS gesendet. Bevor Asterisk die Anrufe entgegennehmen kann, brauchen wir eine Schnittstelle zum PSTN (Public Switched Telephone Network). Damit das IVR-System H a r d w a r e Abbildung 23 : IVR unabhängig ist, verwenden wir VoIP (Voice over IP). Bei der Telekom ist es möglich, bei bestehendem DSL Anschluss, eine SIP (Session Initiation Protocol) Rufnummer zu registrieren. Der Telekom SIP-Proxy leitet dann alle ankommenden Anruf für die Rufnummer weiter. Um die Zieladresse anzugeben registriert sich Asterisk am SIPProxy und teilt ihm seine Adresse mit. Besitzt der Internetanschluss des Asterisk keine feste IP-Adresse kann DynDNS verwendet werden. Zum versenden der SMS Nachrichten wird ein externes Email-to-SMS Gateway benutzt. Die Konfiguration von Asterisk wird auf den nächsten Seiten beschrieben. 15 Praktikum Protokolle Für die VoIP Kommunikation wird SIP (Session Initiation Protocol) verwendet. Es stellt eine alternative zum H.323 dar und dient zur Signalisierung der Anrufe im IP-Netz. Zur Konfiguration von Asterisk und SIP werden die beiden Dateien sip.conf und extensions.conf verwendet. [general] bindport=5060 bindaddr=0.0.0.0 language=de maxexpirey=240 defaultexpirey=240 Localnet = 192.168.0.0/255.255.255.0 srvlookup = yes externip = www.xyz.com register => 032224324381:passwort: [email protected]/032224324381 [in] type=friend host=tel.t-online.de fromdomain=tel.t-online.de context=ankommend [032224324381] type=friend username=user secret=passwort host=tel.t-online.de fromuser=032224324381 fromdomain=tel.t-online.de canreinvite=no qualify=yes insecure=very nat=yes dtmfmode=info tos=0x18 realm=tel.t-online.de [ankommend] include => meine-telefone exten => 032224324381,1,Gosub(meine-telefone,1000,2) [meine-telefone] exten => 1000,1,Dial(SIP/1000,20) exten => 1000,2,Answer() exten => 1000,3,Background(haupt) exten => 1000,4,Background(bananaphone) exten => 1000,5,Goto(3) exten => 1,1,Goto(1001,2) exten => 2,1,Goto(2000,2) exten => i,1,Goto(1000,3) ;####################### exten => 1001,1,Answer() exten => 1001,2,Playback(steffi) exten => 1001,3,Read(NUMMER,,13,0) exten => 1001,4,SayDigits(${NUMMER}) exten => 1001,n,TrySystem(./einanderes.pl ${NUMMER}) exten => 1001,9,Hangup() ;######################## exten => 2001,1,Dial(SIP/2001) exten => 2002,1,Dial(SIP/2002) Abbildung 24 : Die Datei extensions.conf [2002] type=friend context=meine-telefone secret=1234 host=dynamic nat=yes Abbildung 25 : Die Datei sip.conf Abbildung 26 : SIP-Client Phoner Um die Funktion von Asterisk zu prüfen kann man eine beliebige VoIP-Client-Software verwenden und sich am Asterisk anmelden. Abbildung 26 zeigt die Einstellungen für die Software Phoner. Die Einstellungen für den Benutzer 2002 befinden sich in der Datei sip.conf. Hat sich der Benutzer angemeldet gelangt er durch wählen der Rufnummer 1000 in die Ansagefunktion. 16 Praktikum Protokolle Nach der Konfiguration kann Asterisk mit dem Befehl asterisk –vvvvvc gestartet werden. Die Parameter –vvvvvc sorgen für detaillierte Debug-Informationen. In der Datei sip.conf werden zu Beginn die Netzwerkeinstellungen für das SIP konfiguriert. Die SIP Rufnummer 032224324381 ist bei der Telekom für den Benutzer wg-emden registriert. Mit dem register Eintrag registriert sich Asterisk beim SIP Proxy der Telekom. Über den externip Eintrag wird dem Proxy mitgeteilt zu welchem Ziel er die ankommenden Anruf weiterleiten soll. [general] bindport=5060 bindaddr=0.0.0.0 language=de maxexpirey=240 defaultexpirey=240 Localnet = 192.168.0.0/255.255.255.0 srvlookup = yes externip = www.xyz.com register => 032224324381:passwort: [email protected]/032224324381 Abbildung 27 : Registrierungsdaten in sip.conf Ankommende Anruf werden nun vom SIP Proxy an den Asterisk weitergeleitet. Über die Information fromdomain wird der Anrufer über den context=ankommend in der Datei extensions.conf weiterverarbeitet. [in] type=friend host=tel.t-online.de fromdomain=tel.t-online.de context=ankommend [ankommend] include => meine-telefone exten => 032224324381,1,Gosub(meine-telefone,1000,2) 1 3 [meine-telefone] exten => 1000,1,Dial(SIP/1000,20) exten => 1000,2,Answer() exten => 1000,3,Background(haupt) exten => 1000,4,Background(bananaphone) exten => 1000,5,Goto(3) exten => 1,1,Goto(1001,2) exten => 2,1,Goto(2000,2) exten => i,1,Goto(1000,3) 2 exten => 1001,1,Answer() exten => 1001,2,Playback(steffi) exten => 1001,3,Read(NUMMER,,13,0) exten => 1001,4,SayDigits(${NUMMER}) exten => 1001,n,TrySystem(./einanderes.pl ${NUMMER}) exten => 1001,9,Hangup() Abbildung 28 : Ablauf für einen ankommenden Anruf 1 Der Anrufer springt zur Position 1000,2. Dort wird mit Answer() der Anruf entgegengenommen. Background(haupt) spielt eine Audiodatei ab, die dem Anrufer mitteilt: „Bitte drücken Sie die 1 um Ihre Anmeldedaten zu erhalten“. Anschließend wird eine Wartemusik abgespielt. 2 Erfolgt keine Benutzereingabe wird die Ansage wiederholt. 3 Durch Drücken der Taste 1 springt der Anrufer zur Position 1001,2. Dort erhält er die Ansage: „Bitte geben Sie Ihre Handynummer ein...“. Die Eingabe der Ziffern wird mit Read() gelesen und mit SayDigits() wiederholt. Anschließend wird das Skript einanderes.pl aufgerufen und die Handynummer übergeben. 17 Praktikum Protokolle 4.7 Perl Skript Das Skript ist eine Rohfassung und sollte vor der Verwendung noch mit einigen Sicherheitsabfragen ausgestattet werden. Im Wesentlichen teilt es sich in drei Bereiche. Der erste Bereich speichert die übergebene Handynummer in der Variablen $benutzer und generiert ein Passwort für die Anmeldedaten. #!/usr/bin/perl -w use Net::SMTP; use Net::POP3; use DBI; #use strict; $benutzer=$ARGV[0]; #Erstelle ein Passwort @chars = ("A" .. "Z", "a" .. "z", 0 .. 9 ); $passwort = join("", @chars[ map {rand @chars } (1 .. 8) ]); &datenbank &email ($benutzer,$passwort); ($benutzer,$passwort); Abbildung 29 : Skript Teil 1 Der zweite Teil stellt eine Verbindung mit der Datenbank her und erzeugt die Anmeldedaten in der entsprechenden Tabelle. Die Tabelle wird später bei der Authentifizierung durch den Freeradius verwendet. sub datenbank{ my $USER = "user"; my $PASS = "passwort"; #Erstelle User mit Passwort in Mysql @dsn = ("DBI:mysql:database=radius;" . "host=localhost", $USER, $PASS); $dbh = DBI->connect(@dsn, { PrintError => 0, AutoCommit => 1, } )or die $DBI::errstr; #Einfuegen der WLAN Benutzer in die Datenbank $dbh->do("INSERT INTO radcheck (username,attribute,op,value) VALUES ('$benutzer','User-Password',':=','$passwort')") or die $dbh->errstr(); $dbh->do("INSERT INTO userinfo (username,name) VALUES ('$benutzer','$benutzer') ") or die $dbh->errstr(); #Liste aller eingetragener Benutzer in der Datenbank $aref = $dbh->selectall_arrayref("SELECT * FROM userinfo") or die $dbh->errstr(); for $row (@$aref){ ($id, $username, $name) = @$row; printf "%02d %-10s %-10s\n", $id, $username, $name; } $dbh->disconnect(); } Abbildung 30 : Skript Teil 2 18 Praktikum Protokolle Der dritte Teil sendet die Anmeldedaten als SMS an den Benutzer. Zum versenden der SMS verwenden wir einen externen Provider. Mit entsprechender Hardware kann aber auch eine lokale Lösung realisiert werden. Die Anmeldedaten werden in eine Email verpackt und an das Email-to-SMS Gateway gesendet. Aus der Email erzeugt das Gateway eine SMS und sendet sie an die angegebene Nummer. sub email{ my $name=$benutzer; my $login=$passwort; #Konfiguration fuer den Mailserver my $smtphost='mail.gmx.net'; my $pop3host='pop.gmx.net'; my $absender='[email protected]'; my $empfaenger='[email protected]'; $text="key#$name#basicplus"; #Server Anmeldung $pop = Net::POP3->new($pop3host, Debug=>1); $pop->login('user','passwort'); #Objekt erzeugen $smtp = Net::SMTP->new($smtphost, Debug=>1); #Absender und Empfeanger $smtp->mail($absender); $smtp->to($empfaenger); #Senden der DATA an den Server $smtp->data(); $smtp->datasend(<<END); To: $empfaenger Subject: Name=$name Passwort=$login From: $absender $text END $smtp->dataend(); $smtp->quit(); } Abbildung 31 : Skript Teil 3 Als Provider wird SMS77 verwendet. Anhand der Vorgaben des Providers wird die Email erstellt. Abbildung 32 zeigt die bereits versendeten SMS Nachrichten. Vorgaben des Providers: Betreffzeile: Ihr SMS Text Textinhalt der Mail: Ihr Email2SMS-Key#Empfänger#SMS-Typ#Absender Abbildung 32 : Logbuch bei SMS77 19 Praktikum Protokolle 4.8 Projektplan Client Extern SIP Proxy tel.t-online.de Client Telefonnummer : 032222121230 Internet / VoIP www.xyz.com PSTN Email-toSMS [email protected] Gateway 86.132.112.118 Lokal Hot Spot Chillispot Apache Asterisk Freeradius My SQL Abbildung 33 : Vollständiger Projektplan Zusammenfassung Der Benutzer ruft eine Telefonnummer an, wird vom SIP Proxy an den Asterisk weitergeleitet, und gelangt ins Sprachmenü. Dort hinterlässt er seine Handynummer. Nun werden die Anmeldedaten generiert und über Email-to-SMS an den Benutzer gesendet, sowie in die Datenbank eingetragen. Werden die Anmeldedaten auf der Login Seite eingegeben, sendet der Chillispot eine Authentifizierungsanfrage an den Radius Server. Zur Authentifizierung verifiziert Freeradius die Anmeldedaten mit den Datenbankeinträgen. Entsprechen die eingegeben Daten einem Account in der Datenbank wird der Benutzer für den Internetverkehr freigegeben. 20 Praktikum Protokolle 5. Anhang 5.1 Dialup Admin Im Dialup Admin Verzeichnis befindet sich der Ordner htdocs. Entweder den Ordner in das Freigabeverzeichnis vom Apache (/var/www/) kopieren oder einen Symlink im Freigabeordner auf htdocs erstellen. In der Abbildung@ ist die Apache Konfiguration für den Dialup Admin angegeben. Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/" <Directory "/usr/share/freeradius-dialupadmin/htdocs/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> Abbildung 34 : Dialup Admin in der Apache Datei Im Verzeichnis freeradius-dialupadmin ist die Datei admin.conf noch anzupassen. Hier wird der Zugriff auf die MySQL Datenbank radius konfiguriert und die Verbindung mit dem Radius Server angegeben. Das Radius-Secret steht in der Datei clients.conf des Freeradius. general_domain: dominio.org general_radius_server_secret: test general_encryption_method: clear sql_username: mysql_user sql_password: password #sql_debug: true client 192.168.0.64 { secret = test shortname = linksys nastype = other } Abbildung 36 : Die Datei clients.conf Abbildung 35 : Die Datei admin.conf Über die URL http://192.168.0.9/dialupadmin ist der Dialup Admin jetzt erreichbar. Abbildung 37 : Dialup Admin Benutzerkonfiguration Um den Zugang zum Dialup Admin nicht jedem zu gestatten kann ein Benutzerlogin erstellt werden (siehe Abbildung@). <Directory "/usr/share/freeradius-dialupadmin/htdocs"> ... AuthName "Restricted Area" AuthType Basic AuthUserFile /etc/apache2/.htpasswd require valid-user </Directory> $ sudo htpasswd -bcm /etc/apache2/.htpasswd admin adminsecret Abbildung 38 : Einstellungen für gesicherten Zugang 21 Praktikum Protokolle 5.2 Protokolle 5.2.1 Radius Auf den folgenden Abbildungen zeigen wir Details zum Radius Protokoll, weitere Beschreibungen befinden sich in der RFC-2058. Client NAS (Network Access Server) Authentication Server Freeradius Connect Access Request Access Accept Accounting Request Accounting Response Abbildung 39 : Ablaufplan Radius Protokoll NAS (Network Access Server) Authentication Server Abbildung 41 : Access-Accept Abbildung 40 : Access-Request Die Abbildungen zeigen den Protokollmitschnitt auf dem Authentication Server. Hier ist die Kommunikation zwischen dem NAS und dem Freeradius dargestellt. Auf der Client Seite hat sich der Benutzer manuell mit der IP-Adresse 192.168.182.12 angemeldet. 22 Praktikum Protokolle Nachdem sich der Client authentifiziert hat sendet der NAS ein Accounting Request an den Radius Server. Anhand der Acct-Session-Id wird die Sitzung des Clients erfasst. Abbildung 43 : Accounting-Response 1 Abbildung 42 : Accounting-Request 1 Meldet sich der Client ab, und beendet damit die Sitzung, werden die Accounting Information des Clients an den Radius Server gesendet. Die gesammelten Information, wie die Session Time oder die Output Packets, können nun zum Beispiel in einer Datenbank gespeichert und ausgewertet werden. Abbildung 45 : Accounting-Response 2 Abbildung 44 : Accounting-Request 2 23 Praktikum Protokolle 5.2.2 Session Initiation Protocol Die folgenden Abbildungen zeigen einen Protokollmitschnitt der SIP Registrierung. Der Asterisk Call Server Registriert sich bei dem SIP Proxy der Telekom für die Rufnummer 032224324381. Asterisk SIP Proxy Abbildung 46 : SIP Register Abbildung 47 : SIP Ok 1 Abbildung 48 : SIP Options Abbildung 49 : SIP Ok 2 24 Praktikum Protokolle 6. Literatur Wintermeyer, Stefan : Asterisk 1.2 + 1.4 : Addison-Wesley 2007 Brands, Gilbert : IT-Sicherheitsmanagment : Springer 2005 Badach, Anatol : Voice over IP, Die Technik : Hanser 2005 Wehrle, Pählke, Ritter, Müller, Bechler : Linux Netzwerkarchitektur : Addison Wesley 2002 de.wikipedia.org faberlibertatis.org/wiki/Hotspot_Ubuntu_Dapper_Server_HOWTO www.chillispot.org www.freeradius.org 25