20 Juli 2017 ~ 0 Comments

Automatisiertes Ändern des (Gast-)Wifi Schlüssels

Ein für viele Betreiber von W-Lans bekanntes Problem. Man betreibt ein Gast-Netz, ändert aber auf Grund des Aufwands das Passwort nicht regelmäßig. Hierdurch können sich die genutzten WIFI-Schlüssel schnell in entsprechenden Datenbanken verbreiten und damit dann Unberechtigte das Netz nutzen. Im schlimmsten Fall können somit über das Gast-Netz Straftaten begangen werden, wobei der Anschlussinhaber hierfür haftet. Im Rahmen dieses Artikels wird beschrieben, wie mit handelsüblichen Routern ein Gast-Netz mit sich automatisch ändernden Kennworten, SSIDs sowie einer Anzeige für die aktuelle Kennung erstellt wird. Im zweiten Teil werden die eingesetzten Router zu AccessPoints umkonfiguriert, so dass Roaming zwischen mehreren Routern möglich sowie Double-NAT verhindert wird.

Für das Basis-Setup werden ein Router mit zwei W-LAN-Modulen und die Router-Firmware OpenWRT eingesetzt.

Router vorbereiten

Zuerst ist es sinnvoll seinen Router auf die aktuelleste Firmware des Herstellers zu aktualisieren. Im Anschluss muss die entsprechende Firmware von openwrt.org (zum Beipsiel für ein TP-Link TL-WR841ND – https://wiki.openwrt.org/de/toh/tp-link/tl-wr841nd) heruntergeladen werden. Hierbei muss unbedingt darauf geachtet werden, dass die heruntergeladene Firmware und die Hardwareversion zusammen passen.

Nach der Installation ist der Router nun unter 192.168.1.1 erreichbar. Für den Login wird kein Passwort benötigt. Daher ist es sinnvoll, an dieser Stelle sowohl das Root-Kennwort zu setzen, als auch seine SSH-Keys einzutragen. Zur weiteren Konfiguration müssen nun die vorhandenen WIFI-Interfaces aktiviert werden.

Das Konfigurations-Skript

Um die SSID sowie den WIFI-Key zu ändern, wird in diesem Fall das Systemtool uci genutzt. Im Konfigurations-Skript wird das WIFI-Passwort basierend auf der aktuellen Kalenderwoche, dem Jahr, sowie einem SALT generiert. Diese Werte werden gehasht und gekürzt. Um Probleme mit verschiedenen Endgeräten zu vermeiden, wird die SSID automatisch auf die Kalenderwoche, gefolgt vom Jahr gesetzt. Besitzt der zu nutzende Router nur ein WIFI-Interface, so müssen die Einträge mit dem Index [1] entfernt werden. Das nachfolgende Skript wird unter /usr/bin abgelegt. Das Skript muss noch mit chmod +xausführbar gemacht werden.

Durch die Variable SALT wird der Salt, der dem Passwort vor dem Hashing vorangestellt wird, definiert. Diese Variable muss unbedingt geheim bleiben.

Die Variable DATE muss an den Rhythmus, in dem das Passwort geändert wird, angepasst werden. Im nachfolgenden Beispiel wird das Passwort wöchentlich geändert, daher besteht die Variable DATE aus der Kalenderwoche und dem Jahr.

#!/bin/sh
 
 SALT="<mysalt>"
 DATE="$(date +%V)-$(date +%Y)"
 NAME="it-economics_Guest_$DATE"
 PWD=`echo -n "${SALT}${DATE}" | md5sum | cut -c1-8`
 
KEY=$PWD
 
uci set wireless.@wifi-iface[0].key=$KEY
uci set wireless.@wifi-iface[0].ssid=$NAME
uci set wireless.@wifi-iface[0].encryption=psk2
uci set wireless.@wifi-iface[0].disabled=0
 
uci set wireless.@wifi-iface[1].key=$KEY
uci set wireless.@wifi-iface[1].ssid=$NAME
uci set wireless.@wifi-iface[1].encryption=psk2
uci set wireless.@wifi-iface[1].disabled=0
 
uci commit wireless
 
logger wifi pass changed to $KEY
 
wifi
 
echo wifi pass changed to $KEY

Um die automatischen Anpassungen nun automatisch durchführen zu können, muss ein Cronjob eingerichtet werden (crontab –e). Unter der Annahme, dass das Script als wifiautomation gespeichert wurde, ergibt sich folgender Eintrag:

1 0 * * * /usr/bin/wifiautomation >/dev/null 2>&1

Abschließend ist es noch notwendig im Terminal die Crontab zu aktivieren:

/etc/init.d/cron start
/etc/init.d/cron enable

Den Router zum AccessPoint machen

Setzt man nun mehrere Router ein, die am Ende im selben Netz zusammengeführt werden und die selbe SSID aussenden sollen, möchte man die Routerfunktionalität deaktivieren, um WIFI-Roaming zu ermöglichen. Der angenehmste Weg, dies zu tun, ist mittels des Webinterfaces.

Dort wird dem Router unter Network → Interfaces auf dem LAN-Interface eine statische IP zugewiesen. Wichtig ist hierbei, dass die Checkbox checkbox “Ignore interface: Disable DHCP for this interface.” aktiviert wird.

Anschließend muss unter System → Startup die Firewall deaktiviert werden. Nach dem Klick auf Save and Apply ist gegebenenfalls ein Hard-Restart (vom Strom trennen) des Routers notwendig.

Der Router/AccesPoint ist nun nicht mehr unter der alten Adresse erreichbar. Über die eingegebene IP wird das Webinterface aufgerufen. Verbindet man den Router schließlich auf einem der Switch-Ports mit dem Netz, ist das Gerät einsatzbereit.

Das Wifi-Passwort der Woche anzeigen

In unserem Setup haben wir uns dafür entschieden,  das aktuelle Kennwort auf einer internen Website bereitzustellen. Über ein PHP-Script wird die aktuelle Konfiguration sowohl  als gewöhnliche Website, als auch im JSON-Format für unsere Raumbelegungsapps bereitgestellt.

Das grundlegende PHP-Skript enthält eine Funktion, welche die SSID und das zugehörige Passwort errechnet sowie den Ausgabeswitch, ob die Daten als JSON-String oder als human-readable Text zurück gegeben werden sollen.

guestWifi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function guestWifi () {
    $salt = '<mysalt>';
    $date = date('W-Y');
    return [
        'ssid' => 'it-economics_Guest_' . $date,
        'pass' => substr(md5( $salt . $date ), 0, 8),
    ];
}
if (isset($_GET['json'])) {
    echo json_encode(guestWifi());
}
else {
    $wifi = guestWifi();
    echo 'Das Gast-WLAN heißt: ' . $wifi['ssid'] . '<br/>'
         'Der Zugangsschlüssel lautet: ' . $wifi['pass'];
}

Leave a Reply

%d Bloggern gefällt das: