OpenVpn
Disini saya akan menjelaskan beberapa config tambahan (diluar config default) untuk penggunaann vpn client(komputer developer) <-> server. Bukan server <-> server. Baru copas command/config singkat. Untuk penjelasan lengkap nya nanti akan di update.
Installation Script
https://github.com/angristan/openvpn-install/
Cukup lengkap script dan cakupan OS nya. Update nya juga sering. Banyak contributor dan sponsor nya. Mudah mudahan aman. Sebenernya bisa juga install manual pakai package manager apt/yum/dnf. Dan di script ini dia juga pake package manager.
Route Spesifik CIDR Pakai VPN, Selain Itu Tidak
Hanya subnet 10.0.0.0/8 yang akan di route ke vpn, selain itu akan menggunakan internet komputer anda.
route-nopull
route 10.0.0.0 255.0.0.0
Walaupun kalau mau lebih aman umumnya ketika kita menyalakan vpn, internet nya mati. Jadi hanya bisa mengakses network server kita saja.
Pakai DNS Internal
Misal ada dashboard/console internal yang hanya bisa diakses di private network saja (tidak di ekspose public ip) dengan ip 10.0.8.20. Umumnya kita menggunakan hostfile dan menambahakan baris 10.0.8.20 console.abdillah.my.id.internal. Atau menggunakan dns server (bind9/managed dari cloud) dan menambahkan record tadi. Dengan memakai DNS ini di openvpn, kita bisa buka aplikasi di browser komputer kita menggunakan hostname nya. Tidak usah manual mengganti dns server di windows/linux komputer kita.
Konfigurasi server:
push "dhcp-option DNS 10.0.0.99"
Konfigurasi client:
dhcp-option DNS 10.0.0.99
Fail2ban
Default fail2ban tidak ada openvpn, nyari yang terdekat dengan ubuntu 20.04 dan openvpn 2.4 adalah ini : https://stefan.angrick.me/block-unauthorized-openvpn-logins-using-fail2ban
Karena di situs yang lain harus modifikasi konfigurasi openvpn nya sehingga membuat log di /var/log/openvpn, selain dari log di syslog/journalctl. Saya mencari yang minim konfigurasi (prinsip KISS) 😀
Namun saya coba tidak bisa karena sehingga saya sesuaikan dengan menambahkan regex “%(__hostname)s ovpn-server.*: tls-crypt unwrapping failed from [AF_INET]:[0-9]{4,5}” . ini untuk file filter nya (/etc/fail2ban/filter.d/openvpn.conf)
[INCLUDES]
before = common.conf
[Definition]
failregex =%(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} TLS Auth Error:.*
%(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} VERIFY ERROR:.*
%(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} TLS Error: TLS handshake failed.*
%(__hostname)s ovpn-server.*: TLS Error: cannot locate HMAC in incoming packet from \[AF_INET\]<HOST>:[0-9]{4,5}
%(__hostname)s ovpn-server.*: tls-crypt unwrapping failed from \[AF_INET\]<HOST>:[0-9]{4,5}
dan file jail nya (/etc/fail2ban/jail.d/openvpn.conf)
[openvpn]
enabled = true
port = 1194
protocol = udp
filter = openvpn
logpath = /var/log/syslog
maxretry = 5
Cara kerja fail2ban adalah monitor file log setiap saat, jika ada log yang sesuai dengan regex. akan di ambil log nya dan di parsing IP nya dari log tersebut. Lalu ip tersebut ditambah ke iptable untuk di blok.
Brute Force / Vuln / 2FA
OOT sedikit, sebenernya peluang bruteforce key openvpn itu kecil sekali 0.00000….. Sama seperti bruteforce private key SSH. Jadinya fail2ban tidak ada pengaruh sebenernya. Misal rsa 2048 bit butuh 300 trilion years to break. Ini hanya memperkecil attack surface saja. Mungkin hanya sugesti biar lebih tenang 😀 . Kalaupun ada vuln/CVE, pasti bukan lewat brute force key. Dan untuk megnatasi vuln/CVE ini harus update software nya, atau “virtual patching” dengan cara menambah rule di firewall.
https://www.quintessencelabs.com/blog/breaking-rsa-encryption-update-state-art/
http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=openvpn
Sama seperti yang lain nya kalau ini bisa di brute force, berarti ssl/https, cookies seesion id juga bisa di brute force. Padahal tidak bisa karena membutuhkan waktu yang sangat lama.
2FA
Daripada cara diatas, lebih baik kita menambahkan 2FA pada openvpn. Misalkan private key dan passphrase nya bocor, masih bisa dicegah dengan 2FA. Kecuali orang nya di culik terus dipaksa kasih tau 2FA nya juga 😛
Ini referensinya, nanti saya akan coba untuk update di post ini :
https://openvpn.net/blog/diy-mfa-setup-community-edition/
https://medium.com/quiq-blog/openvpn-with-two-factor-authentication-4dce9199c3af
https://github.com/evgeny-gridasov/openvpn-otp
Atau kalo gak mau pusing bisa juga pake vpn yang berbayar seperti openvpnAs, forticonnect, cisco anyconnect dll.
User
Dulu saya langsung hajar install openvpn tanpa baca baca dulu. Ketika dipakai banyak orang pakai user yang sama, koneksinya jadi lemot dan putus-putus. Ternyata untuk orang yang berbeda, harus bikin user baru (berbeda user).
Wireguard
Yang lagi trending, saya belum sempat coba, biasanya pake ipsec untuk server<->server. Mungkin nunggu versi 2 aja baru coba 🤣.
Kalau penarasan bisa mampir ke toko sebelah:
https://software.endy.muhardin.com/devops/vpn-wireguard-01-intro/