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?
- Installeer Strongswan op CentOS 7
- Genereer SSL Letsencrypt
- Strongswan configureren
- NAT firewall inschakelen
- Schakel Port-Forwarding in
- 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.
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
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.
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/
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”‘.
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
De NAT modus op firewalld is ingeschakeld, controleer dat met het onderstaande commando.
firewall-cmd --list-all
Het volgende is het resultaat.
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
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’
– 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’.
Er is een nieuwe IKEv2 VPN verbinding gemaakt op de client. Klik nu op de knop connect.
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.
De IKEv2 IPSec-gebaseerde VPN server is gemaakt met Strongswan en Letsencrypt op CentOS 7 server.