Penginstal OpenVPN untuk Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux dan AlmaLinux.
Skrip ini memungkinkan Anda menyiapkan server VPN aman Anda sendiri hanya dalam beberapa detik.
Anda juga dapat memeriksa wireguard-install, sebuah penginstal sederhana untuk protokol VPN yang lebih sederhana, aman, cepat, dan modern.
Pertama, dapatkan skripnya dan buat agar dapat dieksekusi:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Kemudian jalankan:
./openvpn-install.sh
Anda perlu menjalankan skrip sebagai root dan mengaktifkan modul TUN.
Pertama kali Anda menjalankannya, Anda harus mengikuti asisten dan menjawab beberapa pertanyaan untuk menyiapkan server VPN Anda.
Ketika OpenVPN diinstal, Anda dapat menjalankan skrip lagi, dan Anda akan mendapatkan pilihan untuk:
Di direktori home Anda, Anda akan memiliki file .ovpn
. Ini adalah file konfigurasi klien. Unduh dari server Anda dan sambungkan menggunakan klien OpenVPN favorit Anda.
Jika Anda memiliki pertanyaan, buka FAQ terlebih dahulu. Harap baca semuanya sebelum membuka terbitan.
TOLONG jangan kirimi saya email atau pesan pribadi untuk meminta bantuan. Satu-satunya tempat untuk mendapatkan bantuan adalah masalahnya. Orang lain mungkin dapat membantu dan di masa mendatang, pengguna lain mungkin juga mengalami masalah yang sama seperti Anda. Waktuku tidak tersedia gratis hanya untukmu, kamu tidak istimewa.
Dimungkinkan juga untuk menjalankan skrip tanpa kepala, misalnya tanpa menunggu masukan pengguna, secara otomatis.
Contoh penggunaan:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Satu set variabel default kemudian akan ditetapkan, dengan meneruskan kebutuhan input pengguna.
Jika Anda ingin menyesuaikan instalasi Anda, Anda dapat mengekspornya atau menentukannya pada baris yang sama, seperti yang ditunjukkan di atas.
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
Jika server berada di belakang NAT, Anda dapat menentukan titik akhirnya dengan variabel ENDPOINT
. Jika titik akhir adalah alamat IP publik di belakangnya, Anda dapat menggunakan ENDPOINT=$(curl -4 ifconfig.co)
(skrip akan default ke ini). Titik akhir dapat berupa IPv4 atau domain.
Variabel lain dapat diatur tergantung pilihan Anda (enkripsi, kompresi). Anda dapat mencarinya di fungsi installQuestions()
skrip.
Klien yang dilindungi kata sandi tidak didukung oleh metode instalasi tanpa kepala karena input pengguna diharapkan oleh Easy-RSA.
Instalasi tanpa kepala kurang lebih idempoten, karena telah dibuat aman untuk dijalankan beberapa kali dengan parameter yang sama, misalnya oleh penyedia negara seperti Ansible/Terraform/Salt/Chef/Puppet. Ia hanya akan menginstal dan membuat ulang PKI Easy-RSA jika belum ada, dan hanya akan menginstal OpenVPN dan dependensi upstream lainnya jika OpenVPN belum diinstal. Ini akan membuat ulang semua konfigurasi lokal dan membuat ulang file klien pada setiap proses tanpa kepala.
Penambahan pengguna baru juga dapat diotomatisasi. Di sini, kuncinya adalah memberikan nilai (string) dari variabel MENU_OPTION
bersama dengan variabel wajib lainnya sebelum menjalankan skrip.
Skrip Bash berikut menambahkan pengguna baru foo
ke konfigurasi OpenVPN yang ada
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
Skrip mendukung distribusi Linux berikut:
Mendukung | |
---|---|
AlmaLinux 8 | ✅ |
Amazon Linux 2 | ✅ |
Lengkungan Linux | ✅ |
CentOS7 | ✅ |
Aliran CentOS >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
Fedora >= 35 | ✅ ? |
OracleLinux8 | ✅ |
Rocky Linux 8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
Yang perlu diperhatikan:
amd64
.systemd
. Skrip ini didasarkan pada karya besar Nyr dan para kontributornya.
Sejak tahun 2016, kedua skrip tersebut telah menyimpang dan tidak sama lagi, terutama di baliknya. Tujuan utama skrip ini adalah meningkatkan keamanan. Namun sejak itu, skrip telah ditulis ulang sepenuhnya dan banyak fitur telah ditambahkan. Skrip ini hanya kompatibel dengan distribusi terbaru, jadi jika Anda perlu menggunakan server atau klien yang sangat lama, saya sarankan menggunakan skrip Nyr.
Tanya Jawab selengkapnya di FAQ.md.
T: Penyedia mana yang Anda rekomendasikan?
J: Saya merekomendasikan ini:
T: Klien OpenVPN manakah yang Anda rekomendasikan?
J: Jika memungkinkan, klien resmi OpenVPN 2.4.
openvpn
dari distribusi Anda. Ada repositori APT resmi untuk distribusi berbasis Debian/Ubuntu.T: Apakah saya aman dari NSA dengan menggunakan skrip Anda?
J: Harap tinjau model ancaman Anda. Meskipun skrip ini mempertimbangkan keamanan dan menggunakan enkripsi canggih, Anda tidak boleh menggunakan VPN jika ingin bersembunyi dari NSA.
T: Apakah ada dokumentasi OpenVPN?
J: Ya, silakan buka Manual OpenVPN, yang merujuk pada semua opsi.
Tanya Jawab selengkapnya di FAQ.md.
Solusi yang menyediakan server OpenVPN siap pakai berdasarkan skrip ini sekaligus tersedia untuk:
openvpn-terraform-install
openvpn-ephemeral
Silakan buka isu sebelum mengirimkan PR jika Anda ingin mendiskusikan perubahan, terutama jika perubahannya besar.
Kami menggunakan shellcheck dan shfmt untuk menegakkan pedoman gaya bash dan praktik yang baik. Mereka dieksekusi untuk setiap komit/PR dengan GitHub Actions, sehingga Anda dapat memeriksa konfigurasinya di sini.
Peringatan Ini belum diperbarui untuk OpenVPN 2.5 dan yang lebih baru.
Pengaturan default OpenVPN cukup lemah dalam hal enkripsi. Skrip ini bertujuan untuk memperbaikinya.
OpenVPN 2.4 adalah pembaruan hebat dalam hal enkripsi. Itu menambahkan dukungan untuk ECDSA, ECDH, AES GCM, NCP dan tls-crypt.
Jika Anda ingin informasi lebih lanjut tentang opsi yang disebutkan di bawah, kunjungi manual OpenVPN. Ini sangat lengkap.
Sebagian besar hal terkait enkripsi OpenVPN dikelola oleh Easy-RSA. Parameter default ada di file vars.example.
Secara default, OpenVPN tidak mengaktifkan kompresi. Skrip ini menyediakan dukungan untuk algoritma LZ0 dan LZ4 (v1/v2), yang terakhir lebih efisien.
Namun, penggunaan kompresi tidak disarankan karena serangan VORACLE memanfaatkannya.
OpenVPN menerima TLS 1.0 secara default, yang usianya hampir 20 tahun.
Dengan tls-version-min 1.2
kami menerapkan TLS 1.2, yang merupakan protokol terbaik yang tersedia saat ini untuk OpenVPN.
TLS 1.2 didukung sejak OpenVPN 2.3.3.
OpenVPN menggunakan sertifikat RSA dengan kunci 2048 bit secara default.
OpenVPN 2.4 menambahkan dukungan untuk ECDSA. Kriptografi kurva elips lebih cepat, lebih ringan dan lebih aman.
Skrip ini menyediakan:
prime256v1
/ secp384r1
/ secp521r1
3072
kunci 2048
4096
Defaultnya adalah ECDSA dengan prime256v1
.
OpenVPN menggunakan SHA-256
sebagai hash tanda tangan secara default, begitu pula skripnya. Tidak ada pilihan lain untuk saat ini.
Secara default, OpenVPN menggunakan BF-CBC
sebagai sandi saluran data. Blowfish adalah algoritma lama (1993) dan lemah. Bahkan dokumentasi resmi OpenVPN mengakuinya.
Standarnya adalah BF-CBC, singkatan dari Blowfish dalam mode Cipher Block Chaining.
Penggunaan BF-CBC tidak lagi disarankan karena ukuran bloknya 64-bit. Ukuran blok yang kecil ini memungkinkan serangan berdasarkan tabrakan, seperti yang ditunjukkan oleh SWEET32. Lihat https://community.openvpn.net/openvpn/wiki/SWEET32 untuk detailnya. Peneliti keamanan di INRIA menerbitkan serangan terhadap cipher blok 64-bit, seperti 3DES dan Blowfish. Mereka menunjukkan bahwa mereka mampu memulihkan teks biasa ketika data yang sama dikirim cukup sering, dan menunjukkan bagaimana mereka dapat menggunakan kerentanan skrip lintas situs untuk mengirim data yang diinginkan dengan cukup sering. Ini berfungsi melalui HTTPS, tetapi juga berfungsi untuk HTTP-over-OpenVPN. Lihat https://sweet32.info/ untuk penjelasan yang lebih baik dan lebih rumit.
Sandi default OpenVPN, BF-CBC, terpengaruh oleh serangan ini.
Memang, AES adalah standar saat ini. Ini adalah sandi tercepat dan teraman yang ada saat ini. SEED dan Camellia tidak rentan saat ini tetapi lebih lambat dibandingkan AES dan relatif kurang dipercaya.
Dari cipher yang saat ini didukung, OpenVPN saat ini merekomendasikan penggunaan AES-256-CBC atau AES-128-CBC. OpenVPN 2.4 dan yang lebih baru juga akan mendukung GCM. Untuk versi 2.4+, sebaiknya gunakan AES-256-GCM atau AES-128-GCM.
AES-256 40% lebih lambat dibandingkan AES-128, dan tidak ada alasan nyata untuk menggunakan kunci 256 bit dibandingkan kunci 128 bit dengan AES. (Sumber: 1,2). Selain itu, AES-256 lebih rentan terhadap serangan Timing.
AES-GCM adalah sandi AEAD yang berarti secara bersamaan memberikan jaminan kerahasiaan, integritas, dan keaslian data.
Skrip ini mendukung sandi berikut:
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
Dan defaultnya adalah AES-128-GCM
.
OpenVPN 2.4 menambahkan fitur yang disebut "NCP": Parameter Kripto yang Dapat Dinegosiasikan . Artinya Anda dapat menyediakan cipher suite seperti HTTPS. Ini diatur ke AES-256-GCM:AES-128-GCM
secara default dan menggantikan parameter --cipher
saat digunakan dengan klien OpenVPN 2.4. Demi kesederhanaan, skrip menyetel --cipher
dan --ncp-cipher
ke sandi yang dipilih di atas.
OpenVPN 2.4 akan menegosiasikan sandi terbaik yang tersedia secara default (misalnya ECDHE+AES-256-GCM)
Skrip mengusulkan opsi berikut, bergantung pada sertifikat:
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
Standarnya adalah TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN menggunakan kunci DH 2048 bit secara default.
OpenVPN 2.4 menambahkan dukungan untuk kunci ECDH. Kriptografi kurva elips lebih cepat, lebih ringan dan lebih aman.
Selain itu, membuat kunci DH klasik bisa memakan waktu yang sangat lama. Kunci ECDH bersifat sementara: dibuat dengan cepat.
Skrip menyediakan opsi berikut:
prime256v1
/ secp384r1
/ secp521r1
3072
kunci 2048
4096
Standarnya adalah prime256v1
.
Dari wiki OpenVPN, tentang --auth
:
Otentikasi paket saluran data dan (jika diaktifkan) paket saluran kontrol tls-auth dengan HMAC menggunakan algoritma intisari pesan alg. (Defaultnya adalah SHA1 ). HMAC adalah algoritma otentikasi pesan (MAC) yang umum digunakan yang menggunakan string data, algoritma hash aman, dan kunci, untuk menghasilkan tanda tangan digital.
Jika mode sandi AEAD (misalnya GCM) dipilih, algoritme --auth yang ditentukan untuk saluran data diabaikan, dan metode autentikasi sandi AEAD digunakan sebagai gantinya. Perhatikan bahwa alg masih menentukan intisari yang digunakan untuk tls-auth.
Skrip menyediakan pilihan berikut:
SHA256
SHA384
SHA512
Standarnya adalah SHA256
.
tls-auth
dan tls-crypt
Dari wiki OpenVPN, tentang tls-auth
:
Tambahkan lapisan tambahan autentikasi HMAC di atas saluran kontrol TLS untuk mengurangi serangan DoS dan serangan pada tumpukan TLS.
Singkatnya, --tls-auth mengaktifkan semacam "firewall HMAC" pada port TCP/UDP OpenVPN, di mana paket saluran kontrol TLS dengan tanda tangan HMAC yang salah dapat langsung dihapus tanpa respons.
Tentang tls-crypt
:
Enkripsi dan autentikasi semua paket saluran kontrol dengan kunci dari keyfile. (Lihat --tls-auth untuk latar belakang lebih lanjut.)
Mengenkripsi (dan mengautentikasi) paket saluran kontrol:
- memberikan privasi lebih dengan menyembunyikan sertifikat yang digunakan untuk koneksi TLS,
- mempersulit identifikasi lalu lintas OpenVPN,
- memberikan keamanan pasca-kuantum "orang miskin", terhadap penyerang yang tidak akan pernah mengetahui kunci yang dibagikan sebelumnya (yaitu tidak ada kerahasiaan ke depan).
Jadi keduanya memberikan lapisan keamanan tambahan dan memitigasi serangan DoS. Mereka tidak digunakan secara default oleh OpenVPN.
tls-crypt
adalah fitur OpenVPN 2.4 yang menyediakan enkripsi selain otentikasi (tidak seperti tls-auth
). Ini lebih ramah privasi.
Skrip mendukung keduanya dan menggunakan tls-crypt
secara default.
Anda bisa mengucapkan terima kasih jika Anda mau!
Terima kasih banyak kepada para kontributor dan karya asli Nyr.
Proyek ini berada di bawah Lisensi MIT