Cara Mengamankan Nginx dengan Let’s Encrypt pada Ubuntu 20.04

Pengantar

Let’s Encrypt adalah Otoritas Sertifikat (CA) yang menyediakan cara mudah untuk memperoleh dan menginstal sertifikat TLS/SSL gratis, yang dengan demikian mengaktifkan HTTPS terenkripsi pada server web. Ini menyederhanakan proses dengan menyediakan klien perangkat lunak, Certbot, yang berusaha mengotomatiskan sebagian besar (jika bukan semua) langkah yang diperlukan. Saat ini, seluruh proses memperoleh dan menginstal sertifikat secara sepenuhnya berjalan otomatis baik pada Apache dan Nginx.

Dalam tutorial ini, Anda akan menggunakan Certbot untuk memperoleh sertifikat SSL gratis untuk Nginx pada Ubuntu 20.04 dan menyiapkan sertifikat Anda untuk diperbarui secara otomatis.

Tutorial ini akan menggunakan berkas konfigurasi server Nginx terpisah, alih-alih berkas asali. Kami menyarankan menciptakan berkas blok server Nginx baru untuk setiap domain karena hal ini membantu menghindari kesalahan umum dan mempertahankan berkas asali sebagai konfigurasi fallback.

Prasyarat

Untuk mengikuti tutorial ini, Anda akan membutuhkan:

  • Satu server Ubuntu 20.04 yang disiapkan dengan mengikuti tutorial penyiapan server awal untuk Ubuntu 20.04 ini, termasuk satu pengguna non-root yang mendukung sudo dan satu firewall.

  • Nama domain yang terdaftar. Tutorial ini akan menggunakan example.com di seluruh bagiannya. Anda dapat membeli nama domain dari Namecheap, mendapatkan nama domain gratis dengan Freenom, atau menggunakan registrar domain pilihan Anda.

  • Kedua catatan DNS berikut disiapkan untuk server Anda. Jika Anda menggunakan DigitalOcean, silakan lihat dokumentasi DNS kami untuk detail tentang cara menambahkannya.

    • Catatan A dengan example.com yang menunjuk ke alamat IP publik server Anda.
    • Catatan A dengan www.example.com yang menunjuk ke alamat IP publik server Anda.
  • Nginx yang terinstal dengan mengikuti Cara Menginstal Nginx pada Ubuntu 20.04. Pastikan Anda memiliki blok server untuk domain Anda. Tutorial ini akan menggunakan /etc/nginx/sites-available/example.com sebagai contoh.

Langkah 1 — Menginstal Certbot

Langkah pertama untuk menggunakan Let’s Encrypt untuk memperoleh sertifikat SSL adalah dengan menginstal perangkat lunak Certbot pada server Anda.

Instal Certbot dan plugin Nginx dengan apt:

  • sudo apt install certbot python3-certbot-nginx

Certbot kini siap digunakan, namun agar Certbot dapat mengonfigurasi SSL secara otomatis untuk Nginx, kita perlu memverifikasi beberapa konfigurasi Nginx.

Langkah 2 — Mengonfirmasi Konfigurasi Nginx

Certbot harus mampu menemukan blok server yang benar pada konfigurasi Nginx Anda agar dapat mengonfigurasi SSL secara otomatis. Secara khusus, Certbot melakukan ini dengan mencari arahan server_name yang sesuai dengan domain yang sertifikatnya Anda mintakan.

Jika Anda mengikuti langkah penyiapan blok server dalam tutorial instalasi Nginx, Anda seharusnya memiliki blok server untuk domain Anda di /etc/nginx/sites-available/example.com dengan arahan server_name yang sudah disiapkan dengan benar.

Untuk memeriksa, buka berkas konfigurasi untuk domain Anda dengan menggunakan nano atau editor teks favorit Anda:

  • sudo nano /etc/nginx/sites-available/example.com

Cari baris server_name yang sudah ada. Baris itu akan terlihat seperti ini:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Jika terlihat seperti itu, keluar dari editor Anda dan lanjutkan ke langkah selanjutnya.

Jika tidak, perbarui supaya sesuai. Lalu simpan berkas itu, keluar dari editor Anda, dan lakukan verifikasi sintaks dari editan konfigurasi Anda:

  • sudo nginx -t

Jika Anda mendapat pesan kesalahan, buka kembali berkas blok server dan periksa adanya salah tik atau karakter yang hilang. Setelah sintaks berkas konfigurasi Anda benar, muat ulang Nginx untuk memuat konfigurasi baru:

  • sudo systemctl reload nginx

Certbot sekarang dapat menemukan blok server yang benar dan memperbaruinya secara otomatis.

Selanjutnya, mari kita perbarui firewall untuk mengizinkan lalu lintas HTTPS.

Langkah 3 — Mengizinkan HTTPS Melewati Firewall

Jika firewall ufw Anda sudah diaktifkan, seperti yang disarankan oleh panduan prasyarat, Anda perlu menyesuaikan pengaturan untuk mengizinkan lalu lintas HTTPS. Untungnya, Nginx mendaftarkan beberapa profil dengan ufw pada saat instalasi.

Anda dapat melihat pengaturan saat ini dengan mengetik:

  • sudo ufw status

Mungkin akan terlihat seperti ini, artinya bahwa hanya lalu lintas HTTP yang diizinkan ke server web:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Untuk menambahkan lalu lintas HTTPS yang masuk, mengizinkan profil Nginx Full, dan menghapus izin profil HTTP Nginx yang lewah:

  • sudo ufw allow 'Nginx Full'
  • sudo ufw delete allow 'Nginx HTTP'

Status Anda sekarang akan terlihat seperti ini:

  • sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Selanjutnya, mari kita jalankan Certbot dan ambil sertifikat kita.

Langkah 4 — Memperoleh Sertifikat SSL

Certbot menyediakan berbagai cara untuk memperoleh sertifikat SSL melalui plugin. Plugin Nginx akan menangani konfigurasi ulang Nginx dan memuat ulang konfigurasi itu ketika diperlukan. Untuk menggunakan plugin ini, ketik yang berikut ini:

  • sudo certbot --nginx -d example.com -d www.example.com

Ini menjalankan certbot dengan plugin --nginx, menggunakan -d untuk menentukan nama domain yang kita ingin sertifikatnya valid digunakan.

Jika ini adalah pertama kalinya Anda menjalankan certbot, Anda akan diminta memasukkan alamat email dan menyetujui persyaratan layanan. Setelah melakukan itu, certbot akan berkomunikasi dengan server Let’s Encrypt, lalu menjalankan tantangan untuk memverifikasi bahwa Anda mengontrol domain yang Anda mintakan sertifikatnya.

Jika itu berhasil, certbot akan bertanya bagaimana Anda ingin mengonfigurasi pengaturan HTTPS Anda.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Tentukan pilihan Anda lalu tekan ENTER. Konfigurasi akan diperbarui, dan Nginx akan memuat ulang untuk menerapkan pengaturan baru. certbot akan merangkum dengan pesan yang memberi tahu Anda bahwa proses berhasil dan di mana tempat sertifikat Anda disimpan:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Sertifikat Anda sudah diunduh, terinstal, dan dimuat. Coba muat ulang situs Anda dengan menggunakan https:// dan perhatikan indikator keamanan di peramban Anda. Seharusnya ada indikasi bahwa situs itu sudah diamankan dengan benar, biasanya dengan ikon kunci. Jika Anda menguji server Anda menggunakan SSL Labs Server Test, server akan mendapat nilai A.

Mari kita selesaikan dengan menguji proses pembaruan ini.

Langkah 5 — Memverifikasi Pembaruan Otomatis Certbot

Sertifikat Let’s Encrypt hanya berlaku selama 90 hari. Ini dimaksudkan untuk mendorong pengguna untuk mengotomatiskan proses pembaruan sertifikat mereka. Paket certbot yang kita instal akan mengurus ini untuk kita dengan menambahkan pengatur waktu systemd yang akan berjalan dua kali sehari dan secara otomatis memperbarui sertifikat apa pun yang akan kedaluarsa dalam waktu 30 hari.

Anda dapat menanyakan status pengatur waktu dengan systemctl:

  • sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

Untuk menguji proses pembaruan, Anda dapat melakukan uji coba dengan certbot:

  • sudo certbot renew --dry-run

Jika Anda tidak melihat kesalahan, Anda sudah siap. Ketika diperlukan, Certbot akan memperbarui sertifikat Anda dan memuat ulang Nginx untuk menerapkan perubahan itu. Jika proses pembaruan otomatis itu terus-menerus gagal, Let’s Encrypt akan mengirim pesan ke surel yang Anda tentukan, memperingatkan Anda saat sertifikat Anda akan berakhir.

Kesimpulan

Dalam tutorial ini, Anda telah menginstal certbot klien Let’s Encrypt, mengunduh sertifikat SSL untuk domain Anda, mengonfigurasi Nginx untuk menggunakan sertifikat ini, dan menyiapkan pembaruan sertifikat otomatis. Jika Anda memiliki pertanyaan lebih lanjut tentang cara menggunakan Certbot, dokumentasi resmi ini adalah tempat yang baik untuk memulai.

Source: DigitalOcean