VPN mit OpenVPN und pfSense

Ich möchte ein virtuelles privates Netzwerk (VPN) installieren um sicher über das Internet auf mein privates Netzwerk zugreifen zu können. pfSense bietet diese Möglichkeit. Als Clients sind Note- / Netbooks mit Ubuntu im Einsatz. Der Ablauf ist so. Erst werden die Konfigurationsdateien erstellt, dann wird der Server konfiguriert und dann ist der Client dran.

Disclaimer: dies sind meine Notizen nach bestem Gewissen. Bitte erst Denken dann Abtippen ;-) Es wird mit Sicherheit Möglichkeiten geben das schneller/besser zu machen aber so bin ich ans Ziel gekommen.

Zuerst gilt es das OpenVPN Packet zu installieren. Auf Ubunutu geht das ziemlich einfach über den Packetmanager. Im OpenVPN Packet ist ein Verzeichniss, das es einem erlaubt schnell eine einfache und kleine Konfiguration zu erstellen: EasyRSA

Konfiguration erstellen

Zuerst kopiert man die Templates in ein eigenes Verzeichniss

sudo mkdir /etc/openvpn/myvpn
sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/myvpn/

Dann editiert man eine Textdatei und gibt Angaben zu Land, Organisation, Servernamen.

sudo vi /etc/openvpn/myvpn/vars

export KEY_COUNTRY="DE"
export KEY_PROVINCE="NRW"
export KEY_CITY="Meckenheim"
export KEY_ORG="hbauer"
export KEY_EMAIL="hagen-bauer@web.de"

Dann "baut" man durch aufrufen von ein paar Scripts die notwendigen CA, Keyfiles sowohl für den Server als auch für den Client ... (das zu erklären führt hier zu weit)

sudo su -
cd /etc/openvpn/myvpn/
source ./vars
./clean-all
./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
........+..............+..........................................+....+...........................

./pkitool --initca
./pkitool --server server1
cd keys/
openvpn --genkey --secret ta.key
./build-key client1
Generating a 1024 bit RSA private key
...............++++++

writing new private key to 'client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [DE]:
State or Province Name (full name) [NRW]:
Locality Name (eg, city) [Meckenheim]:
Organization Name (eg, company) [hbauer]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Name []:
Email Address [hagen-bauer@web.de]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/myvpn/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'DE'
stateOrProvinceName   :PRINTABLE:'NRW'
localityName          :PRINTABLE:'Meckenheim'
organizationName      :PRINTABLE:'hbauer'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'hagen-bauer@web.de'
Certificate is to be certified until Mar 23 08:09:03 2020 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Das wars damit hat man die notwendigen Zertificate, CA , Key files.

pfSense konfigurieren

Jetzt wird der Openvpn Server auf pfSense konfiguriert. Zuerst auf der administrativen Oberfläche einloggen und dann unter

201004-pfsense-openvpn1.png

einen neuen Server anlegen. Wichtig ist, daß der Adresspool ein Netzwerk ist, welches momentan noch nicht benutzt wird. Aus eigener Erfahrung empfehle ich auch nicht die Standardwerte 192.168.1.1 zu nehmen. Die sind häufig auch in Hotels im Einsatz und das beist sich dann.

Protocol: UDP
Local port: 1194
Address pool: 192.168.xx.0/24
Remote Network: blank
Cryptography: BF-CBC (128 bit)
Authentication Method: PKI
CA certificate => <Inhalt der Datei ca.crt>
Server Certificate =>
<Inhalt der Datei server.crt >
Server Key =>
<Inhalt der Datei server.key>
DH parameters =>
<Inhalt der Datei dh1024.pem>
LZO Compression = on

Jetzt noch Regeln auf der Firewall damit "was durchkommt. Auf

201004-pfsense-openvpn2.png

eine neue Regel anlegen

PASS
WAN
Protocol: TCP
source: any
OS type: any
Destination: any
Destination port range from: OpenVPN
Destination port range to: OpenVPN
LOG => true

Der Rest bleibt default.

Setup des Client Rechners

Auf dem Client habe ich unter /etc/openvpn ein Verzeichniss "clients" angelegt. Dort kommt auch die Konfigurationsdatei hin.
 

cd /etc/openvpn/
mkdir clients
cd clients/
cp /home/hbauer/Documents/keys/client1.* .
cp /home/hbauer/Documents/keys/ca.crt .
cd ..

und jetzt die Konfigurationsdatei.

vi server1.conf

dev tun
proto tcp-client
remote <your-server-address>
ping 30
persist-tun
persist-key
cipher bf-cbc
tls-client
ca /etc/openvpn/clients/ca.crt
cert /etc/openvpn/clients/client1.crt
key /etc/openvpn/clients/client1.key
ns-cert-type server
comp-lzo
pull

Ich kann zwar die Networkmanager in Ubuntu mit den Openvpn daten füttern aber leider wird das nicht erfolgreich gestartet. Deswegen einfach als root von der Kommando zeile.
 

openvpn --config /etc/openvpn/clients/server1.conf

und wenn euch dann ein

Initialization Sequence Completed

anlacht seit Ihr drin

Man kann das ganze jetzt auch noch automatisieren oder bei jedem Starten aber das brauche ich eigentlich nicht.