Monthly Archives: April 2014

StrongSwan IPSec Howto

Ob man nur in einem offenen HotSpot mit seinem Handy eingeloggt ist oder in einem Land die lokale Zensur umgehen muss – braucht man ein VPN. In China hatte ich das OpenVPN Konstrukt getestet. Es hatte mal funktioniert, dann wieder nicht. Es war also nicht zuverlässig und man musste darauf hoffen das die Sterne gut standen oder mal ein bisschen mehr nachforschen warum der TLS Handshake nicht durch kam.

Um für die Zukunft ein bisschen besser ausgerüstet zu sein habe ich mir noch StrongSwan aufgesetzt. Dabei ist mir aufgefallen das es kein wirklich einfaches Howto für dieses existiert. Viel muss man nicht machen, aber hier einmal ein Setup für IPv4 unter Ubuntu 12.04:

StrongSwan installieren:

# apt-get install strongswan

/etc/strongswan.conf

# strongswan.conf - strongSwan configuration file

charon {

	# number of worker threads in charon
	threads = 16

	# dns
	dns1 = 8.8.8.8
	ndns1 = 8.8.8.8

	plugins {

		sql {
			# loglevel to log into sql database
			loglevel = -1
		}
	}
}

libstrongswan {

	# test crypto at startup
        crypto_test {
                on_add = yes
        }
}

/etc/ipsec.conf

config setup

conn %default
 keyexchange=ikev2

conn roadwarrior
 left=%any
 leftauth=pubkey
 leftcert=serverCert.pem
 leftid=vpn.example.org
 leftsubnet=0.0.0.0/0,::/0
 leftfirewall=yes
 right=%any
 rightsourceip=10.0.1.0/24
 rightauth=pubkey
 rightcert=clientCert.pem
 rightauth2=eap-mschapv2
 auto=add
 esp=aes-aes256-sha-modp1024,aes256-sha512-modp4096
 ike=aes-aes256-sha-modp1024,aes256-sha512-modp4096

/etc/ipsec.secrets


: RSA serverKey.pem
mobile : EAP "ZNs8-93dI10pA"

Der Benutzernam auf dem Client ist jetzt “mobile” mit dem Passwort “ZNs8-93dI10pA”. Zusätzlich wird das Zertifikat “serverKey.pem” benutzt.

Zertifikate erstellen

Folgendes Script erstellt alle notwendigen Zertifikate für den Server und den Client. Auf dem Client muss anschließend das Zertifikat “clientCert.p12” installiert werden.

/etc/ipsec.d/certs/gen.sh

#!/bin/sh

HOST="vpn.example.org"

ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=US, O=xxx, CN=xxxx" --ca --outform pem > caCert.pem
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=$HOST" --san="$HOST" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=client" --outform pem > clientCert.pem
openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "xxxx" -out clientCert.p12

mv caCert.pem /etc/ipsec.d/cacerts/
mv serverCert.pem /etc/ipsec.d/certs/
mv serverKey.pem /etc/ipsec.d/private/
mv clientCert.pem /etc/ipsec.d/certs/
mv clientKey.pem /etc/ipsec.d/private/

Vielleicht muss man auf seinem Server noch IP Forwarding aktivieren, aber ansonsten muss man nur noch StrongSwan starten und den Client konfigurieren. Ich benutze dafür den StrongSwan VPN Client für Android und kann bisher nichts negativen sagen. Einfach das Clientzertifikat “clientCert.p12” auf dem Gerät installieren und den gesetzten Benutzername/Passwort und Server in der App (IKEv2 Certificate + EAP) eintragen. Fertig.

Howto basiert auf dem Wiki Eintrag von OpenWRT.

OSSH Manager

Das einzige Script ossh hat sich weiterentwickelt und hat neue Features die VD netterweise eingebaut hat. So gibt es jetzt eine History der letzten Verbindungen über ossh und man kann das letzte Oktett einer v4 Adresse direkt manipulieren und sich somit auf einem anderen Server einloggen. Sehr nett in Cluster Umgebungen.

Das ganze gibt es im neuen zu Hause auf github: https://github.com/bert2002/ossh