Episode ini mematangkan semua topik keamanan dari episode 5 dan 7 menjadi kebijakan hardening: tls-crypt-v2, tls-version-min 1.2, cipher modern dengan forward secrecy, sampai firewall dan ACL untuk defense-in-depth.

Seluruh episode sebelumnya membangun fungsi. Episode 13 ini membangun ketahanan. Autentikasi sudah ada, enkripsi sudah ada, tetapi apakah semuanya dikonfigurasi dengan ambang keamanan yang benar?
Episode 13 ini merangkum topik keamanan dari episode 5 dan 7 menjadi satu kebijakan hardening yang koheren. Kalian akan belajar memperketat control channel dengan tls-crypt-v2, memaksa tls-version-min 1.2, memilih cipher modern yang mendukung forward secrecy, memverifikasi identitas dengan verify-x509-name, dan menutup akses dengan firewall serta ACL.
Tujuan akhirnya adalah defense-in-depth: berlapis-lapis proteksi sehingga jika satu lapis gagal, lapis berikutnya masih menghalangi penyerang.
Episode 5 memperkenalkan tls-crypt-v2 sebagai evolusi pre-shared key. Untuk hardening, jadikan ini standar: setiap client mendapat key pre-shared unik yang mengenkripsi seluruh control channel.
tls-crypt-v2 /etc/openvpn/server/server-crypt.key
tls-version-min 1.2
remote-cert-tls clienttls-version-min 1.2 menolak handshake TLS di bawah 1.2. remote-cert-tls client di sisi server memastikan sertifikat yang datang memang sertifikat client. Kombinasi ini membuat control channel tertutup dari pengamat dan malu-malu terhadap klien lama yang lemah.
Sertifikat yang ditandatangani CA yang sama tidak selalu berarti yang kalian inginkan. Untuk membatasi hanya sertifikat tertentu yang diterima, gunakan verify-x509-name:
verify-x509-name vpn.example.com name-prefixverify-x509-name vpn.example.com name-prefix memastikan subject sertifikat server diawali dengan nama tersebut. Ini mencegah sertifikat sah dari CA yang sama namun untuk domain lain diterima sebagai server.
Satu blok hardening untuk sisi server yang konsisten dengan episode 5 dan 7:
tls-crypt-v2 /etc/openvpn/server/server-crypt.key
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
remote-cert-tls client
reneg-sec 1800Forward secrecy memastikan bahwa meskipun kunci privat server bocor di masa depan, sesi yang sudah lewat tetap aman. Ini dicapai dengan ephemeral key exchange seperti ECDHE. Server yang menawarkan hanya suite ECDHE tidak bisa dibongkar retroaktif.
Konfigurasi di atas sudah memakai TLS-ECDHE-... — perhatikan bahwa ECDHE adalah syarat untuk forward secrecy. Hindari suite DH statis yang tidak memberikan jaminan ini.
Data channel mengikuti kebijakan yang sama. Tetapkan daftar cipher yang kuat dan tegas:
ncp-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
cipher AES-256-GCM
auth SHA256Tidak ada cipher mode CBC dalam daftar ini — hanya authenticated encryption. auth SHA256 tetap ada untuk kompatibilitas dengan klien lama yang belum mendukung NCP.
Hardening tidak berhenti di konfigurasi. Sertifikat harus dimonitor masa berlakunya dan CA dijaga dari akses yang tidak perlu:
openssl x509 -in /etc/openvpn/server/server.crt -noout -datesopenssl x509 -in ... -noout -dates menampilkan tanggal berlaku sertifikat. Kebiasaan baik: audit masa berlaku setiap bulan. Certificate expiry monitoring akan dibahas lebih lanjut di episode 19.
Server VPN sebaiknya hanya melayani satu port dari satu protokol. Persempit permukaan serangan dengan firewall yang ketat:
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -j DROPAturan di atas hanya membuka UDP 1194 dan SSH dari jaringan internal, lalu menolak sisanya. Policy default DROP jauh lebih aman daripada membuka semua port dan menutup satu per satu.
Secara default, client di subnet VPN bisa saling berkomunikasi. Jika tidak diinginkan, blokir antar client sambil tetap mengizinkan akses ke jaringan belakang:
iptables -I FORWARD -i tun0 -o tun0 -j DROPRule ini menolak paket yang masuk dan keluar melalui tun0 — artinya client tidak bisa saling menjangkau, tapi tetap bisa mencapai jaringan yang dirutekan lewat server.
Di atas firewall, kencangkan kembali knob aplikasi: max-clients dari episode 11 untuk membatasi beban, management interface dari episode 8 yang hanya terikat ke loopback, dan tls-crypt-v2 untuk menolak probe sebelum handshake. Setiap lapis menaikkan biaya serangan penyerang.
Inti yang harus dibawa pulang:
tls-crypt-v2 mengenkripsi control channel dan memfilter probe.tls-version-min 1.2 menolak klien TLS lama yang lemah.verify-x509-name membatasi identitas yang diterima.Di episode 14 selanjutnya kita akan membahas Data Channel Offload (DCO) dan performa — memindahkan pemrosesan data channel ke kernel dengan modul ovpn-dco, keuntungan zero-copy, multiqueue, dan offloading hardware, sampai setup DCO dan kompatibilitasnya dengan driver Windows. Setelah episode ini, kalian siap mengoptimalkan throughput hingga kelas 10Gbps.