Mari Sulitkan

Nginx Reverse Proxy dengan HTTPS melalui LetsEncrypt

Nginx Reverse Proxy dengan HTTPS melalui LetsEncrypt
Ini adalah tindak lanjut dari saya jawatan sebelumnya di mana kita menyediakan pelayan proksi terbalik yang mudah menggunakan Nginx. Dalam catatan ini, kami akan menjamin hubungan antara pelanggan dan pelayan proksi terbalik menggunakan TLS percuma (a.k.sijil SSL) dari LetsEncrypt. Saya menggalakkan anda untuk menyemak catatan di atas mengenai proksi terbalik untuk asas-asasnya.

Prasyarat

  1. Pelayan dengan IP awam statik. Di sinilah Nginx berjalan.
  2. Pelayan backend dengan laman web yang dimaksudkan berjalan melalui HTTP
  3. Nama domain berdaftar. Saya akan menggunakan ranvirslog.com sebagai nama domain utama saya dan dua laman web berada di FQDNs - ww1.ranvirslog.com dan ww2ranvirslog.com

Persediaan

Oleh itu, alamat IP telah berubah sejak terakhir kali, kerana saya melakukan persediaan ini sekali lagi. Berikut adalah IP dan nama host baru.

VM / Nama Hos IP awam IP persendirian Peranan / Fungsi
ReverseProxy 68.183.214.151 10.135.127.136 Titik penamatan TLS dan pelayan proksi terbalik
laman web1 N / A 10.135.126.102 Hosting ww1.ranvirslog.com

laman web melalui port 80 HTTP

laman web2 N / A 10.135.126.187 Hosting

ww2.ranvirslog.com

laman web melalui port 80 HTTP

Rekod DNS disiapkan kerana kedua-dua laman web (subdomain yang berbeza) menunjuk ke IP awam statik yang sama. Ini adalah alamat IP proksi terbalik Nginx kami:

Satu Rekod Nilai
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Untuk menjadikan DNS terbalik berfungsi dengan HTTP yang tidak disulitkan, kami membuat dua fail di / etc / conf.d / dinamakan ww1.conf dan ww2.conf masing-masing dengan konfigurasi berikut:

/ etc / konf.d / ww1.pengesahan

pelayan
dengar 80;
dengar [::]: 80;
pelayan_nama ww1.ranvirslog.com;
lokasi /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering dimatikan;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / konf.d / ww2.pengesahan

pelayan
dengar 80;
dengar [::]: 80;
pelayan_nama ww2.ranvirslog.com;
lokasi /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering dimatikan;
proxy_set_header X-Real-IP $ remote_addr;

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

Objektif

Dengan DNS terbalik (dan laman web backend) sudah beroperasi, objektif kami adalah memasang satu sijil TLS untuk kedua-dua FQDN (itu ww1.ranvirslog.com dan ww2.ranvirslog.com) pada proksi terbalik Nginx kami.

Trafik antara mana-mana pelanggan dan proksi terbalik akan disulitkan tetapi lalu lintas antara proksi terbalik dan pelayan belakang tidak disulitkan. Walau bagaimanapun, ini masih merupakan pilihan yang jauh lebih selamat daripada tidak mempunyai HTTPS sama sekali. Untuk kes di mana proksi terbalik dan pelbagai pelayan web berada di hos yang sama, katakan jika anda menggunakan wadah Docker untuk menghoskan semua pada VPS yang sama, maka lalu lintas yang tidak disulitkan ini terdapat pada satu hos.

Memasang Certbot

Certbot adalah program pelanggan yang akan dijalankan pada pelayan proksi terbalik kami dan merundingkan sijil TLS dengan LetsEncrypt. Ini akan membuktikan kepada LetsEncrypt bahawa pelayan sebenarnya mempunyai kawalan terhadap FQDN yang diklaimnya mempunyai kawalan ke atas. Kami tidak akan bimbang tentang bagaimana Certbot melakukannya.

Secara tradisional, anda boleh menggunakan Certbot sebagai perisian mandiri yang hanya akan mendapat sijil (yang pada dasarnya hanya kunci kriptografi panjang) dan menyimpannya di pelayan. Tetapi syukurlah, untuk kebanyakan sistem operasi terdapat plugin khusus untuk Nginx, Apache dan perisian lain. Kami akan memasang plugin Certbot dengan Nginx. Ini akan secara automatik mengkonfigurasi Nginx untuk menggunakan kunci yang baru diperoleh dan menyingkirkan peraturan yang tidak selamat seperti mendengar HTTP pada port 80.

Sekiranya anda menggunakan sistem berasaskan Debian, seperti dalam kes saya, saya menggunakan Ubuntu 18.04 LTS, maka pemasangannya sangat mudah.

$ sudo apt kemas kini
$ sudo apt memasang perisian-sifat-umum
$ sudo add-apt-repository semesta
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt kemas kini
$ sudo apt pasangkan python-certbot-nginx

Sistem operasi lain, RedHat, Gentoo, Fedora anda boleh mengikuti arahan rasmi seperti yang disenaraikan di sini.

Setelah anda memasang Certbot dengan Nginx Plugin untuk gabungan OS anda, kami boleh memulakan perniagaan.

Mendapatkan sijil TLS

Untuk mendapatkan sijil TLS untuk pertama kalinya, jalankan arahan berikut:

$ sudo certbot --nginx

Ini akan melalui satu siri soalan interaktif, seperti yang ditunjukkan di bawah:

  1. Masukkan emel anda

Menyimpan log debug ke / var / log / letsencrypt / letsencrypt.balak
Pemalam yang dipilih: Authenticator nginx, Installer nginx
Masukkan alamat e-mel (digunakan untuk pembaharuan segera dan pemberitahuan keselamatan) (Masukkan 'c' untuk membatalkan): [dilindungi e-mel]

  1. Setuju dengan TOS

Sila baca Syarat Perkhidmatan di https: // letsencrypt.org / dokumen / LE-SA-v1.2-November-15-2017.pdf. Anda mesti bersetuju untuk mendaftar dengan pelayan ACME di https: // acme-v02.api.letencrypt.org / direktori
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Buletin Pilihan

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Adakah anda bersedia untuk berkongsi alamat e-mel anda dengan Electronic Frontier Foundation, rakan pengasas projek Let's Encrypt dan organisasi bukan untung yang mengembangkan Certbot? Kami ingin menghantar e-mel kepada anda mengenai kerja kami yang menyulitkan web, berita EFF, kempen, dan cara untuk menyokong kebebasan digital.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Kemudian akan mengesan nama domain di pelayan anda, dan jika anda ingin memilih semua domain tekan saja

Untuk nama mana anda ingin mengaktifkan HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pilih nombor yang sesuai dipisahkan dengan koma dan / atau spasi, atau kosongkan input untuk memilih semua pilihan yang ditunjukkan (Masukkan 'c' untuk membatalkan):

  1. Ubah semuanya ke TLS. Saya memilih pilihan 2, untuk mengalihkan semuanya ke SSL tetapi kes penggunaan anda mungkin berbeza. Untuk pemasangan backend baru, selamat memilih pilihan 2.

Pilih sama ada untuk atau tidak mengarahkan lalu lintas HTTP ke HTTPS, membuang akses HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Tiada pengalihan - Jangan membuat perubahan selanjutnya pada konfigurasi pelayan web.
2: Redirect - Buat semua permintaan redirect untuk mendapatkan akses HTTPS. Pilih ini untuk laman web baru, atau jika anda yakin laman web anda berfungsi di HTTPS. Anda boleh membuat asal perubahan ini dengan mengedit konfigurasi pelayan web anda.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Pilih nombor yang sesuai [1-2] kemudian [masukkan] (tekan 'c' untuk membatalkan): 2

Sekiranya semuanya berjalan lancar, ia akan menunjukkan kepada anda mesej ini, hanya untuk nama domain anda.

Selamat bertunang! Anda berjaya mengaktifkan https: // ww1.ranvirslog.com dan https: // ww2.ranvirslog.com Anda boleh mengunjungi FQDN dan perhatikan bahawa laman web sekarang mempunyai tanda gembok yang menunjukkan semuanya dienkripsi.

Lihat fail konfigurasi

Sekiranya anda melihat fail konfigurasi yang kami buat sebelumnya, iaitu / etc / conf.d / ww1.conf dan / etc / conf.d / ww2.conf, anda akan perhatikan bahawa semua peraturan "Dengarkan 80" telah hilang dan beberapa baris baru telah ditambahkan memberitahu pelayan bahawa komunikasi perlu dienkripsi dan lokasi sijil dan kunci untuk melakukan penyulitan tersebut.

Saya sangat mengesyorkan melihat fail konfigurasi, kerana itu juga dapat mengajar anda cara memasang sijil dan menulis fail konfigurasi dengan betul.

Pembaharuan Pensijilan

Sijil LetsEncrypt Khas sah selama 90 hari dan sebelum tamat tempoh anda perlu memperbaharuinya. Anda boleh menggunakan Certbot untuk mengeringkan pembaharuan terlebih dahulu, dengan menjalankan perintah:

$ sudo certbot renew --dry-run

Sekiranya operasi berjaya, anda akan melihat mesej berikut:

Tahniah, semua pembaharuan berjaya. Sijil berikut telah diperbaharui:

/ etc / letsencrypt / live / ww1.ranvirslog.com / rantai penuh.pem (kejayaan)
** DRY RUN: mensimulasikan 'certbot renew' hampir dengan tarikh luput sijil
** (Sijil ujian di atas belum disimpan.)

Sekarang anda boleh menambahkan pekerjaan Cron yang akan mencuba pembaharuan setiap minggu atau lebih. Certbot tidak akan memperbaharui sijil melainkan ia benar-benar diperlukan, jadi anda tidak perlu risau. Perintah untuk pembaharuan sebenar adalah:

$ certbot memperbaharui

Tambahkannya ke pekerjaan cron root dengan menggunakan:

$ sudo crontab -e

Pada arahan berikut, pilih editor kegemaran anda (Pilih Nano jika anda tidak pasti) dan tambahkan baris berikut di akhir fail yang sekarang dibuka:


# Contohnya, anda boleh menjalankan sandaran semua akaun pengguna anda
# pada 5 a.setiap minggu dengan:
# 0 5 * * 1 tar -zcf / var / sandaran / rumah.tgz / rumah /
#
# Untuk maklumat lebih lanjut, lihat halaman manual crontab (5) dan cron (8)
#
# m h dom mon dow perintah
* 2 * * 2 certbot diperbaharui

Ini akan menjalankan perintah pembaharuan certbot pada pukul 2 pagi pada setiap minit rawak, pada hari kedua setiap minggu.

Kesimpulannya

Sekiranya anda baru menggunakan sijil TLS, bereksperimen dengan perkara seperti HSTS boleh menjadi berisiko. Oleh kerana perubahan ini tidak dapat dipulihkan. Walau bagaimanapun, jika anda ingin pergi ke lubang keselamatan kelinci, saya sangat mengesyorkan blog Troy Hunt yang merupakan salah satu inspirasi utama di sebalik penulisan ini.

OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...
SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...