freeRADIUS & DD-WRT mit WPA2 und Windows XP – Teil 2

So nach dem wir nun dem freeRADIUS EAP & TLS u.s.w beigebracht haben, können wir nun den Router konfigurieren. In meinem Fall ist das das Linksys WRT54GL mit DD-WRT v24.

Einstellungen für DD-WRT
Einstellungen für DD-WRT

Als erstes Loggen wir uns auf dem Router ein. Klicken dann auf Wireless und dann auf Wireless Security. Dort wählen wir WPA2 Enterprise aus. Nun müssen wir unseren Server eintragen, wo wir gerade freeRADIUS installiert haben. Desweiteren brauchen wir das RADIUS Shared Secret. Hier denken wir uns ein Passwort aus. Diese müssen wir später in die Konfiguration des freeRADIUS Servers eintragen. Port und Key Renewal Interval können wir so belassen. Fertig – der Router fragt nun immer den Radius-Server wenn sich ein Client anmelden möchte. Teilweise muss man den WPA Algorithms auf TKIP umstellen. Zum Anfang können wir es auch machen und stellen es später dann wieder AES um. TKIP unterstützen eigentlich alle WLAN-Karten, und somit haben wir für den Anfang schon ein Fehlerpunkt ausgeräumt.

Wenn jemand schon ein CA hat, sollte jetzt für den User und den Server Zertifikate ausstellen. Sollte noch keine CA ( Certificate Authority ) vorhanden sein, erstellen wir uns nun ein. Wir wechseln in der Verzeichnis /usr/lib/ssl/misc und dort passen wir den Eintrag CATOP=./devnu11CA entsprechend unseren Vorstellungen an. Wenn wir fertig sind, reicht ein Aufruf von ./CA.sh -newca im Verzeichnis. Alle Fragen beantwortet ? Dann können wir mit

openssl req -new -nodes -keyout server.key.pem -out server.req.pem

den Request für das Zertifikat vom Server erstellen. Nur nur signieren und wir haben das Zertifikat für den Server.

openssl ca -out server.cert.pem -infiles ./server.req.pem

hier werden wir nun nach der Passphrase gefragt, die wir beim erstellen unserer CA eingetippt haben. Das gleich machen wir nun für den Client.

openssl req -new -nodes -keyout rmichel.key.pem -out rmichel.req.pem
openssl ca -out rmichel.cert.pem -infiles ./rmichel.req.pem

Das server.cert.pem und das cacert.pem kopieren wir nun nach /etc/freeradius/certs. Dort ändern wir den Besitzer mit

chown root:freerad *.pem

und ändern auch die Zugriffsrechte auf 440 mit

chmod 440 *.pem

Jetzt sind wir fast fertig. Nun müssen wir noch den freeRADIUS einrichten. Dazu nach /etc/freeradius/certs wechseln und

openssl dhparam -check -text -5 512 -out dh
dd if=/dev/urandom of=random count=2

ausführen. Beides dient der TLS Verschlüsselung. Danach editieren wir dann die /etc/freeradius/clients.conf und fügen die folgenden Zeilen hinzu

client 192.168.26.254/24 {
secret = passwort
shortname = wrt54gl
nastype = other
}

Hier ist steht die IP Adresse des WLAN Accesspoints, das RADIUS Shared Secret was wir schon im Accesspoint eingetragen haben und noch ein Alias. Dann öffnen wir die /etc/freeradius/eap.conf. Nun passen wir folgende EInträge an

default_eap_type = tls
private_key_file = ${certdir}/server.key.pem
certificate_file = ${certdir}/server.cert.pem
CA_file = ${cadir}/cacert.pem

Damit sollte der RADIUS-Server fertig sein. Einfach mal mit freeradius -X testen ob der Server startet (Sollte er eigentlich 😉 )

Nun müssen wir noch fix unser Client-Zertifikat in das PKCS12-Format umwandeln mit

openssl pkcs12 -nodes -export -in rmichel.cert.pem -inkey rmichel.key.pem -out rmichel.cert.p12 -clcerts

Das müsst ihr zusammen mit dem cacert.pem auf einen USB-Stick kopieren oder gleich auf den Windows Rechner. Das war’s ! Wir sind mit dem RADIUS-Server fertig.

Nun sind wir auf dem Windows-Rechner, und starten über Start->Ausführen->mmc die Microsoft-Mangment-Console, kurs mmc. Dort auf Datei->Snap-In hinzufügen und dann auf Hinzufügen…. Dann nach unten Scrollen und Zertifikate hinzufügen und Eigenes Benutzerkonto auswählen. Jetzt fügen wir das cacert.pem mit Rechtsklick auf Vertrauenswürdige Stammzertifizierungsstellen->Alle Aufgabe->Importieren ein. Das USERNAME.cert.pem über Rechtsklick Eigene Zertifikate->Alle Aufgabe->Importieren und hier fragt Windows nach der Passpharse.

Lediglich das passende WLAN muss noch eingerichtet werden. Auf Start->Einstellungen->Netzwerkverbindungen->Drahtlose Netzwerkverbindung Rechtsklick und Verfügbare drahtlose Netzwerke anzeigen. Im Infofenster Drahtlosnetzwerk für Heim- bzw. kleines Firmennetzwerk einrichten anklicken. Nun tragen Sie die SSID ein, und stellen WPA2 ein. Datenverschlüsselung TKIP und der EAP-Typ auf Smartcard oder anderes Zertifikat einstellen. Wenn alles geklappt hat sollten wir jetzt in der Ausgabe von freeRADIUS (welches wir ja mit freeradius -X gestarten haben) eine paar Meldungen sehen, und auf dem Windows-Client eine erfolgreich verbunden WLAN-Verbindung.

Done.

Bei Fragen einfach ein Kommentar hinterlassen. Ich werde versuchen zuhelfen 🙂

freeRADIUS & DD-WRT mit WPA2 und Windows XP – Teil 1

RADIUS steht für Remote Authentication Dial In User Service und ist ein Triple-A-System (Authentifizierung, Autorisierung und Accounting). Dieser kann in einem WLAN als zentraler Authentifizierungsserver dienen und genau dass will ich hier mal dokumentieren !

Da ich Zertifikate einsetzen wollte, musste ich erstmal den freeRADIUS unter Debian Etch/Lenny neubauen, weil dieser keine TLS/EAP/PEAP/TTLS Unterstützung hat (Lizenzproblem mit OpenSSL). Also kurz hier vorbeischauen und Links unter “Source package” auf  *.dsc, *.orig und *.diff klicken um den Quellcode runterzuladen. Diesen nach /usr/src kopieren und mit dpkg-source -x *.dsc entpacken. Mit ls -l prüfen ob folgender Ordner existiert “freeradius-2.0.4+dfsg” (Stand 11.09.08)

Nun kann man mit einem Blick in debian/control sehen, welche Bedingungen erfüllt sein müssen (Build-Depends), damit wir das Paket neubauen können.

autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, libpcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev

Zu diesen Paketen kommt noch die libssl-dev, die wir jetzt gleich an das Zeilenende von Build-Depends mit anhängen. Die Zeile sollte dann wie folgt aussehen

Source: freeradius
Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, libpcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev, libssl-dev
Section: net

Jetzt einfach ein
aptitude install autotools-dev debhelper libgdbm-dev libiodbc2-dev libkrb5-dev libldap2-dev libltdl3-dev libmysqlclient-dev libpam0g-dev libpcap-dev libperl-dev libpq-dev libsasl2-dev libsnmp-dev libtool python-dev libssl-dev

Wenn das fertig ist, können wir uns mit einem Editor die debian/rules ansehen. Hier alles von –without-rlm_eap-* zu –with-rlm_eap-* ändern außer –without-rlm_eap_tnc, dass bitte so lassen. Das gleiche auch mit –without-openssl und wahlweise noch mit –without-rlm_otp. Dann suchen wir noch in der rules den Anschnitt

for pkg in ${pkgs} ; do \
if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \
echo "$$pkg links to openssl" ;\
exit 1 ;\
fi ;\
done

und entfernen diesen. Wenn ich/wir nichts vergessen haben dann in das freeradius Verzeichnis wechseln und dpkg-buildpackage -uc -us ausführen. Am Ende sollten wir in /usr/src unsere Pakete vorfinden. Hier meine Liste

root@build debian [0] # ll
insgesamt 2,2M
-rw-r--r-- 1 root root 201K 2008-09-09 10:11 freeradius-common_2.0.4+dfsg-7_all.deb
-rw-r--r-- 1 root root 927K 2008-09-09 10:11 freeradius-dbg_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 127K 2008-09-09 10:11 freeradius-dialupadmin_2.0.4+dfsg-7_all.deb
-rw-r--r-- 1 root root 17K 2008-09-09 10:11 freeradius-iodbc_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 18K 2008-09-09 10:11 freeradius-krb5_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 34K 2008-09-09 10:11 freeradius-ldap_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 25K 2008-09-09 10:11 freeradius-mysql_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 36K 2008-09-09 10:11 freeradius-postgresql_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 72K 2008-09-09 10:11 freeradius-utils_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 5,3K 2008-09-09 10:11 freeradius_2.0.4+dfsg-7.diff.gz
-rw-r--r-- 1 root root 1,3K 2008-09-09 10:11 freeradius_2.0.4+dfsg-7.dsc
-rw-r--r-- 1 root root 5,3K 2008-09-09 10:11 freeradius_2.0.4+dfsg-7_i386.changes
-rw-r--r-- 1 root root 503K 2008-09-09 10:11 freeradius_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 102K 2008-09-09 10:11 libfreeradius-dev_2.0.4+dfsg-7_i386.deb
-rw-r--r-- 1 root root 84K 2008-09-09 10:11 libfreeradius2_2.0.4+dfsg-7_i386.deb

Diese könnte etwas anderst aussehen, sollte aber bis auf die Versionsnummer vollständig sein.

Für die Schreibfaulen: Hier die diff für die Änderungen. Runterladen, dann in das freeradius Verzeichnis wechseln und dann patch -p1 -i ../pfad/zur/diff ausführen.

Nun können wir unseren RADIUS Server mit

dpkg -i freeradius_2.0.4+dfsg-6_i386.deb freeradius-common_2.0.4+dfsg-6_all.deb freeradius-utils_2.0.4+dfsg-6_i386.deb libfreeradius2_2.0.4+dfsg-6_i386.deb

einfach installieren. Bei Fragen, Fehlern oder Anmerkungen einfach einen Kommentar da lassen.

Auf die Pakete kann auch via
deb ftp://zion.devnu11.net/ unstable main contrib non-free
zugegriffen werden.

IBM/Lenovo Thinkpad R61 und die WLAN-LED

Habe mich letzte Woche ran gemacht, und ein wenig gegoogelt zwecks der WLAN-LED. Ich wollte einfach nicht glauben, dass diese nicht leuchtet wenn das WLAN aktiv ist bzw blinkt wenn Traffic drüber geht. Nach 20min wusste ich folgendes:

  • “linux-backports-modules-2.6.24-16-generic” für ubuntu installieren und dann soll es gehen bzw leuchtet sie dann, wenn das WLAN-Modul aktiv ist – Nee auch doof
  • Dann wieder irgend einen Patch für 2.6.24 gefunden – auch nur leuchten
  • Zwischen durch ein kleiner Kommentar, dass es mit dem aktuellen 2.6.26, und aktivieren von zwei Optionen im Kernel (CONFIG_IWLWIFI_LEDS & CONFIG_NEW_LEDS) leuchten und blinken soll !

Okay getestet – ne geht auch nicht…dann aber noch die Option CONFIG_IWL3945_LEDS gefunden, und in der Kombination mit der CONFIG_NEW_LEDS, leuchtet und blinkt nun meine WLAN-LED 🙂

config-2.6.26.3

Hier dann auch gleich meine Kconfig für das IBM Thinkpad R61. Viel Spass damit !

RDP via SSH – Alles muss über einen Port….

Wir haben eine soooo “tolle” Firewall auf Arbeit und der Cisco VPN Concentrator ist auch nicht gerade das gelbe vom Ei. Also einen Rechner fertig gemacht, der genau einen Port offen hat – den SSHd.

SSH Tunnel

Damit man sich das mal vorstellen kann ( Router, Switche usw fehlen).

Auf unsere paar Windows Server kommen wir via RDP auf. Damit ich nicht immer alles per Hand tippen muss, bzw in der history gucken, wie der Befehl gleich war, hier ein faule-Leute-Script 😉

#!/bin/bash
#
#

SSH_OPTIONS="" # additional options for ssh command
RDP_PORT="3389"
RDP_OPTIONS="-z -g 1024x768 -a 16 -k de"
LOCAL_IP="127.0.0.2"

# Usage info
if [ "$1" = "" ] ; then
        echo "Usage: $0 rdp-target ssh-target [ssh-port]"
        exit
fi

if [ "$2" = "" ] ; then
        echo "Usage: $0 rdp-target ssh-target [ssh-port]"
        exit
fi

if [ "$3" != "" ] ; then
        SSH_OPTIONS="$SSH_OPTIONS -p $3"
fi

# Set target host and SSH target
TARGET_HOST="$1"
SSH_TARGET="$2"

#
TMP=`echo $TARGET_HOST | cut -d'.' -f 4`
if [ $TMP -gt 100 ] ; then
    LOCAL_PORT="26$TMP"
else
    LOCAL_PORT="260$TMP"
fi

ssh $SSH_OPTIONS -f -L $LOCAL_IP:$LOCAL_PORT:$TARGET_HOST:$RDP_PORT $SSH_TARGET sleep 10

rdesktop $RDP_OPTIONS $LOCAL_IP:$LOCAL_PORT &

Es baut die SSH Verbindung auf, zusammen mit dem Befehl sleep 10, damit die Verbindung automatisch schließt wenn rdesktop beendet wird. Desweiteren nimmt es von der IP, die letzten 8 Bit und bildet fast dynamisch den lokalen Port. Der Rest sollte selbst erklärend sein.

Der Aufruf für das Netzwerk oben wäre dann: sshrdp 192.168.26.20 root@192.168.26.254 !

Hier das Script zum runterladen: sshrdp

Pound einrichten….

Wollen wir uns nun langsam mal der Pound Konfiguration widmen.

Hier ist ein sehr einfaches Beispiel. Die lokalen Webserver hören auf dem Port 81 und Pound darf auf Port 80 hören, wobei 192.168.1.3 die HA-IP Adresse wieder spiegelt.

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
#RootJail "/chroot/pound"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.3
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.1
      Port  81
    End
    BackEnd
      Address 192.168.1.2
      Port  81
    End
  End
End

Installiert wird Pound einfach via aptitude pound und wieder dran denken das die pound.cfg auf beiden Servern gleich sein muss.

Bei unterschiedlich dimensionierten Servern können wir mir Priority im BackEnd, die Last unterschiedlich auf der Server verteilen.

Weitere gute Beispiel-Konfigurationen findet man in der Manpage von Pound (man pound) !

In der /etc/default/pound müssen wir noch den Wert für startup gleich 1 setzen, damit Pound überhaupt startet.

Hier mal meine Konfiguration

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
RootJail "/var/pound/chroot"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.1
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.2
      Port  81
      Priority 6
    End
    BackEnd
      Address 192.168.1.3
      Port  81
      Priority 3
    End
    BackEnd
      Address 192.168.1.4
      Port  81
      Priority 3
    End
  End

  Service
    URL ".*.(jpg|gif|png)"
    BackEnd
      Address 192.168.1.5
      Port  81
    End
  End
End

Homepage von pound

Nagios3 @ Debian Etch

Nagios 3 (inkl. pnp) ist unter Debian Etch mit Hilfe der Pakete von svelt (http://people.teamix.net/~svelt/debian/etch/) sehr einfach geworden.

Nur wenn man versucht den Link “Disable notifications for this service” für einen Service zu aktivieren, bekommt man eine Fehlermeldung ala :

Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!

Lösung:

/etc/init.d/nagios3 stop
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
/etc/init.d/nagios3 start

Jetzt sollte es gehen.

Debian Lenny und SixXS – IPv6 Tunnel

Hier eine kleine Hilfe, für alle die Versuchen unter Debian einen IPv6 Tunnel zum laufen zubekommen.

Vorraussetzung ist, dass der Tunnel-Typ 6in4-static ist (Hier ist eure statische IP die Authentifizierung gegenüber SixXS). Sollte er Tunnel-Typ AYIYA sein, müsst ihr das Tool von SixXS benutzen, da ihr euch hier mit Username und Passwort authentifizieren müsst.

Auszug aus der /etc/network/interface:

auto sixxs
iface sixxs inet6 v4tunnel
  address Local-IPv6-IP
  netmask Prefix (zB 64)
  endpoint POP-IPv4-IP
  local Local-IPv4-IP
  ttl 64
  up ip link set mtu 1280 dev sixxs
  up ip route add default via POP-IPv6-IP dev sixxs
  up ip -6 route flush dev eth0
  down ip -6 route flush dev sixxs

Der Befehl up ip -6 route flush dev eth0 heißt, dass für die Netzwerkschnittstelle eth0 die IPv6-Routen gelöscht werden.

Ich hatte das Problem, dass kein IPv6 Paket sein Ziel erreichte. Erst nachdem ich mir die Ausgabe von ip -6 route show anschaute, wurde klar warum. Die Defaultroute für IPv6 war über eth0. Also fix gelöscht und siehe da, alle Pakete erreichen nun auch ihr Ziel.

– IPv6 Ready –

Verschlüsselte Partition mit Debian und luks

Eine verschlüsselte Partition einrichten

Vorraussetzung: Eine leere Partition

Die leere Partition formatieren wird als erstes.

cryptsetup luksFormat –y /dev/hde1

Der Befehl fordert uns auf eine Passphrase einzugeben. Am besten verwenden wir hier nun Zahlen, Sonderzeichen, Klein- und Großbuchstaben und was wir noch so auf der Tastatur finden.

Damit wir nun auch ein Dateisystem erzeugen können, müssen wir das verschlüsselte Device öffnen. Hier wird auch gleich die neue Passphrase verlangt.

cryptsetup luksOpen /dev/hde1 hde1_crypt

Ich habe es mit ext3 formatiert.

mkfs.ext3 /dev/mapper/hde1_crypt

Die verschlüsselte Partition soll beim Starten gemountet werden. Wir müssen bedenken, dass die Passphrase beim Starten verlangt wird.

echo "hde1_crypt /dev/hde1 none luks" > /etc/crypttab

Erst jetzt kommen wir an unsere Daten, und können die Partion mounten.

echo "/dev/mapper/hde1_crypt /ein/datei/pfad rw 0 0" >> /etc/fstab

Wenn alles klappt, dann sollte beim nächsten Start nach einer Passphrase gefragt werden.

Continue reading Verschlüsselte Partition mit Debian und luks