Konfigurasikan IPSEC VPN menggunakan StrongSwan di Ubuntu 18.04

Dalam panduan ini, kita akan belajar cara mengkonfigurasi IPSEC VPN menggunakan StrongSwan di Ubuntu 18.04. Kami membahas panduan serupa tentang cara menginstal server OpenVPN di Fedora 29 dan FreeBSD 12. Anda dapat memeriksanya dengan mengikuti tautan di bawah ini;

  • Instal dan Konfigurasi OpenVPN Server FreeBSD 12
  • Instal dan Siapkan Server OpenVPN di Fedora 29/CentOS 7

Nah, tujuan utama VPN adalah membuat terowongan aman terenkripsi antara dua atau lebih jaringan jarak jauh. Ini memastikan bahwa komunikasi yang terjadi melalui jaringan yang tidak aman, Internet dalam hal ini, diamankan. IPSEC merupakan salah satu implementasi VPN yang menyediakan service enkripsi dan otentikasi pada level IP (Internet Protocol). Meskipun implementasinya wajib untuk stack IPv6, ini opsional untuk stack IPv4.

StrongSwan di sisi lain adalah perangkat lunak VPN opensource untuk Linux yang mengimplementasikan IPSec. Ini mendukung berbagai protokol dan ekstensi IPsec seperti IKE, Sertifikat Digital X.509, NAT Traversal…

Konfigurasikan IPSEC VPN menggunakan StrongSwan di Ubuntu 18.04

Instal strongSwan di Ubuntu 18.04

Untungnya, strongSwan tersedia di repositori default Ubuntu 18.04 dan dengan demikian dapat diinstal dengan menjalankan perintah di bawah ini;

apt install strongswan libcharon-extra-plugins

Atur CA Menggunakan Alat PKI strongSwan

Agar client VPN dapat memverifikasi keaslian server VPN, Anda perlu membuat sertifikat dan kunci server VPN. Sebelum Anda dapat membuat sertifikat server dan kuncinya, Anda harus membuat CA lokal untuk menandatanganinya. stronSwan menyediakan utilitas PKI yang memudahkan proses ini. Namun Anda perlu menginstal utilitas ini dengan menjalankan perintah di bawah ini;

apt install strongswan-pki

Setelah instalasi selesai, lanjutkan untuk membuat CA. Untuk memulainya, buat kunci pribadi untuk menandatangani sendiri sertifikat CA.

ipsec pki --gen --size 4096 --type rsa --outform pem > vpn-ca.key.pem

Pastikan bahwa Anda memberikan kunci ini privasi mutlak yang layak.

Hasilkan CA server VPN dan tanda tangani sendiri dengan kunci yang dibuat di atas.

ipsec pki --self --in vpn-ca.key.pem --type rsa --dn "CN=VPN Server root CA" --ca --lifetime 3650 --outform pem > vpn-ca.cert.pem

Selanjutnya, buat kunci pribadi server VPN dan keluarkan sertifikat yang cocok menggunakan CA yang dibuat di atas.

ipsec pki --gen --size 4096 --type rsa --outform pem > vpn-server.key.pem

Setelah Anda memiliki kunci server, buat sertifikat server dengan menjalankan perintah di bawah ini. Pastikan untuk mengganti DN dan SAN yang sesuai.

ipsec pki --pub --in vpn-server.key.pem --type rsa  | ipsec pki --issue --lifetime 2750  --cacert vpn-ca.cert.pem  --cakey vpn-ca.key.pem  --dn "CN=vpnsvr.example.com"  --san="vpnsvr.example.com"  --flag serverAuth --flag ikeIntermediate --outform pem > vpn-server.cert.pem

Instal sertifikat

Sekarang setelah Anda mendapatkan semua sertifikat, Anda dapat menginstalnya dengan memindahkannya ke masing-masing direktori sertifikat IPSec di bawah /etc/ipsec.d.

mv vpn-ca.cert.pem /etc/ipsec.d/cacerts/ mv vpn-server.cert.pem /etc/ipsec.d/certs/ mv {vpn-ca.key.pem,vpn-server.key.pem} /etc/ipsec.d/private/

Konfigurasikan StrongSwan di Ubuntu 18.04

/etc/ipsec.conf file konfigurasi menentukan sebagian besar informasi konfigurasi dan kontrol untuk subsistem strongSwan IPsec. Ini terdiri dari tiga jenis bagian yang berbeda:

  • BAGIAN CONFIG (pengaturan konfigurasi) – Ini mendefinisikan parameter konfigurasi umum
  • BAGIAN SAMBUNG ( sambungan <nama>) – Bagian sambungan berisi spesifikasi sambungan, yang menentukan sambungan jaringan yang akan dibuat menggunakan IPsec.
  • CA SECTION (ca <name>) – Ini mendefinisikan otoritas sertifikasi.

Sebelum Anda dapat mengonfigurasi file ini, buat cadangannya.

cp /etc/ipsec.conf /etc/ipsec.conf.bak
vim /etc/ipsec.conf

Tentukan parameter KONFIGURASI;

config setup charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2" strictcrlpolicy=no uniqueids=yes cachecrls=no
  • charondebug = <debug list>  parameter mendefinisikan Charon men-debug loggin di mana daftar men-debug dapat dmn, mgr, ike, PJK, pekerjaan, cfg, knl, bersih, asn, enc, lib, esp, tls, tnc, imc, IMV, pts. Level logging dapat salah satu dari -1, 0, 1, 2, 3, 4 (untuk diam, audit, kontrol, kontrol lebih lanjut, mentah, pribadi). Secara default, level diatur ke 1 untuk semua jenis. Untuk deskripsi daftar debug, periksa bagian KONFIGURASI LOGGER di strongswan.conf(5).
  • strictcrlpolicy parameter menentukan apakah CRL baru harus tersedia agar otentikasi rekan berdasarkan tanda tangan RSA berhasil.
  • uniqueids menentukan apakah ID peserta tertentu harus tetap unik
  • cachecrls menentukan apakah akan menyimpan daftar pencabutan sertifikat (CRL) yang diambil melalui HTTP atau LDAP atau tidak.

Tentukan parameter CONNECTION;

conn ipsec-ikev2-vpn auto=add compress=no type=tunnel # defines the type of connection, tunnel. keyexchange=ikev2 fragmentation=yes forceencaps=yes dpdaction=clear dpddelay=300s rekey=no left=%any [email protected] # if using IP, define it without the @ sign leftcert=vpn-server.cert.pem # reads the VPN server cert in /etc/ipsec.d/certs leftsendcert=always leftsubnet=0.0.0.0/0 right=%any rightid=%any rightauth=eap-mschapv2 rightsourceip=10.10.7.0/24 # IP address Pool to be assigned to the clients rightdns=8.8.8.8 # DNS to be assigned to clients rightsendcert=never eap_identity=%identity # defines the identity the client uses to reply to an EAP Identity request.

Untuk melihat deskripsi lengkap tentang parameter koneksi dan nilai yang digunakan dalam konfigurasi di atas, lihat man ipsec.conf.

Selanjutnya, Anda perlu mengonfigurasi kredensial otentikasi server-client. Kredensial otentikasi diatur dalam /etc/ipsec.secretsfile konfigurasi. Jadi buka file ini dan tentukan kunci pribadi RSA untuk otentikasi. Anda juga dapat mengatur kredensial user EAP dengan menentukan nama user acak dan passwordnya.Note the Spacing.

vim /etc/ipsec.secrets
# This file holds shared secrets or RSA private keys for authentication. # RSA private key for this host, authenticating it to any other host # which knows the public part. : RSA vpn-server.key.pem # VPN server key generated above # <user id> : EAP <secret> vpnsecure : EAP "[email protected]" # Random

Simpan file konfigurasi dan mulai ulang strongSwan agar perubahan diterapkan.

systemctl restart strongswan

Untuk memverifikasi bahwa strongSwan memiliki kunci pribadi, jalankan perintah di bawah ini;

ipsec listcerts
List of X.509 End Entity Certificates subject: "CN=vpnsvpnsvr.example.com" issuer: "CN=VPN Server root CA" validity: not before Feb 09 20:27:18 2019, ok not after Aug 21 20:27:18 2026, ok (expires in 2749 days) serial: 56:e5:08:a6:db:f6:6b:d0 altNames: vpnsvr.example.com flags: serverAuth ikeIntermediate authkeyId: 68:40:92:5b:53:c4:99:18:3e:7e:cb:6b:5b:32:d5:05:f7:de:88:74 subjkeyId: 09:2f:bd:61:bd:47:1b:c8:13:e0:2f:65:c0:9f:12:7b:0e:e8:c4:9b pubkey: RSA 4096 bits, has private key keyid: 75:72:19:89:62:97:27:55:a0:4f:68:be:6a:c9:14:98:04:87:be:a3 subjkey: 09:2f:bd:61:bd:47:1b:c8:13:e0:2f:65:c0:9f:12:7b:0e:e8:c4:9b

Konfigurasikan Firewall dan Perutean

Setel UFW untuk mengizinkan dan meneruskan lalu lintas VPN. Agar IPsec bekerja melalui firewall, Anda perlu membuka port UDP 500 dan 4500.

ufw allow 500/udp # Allows Internet Security Association and Key Management Pro
tocol (ISAKMP) traffic to be forwarded ufw allow 4500/udp # Allows handling of IPsec between natted devices 

Temukan interface perutean default;

ip route show default
default via 10.0.2.2 dev enp0s3

Jadi interface, enp0s3 adalah interface perutean default.

Selanjutnya, edit /etc/ufw/before.rules sehingga konfigurasi Anda terlihat seperti di bawah ini. Replace the IP pool and the default route interface accordingly. Lihat garis yang disorot ditambahkan segera sebelum dan sesudah *filter.

... # Don't delete these required lines, otherwise there will be errors *nat -A POSTROUTING -s 10.10.7.0/24 -o enp0s3 -m policy --pol ipsec --dir out -j ACCEPT -A POSTROUTING -s 10.10.7.0/24 -o enp0s3 -j MASQUERADE COMMIT *mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.10.7.0/24 -o enp0s3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360 COMMIT *filter :ufw-before-input - [0:0] :ufw-before-output - [0:0] :ufw-before-forward - [0:0] :ufw-not-local - [0:0] # End required lines -A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.7.0/24 -j ACCEPT -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.7.0/24 -j ACCEPT

Nonaktifkan dan aktifkan ufw agar perubahan diterapkan.

ufw disable && ufw enable

Konfigurasikan penerusan IP Kernel.

vim /etc/ufw/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4 net/ipv4/ip_forward=1... # Do not accept ICMP redirects (prevent MITM attacks) net/ipv4/conf/all/accept_redirects = 0... # Do not send ICMP redirects (we are not a router) net/ipv4/conf/all/send_redirects = 0... Disble Path MTU discovery to prevent packet fragmentation by adding the line below net/ipv4/ip_no_pmtu_disc=1

Mulai ulang StrongSwan dan aktifkan untuk berjalan saat boot.

systemctl restart strongswan systemctl enable strongswan

Anda dapat memeriksa statusnya.

systemctl status strongswan ● strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf Loaded: loaded (/lib/systemd/system/strongswan.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-02-10 10:15:44 UTC; 11s ago Main PID: 9168 (starter) Tasks: 18 (limit: 2325) CGroup: /system.slice/strongswan.service ├─9168 /usr/lib/ipsec/starter --daemon charon --nofork └─9193 /usr/lib/ipsec/charon --debug-ike 2 --debug-knl 2 --debug-cfg 2 --debug-net 2 --debug-esp 2 --debug-dmn 2 --debug-mgr 2

Anda juga dapat memeriksa status menggunakan ipsecperintah.

ipsec statusall
Status of IKE charon daemon (strongSwan 5.6.2, Linux 4.15.0-45-generic, x86_64): uptime: 2 minutes, since Feb 10 10:15:44 2019 malloc: sbrk 1486848, mmap 0, used 501040, free 985808 worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 0 loaded plugins: charon aesni aes rc2 sha2 sha1 md4 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc hmac gcm attr kernel-netlink resolve socket-default connmark stroke updown eap-mschapv2 xauth-generic counters Virtual IP pools (size/online/offline): 10.10.7.0/24: 254/0/0 Listening IP addresses: 192.168.43.85 Connections: ipsec-ikev2-vpn: %any...%any IKEv2, dpddelay=300s ipsec-ikev2-vpn: local: [vpnsvr.example.com] uses public key authentication ipsec-ikev2-vpn: cert: "CN=vpnsvr.example.com" ipsec-ikev2-vpn: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ipsec-ikev2-vpn: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear Security Associations (0 up, 0 connecting): none

Menguji Koneksi VPN

Sekarang kita telah mengonfigurasi IPSEC VPN menggunakan strongSwan di Ubuntu 18.04, mari kita uji apakah client jarak jauh dapat terhubung dengannya. Dalam panduan ini, kami menguji koneksi dari client Ubuntu 18.04.

Jalankan client Ubuntu 18.04 dan instal paket-paket berikut.

apt update apt install strongswan libcharon-extra-plugins

Setelah instalasi selesai, nonaktifkan strongswan dari memulai secara otomatis pada boot sistem.

systemctl disable strongswan

Masuk ke server VPN dan copy sertifikat CA server VPN ke client VPN. Letakkan sertifikat CA di bawah /etc/ipsec.d/cacerts.

Konfigurasikan otentikasi client VPN seperti yang Anda lakukan di konfigurasi server.

cat /etc/ipsec.secrets
# This file holds shared secrets or RSA private keys for authentication. # RSA private key for this host, authenticating it to any other host # which knows the public part. vpnsecure : EAP "[email protected]"

Tentukan parameter konfigurasi client VPN.

vim /etc/ipsec.conf
conn ipsec-ikev2-vpn-client auto=start right=vpnsvr.example.com rightid=vpnsvr.example.com rightsubnet=0.0.0.0/0 rightauth=pubkey leftsourceip=%config leftid=vpnsecure leftauth=eap-mschapv2 eap_identity=%identity

Simpan file konfigurasi dan mulai ulang strongswan.

systemctl restart strongswan

Periksa status koneksi VPN.

ipsec status Security Associations (1 up, 0 connecting): ipsec-ikev2-vpn-client[1]: ESTABLISHED 2 minutes ago, 10.0.2.15[vpnsecure]...192.168.43.85[vpnsvr.example.com] ipsec-ikev2-vpn-client{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c80ec31a_i cb406749_o ipsec-ikev2-vpn-client{1}: 10.10.7.1/32 === 0.0.0.0/0

Besar. Jika Anda menggunakan CentOS 7 sebagai client VPN, instal strongSwan seperti yang ditunjukkan di bawah ini dan ikuti;

yum install strongswan strongswan-charon-nm

Copy sertifikat CA server VPN ke /etc/strongswan/ipsec.d/cacertsdirektori.

Konfigurasikan client VPN. Ganti nilai leftid dengan nama user yang berbeda.

vim /etc/strongswan/ipsec.conf
conn ipsec-ikev2-vpn-client auto=start right=vpnsvr.example.com rightid=vpnsvr.example.com rightsubnet=0.0.0.0/0 rightauth=pubkey leftsourceip=%config leftid=amos leftauth=eap-mschapv2 eap_identity=%identity

Konfigurasikan detail Otentikasi VPN.

vim /etc/strongswan/ipsec.secrets
amos : EAP "[email protected]"

Simpan file konfigurasi dan mulai ulang strongswan.

systemctl restart strongswan

Periksa status koneksi VPN.

strongswan status Security Associations (1 up, 0 connecting): ipsec-ikev2-vpn-client[1]: ESTABLISHED 1 minutes ago, 10.0.2.15[vpnsecure]...192.168.43.85[vpnsvr.example.com] ipsec-ikev2-vpn-client{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c68a242b_i cf82c13c_o ipsec-ikev2-vpn-client{1}: 10.10.7.2/32 === 0.0.0.0/0

Nah, coba tes koneksi SSH antara dua client VPN dan Anda seharusnya bisa login.

Ingin menggunakan Debian 10 Buster sebagai gantinya sebagai StrongSwan VPN Server? Ikuti tautan di bawah ini;

Siapkan VPN IPSEC menggunakan StrongSwan di Debian 10

Itu saja tentang cara mengkonfigurasi IPSEC VPN menggunakan strongSwan di Ubuntu 18.04. Menikmati