Schlagwort-Archive: server

Einem geschenkten vServer…

schaut man nicht in den Laufwerksschacht.

Und da man ja nie genug Server haben kann, sei hiermit, bei der Aktion von Ingate, die gerade 55 vServer verschenken, mitgemacht. Ja, verschenken. Umsonst und unbefristet. Na wenn das mal nichts ist 🙂

WLAN Hotspot mit Chillispot(DD-WRT), Freeradius und MySQL unter Ubuntu

Heute mal ein etwas außergewöhnliches Tutorial. Wir richten einen WLAN-Hotspot ein, wie er zum Beispiel in einem CafĂ©, oder Ă€hnlichem, zur Versorgung der Kunden mit drahtlosem Internet dienen könnte.

FĂŒr dieses Tutorial gehe ich von folgenden Vorraussetzungen aus:

Hardware:

  • Ein Router auf dem DD-WRT v2.4 (standard) lauffĂ€hig ist (Liste der unterstĂŒtzten GerĂ€te)
  • Ein Rechner (auch gerne etwas Ă€lter) auf dem die Ubuntu Server Edition lĂ€uft. Netzwerkzugang sollte er natĂŒrlich auch haben.

Netzwerk:

  • Getrennte Netze fĂŒr das GĂ€ste-WLAN (192.168.182.0/24) und das interne LAN (192.168.1.0/24)
  • Internet-Zugang erfolgt direkt ĂŒber den Router, der auch das WLAN bereitstellt
  • IP-Adressen:
    • Router/Access-Point (Gateway, DNS): 192.168.1.1
    • Radius/Webserver: 192.168.1.254

Software:

  • DD-WRT v24 standard auf dem Router; Chillispot ist darin integriert
  • Freeradius (RADIUS-Server) zur Verwaltung der GastzugĂ€nge (fĂŒr Zeitbasierte ZugĂ€nge z.B.)
  • Apache 2 zur Anzeige der Login-Seite
  • MySQL zum halten der Daten die Freeradius verwendet

Einrichtung des Routers

Auf die Grundeinrichtung des Routers werde ich hier nicht eingehen, nur die Einstellungen fĂŒr unser Setup werden kurz erwĂ€hnt.

Generelles Setup

Über den Tab "Setup"->"Basic Setup" muss der DHCP-Server ausgeschaltet werden, da dieser sonst mit dem Chillispot-internen kollidiert

WLAN Setup

Über den Tab "Wireless" das W-LAN einrichten, allerdings sollte die VerschlĂŒsselung deaktiviert werden, da wir unsere ZugĂ€nge ja von Chillispot und Freeradius verwalten lassen.

Chillispot Setup

Unter dem Tab "Services->HotSpot" finden wir die Chillispot-Konfiguration.

Wie welche Felder auszufĂŒllen sind, ist weiter unten beschrieben.

ErklÀrung der Optionen:

  • Chillispot - Aktivieren der Chillispot-FunktionalitĂ€t auf dem Router
  • Seperate Wifi from LAN Bridge - LĂ€ĂŸt zu, dass das Ethernet per Kabel, ohne Anmeldung genutzt werden kann.
  • Primary Radius Server - IP-Adresse des Radius-Servers
  • Backup Radius Server - wenn nur ein Radius-Server selbe IP wie oben
  • DNS IP - IP des DNS-Servers der an die Nutzer verteilt werden soll (i.d.R. der lokale Router)
  • Remote Network - Das Netz aus dem die Clients IP-Adressen bekommen (192.168.182.0/24 heißt 192.168.182.1 bis 192.168.182.254 - siehe http://de.wikipedia.org/wiki/Subnetz)
  • Redirect URL - Hierher werden die Nutzer umgeleitet um sich am HotSpot anzumelden
  • Shared Key - Damit wird die Verbindung zum Radius-Server verschlĂŒsselt
  • DHCP-Interface - Netzwerkschnittstelle an die Chillispot gebunden werden soll (i.d.R. wl0 oder eth1, sollte auf jeden Fall das W-LAN-Interface sein)
  • Radius NAS ID - Name des AccessPoints (frei wĂ€hlbar)
  • UAM Secret: Mit diesem SchlĂŒssel wird die Verbindung zur der Seite verschlĂŒsselt auf der die Nutzer Benutzername und Passwort angeben mĂŒssen
  • UAM Any DNS - legt fest ob der Nutzer einen selbst definierten DNS-Server benutzen darf (sollte man aus SicherheitsgrĂŒnden bei 0 belassen; nur auf 1 setzen, wenn man weiß was man tut)
  • UAM allowed - Hier können Domains eingetragen werden, die auch ohne Anmeldung zugĂ€nglich sein sollen (wichtig zum Beispiel wenn man die Bezahlung des Zugangs ĂŒber einen externen Anbieter löst)
  • MACauth - legt fest ob die Authentifizierung der Nutzer ĂŒber deren MAC-Adresse(http://de.wikipedia.org/wiki/MAC-Adresse) erfolgen soll. Wollen wir hier aber nicht
  • Additional Chillispot Options - Hier können weitergehende Optionen, wie z.B. Begrenzung der verteilten IP-Adressen ("dynip 192.168.182.128/26" fĂŒr 192.168.182.128 bis 192.168.182.191) oder das Festlegen eines zweiten DNS-Servers ("dns2 8.8.8.8), fĂŒr Chillispot angegeben werden, die aber fĂŒr den Basisbetrieb nicht notwendig sind.

Installation des Servers:

Ich verwende Ubuntu Server Edition 10.04 als Basis. Wenn ihr eine andere Version benutzt, achtet bitte darauf, das ihr Freeradius in der Version 2.x zu benutzen, mit Version 1 wird dieses Tutorial nicht funktionieren.

Installation der Pakete

Apache/MySQL

sudo tasksel install lamp-server

Damit werden in einem Rutsch Apache, MySQL und PHP installiert.

Freeradius

sudo apt-get install freeradius freeradius-mysql

Chillispot (wird benötigt fĂŒr die Anmeldeseite)

sudo apt-get install chillispot

Die Fragen die bei der Installation einfach ohne Eingabe mit Enter bestÀtigen. Chillispot muss hier nicht konfiguriert werden, da wir nur das Login-Script brauchen.

Konfiguration

Konfiguration von Apache

FĂŒr das Zusammenspiel mit Chillispot ist es nötig, dass der Webserver eine per SSL verschlĂŒsselte Verbindung anbietet. Problematisch dabei ist, dass bei der Verwendung eines selbst signierten Zertifikats beim Aufrufen der Login-Seite der Browser eine Warnung anzeigen wird. Um das zu umgehen sollte man die Login-Seite hinter ein 'offiziell' signiertes Zertifikat legen. Darauf werde ich allerdings hier nicht eingehen, da das den Rahmen sprengen wĂŒrde.

Also generieren wir uns unser SSL-Zertifikat erstmal selbst:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Die Option '-days' besagt wie lange das Zertifikat gĂŒltig sein soll. Bitte den eigenen Vorlieben anpassen. Die geforderten Eingaben sind beliebig zu wĂ€hlen. Lediglich bei 'Common Name' sollte der Hostname des Servers benutzt werden.

Damit Apache das Zertifikat findet, muss noch ein Symlink angelegt werden. Dabei darauf achten, das in Zeile 3 keine normalen Apostrophe, sondern so genannte Backticks (Akzent-Zeichen) verwendet werden mĂŒssen. da sonst der Befehl fehlschlĂ€gt:

sudo ln -sf /etc/apache2/apache.pem /etc/apache2/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/apache.pem`.0
sudo chmod 600 /etc/apache2/apache.pem

Anschließend aktiviert man das SSL-Modul mit einem

sudo a2enmod ssl

aktiviert die Standard Apache SSL-Site

sudo a2ensite default-ssl

Zu guter Letzt wird das Login-Formular entpackt und an die passende Stelle gelegt:

sudo zcat /usr/share/doc/chillispot/hotspotlogin.cgi.gz > /usr/lib/cgi-bin/hotspotlogin.cgi
sudo chmod 755 /usr/lib/cgi-bin/hotspotlogin.cgi

In dieser Datei mĂŒssen noch eine Option angepasst werden, das Passwort dafĂŒr habt ihr bei der Konfiguration von Chillispot bei "UAM Secret" festgelegt:

$uamsecret = "nochmalgeheim";

Danach die Apache-Konfiguration neu laden,

sudo /etc/init.d/apache2 force-reload

und testen ob man die Seite https://[server-ip]/cgi-bin/hotspotlogin.cgi erreichen kann. (Dort sollte die Meldung "Chillispot Login failed" erschienen, was aber normal ist, da wie nicht von Chillispot auf diese Seite umgeleitet wurden.)

Falls die Seite angezeigt wird, kann direkt mit der Einrichtung von Freeradius weitergemacht werden, falls nicht, nochmal alles checken und gegebenenfalls berichtigen.

Konfiguration von Freeradius

Zuerst muss unser Access-Point (mit der IP 192.168.1.1) als Client akzeptiert werden. Dazu bearbeitet man die Datei '/etc/freeradius/clients.conf' und fĂŒgt folgende Zeilen am Ende der Datei ein:

client captive-portal {
    ipaddr = 192.168.1.1
    secret = ultrageheim
    nastype = other
}

Der Name hinter "client" sollte der selbe sein, den ihr im Feld Radius NAS ID in der Chillispot-Konfiguration verwendet habt sein. "ipaddr" sollte die IP-Adresse des Access-Points sein, "secret" der in der Chillispot-Konfiguration festgelegte "Shared Key". "nastype" sollte wie hier auf 'other' gesetzt werden.

Anbindung von Freeradius an die MySQL-Datenbank

Datenbank anlegen

mysql -u root -p
Enter password:
  1. mysql> CREATE DATABASE radius;
  2. mysql> quit

Tabellen fĂŒr Freeradius aus den Vorlagen importieren

mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql
mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

Benutzer anlegen und ihm Rechte an den Tabellen geben

mysql -u root -p
Enter password:
  1. GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'sicherespasswort';
  2. FLUSH PRIVILEGES;
  3. quit

Radius fĂŒr MySQL konfigurieren

In Datei '/etc/freeradius/radiusd.conf' mĂŒssen die Zeilen '$INCLUDE sql.conf' und '$INCLUDE sql/mysql/counter.conf' vom Kommentarzeichen befreit werden. Sollte dann hinterher so aussehen:

...
$INCLUDE sql.conf
...
$INCLUDE sql/mysql/counter.conf
...

Die erste Zeile aktiviert die generelle Nutzung der SQL Datenbank, die zweite aktiviert die Nutzung von SQL zur Verwaltung der Zeitbasierten ZugÀnge. In der Datei 'counter.conf' werden die MySQL-Abfragen definiert die das Verwalten der Zeitkonten regeln. Mit geeigneten SQL-Kenntnissen kann man sich hier gerner mal umschauen.

In der Datei '/etc/freeradius/sql.conf' die folgenden Zeilen ensprechend Ă€ndern um Freeradius die Zugangsdaten fĂŒr den MySQL-Server mitzugeben:

server = "localhost"
login = "radius"
password = "sicherespasswort"

Außerdem mĂŒssen in der Datei '/etc/freeradius/sites-available/default' Änderungen gemacht werden. Die Datei ist in Sektionen unterteilt die jeweils mit einem 'name {' beginnen.
In der Sektion 'authorize' muss es heißen:

...
#files
sql
...

In der gleichen Sektion mĂŒssen am Ende diese drei Optionen hinzugefĂŒgt werden. Sie werden fĂŒr die Zeitbasierten ZugĂ€nge gebraucht.

noresetcounter # ZustĂ€ndig fĂŒr zeitlich begrenzte ZugĂ€nge (dieser wird von uns verwendet)
dailycounter   # ZustĂ€ndig fĂŒr Tageslimits, die aber jeden Tag zurĂŒckgesetzt werden
monthlycounter # ZustĂ€ndig fĂŒr Monatslimits, die aber jeden Monat zurĂŒckgesetzt werden

Wir werden zwar nur den 'noresetcounter' brauchen, aber wenn wir schonmal hier sind, kann es nicht schaden, die anderen beiden auch einzutragen. Kurz zur Beachtung: Wir verwenden nicht den 'dailycounter', da dessen "ZĂ€hler" jeden Tag zurĂŒckgesetzt wird, und der Zugang so dauerhaft aktiv bleibt, was wir in unserem Café natĂŒrlich nicht wollen (Die SĂ€tze nach den # mĂŒsst ihr ĂŒbrigens nicht mit eintragen 😉 ).

In der Sektion 'accounting':

...
sql
...

In der Sektion 'session':

...
sql
...

Also jeweils das Kommentarzeichen vor den 'sql'-Zeilen entfernen. Das ist nötig damit freeradius SQL zur Konfiguration und zum Steuern der Zeitbasierten Konten benutzt.

anschließend kann man mit dem Befehl

sudo freeradius -XXX

testen ob der Server einwandfrei startet und man keinen Fehler in die Konfiguration gebaut hat. Wenn am Ende die Zeile

Info: Ready to process requests.

erscheint, war die Konfiguration zumindest fĂŒr den Server selbst in Ordnung.
Falls alles erfolgreich verlÀuft beendet man den Freeradius Testmodus mit STRG-C und startet freeradius neu:

sudo /etc/init.d/freeradius restart

Danach sollte unser Hotspot fertig zur Benutzung sein.

Ein erster Test

Um unser Setup zu testen legen wir zunĂ€chst einen neuen Benutzer an, der den Hotspot nutzen darf. Wir tun das ĂŒber das Terminal, generell kann man aber auch phpMyAdmin (oder eine Alternative) benutzen.

Benutzer und Zeitkonto anlegen

Die Tabelle fĂŒr die BenutzerzugĂ€nge besteht aus 5 Spalten:

  • id (wird automatisch ausgefĂŒllt)
  • username (der name unseres Benutzers
  • attribute (die Option die wir festlegen wollen
  • op (Operator, mit dem die Zuordnung von Attribut und Wert gemacht wird)
  • value (Wert gegen den das Attribut verglichen wird)

Dieses Layout erlaubt es in dieser Tabelle nicht nur das Passwort fĂŒr einen Benutzer festzulegen, sondern zum Beispiel auch die Werte fĂŒr die Zeitbegrenzung der ZugĂ€nge.

mysql -u root -p radius
  1. INSERT INTO radcheck VALUES ('','test0001','Password',':=','testpasswort');
  2. INSERT INTO radcheck VALUES ('','test0001','Max-All-Session',':=','3600');

Diese beiden Queries legen einen Benutzer mit Namen 'test0001' und Passwort 'testpasswort' an. ZusÀtzlich geben wir ihm 3600 Sekunden (1 Stunde) auf sein Zeitkonto. Nach deren Ablauf wird er automatisch ausgeloggt.

Mit diesem Benutzer kann man jetzt testen ob das Setup funktioniert, in dem man einen Client mit dem Drahtlosen Netzwerk verbindet und schaut ob man

  1. beim Aufruf einer beliebigen Internetseite auf die Login-Seite umgeleitet wird
  2. Sich mit unserem Test-Benutzer einloggen und danach surfen kann

Zum testen kann man das Zeitlimit auch kleiner wÀhlen um zu sehen ob das automatische Rauswerfen auch funktioniert.

Nachbereitung

Einen funktionierenden Hotspot haben wir nun, aber was fehlt noch?
Nun zu erst fehlt natĂŒrlich ein komfortabler Weg um die NutzerzugĂ€nge zu verwalten. Leider waren die die ich bisher getestet habe eher mĂ€ĂŸig bis nicht zu gebrauchen. In der Richtung mĂŒsstet ihr also selbst mal suchen, oder selbst ein kleines Skript oder Interface zusammenschrauben, die SQL-Anbindung macht das ganze eigentlich ganz gut anpassbar.

Zweiter Punkt wĂ€re eine Firewall um euren GĂ€sten zum Beispiel nur den Zugang zu den Ports 80(http) und 443(https) zu erlauben (hier sollte man auch an Ports fĂŒr VPN-Verbindungen denken), da man sonst ein nicht zu unterschĂ€tzendes Sicherheitsrisiko (z.B. durch P2P-Verkehr) eingeht. Anleitungen um das mit DD-WRT zu bewerkstelligen findet ihr im DD-WRT-Wiki.

Als letztes fehlt euch natĂŒrlich noch das passende Cafe und die zahlenden GĂ€ste, aber dafĂŒr sorgt ihr besser selbst!

Disclaimer

Zum Schluss natĂŒrlich noch der Hinweis, das ich dieses Tutorial nach bestem Wissen und Gewissen erstellt und getestet habe, es aber natĂŒrlich Fehler enthalten kann, bzw. durch unsachgemĂ€ĂŸen Gebrauch zu unvorhersehbaren Folgen fĂŒhren kann, fĂŒr die ich natĂŒrlich keine Haftung ĂŒbernehmen kann. Alles auf eigene Gefahr.

Lighttpd – IP-Adressen nicht loggen

Lighttpd daran zu hindern die IP-Adressen der Besucher in die Log-Dateien zu schreiben ist denkbar einfach. In der Haupt-Konfigurationsdatei sucht man nach der Option "accesslog.format" und Àndert diese zum Beispiel in folgendes Format:

accesslog.format = "- %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

Dies ersetzt die IP-Adresse durch ein "-". Das fĂŒhrt dann zu folgender Ausgabe in den Accesslogs:


- www.zeroathome.de - [11/Mar/2010:10:05:20 +0000] "GET /wordpress/wp-includes/images/smilies/icon_smile.gif HTTP/1.1" 200 174 "http://planet.ubuntuusers.de/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6"
- www.zeroathome.de - [11/Mar/2010:10:05:23 +0000] "GET /images/190520_9672-225x300.jpg HTTP/1.1" 200 10565 "http://planet.ubuntuusers.de/" "Mozilla/5.0 (X11; U; Linux; de-DE) AppleWebKit/532.4 (KHTML, like Gecko) rekonq Safari/532.4"
- www.zeroathome.de - [11/Mar/2010:10:05:24 +0000] "GET /wordpress/wp-includes/images/smilies/icon_smile.gif HTTP/1.1" 200 174 "http://planet.ubuntuusers.de/" "Mozilla/5.0 (X11; U; Linux; de-DE) AppleWebKit/532.4 (KHTML, like Gecko) rekonq Safari/532.4"

Wie sie sehen, sehen sie nichts, zumindest keine IP-Adresse. Wer gerne sein eigenes Format basteln möchte, findet im Lighttpd-Wiki die nötigen Informationen.

Blog Umzug auf vServer

Nachdem das Blog auf dem Webspace hier, irgendwie tagtÀglich langsamer zu werden scheint, wird Ende der Woche umgezogen.

In einer Testinstallation auf dem kĂŒnftigen Heim des Blogs, einem (natĂŒrlich) unter Ubuntu laufenden vServer, wirkt das ganze schon ein wenig flĂŒssiger. GrĂ¶ĂŸere Schwierigkeiten erwarte ich eigentlich keine, auch wenn die Umstellung von gehostetem Apachen auf Lighttpd auf dem vServer doch ein wenig "Arbeit" erforderte. Am Ende aber tatsĂ€chlich weniger als erwartet.

Das Blog liegt im Prinzip schon an seinem neuen Platz bereit und wartet nur noch auf seine Domain, sozusagen.

Falls wider Erwarten doch etwas negativ auffallen sollte (außer meinen BlogbeitrĂ€gen) wĂ€re ich fĂŒr eine kurze Meldung ĂŒber einen der vielen KommunikationskanĂ€le (Kommentar, Kontaktformular, Mail, Jabber) sehr dankbar.

Und wo wir gerade so schön dabei sind, wĂŒnsche ich allen Lesern und Leserinnen (sofern vorhanden) ein erfolgreiches neues Jahr! Ich fĂŒr meinen Teil werde auf jeden Fall versuchen, in nĂ€chster Zeit wieder vermehrt Artikel hier zu veröffentlichen, und vor allem den Server Guide fit fĂŒr das nĂ€chste LTS-Release im April zu machen und eventuell ein wenig zu erweitern.

Neueste Transmission Version auf der NSLU2 unter Ubuntu 9.04

Transmission LogoLanger Titel, aber sonst weiß ja wieder keiner worums geht 😉

Ich, stolzer Besitzer einer NSLU2 von Linksys, habe auf jener Ubuntu in der aktuellen stabilen Version installiert. Wenn man gerne aktuellere Software, als die in den offiziellen Repos vorhandene, benutzen will, findet man ja mittlerweile recht hÀufig ein feines PPA, das einem alles relativ einfach auf die Platte schaufelt.

Da aber in meisten PPAs keine Pakete fĂŒr die ARM-Architektur, die die NSLU2 verwendet, vorhanden sind, fĂ€llt diese Möglichkeit weitestgehend flach.

Also, Handarbeit a la configure, make, make install...

Da ich die NSLU2 und den angeschlossenen Speicher dafĂŒr nutze meine ISO-Sammlung aktuell zu halten, darf natĂŒrlich ein BitTorrent-Client nicht fehlen. Da Web-Interfaces fĂŒr rTorrent mich irgendwie nicht sonderlich ansprechen (besonders deren Installation), verwende ich Transmission. Die Vorteile liegen auf der Hand:

  • kann ohne X-AbhĂ€ngigkeiten kompiliert werden
  • hat einen recht schmalen Footprint
  • hat ein nettes WebInterface
  • wird stĂ€ndig weiterentwickelt

Problem ist, das die aktuelle Version 1.74 der in Ubuntu vorhandenen 1.51 doch deutlich vorraus ist.

Also mal los (alle folgenden Schritte geschehen auf der NSLU2-Konsole ĂŒber SSH):

Zuerst die benötigten AbhÀngigkeiten installieren:

  1. sudo apt-get install transmission-daemon build-essential libtool pkg-config libcurl4-openssl-dev intltool

Das wird ein paar Minuten dauern, denn den Spitznamen Slug (Schnecke) hat die kleine Kiste nicht zu unrecht. Warum ich Transmission zuerst ĂŒber die Paketverwaltung einspiele hat den folgenden Grund: Dadurch werden zum Beispiel das relativ praktische Startskript unter /etc/init.d angelegt mit dem sich der Transmission-Daemon leicht starten und stoppen lĂ€ĂŸt. Vielleicht nicht die sauberste Methode, aber es spart einiges an Handarbeit.
Stoppen sollte man den Prozeß auch vor den folgenden Schritten:

  1. sudo /etc/init.d/transmission-daemon stop

Anschließend besorge man sich die aktuelle stabile Version von Transmission von der Homepage und entpacke diese in ein geeignetes Verzeichnis:

  1. mkdir build
  2. cd build
  3. tar -cvjf /pfad/zu/transmission-1.74.tar.bz2 # Der Pfad und die Versionsnummer sind entsprechend anzupasse

Wechsle in dieses und fĂŒhre die altbekannte Kompilationstriade aus:

  1. cd transmission-1.74
  2. ./configure
  3. make
  4. sudo make install

Das fĂŒhrt dazu, dass Transmission ohne X-AbhĂ€ngigkeiten kompiliert wird, da schlicht kein GTK oder QT auf der NSLU2 installiert sind. Das 'make install' ĂŒberschreibt anschließend die von der Paketverwaltung installierten alten Binaries und der Daemon kann mit

  1. sudo /etc/init.d/transmission-daemon start

gestartet werden.
Die Konfiguration von Transmission dĂŒrft ihr allerdings selbst ĂŒbernehmen. Dokumente dazu findet ihr in der folgenden Quelle:
Transmission Konfigurationsdatei editieren

Rein subjektiv finde ich die aktuellere Version, gerade auf dem WebInterface, ein wenig flotter, und, wenn ich mich nicht allzusehr tÀusche, ist die CPU-Auslastung wÀhrend den Downloads ist auch ein wenig geringer.

Und nun viel Spaß und im Vorraus schonmal ein schönes Wochenende!