Posts Tagged ‘Linux’

Auf der Suche nach einem Captive Portal bin ich neben Wifidog u. a. auf CoovaChilli gestoßen. Wifidog hatte ich bereits im letzten Jahr eingesetzt und wollte es deshalb auch in diesem Jahr wieder verwenden, allerdings scheint die Entwicklung des Projektes leider etwas zu stagnieren. Deshalb fiel die Entscheidung auf CoovaChilli.

Auf der Suche nach guten HowTos fand ich schnell das Tutorial der Ubuntu-Community, allerdings entstand beim abarbeiten genau der Fehler, der auch im Titel erschien. Dieser Fehler lies sich auch nach zahlreichen Versuchen nicht lösen, weshalb ich entschied einmal selbst Hand anzulegen und getreu dem Motto “Weniger ist manchmal mehr” zu handeln. Nun genug des Vorgeplänkels:

Voraussetzung ist ein Computer mit 2 Netzwerkkarten:
eth0 – Verbindung in das Internet
eth1 – neues Netzwerk für die zu schützenden Computer

Die Installation des Ubuntu-Servers funktioniert ohne jegliche Besonderheiten. Es muss auch nichts aus dem Auswahlmenü installiert werden, allerdings ist ein SSH-Server sehr hilfreich. Die Netzwerkkonfiguration sollte man hier für die Netzwerkkarte festlegen, die mit dem Internet verbunden ist (bei mir ist das eth0).

Als nächstes sollte das System auf den aktuellen Stand gebracht werden:

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Um die Benutzer zu authentifizieren nutzt CoovaChilli Freeradius, der als nächstes installiert werden sollte:

sudo apt-get install freeradius

Freeradius besitzt eine Vielzahl von unterschiedlichen Ressourcen, in denen die Benutzer gesucht werden, u.a. SQL, LDAP und einfache Dateien. Nach der Installation von freeradius muss lediglich ein Benutzer in die Datei /etc/freeradius/users eingefügt werden. Die Konfiguration von Freeradius, um SQL oder LDAP zu nutzen wird hier nicht weiter erwähnt.

# /etc/freeradius/users
“benutzer”  Cleartext-Password:=”password”

Nach dem Speichern und neu starten des Services sollte der Benutzer sich mit radtest bereits erfolgreich testen lassen:

sudo service freeradius restart
sudo radtest “benutzer” “password” 127.0.0.1 0 testing123

Als Resultat müsste etwas wie

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=213 length=20

ausgegeben werden. Wenn der Radius-Server auf dem gleichen Rechner läuft wie das Captive-Portal, muss nichts weiter verändert werden, anderenfalls muss der Rechner, auf dem CoovaChilli läuft als Client in die Datei /etc/freeradius/clients.conf eingetragen werden, z. B.:

# /etc/freeradius/clients.conf
client 192.168.0.0/24 {
secret  =  testing123-2
shortname  =  private-network-rad
}

Für die nächsten Schritte wird voraus gesetzt, dass Freeradius ordnungsgemäß wie oben beschrieben funktioniert. Sonst müssen erst die Fehler behoben werden, bevor fortgefahren wird.

Installation von CoovaChilli

Die CoovaChilli installation unter Ubuntu 10.04 ist sehr einfach: Den aktuellen Binary-Build herunterladen und mit dpkg installieren:

wget http://ap.coova.org/chilli/coova-chilli_1.2.5_i386.deb
sudo dpkg -i coova-chilli_1.2.5_i386.deb

Damit CoovaChilli startet, muss die Datei /etc/default/chilli so angepasst werden, dass der Parameter START_CHILLI auf 1 steht:

# /etc/default/chilli
START_CHILLI=1

Wenn CoovaChilli beim Systemstart automatisch gestartet werden soll, müssen noch Startuplinks angelegt werden:

sudo update-rc.d chilli defaults 99 1

Eine Konfigurationsdatei von CoovaChilli ist neben der default-Datei noch nicht vorhanden, um also eine eigene Konfiguration zu verwenden, muss die default-Datei kopiert werden. Danach kann diese angepasst werden:

sudo cp /etc/chilli/default /etc/chilli/config
sudo nano /etc/chilli/config
# /etc/chilli/config
# minimale Änderungen die durchgeführt werden müssen
# Radius-Einstellungen:
HS_NASID=0
HS_RADIUS=127.0.0.1
HS_RADIUS2=127.0.0.1
HS_UAMALLOW=10.1.0.1,www.coova.org
HS_RADSECRET=testing123

Alle weiteren Einstellungen können auch modifiziert werden, allerdings sollte Vorsicht walten, bevor man Parameter verändert und danach nichts mehr funktioniert.

Eine letzte Anpassung die gemacht werden muss ist die Installation von Haserl:

wget http://downloads.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.28.tar.gz
tar -xzf haserl-0.9.28.tar.gz
cd haserl-0.9.28
./configure
# Sollten hier Fehler auftreten, liegt es vermutlich daran,
# dass die nötigen Programme nicht installiert sind:
# sudo apt-get install build-essential
# schafft in diesen Fällen Abhilfe
make
sudo make install
# Jetzt einfach neu starten:
sudo reboot

Nach diesem Neustart sollte nun eigentlich alles Funktionieren und bei der Verbindung eines Clients auf der Netzwerkkarte eth1 sollte dieser auf die Login-Seite weitergeleitet werden.

Bei mir trat jedoch ein Fehler auf, beim Versuch eine Seite aufzurufen:

You need to install haserl to serve pages with this wwwsh script!
see http://haserl.sourceforge.net

Der Fehler verwunderte mich, da ja haserl bereits installiert war. Ein Blick in das Script /etc/chilli/wwwsh brachte mich auch nicht weiter, denn das Kommando, um den Pfad von haserl zu bestimmen funktionierte bei mir tadelos. Da der Pfad bekannt war, wurde er schlichtweg statisch eingetragen (vielleicht nicht unbedingt elegant, aber es funktioniert):

#haserl=$(which haserl 2>/dev/null)
haserl=/usr/local/bin/haserl

nun funktionierte alles wie gewünscht und die Clients konnten sich erfolgreich Authentifizieren.

Beim Surfen durch das Web findet man kaum zusammenhängende und wirklich vollständige Anleitungen für einen LinuxTerminalServer. Ich selbst hatte zunächst einige Probleme bei der Installation und musste die kleinen Feinheiten erst ausprobieren, bevor alles so funktionierte, wie ich es wollte. Deshalb habe ich mich dazu entschieden eine kleine Anleitung für einen Terminal-Server auf  Basis von Ubuntu 8.04 Server-Edition zu schreiben. Geholfen beim Verstehen und Installieren hat mir der folgende Wiki-Eintrag: http://wiki.ubuntuusers.de/LTSP So nun genug des Vorgeplänkels und auf zum konkreten:

Voraussetzung:

Computer/Server mit 2 Netzwerkkarten
Die Hardware-Kompatibilität mit Ubuntu 8.04 versteht sich von selbst. Eine der Netzwerkkarten ist mit dem Internet verbunden. Die andere bespeist ein eigenes Netz für die zukünftigen Clients des Terminal-Servers.

    Installation von Ubuntu 8.04.03 amd64 Server-Edition:

    Der Installation von Ubuntu folgen bis zur Auswahl der primären Netzwerkkarte. Hier muss man die Ethernet-Card auswählen, die mit dem Internet verbunden ist. Als nächstes habe ich die automatische Konfiguration der Netzwerkinformationen abgebrochen und das Netzwerk manuell konfiguriert – wie zum Beispiel:

    Adresse 192.168.49.10
    Subnetzmaske 255.255.255.0
    Gateway/DNS-Server auch entsprechend angeben.

    Als nächstes der Installationsroutine folgen, bis man zur Auswahl der zusätzlichen Software-Pakete kommt. Hier habe ich Openssh-Server ausgewählt. (Diesen kann man natürlich auch später per Hand installieren, aber grundsätzlich braucht man einen SSH-Server eigentlich immer, weshalb ich ihn schon hier mit installieren lasse.) ACHTUNG: Für den LTS ist der Openssh-Server Voraussetzung. Nun lediglich die Installation vervollständigen und die gewohnten Einstellungen ausführen.

        Update und Installation des LTS

        Nach der Installation und dem Neustart des Rechners wird es Zeit das System zunächst auf den aktuellen Stand zu bringen und nötige Updates zu installieren:

          sudo apt-get update
          sudo apt-get upgrade

          Nun muss man das Desktop-System installieren, welches Voraussetzung für den Terminal-Server ist:

            sudo apt-get install ubuntu-desktop
            # Dies kann eine ganze Weile dauern.
            # Danach rein Reboot:
            sudo reboot

            Ist alles bis hierhin gut Verlaufen, so müsste man sich jetzt in einer Grafischen Benutzeroberfläche  befinden. Nun öffnen wir ein Terminal ([ALT] + [F2] und dann gnome-terminal gefolgt von [ENTER] eingeben), indem wir schließlich den eigentlichen Terminal-Server installieren:

              sudo apt-get install ltsp-server-standalone ltspfsd
              # Dies installiert den LTS und ein Paket welches zur
              # Verwendung von USB-Sticks an den Clients  erforderlich ist

              Konfiguration

              Zunächst muss die 2. Netzwerkkarte konfiguriert werden. Dazu öffnet man die entsprechende Datei und fügt dieser die entsprechenden Zeilen hinzu:

                sudo nano /etc/network/interfaces
                #öffnet die Netzwerkkonfigurationsdatei
                # folgende Zeilen sind anzufügen:
                auto eth1
                iface eth1 inet static
                address 10.49.0.1
                netmask 255.255.255.0
                # eventuelle zusätzlich Informationen wie broadcast
                # oder network, aber nicht zwingend erforderlich
                # [STRG] + [O] gefolgt von [ENTER] Speichert die Datei
                # [STRG] + [X] schließt den Editor

                Als nächstes muss man überprüfen, ob der TrivialFileTransferProtocoll-Daemon gestartet wird. Bei mir wurde das immer korrekt vom Installer ausgeführt. Dies erkennt man daran, wenn in der Datei /etc/inetd.conf die folgende Zeile vorhanden ist:

                  tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

                  Nun – fast als letztes – muss man den DHCP-Server anpassen. ACHTUNG: Die Konfigurationsdatei findet man unter /etc/ltsp/dhcpd.conf und nicht unter /etc/dhcp3/dhcpd.conf:

                    authoritative;
                    allow booting;
                    allow bootp;
                    subnet 10.49.0.0 netmask 255.255.255.0 {
                    range 10.49.0.20 10.49.0.250;
                    option domain-name “example.com”;
                    option domain-name-servers 10.49.0.1;
                    option broadcast-address 10.49.0.255;
                    option routers 10.49.0.1;
                    option subnet-mask 255.255.255.0;
                    option root-path “/opt/ltsp/i386″;
                    if substring( option vendor-class-identifier, 0, 9 ) = “PXEClient” {
                    filename “/ltsp/i386/pxelinux.0″;
                    } else {
                    filename “/ltsp/i386/nbi.img”;
                    }
                    }

                    Anschließend habe ich den Server neu gestartet und kontrolliert, ob die Dienste und die Netzwerkkonfiguration erfolgreich übernommen wurden. (ifconfig zeigt z.B. die momentanen Netzwerkinformationen)

                      LTS-Client bauen und Finale Konfiguration

                      Wenn alle Einstellungen erfolgreich waren und der Server soweit funktioniert, dann kann das Client-Image erstellt werden:

                        sudo ltsp-build-client –arch i386

                        Die Angabe der Option arch i386 ist nicht zwingend erforderlich. Fehlt sie, so wird ein Image von amd64 anstatt eines i386 (Natürlich nur auf einer Basis von Ubuntu amd64. Auf Basis von Ubuntu i386 kann NUR ein i386-Image erstellt werden.

                          sudo ltsp-update-sshkeys
                          # muss ausgeführt werden, um die aktuellen
                          # Einstellungen zu übernehmen

                          Abschließend habe ich noch kontrolliert, ob auch die Freigabe für das Image erstellt wurde. Diese findet man in /etc/inetd.conf. Hier müsste mindestens einer der folgenden Einträge zu sehen sein:

                            2000 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdrootd /opt/ltsp/images/amd64.img
                            2001 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdrootd /opt/ltsp/images/i386.img
                            # Fehlen diese, sollte man sie hinzufügen und den
                            # Dienst neu starten: sudo /etc/init.d/openbsd-inetd restart

                            Das war’s! Nun sollte es möglich sein von einem Computer/ThinClient der über das Netzwerk – der mit eth1 verbundenen Karte – in Ubuntu zu booten.

                            Weiterführende Links:

                            http://wiki.ubuntuusers.de/LTSP
                            http://wiki.ubuntuusers.de/LTSP/lts.conf
                            https://help.ubuntu.com/community/UbuntuLTSP/LTSPQuickInstall
                            https://help.ubuntu.com/community/UbuntuLTSP