IKEv2 VPN opzetten met Strongswan en Let’s encrypt op CentOS 7

Strongswan is een open bron multiplatform IPSec implementatie. Het is een op IPSec gebaseerde VPN oplossing die zich richt op sterke authenticatie mechanismen. Strongswan biedt ondersteuning voor zowel IKEv1 als IKEv2 sleuteluitwisselingsprotocollen, authenticatie op basis van X.509 certificaten of vooraf gedeelde sleutels, en veilige IKEv2 EAP gebruikersauthenticatie.

In deze zelfstudie laat ik je zien hoe je een IPSec VPN server installeert met Strongswan. We zullen een IKEv2 VPN server maken met de ‘EAP-MSCHAPv2’ authenticatie en gebruik maken van Letsencrypt certificaten op de CentOS 7 server.

Vereisten

  • CentOS 7 server
  • Root privileges

Wat zullen we doen?

  1. Installeer Strongswan op CentOS 7
  2. Genereer SSL Letsencrypt
  3. Strongswan configureren
  4. NAT firewall inschakelen
  5. Schakel Port-Forwarding in
  6. Testen van

Stap 1 – Installeer Strongswan op CentOS 7

In deze eerste stap installeren we de strongswan IPsec implement software en alle benodigde pakketten uit de EPEL repository.

Installeer de EPEL repository en installeer het strongswan pakket met onderstaande yum commando’s.

yum -y install epel-release
yum -y install strongswan

Wacht tot het strongswan pakket geïnstalleerd is.

Installeer Strongswan op CentOS 7

Stap 2 – Genereer SSL Certificaat met Let’s encrypt

We zullen de IKEv2 VPN server aanmaken met een domeinnaam ‘ikev2.hakase-labs.io’ en certificaten gebruiken die met let’s encrypt gegenereerd worden.

In deze stap installeren we het letsencrypt gereedschap ‘certbot’ en genereren certificaten voor de server domeinnaam ‘ikev2.hakase-labs.io’.

Installeer het ‘certbot’ letsencrypt gereedschap.

yum -y install certbot

Na de certbot installatie moeten we de HTTP en HTTPS poort van de server openen met firewall-cmd.

Voeg de HTTP en HTTPS diensten toe aan de firewalld dienstenlijst door onderstaande firewall-cmd commando’s uit te voeren.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Genereer SSL Certificaat met Let's encrypt

Nu kunnen we nieuwe SSL certificaat bestanden genereren met het letsencrypt gereedschap certbot.

Voer het onderstaande certbot commando uit.

certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email [email protected] -d ikev2.hakase-labs.io

Er zijn letsencrypt certificaten voor de vpn domeinnaam ‘ikev2.hakase-labs.io’ gegenereerd, en ze staan in de ‘/etc/letsencrypt/live’ directory.

SSL certificaat verkregen van Let's encrypt

Vervolgens moeten we de certificaatbestanden ‘fullchain.pem’, ‘privkey.pem’, en de ‘chain.pem’ naar de ‘/etc/strongswan/ipsec.d/’ directory kopiëren.

cp /etc/letsencrypt/live/ikev2.hakase-labs.io/fullchain.pem /etc/strongswan/ipsec.d/certs/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/privkey.pem /etc/strongswan/ipsec.d/private/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/chain.pem /etc/strongswan/ipsec.d/cacerts/

Alle letsencrypt certificaten voor de Strongswan VPN met de naam ‘ikev2.hakase-labs.io’ zijn gegenereerd en gekopieerd naar de ‘/etc/strongswan/ipsec.d’ directory.

tree /etc/strongswan/ipsec.d/

SSL cert-bestanden

Stap 3 – Stel Strongswan in

Ga naar de ‘/etc/strongswan’ directory en maak een backup van het standaard ‘ipsec.conf’ configuratiebestand.

cd /etc/strongswan/
mv ipsec.conf ipsec.conf.asli

Maak een nieuwe ‘ipsec.conf’ met vim editor.

vim ipsec.conf

En plak er de volgende configuratie in.

#global configuration IPsec
#chron logger
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

#define new ipsec connection
conn hakase-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    [email protected]
    leftcert=fullchain.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.15.1.0/24
    rightdns=1.1.1.1,8.8.8.8
    rightsendcert=never
    eap_identity=%identity

Bewaar en sluit af.

Details van de configuratie:

  • Maak een nieuwe IPSec VPN tunnelverbinding met de naam ‘hakase-vpn’.
  • Specificeer de IKEv2 en ESP cipher suites voor authenticatie.
  • De ‘linker’ server configuratie gebruikt een domeinnaam ‘ikev2.hakase-labs.io’ en gebruikt het letsencrypt certificaat ‘fullchain.pem’ dat in de ‘/etc/strongswan/ipsec.d/certs’ directory staat.
  • De ‘juiste’ clients/remote setup met de EAP authenticatie methode ‘eap-mschapv2’, kent de virtuele IP adresreeks ‘10.15.1.0/24’ toe aan alle verbonden clients, en gebruikt publieke DNS Cloudflare en google.

Vervolgens moeten we het ‘ipsec.secrets’ bestand bewerken om de RSA server privésleutel en het EAP gebruikerswachtwoord in te stellen.

Bewerk het bestand ‘ipsec.secrets’.

vim ipsec.secrets

Plak de onderstaande configuratie.

: RSA "privkey.pem"
hakase : EAP "[email protected]"
tensai : EAP "[email protected]"

Sla op en sluit af.

Details van de configuratie:

  • Specificeer de RSA server privé sleutel met het letsencrypt certificaat ‘privkey.pem’ dat in de map ‘/etc/strongswan/ipsec.d/private’ staat.
  • Definieer de EAP gebruikerscredentials met het formaat ‘user : EAP “password”‘.

Strongswan configuratie

De instelling van strongswan IPSec is voltooid. Start de strongswan dienst en zet hem aan om telkens bij het opstarten van het systeem te starten.

systemctl start strongswan
systemctl enable strongswan

Stap 4 – Schakel NAT in Firewalld in

In deze stap schakelen we de NAT maskering in en voegen de IPSec protocollen Authentication Header (AH) en Encapsulating Security Payload (ESP) toe aan Firewalld met de ‘rich-rule’ configuratie.

Voeg ‘AH’ en ‘ESP’ toe als authenticatie- en encryptieprotocollen aan de firewalld.

firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="esp" accept'
firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="ah" accept'

Voeg de ipsec UDP poorten en dienst toe.

firewall-cmd --zone=public --permanent --add-port=500/udp
firewall-cmd --zone=public --permanent --add-port=4500/udp
firewall-cmd --zone=public --permanent --add-service="ipsec"

Schakel nu de NAT modus masquerade in en herlaad de regels van de firewalld configuratie.

firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload

Firewalld NAT configuratie

De NAT modus op firewalld is ingeschakeld, controleer dat met het onderstaande commando.

firewall-cmd --list-all

Het volgende is het resultaat.

Firewall configuratie

Stap 5 – Schakel Port-Forwarding in

Om port-forwarding in te schakelen, moeten we het ‘sysctl.conf’ bestand bewerken.

Bewerk het ‘/etc/sysctl.conf’ bestand met vim editor.

vim /etc/sysctl.conf

Plak er de volgende configuratie in.

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Sla op en sluit af; herlaad nu met het sysctl commando hieronder.

sysctl -p

Port-forwarding is ingeschakeld. Start nu de strongswan dienst opnieuw.

systemctl restart strongswan

Configureer port forwarding in sysctl.conf

Stap 6 – Testen van Strongswan IPSec VPN

In dit geval doen we de test op de MacOS X en android telefoon.

Op MacOS

– Open de ‘Systeemvoorkeuren’ en klik op het menu ‘Netwerk’.

Klik op de ‘+’ knop om een nieuwe VPN verbinding te maken.

    • Interface: ‘VPN’
    • VPN Type: ‘IKEv2’
    • Dienstnaam: ‘IKEv2-vpn’

VPN instellen op MacOS

– Typ op de ‘Server Address’ en ‘Remote ID’ de VPN domeinnaam ‘ikev2.hakase-labs.io’.
– Klik op ‘Authentication Settings’.
– Authenticatie met een ‘Gebruikersnaam’.
– Typ de gebruikersnaam ’tensai’ met wachtwoord ’[email protected]
– Klik op ‘OK’ en klik op ‘Apply’.

MacOS VPN authenticatie instellingen

Er is een nieuwe IKEv2 VPN verbinding gemaakt op de client. Klik nu op de knop connect.

Er is een nieuwe IKEv2 VPN verbinding gemaakt

En de cliënt is verbonden met de strongswan VPN server en heeft een intern/privé IP adres 10.15.1.1.

Op Android

– Download en installeer de native strongswan android applicatie uit Google-Play.
– Voeg nieuw VPN profiel toe
– Type de server domeinnaam ‘ikev2.hakase-labs.io’ en gebruik de IKEv2 EAP Gebruikersnaam en Wachtwoord authenticatie.

Het volgende is het resultaat als we verbinding maken met de VPN server.

VPN instellen op Android

De IKEv2 IPSec-gebaseerde VPN server is gemaakt met Strongswan en Letsencrypt op CentOS 7 server.

Referentie