Buku "Linux Beraksi"

Buku "Linux Beraksi" Halo warga Khabro! Dalam buku tersebut, David Clinton menjelaskan 12 proyek nyata, termasuk mengotomatiskan sistem pencadangan dan pemulihan Anda, menyiapkan cloud file pribadi bergaya Dropbox, dan membuat server MediaWiki Anda sendiri. Anda akan menjelajahi virtualisasi, pemulihan bencana, keamanan, pencadangan, DevOps, dan pemecahan masalah sistem melalui studi kasus yang menarik. Setiap bab diakhiri dengan tinjauan praktik terbaik, daftar istilah baru, dan latihan.

Kutipan β€œ10.1. Membuat terowongan OpenVPN"

Saya sudah berbicara banyak tentang enkripsi di buku ini. SSH dan SCP dapat melindungi data yang ditransfer melalui koneksi jarak jauh (Bab 3), enkripsi file dapat melindungi data saat disimpan di server (Bab 8), dan sertifikat TLS/SSL dapat melindungi data yang ditransfer antara situs dan browser klien (Bab 9) . Namun terkadang data Anda perlu dilindungi pada jangkauan koneksi yang lebih luas. Misalnya, mungkin beberapa anggota tim Anda bekerja di jalan sambil tersambung ke Wi-Fi melalui hotspot publik. Anda tentu saja tidak boleh berasumsi bahwa semua titik akses tersebut aman, namun karyawan Anda memerlukan cara untuk terhubung ke sumber daya perusahaanβ€”dan di situlah VPN dapat membantu.

Terowongan VPN yang dirancang dengan baik menyediakan koneksi langsung antara klien jarak jauh dan server dengan cara menyembunyikan data saat data bergerak melalui jaringan yang tidak aman. Terus? Anda telah melihat banyak alat yang dapat melakukan hal ini dengan enkripsi. Nilai sebenarnya dari VPN adalah dengan membuka terowongan, Anda dapat menghubungkan jaringan jarak jauh seolah-olah semuanya lokal. Dalam arti tertentu, Anda menggunakan jalan pintas.

Dengan menggunakan jaringan yang diperluas ini, administrator dapat melakukan pekerjaan mereka di server mereka dari mana saja. Namun yang lebih penting, perusahaan dengan sumber daya yang tersebar di beberapa lokasi dapat menjadikan sumber daya tersebut terlihat dan dapat diakses oleh semua kelompok yang membutuhkannya, di mana pun mereka berada (Gambar 10.1).

Terowongan itu sendiri tidak menjamin keamanan. Namun salah satu standar enkripsi dapat dimasukkan dalam struktur jaringan, yang secara signifikan meningkatkan tingkat keamanan. Terowongan yang dibuat menggunakan paket OpenVPN sumber terbuka menggunakan enkripsi TLS/SSL yang sama dengan yang telah Anda baca. OpenVPN bukan satu-satunya opsi penerowongan yang tersedia, namun merupakan salah satu yang paling terkenal. Ini dianggap sedikit lebih cepat dan lebih aman dibandingkan protokol terowongan Layer 2 alternatif yang menggunakan enkripsi IPsec.

Apakah Anda ingin semua orang di tim Anda berkomunikasi dengan aman satu sama lain saat dalam perjalanan atau bekerja di gedung yang berbeda? Untuk melakukan ini, Anda perlu membuat server OpenVPN untuk memungkinkan berbagi aplikasi dan akses ke lingkungan jaringan lokal server. Agar ini berfungsi, yang perlu Anda lakukan hanyalah menjalankan dua mesin virtual atau dua kontainer: satu untuk bertindak sebagai server/host dan satu lagi untuk bertindak sebagai klien. Membangun VPN bukanlah proses yang sederhana, jadi mungkin perlu beberapa menit untuk memikirkan gambaran besarnya.

Buku "Linux Beraksi"

10.1.1. Konfigurasi Server OpenVPN

Sebelum Anda mulai, saya akan memberi Anda beberapa saran berguna. Jika Anda akan melakukannya sendiri (dan saya sangat menyarankan Anda melakukannya), Anda mungkin akan mendapati diri Anda bekerja dengan beberapa jendela terminal terbuka di Desktop Anda, masing-masing terhubung ke mesin yang berbeda. Ada risiko bahwa suatu saat Anda akan memasukkan perintah yang salah ke dalam jendela. Untuk menghindari hal ini, Anda dapat menggunakan perintah nama host untuk mengubah nama mesin yang ditampilkan pada baris perintah menjadi sesuatu yang dengan jelas memberi tahu Anda di mana Anda berada. Setelah Anda melakukan ini, Anda harus keluar dari server dan masuk kembali agar pengaturan baru dapat diterapkan. Ini adalah tampilannya:

Buku "Linux Beraksi"
Dengan mengikuti pendekatan ini dan memberikan nama yang sesuai untuk setiap mesin yang Anda gunakan, Anda dapat dengan mudah melacak keberadaan Anda.

Setelah menggunakan nama host, Anda mungkin menemukan pesan Unable to Resolve Host OpenVPN-Server yang mengganggu saat menjalankan perintah berikutnya. Memperbarui file /etc/hosts dengan nama host baru yang sesuai akan menyelesaikan masalah.

Mempersiapkan server Anda untuk OpenVPN

Untuk menginstal OpenVPN di server Anda, Anda memerlukan dua paket: openvpn dan easy-rsa (untuk mengelola proses pembuatan kunci enkripsi). Pengguna CentOS harus terlebih dahulu menginstal repositori epel-release jika diperlukan, seperti yang Anda lakukan di Bab 2. Untuk dapat menguji akses ke aplikasi server, Anda juga dapat menginstal server web Apache (apache2 di Ubuntu dan httpd di CentOS).

Saat Anda menyiapkan server, saya sarankan untuk mengaktifkan firewall yang memblokir semua port kecuali 22 (SSH) dan 1194 (port default OpenVPN). Contoh ini mengilustrasikan cara kerja ufw di Ubuntu, tapi saya yakin Anda masih ingat program firewalld CentOS dari Bab 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Untuk mengaktifkan perutean internal antar antarmuka jaringan di server, Anda perlu menghapus komentar pada satu baris (net.ipv4.ip_forward = 1) di file /etc/sysctl.conf. Ini akan memungkinkan klien jarak jauh untuk dialihkan sesuai kebutuhan setelah mereka terhubung. Agar opsi baru berfungsi, jalankan sysctl -p:

# nano /etc/sysctl.conf
# sysctl -p

Lingkungan server Anda sekarang telah dikonfigurasi sepenuhnya, namun masih ada satu hal lagi yang harus dilakukan sebelum Anda siap: Anda harus menyelesaikan langkah-langkah berikut (kita akan membahasnya secara rinci selanjutnya).

  1. Buat satu set kunci enkripsi infrastruktur kunci publik (PKI) di server menggunakan skrip yang disediakan dengan paket easy-rsa. Pada dasarnya, server OpenVPN juga bertindak sebagai otoritas sertifikat (CA) tersendiri.
  2. Siapkan kunci yang sesuai untuk klien
  3. Konfigurasikan file server.conf untuk server
  4. Siapkan klien OpenVPN Anda
  5. Periksa VPN Anda

Menghasilkan kunci enkripsi

Untuk menyederhanakannya, Anda dapat mengatur infrastruktur utama Anda di mesin yang sama tempat server OpenVPN berjalan. Namun, praktik terbaik keamanan biasanya menyarankan penggunaan server CA terpisah untuk penerapan produksi. Proses menghasilkan dan mendistribusikan sumber daya kunci enkripsi untuk digunakan dalam OpenVPN diilustrasikan pada Gambar. 10.2.

Buku "Linux Beraksi"
Ketika Anda menginstal OpenVPN, direktori /etc/openvpn/ secara otomatis dibuat, namun belum ada apa pun di dalamnya. Paket openvpn dan easy-rsa dilengkapi dengan contoh file templat yang dapat Anda gunakan sebagai dasar konfigurasi Anda. Untuk memulai proses sertifikasi, salin direktori template easy-rsa dari /usr/share/ ke /etc/openvpn dan ubah ke direktori easy-rsa/:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Direktori easy-rsa sekarang akan berisi beberapa skrip. Di meja 10.1 mencantumkan alat yang akan Anda gunakan untuk membuat kunci.

Buku "Linux Beraksi"

Operasi di atas memerlukan hak akses root, jadi Anda harus menjadi root melalui sudo su.

File pertama yang akan Anda gunakan disebut vars dan berisi variabel lingkungan yang digunakan easy-rsa saat membuat kunci. Anda perlu mengedit file untuk menggunakan nilai Anda sendiri, bukan nilai default yang sudah ada. Seperti inilah tampilan file saya (Listing 10.1).

Daftar 10.1. Fragmen utama dari file /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

Menjalankan file vars akan meneruskan nilainya ke lingkungan shell, di mana nilai tersebut akan disertakan dalam konten kunci baru Anda. Mengapa perintah sudo tidak berfungsi dengan sendirinya? Karena pada langkah pertama kita edit script bernama vars lalu terapkan. Menerapkan dan berarti file vars meneruskan nilainya ke lingkungan shell, di mana nilai tersebut akan disertakan dalam konten kunci baru Anda.

Pastikan untuk menjalankan kembali file menggunakan shell baru untuk menyelesaikan proses yang belum selesai. Ketika ini selesai, skrip akan meminta Anda menjalankan skrip lain, bersihkan semua, untuk menghapus konten apa pun di direktori /etc/openvpn/easy-rsa/keys/:

Buku "Linux Beraksi"
Biasanya, langkah selanjutnya adalah menjalankan skrip clean-all, diikuti dengan build-ca, yang menggunakan skrip pkitool untuk membuat sertifikat root. Anda akan diminta untuk mengonfirmasi pengaturan identitas yang disediakan oleh vars:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Berikutnya adalah skrip build-key-server. Karena menggunakan skrip pkitool yang sama bersama dengan sertifikat root baru, Anda akan melihat pertanyaan yang sama untuk mengonfirmasi pembuatan pasangan kunci. Kunci akan diberi nama berdasarkan argumen yang Anda berikan, yang, kecuali Anda menjalankan beberapa VPN di mesin ini, biasanya akan menjadi server, seperti pada contoh:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN menggunakan parameter yang dihasilkan oleh algoritma Diffie-Hellman (menggunakan build-dh) untuk menegosiasikan otentikasi untuk koneksi baru. File yang dibuat di sini tidak perlu dirahasiakan, tetapi harus dibuat menggunakan skrip build-dh untuk kunci RSA yang sedang aktif. Jika Anda membuat kunci RSA baru di masa mendatang, Anda juga perlu memperbarui file Diffie-Hellman:

# ./build-dh

Kunci sisi server Anda sekarang akan berakhir di direktori /etc/openvpn/easy-rsa/keys/, tetapi OpenVPN tidak mengetahui hal ini. Secara default, OpenVPN akan mencari kunci di /etc/openvpn/, jadi salinlah:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Mempersiapkan Kunci Enkripsi Klien

Seperti yang telah Anda lihat, enkripsi TLS menggunakan pasangan kunci yang cocok: satu dipasang di server dan satu lagi dipasang di klien jarak jauh. Ini berarti Anda memerlukan kunci klien. Pkitool teman lama kami adalah apa yang Anda butuhkan untuk ini. Dalam contoh ini, ketika kita menjalankan program di direktori /etc/openvpn/easy-rsa/, kita meneruskan argumen klien untuk menghasilkan file bernama client.crt dan client.key:

# ./pkitool client

Kedua file klien, bersama dengan file ca.crt asli yang masih ada di direktori kunci/, sekarang harus ditransfer dengan aman ke klien Anda. Karena kepemilikan dan hak aksesnya, hal ini mungkin tidak mudah. Pendekatan paling sederhana adalah dengan menyalin secara manual konten file sumber (dan hanya konten itu) ke terminal yang berjalan di desktop PC Anda (pilih teks, klik kanan padanya dan pilih Salin dari menu). Kemudian tempelkan ini ke file baru dengan nama yang sama yang Anda buat di terminal kedua yang terhubung ke klien Anda.

Tapi siapa pun bisa memotong dan menempel. Sebaliknya, berpikirlah seperti administrator karena Anda tidak selalu memiliki akses ke GUI yang memungkinkan operasi potong/tempel. Salin file ke direktori home pengguna Anda (sehingga operasi scp jarak jauh dapat mengaksesnya), lalu gunakan chown untuk mengubah kepemilikan file dari root ke pengguna non-root biasa sehingga tindakan scp jarak jauh dapat dilakukan. Pastikan semua file Anda saat ini terinstal dan dapat diakses. Anda akan memindahkannya ke klien nanti:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Dengan serangkaian kunci enkripsi lengkap yang siap digunakan, Anda perlu memberi tahu server bagaimana Anda ingin membuat VPN. Ini dilakukan dengan menggunakan file server.conf.

Mengurangi jumlah penekanan tombol

Apakah terlalu banyak mengetik? Perluasan dengan tanda kurung akan membantu mengurangi enam perintah ini menjadi dua. Saya yakin Anda dapat mempelajari dua contoh ini dan memahami apa yang terjadi. Yang lebih penting lagi, Anda akan dapat memahami cara menerapkan prinsip-prinsip ini pada operasi yang melibatkan puluhan atau bahkan ratusan elemen:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Menyiapkan file server.conf

Bagaimana Anda tahu seperti apa tampilan file server.conf? Ingat templat direktori easy-rsa yang Anda salin dari /usr/share/? Saat Anda menginstal OpenVPN, Anda memiliki file templat konfigurasi terkompresi yang dapat Anda salin ke /etc/openvpn/. Saya akan memanfaatkan fakta bahwa templat tersebut diarsipkan dan memperkenalkan Anda pada alat yang berguna: zcat.

Anda sudah mengetahui tentang mencetak isi teks suatu file ke layar menggunakan perintah cat, namun bagaimana jika file tersebut dikompres menggunakan gzip? Anda selalu dapat mengekstrak file dan kemudian cat akan dengan senang hati mengeluarkannya, tapi itu satu atau dua langkah lebih banyak dari yang diperlukan. Sebaliknya, seperti yang sudah Anda duga, Anda dapat mengeluarkan perintah zcat untuk memuat teks yang belum dibongkar ke dalam memori dalam satu langkah. Dalam contoh berikut, alih-alih mencetak teks ke layar, Anda akan mengarahkannya ke file baru bernama server.conf:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Mari kita kesampingkan dokumentasi ekstensif dan berguna yang disertakan dengan file tersebut dan lihat seperti apa tampilannya setelah Anda selesai mengedit. Perhatikan bahwa titik koma (;) memberitahu OpenVPN untuk tidak membaca atau mengeksekusi baris berikutnya (Listing 10.2).

Buku "Linux Beraksi"
Mari kita lihat beberapa pengaturan ini.

  • Secara default, OpenVPN berjalan pada port 1194. Anda dapat mengubahnya, misalnya, untuk lebih menyembunyikan aktivitas Anda atau menghindari konflik dengan terowongan aktif lainnya. Karena 1194 memerlukan sedikit koordinasi dengan klien, yang terbaik adalah melakukannya dengan cara ini.
  • OpenVPN menggunakan Protokol Kontrol Transmisi (TCP) atau Protokol Datagram Pengguna (UDP) untuk mengirimkan data. TCP mungkin sedikit lebih lambat, namun lebih dapat diandalkan dan lebih mudah dipahami oleh aplikasi yang berjalan di kedua ujung terowongan.
  • Anda dapat menentukan dev tun ketika Anda ingin membuat terowongan IP yang lebih sederhana dan efisien yang membawa konten data dan tidak lebih. Sebaliknya, jika Anda perlu menghubungkan beberapa antarmuka jaringan (dan jaringan yang diwakilinya), membuat jembatan Ethernet, Anda harus memilih dev tap. Jika Anda tidak mengerti maksud semua ini, gunakan argumen tun.
  • Empat baris berikutnya memberi OpenVPN nama dari tiga file otentikasi di server dan file opsi dh2048 yang Anda buat sebelumnya.
  • Baris server menetapkan rentang dan subnet mask yang akan digunakan untuk menetapkan alamat IP ke klien saat login.
  • Parameter push opsional "rute 10.0.3.0 255.255.255.0" memungkinkan klien jarak jauh mengakses subnet pribadi di belakang server. Agar ini berfungsi juga memerlukan pengaturan jaringan di server itu sendiri sehingga subnet pribadi mengetahui tentang subnet OpenVPN (10.8.0.0).
  • Jalur port-share localhost 80 memungkinkan Anda mengalihkan lalu lintas klien yang datang pada port 1194 ke server web lokal yang mendengarkan pada port 80. (Ini akan berguna jika Anda akan menggunakan server web untuk menguji VPN Anda.) Ini hanya berfungsi lalu ketika protokol tcp dipilih.
  • Baris user none dan group nogroup harus diaktifkan dengan menghilangkan titik koma (;). Memaksa klien jarak jauh untuk dijalankan sebagai none dan nogroup memastikan bahwa sesi di server tidak memiliki hak istimewa.
  • log menetapkan bahwa entri log saat ini akan menimpa entri lama setiap kali OpenVPN dimulai, sedangkan log-append menambahkan entri baru ke file log yang ada. File openvpn.log sendiri ditulis ke direktori /etc/openvpn/.

Selain itu, nilai klien-ke-klien juga sering ditambahkan ke file konfigurasi sehingga banyak klien dapat melihat satu sama lain selain server OpenVPN. Jika Anda puas dengan konfigurasi Anda, Anda dapat memulai server OpenVPN:

# systemctl start openvpn

Karena perubahan sifat hubungan antara OpenVPN dan systemd, sintaks berikut terkadang diperlukan untuk memulai layanan: systemctl start openvpn@server.

Menjalankan ip addr untuk mencantumkan antarmuka jaringan server Anda sekarang akan menampilkan tautan ke antarmuka baru yang disebut tun0. OpenVPN akan membuatnya untuk melayani klien masuk:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Anda mungkin perlu me-reboot server sebelum semuanya mulai berfungsi sepenuhnya. Perhentian selanjutnya adalah komputer klien.

10.1.2. Mengonfigurasi klien OpenVPN

Secara tradisional, terowongan dibangun dengan setidaknya dua pintu keluar (jika tidak, kita menyebutnya gua). OpenVPN yang dikonfigurasi dengan benar di server mengarahkan lalu lintas masuk dan keluar terowongan di satu sisi. Namun Anda juga memerlukan beberapa perangkat lunak yang berjalan di sisi klien, yaitu di ujung lain terowongan.

Di bagian ini, saya akan fokus pada pengaturan manual beberapa jenis komputer Linux untuk bertindak sebagai klien OpenVPN. Namun ini bukan satu-satunya cara untuk memanfaatkan peluang ini. OpenVPN mendukung aplikasi klien yang dapat diinstal dan digunakan pada desktop dan laptop yang menjalankan Windows atau macOS, serta ponsel pintar dan tablet Android dan iOS. Lihat openvpn.net untuk detailnya.

Paket OpenVPN perlu diinstal pada mesin klien seperti yang diinstal pada server, meskipun easy-rsa tidak diperlukan di sini karena kunci yang Anda gunakan sudah ada. Anda perlu menyalin file template client.conf ke direktori /etc/openvpn/ yang baru saja Anda buat. Kali ini file tidak akan di-zip, jadi perintah cp biasa akan berfungsi dengan baik:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

Sebagian besar pengaturan di file client.conf Anda cukup jelas: pengaturan tersebut harus sesuai dengan nilai di server. Seperti yang dapat Anda lihat dari contoh file berikut, parameter uniknya adalah remote 192.168.1.23 1194, yang memberi tahu klien alamat IP server. Sekali lagi, pastikan ini adalah alamat server Anda. Anda juga harus memaksa komputer klien untuk memverifikasi keaslian sertifikat server untuk mencegah kemungkinan serangan man-in-the-middle. Salah satu cara untuk melakukan ini adalah dengan menambahkan baris server remote-cert-tls (Listing 10.3).

Buku "Linux Beraksi"
Anda sekarang dapat masuk ke direktori /etc/openvpn/ dan mengekstrak kunci sertifikasi dari server. Ganti alamat IP server atau nama domain dalam contoh dengan nilai Anda:

Buku "Linux Beraksi"
Kemungkinan besar tidak ada hal menarik yang akan terjadi sampai Anda menjalankan OpenVPN di klien. Karena Anda perlu menyampaikan beberapa argumen, Anda akan melakukannya dari baris perintah. Argumen --tls-client memberi tahu OpenVPN bahwa Anda akan bertindak sebagai klien dan terhubung melalui enkripsi TLS, dan --config menunjuk ke file konfigurasi Anda:

# openvpn --tls-client --config /etc/openvpn/client.conf

Baca keluaran perintah dengan cermat untuk memastikan Anda terhubung dengan benar. Jika terjadi kesalahan saat pertama kali, mungkin disebabkan oleh ketidakcocokan pengaturan antara file konfigurasi server dan klien atau masalah koneksi jaringan/firewall. Berikut beberapa tip pemecahan masalah.

  • Bacalah dengan cermat keluaran operasi OpenVPN pada klien. Ini sering kali berisi nasihat berharga tentang apa yang sebenarnya tidak boleh dilakukan dan mengapa.
  • Periksa pesan kesalahan pada file openvpn.log dan openvpn-status.log di direktori /etc/openvpn/ di server.
  • Periksa log sistem di server dan klien untuk pesan terkait OpenVPN dan pesan waktunya. (journalctl -ce akan menampilkan entri terbaru.)
  • Pastikan Anda memiliki koneksi jaringan aktif antara server dan klien (lebih lanjut tentang ini di Bab 14).

Tentang penulis

David Clinton - administrator sistem, guru dan penulis. Dia telah mengelola, menulis, dan membuat materi pendidikan untuk banyak disiplin teknis penting, termasuk sistem Linux, komputasi awan (khususnya AWS), dan teknologi container seperti Docker. Dia menulis buku Pelajari Amazon Web Services dalam Sebulan Makan Siang (Manning, 2017). Banyak kursus pelatihan videonya dapat ditemukan di Pluralsight.com, dan link ke bukunya yang lain (tentang administrasi Linux dan virtualisasi server) tersedia di bootstrap-it.com.

Β»Detail lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
Β» daftar isi
Β» Kutipan

Untuk Khabrozhiteley diskon 25% menggunakan kupon - Linux
Setelah pembayaran buku versi kertas, buku elektronik akan dikirim melalui email.

Sumber: www.habr.com

Tambah komentar