Setting IPsec (L2TP, XAuth) VPN Server Debian, CentOS, Ubuntu, RHEL (Auto)

TLDR; Script ini mendownload, compile, dan configure Libreswan sebagai IPsec server, dan xl2tpd sebagai L2TP provider.
Script ini juga melakukan perubahan di sysctl.conf untuk VPN performance tuning, mask firewalld (di CentOS), update iptables firewall dan mengkonfigurasi rule Fail2Ban untuk sshd daemon.

Sebenernya artikel ini sudah cukup lama, tp gue rasa masih reliable untuk diposting dan semoga mempermudah sysadmin / pentester yg udah punya akses root dan memanfaatkan server2 mereka untuk dijadikan VPN server.

Jdi ceritanya beberapa tahun lalu gue nemu sebongkah berlian yang memungkinkan kita untuk setting IPsec VPN server dengan L2TP, XAuth dan IKEv2 di Ubuntu, Debian dan CentOS dengan sangat mudah.

Note : Ini personal snippet gue ya, jadi klo butuh dokumentasi yang lengkap, silahkan baca hwdsl2/setup-ipsec-vpn GitHub repository, it’s really well documented! Pre-built Docker image juga tersedia disana.

WARNING : Kamu perlu upgrade Libreswan ke versi yang terbaru. Kenapa? Baca CVE-2019-10155.

Intro

Sejak protokol PPTP ga lagi disupport sama Apple (MacOS Sierra dan iOS 10) karena banyak masalah keamanan, gue harus pake protokol VPN lain buat akses jaringan internal kantor gue. Dan disitulah Lin Song and para kontributor dengan bash scriptnya datang bagaikan :angel: malaikat :angel: . Lu bayangin aja men, gue cuma perlu download dan eksekusi bash script yang ada di server gue dan script tersebut yang melakukan sisa konfignya.

WARNING: Hanya eksekusi script ini di server. JANGAN eksekusi script auto install ini di PC / Mac personalmu!

Requirement

Dedicated server atau Virtual Private Server (VPS) dengan salah 1 OS berikut:

  • Ubuntu 16.04 (Xenial) / 18.04 (Bionic) / 20.04 (Focal)
  • Debian 8 (Jessie) / 9 (Stretch) / 10 (Buster)
  • CentOS 6/7/8 (x86_64)
  • Red Hat Enterprise Linux (RHEL) 6/7/8
  • Port 500 UDP dan 4500 UDP terbuka (kalau server berjalan dibalik firewall external)

Note : VPS dengan OpenVZ tidak support.

Instalasi

Pertama (tidak wajib, tapi direkomendasikan), pastikan sistem up 2 date dengan apt-get update && apt-get dist-upgrade untuk Debian dan Ubuntu atau yum update untuk RHEL dan CentOS.

Untuk menginstall VPN, kita punya 3 pilihan yang dijabarkan disini. Gue pribadi lebih suka pake opsi pertama dengan 1 line command untuk melakukan konfigurasi dan menggenerate random VPN credential (akan ditampilkan saat script selesai diproses) karena gue lebih suka memanage VPN user dan PSK (bukan pekerja seks komersial tentunya) kedepannya secara manual. Jadi :

Untuk Debian dan Ubuntu:

wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh

Untuk RHEL and CentOS:

wget https://git.io/vpnsetup-centos -O vpnsetup.sh && sudo sh vpnsetup.sh

Setelah script selesai memproses instarasi, detail login VPN akan ditampilkan.

Konfigurasi Default

VPN DNS Client menggunakan Google Public DNS. Kamu bisa ganti dengan DNS milik penyedia server jika perlu. Cara gantinya, cari IP public DNS google 8.8.8.8 dan 8.8.4.4 di /etc/ppp/options.xl2tpd dan /etc/ipsec.conf, kemudian restart server.

Koneksi melakukan konesi menggunakan IPsec/L2TP , VPN server menggunakan IP 192.168.42.1 network 192.168.42.0/24 .

Akun VPN yang sama bisa digunakan oleh banyak device. Tapi untuk menghindari problem saat mencoba konek menggunakan multiple device secara bersamaan dari NAT yang sama (misalnya konek dari 2 device dari 1 router / WiFi yang sama), gunakan IPsec/Xauth

Untuk memodifikasi rules iptables setelah instalasi, edit /etc/iptables.rules dan / atau /etc/iptables/rules.v4 (Ubuntu/Debian), atau /etc/sysconfig/iptables (CentOS/RHEL). Kemudian restart server.

Manage User VPN dan PSK

Kamu bisa pake helper scripts untuk mempermudah memanage VPN user. Klo gue lebih suka manage user secara manual. Konten di bawah ini menerangkan cara memanage IPsec/L2TP dan IPsec/XAuth secara manual.

IPsec PSK (pre-shared key) disimpan di /etc/ipsec.secrets . Semua VPN user akan menggunakan IPsec PSK yang sama. Jika PSK diganti, kamu perlu restart service ipsec dan xl2tpd.

IPsec/L2TP User

Untuk IPsec/L2TP VPN user disimpan di /etc/ppp/chap-secrets. Formatnya sebagai berikut:

"username1"  l2tpd  "password1"  *
"username2"  l2tpd  "password2"  *
... ... dan seterusnya

Kamu bisa tambahkan user lagi sebanyak yang kamu mau, 1 line untuk tiap user. NOTE: Hindari penggunaan karakter spesial berikut: \ " ' karena file konfigurasi menjadi rancu.

IPsec/XAuth Users

Untuk IPsec/XAuth ("Cisco IPsec") VPN users disimpan di /etc/ipsec.d/passwd . Formatnya sebagai berikut:

username1:password1hashed:xauth-psk
username2:password2hashed:xauth-psk
... ... dan seterusnya

Passwordnya hash salted ya, untuk menggenerate salted hash tersebut gunakan perintah openssl berikut:

openssl passwd -1 'your_password'

Seperti yang gue tulis sebelumnya, jika PSK diganti kita perlu restart service ipsec dan xl2tpd.

service ipsec restart
service xl2tpd restart

Kalau cuma menambah, edit, atau hapus user, biasanya tidak perlu sampai restart service.

Langkah berikutnya

Setting komputer / device kamu menggunakan VPN server yang sudah disetup:

Config Client IPsec/L2TP:

Config Client IPsec/XAuth:

Config Server & Client IKEv2:

Credits

Links and Resources

1 Like