Mari Mengenkripsi

Nginx Reverse Proxy dengan HTTPS melalui LetsEncrypt

Nginx Reverse Proxy dengan HTTPS melalui LetsEncrypt
Ini adalah tindak lanjut dari saya posting sebelumnya di mana kami menyiapkan server proxy terbalik sederhana menggunakan Nginx. Dalam posting ini, kami akan mengamankan koneksi antara klien dan server proxy terbalik menggunakan TLS gratis (a.k.sertifikat SSL) dari LetsEncrypt. Saya mendorong Anda untuk memeriksa posting yang disebutkan di atas tentang proxy terbalik untuk dasar-dasarnya.

Prasyarat

  1. Server dengan IP publik statis. Di sinilah Nginx berjalan.
  2. Server backend dengan situs web yang dimaksud berjalan melalui HTTP
  3. Nama domain terdaftar registered. Saya akan menggunakan ranvirslog.com sebagai nama domain utama saya dan kedua situs web tersebut berada di FQDNs - ww1.ranvirslog.com dan ww2ranvirslog.com

Mendirikan

Jadi alamat IP telah berubah sejak terakhir kali, sejak saya melakukan pengaturan ini lagi. Berikut adalah IP dan nama host baru.

VM/Nama Host IP publik IP pribadi Peran/Fungsi
ReverseProxy 68.183.214.151 10.135.127.136 Titik terminasi TLS dan server proxy terbalik
web1 T/A 10.135.126.102 Hosting ww1.ranvirslog.com

situs web melalui port 80 HTTP

web2 T/A 10.135.126.187 Hosting

ww2.ranvirslog.com

situs web melalui port 80 HTTP

Catatan DNS diatur sedemikian rupa sehingga kedua situs web (subdomain berbeda) menunjuk ke IP publik statis yang sama. Ini adalah alamat IP proxy terbalik Nginx kami:

Rekor Nilai
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Untuk membuat DNS terbalik kami bekerja melalui HTTP yang tidak terenkripsi, kami membuat dua file di /etc/conf.d/ bernama ww1.conf dan ww2.conf masing-masing dengan konfigurasi berikut:

/etc/conf.h/ww1.konf

server
mendengarkan 80;
dengarkan [::]:80;
nama_server ww1.ranvirslog.com;
lokasi /
proxy_pass http://10.135.126.102/;
proxy_buffering mati;
proxy_set_header X-Real-IP $remote_addr;

/etc/conf.h/ww2.konf

server
mendengarkan 80;
dengarkan [::]:80;
nama_server ww2.ranvirslog.com;
lokasi /
proxy_pass http://10.135.126.187/;
proxy_buffering mati;
proxy_set_header X-Real-IP $remote_addr;

Sistem operasi yang kami gunakan adalah Ubuntu 18.04 LTS dan kami punya dihapus file /etc/nginx/sites-enabled/default sehingga Nginx dapat bertindak murni sebagai DNS terbalik menggunakan konfigurasi yang ditunjukkan di atas.

Objektif

Dengan DNS terbalik (dan situs web backend) sudah aktif dan berjalan, tujuan kami adalah memasang satu sertifikat TLS untuk kedua FQDN (yaitu ww1.ranvirslog.com dan ww2.ranvirslog.com)  di proxy terbalik Nginx kami.

Lalu lintas antara klien mana pun dan proxy terbalik akan dienkripsi tetapi lalu lintas antara proxy terbalik dan server backend tidak dienkripsi. Namun, ini masih merupakan opsi yang jauh lebih aman daripada tidak memiliki HTTPS sama sekali. Untuk kasus di mana proxy terbalik dan berbagai server web berada di host yang sama, katakanlah jika Anda menggunakan wadah Docker untuk meng-host semua di VPS yang sama, maka lalu lintas tidak terenkripsi ini terkandung di satu host.

Memasang Certbot

Certbot adalah program klien yang akan berjalan di server proxy terbalik kami dan menegosiasikan sertifikat TLS dengan LetsEncrypt. Ini akan membuktikan kepada LetsEncrypt bahwa server sebenarnya memiliki kendali atas FQDN yang diklaimnya memiliki kendali atas. Kami tidak akan khawatir tentang bagaimana Certbot melakukannya.

Secara tradisional, Anda dapat menggunakan Certbot sebagai perangkat lunak mandiri yang hanya akan mendapatkan sertifikat (yang pada dasarnya hanya kunci kriptografi yang panjang) dan menyimpannya di server. Tapi untungnya, untuk sebagian besar sistem operasi ada plugin khusus untuk Nginx, Apache, dan perangkat lunak lainnya. Kami akan menginstal Certbot dengan plugin Nginx. Ini akan secara otomatis mengonfigurasi Nginx untuk menggunakan kunci yang baru diperoleh dan menyingkirkan aturan yang tidak aman seperti mendengarkan HTTP pada port 80.

Jika Anda menggunakan sistem berbasis Debian, seperti dalam kasus saya, saya menggunakan Ubuntu 18.04 LTS, maka pemasangannya sangat mudah.

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt update
$ sudo apt install python-certbot-nginx

Sistem operasi lain, RedHat, Gentoo, Fedora Anda dapat mengikuti instruksi resmi seperti yang tercantum di sini.

Setelah Anda menginstal Certbot dengan Plugin Nginx untuk kombinasi OS Anda, kami dapat turun ke bisnis.

Mendapatkan sertifikat TLS

Untuk mendapatkan sertifikat TLS untuk pertama kalinya, jalankan perintah berikut:

$ sudo certbot --nginx

Ini akan dijalankan melalui serangkaian pertanyaan interaktif, seperti yang ditunjukkan di bawah ini:

  1. Masukkan email Anda

Menyimpan log debug ke /var/log/letsencrypt/letsencrypt.catatan
Plugin yang dipilih: Authenticator nginx, Installer nginx
Masukkan alamat email (digunakan untuk pembaruan mendesak dan pemberitahuan keamanan) (Masukkan 'c' untuk membatalkan): [dilindungi email]

  1. Setuju dengan TOS

Silakan baca Persyaratan Layanan di https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. Anda harus setuju untuk mendaftar dengan server ACME di https://acme-v02.api.letsencrypt.org/direktori
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)setuju/(C)batal: A

  1. Buletin Opsional

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apakah Anda bersedia membagikan alamat email Anda dengan Electronic Frontier Foundation, mitra pendiri proyek Let's Encrypt dan organisasi nirlaba yang mengembangkan Certbot? Kami ingin mengirimi Anda email tentang pekerjaan kami yang mengenkripsi web, berita EFF, kampanye, dan cara untuk mendukung kebebasan digital.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(T)o: Y

  1. Ini kemudian akan mendeteksi nama domain di server Anda, dan jika Anda ingin memilih semua domain cukup tekan

Nama mana yang Anda inginkan untuk mengaktifkan HTTPS??
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pilih nomor yang sesuai dipisahkan dengan koma dan/atau spasi, atau biarkan input kosong untuk memilih semua opsi yang ditampilkan (Masukkan 'c' untuk membatalkan):

  1. Arahkan semuanya ke TLS. Saya memilih opsi 2, untuk mengarahkan semuanya ke SSL tetapi kasus penggunaan Anda mungkin berbeda. Untuk instalasi backend baru, aman untuk memilih opsi 2.

Silakan pilih apakah akan mengarahkan lalu lintas HTTP ke HTTPS, menghapus akses HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Tidak ada pengalihan - Tidak ada perubahan lebih lanjut pada konfigurasi server web.
2: Redirect - Buat semua permintaan dialihkan untuk mengamankan akses HTTPS. Pilih ini untuk situs baru, atau jika Anda yakin situs Anda berfungsi di HTTPS. Anda dapat membatalkan perubahan ini dengan mengedit konfigurasi server web Anda.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Pilih nomor yang sesuai [1-2] lalu [enter] (tekan 'c' untuk membatalkan): 2

Jika semuanya berjalan dengan baik, pesan ini akan ditampilkan kepada Anda, hanya untuk nama domain Anda.

Selamat! Anda telah berhasil mengaktifkan https://ww1.ranvirslog.com dan https://www2.ranvirslog.com Anda dapat mengunjungi FQDN dan melihat bahwa situs web sekarang memiliki tanda gembok yang menunjukkan bahwa semuanya dienkripsi.

Lihat file konfigurasi

Jika Anda melihat file konfigurasi yang kita buat sebelumnya, yaitu /etc/conf.h/ww1.conf dan /etc/conf.h/ww2.conf, Anda akan melihat bahwa semua aturan "Dengarkan 80" telah hilang dan beberapa baris baru telah ditambahkan, beri tahu server bahwa komunikasi perlu dienkripsi dan lokasi sertifikat dan kunci untuk melakukan enkripsi tersebut.

Saya sangat menyarankan untuk melihat-lihat file konfigurasi, karena itu juga dapat mengajari Anda cara menginstal sertifikat dengan benar dan menulis file konfigurasi.

Pembaruan Sertifikasi

Sertifikat LetsEncrypt biasa berlaku selama 90 hari dan sebelum kedaluwarsa, Anda perlu memperbaruinya. Anda dapat menggunakan Certbot untuk menjalankan pembaruan kering terlebih dahulu, dengan menjalankan perintah:

$ sudo certbot memperbarui --dry-run

Jika operasi berhasil, Anda akan melihat pesan berikut:

Selamat, semua perpanjangan berhasil. Sertifikat berikut telah diperbarui:

/etc/letsencrypt/live/ww1.ranvirslog.com/fullchain.pem (sukses)
** DRY RUN: mensimulasikan 'perbaruan certbot' mendekati masa berlaku sertifikat
** (Sertifikat tes di atas belum disimpan.)

Sekarang Anda dapat menambahkan pekerjaan Cron yang akan mencoba pembaruan setiap minggu atau lebih. Certbot tidak akan memperbarui sertifikat kecuali benar-benar jatuh tempo, jadi Anda tidak perlu khawatir. Perintah untuk pembaruan aktual adalah:

$ certbot perbarui

Tambahkan ke pekerjaan cron root dengan menggunakan:

$ sudo crontab -e

Pada prompt berikut, pilih editor favorit Anda (Pilih Nano jika Anda tidak yakin) dan tambahkan baris berikut di akhir file yang sekarang dibuka:


# Misalnya, Anda dapat menjalankan cadangan semua akun pengguna Anda
# jam 5 pagi.m setiap minggu dengan:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /rumah/
#
# Untuk informasi lebih lanjut, lihat halaman manual crontab(5) dan cron(8)
#
# m h  dom mon dow   perintah
* 2 * * 2    pembaruan certbot

Ini akan menjalankan perintah pembaruan certbot pada jam 2 pagi pada menit acak, pada hari kedua setiap minggu.

Kesimpulan

Jika Anda baru mengenal sertifikat TLS, bereksperimen dengan hal-hal seperti HSTS bisa berisiko. Karena perubahan ini tidak dapat diubah. Namun, jika Anda ingin turun ke lubang keamanan, saya sangat merekomendasikan blog Troy Hunt yang merupakan salah satu inspirasi utama di balik penulisan ini.

Cara Mengembangkan Game di Linux
Satu dekade yang lalu, tidak banyak pengguna Linux yang memprediksi bahwa sistem operasi favorit mereka suatu hari nanti akan menjadi platform game po...
Port Sumber Terbuka dari Mesin Game Komersial
Rekreasi mesin game gratis, open source, dan lintas platform dapat digunakan untuk bermain lama serta beberapa judul game yang cukup baru. Artikel ini...
Game Baris Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar Anda saat menggunakan Linux-ini juga dapat menjadi sumber hiburan karena Anda dapat menggunakannya untuk me...