Cara Mengamankan Nginx dengan SSL dan Mari Enkripsi di FreeBSD


Dalam panduan ini kita akan membahas cara mengamankan server web Nginx di FreeBSD dengan sertifikat TLS/SSL yang ditawarkan oleh Let's Encrypt Certificate Otoritas. Kami juga akan menunjukkan kepada Anda cara memperbarui sertifikat Lets’ Encrypt secara otomatis sebelum tanggal kedaluwarsanya.

TLS, singkatan dari Transport Layer Security, adalah protokol yang berjalan di bawah protokol HTTP dan menggunakan sertifikat dan kunci untuk merangkum paket dan mengenkripsi data yang dipertukarkan antara server dan klien, atau dalam hal ini antara server web Nginx dan browser klien, untuk mengamankan koneksi, sehingga pihak ketiga, yang mungkin mencegat lalu lintas, tidak dapat mendekripsi transmisi.

Baca Juga: Instal Let's Encrypt untuk Apache di FreeBSD

Proses mendapatkan sertifikat Let's Encrypt gratis di FreeBSD dapat disederhanakan dengan menginstal utilitas klien certboot, yang merupakan klien resmi Let's Encrypt yang digunakan untuk membuat dan mengunduh sertifikat.

Persyaratan

  1. Instal tumpukan FBEMP (Nginx, MariaDB dan PHP) di FreeBSD

Langkah 1: Konfigurasikan Nginx TLS/SSL

1. Secara default, konfigurasi server TLS/SSL tidak diaktifkan di FreeBSD karena pernyataan blok server TLS dikomentari di file konfigurasi default Nginx.

Untuk mengaktifkan server TLS di Nginx, buka file konfigurasi nginx.conf, cari baris yang menentukan awal Server SSL dan perbarui seluruh blok agar terlihat seperti contoh di bawah.

nano /usr/local/etc/nginx/nginx.conf

Kutipan blok Nginx HTTPS:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Blok di atas, selain blok SSL, juga berisi beberapa pernyataan untuk mengaktifkan kompresi gzip dan FastCGI Process Manager, yang digunakan untuk meneruskan kode PHP ke PHP-FPM< gateway untuk menjalankan aplikasi web dinamis.

Setelah Anda menambahkan kode di atas ke file konfigurasi utama Nginx, jangan memulai ulang daemon atau menerapkan pengaturan sebelum menginstal dan mendapatkan sertifikat Let's Encrypt untuk domain Anda.

Langkah 2: Instal Klien Certbot di FreeBSD

2. Proses instalasi utilitas klien certbot Let's Encrypt di FreeBSD melibatkan pengunduhan kode sumber untuk py-certbot dan mengkompilasinya secara lokal, dengan menerbitkan perintah di bawah ini.

cd /usr/ports/security/py-certbot
make install clean

3. Mengkompilasi utilitas py-certbot memerlukan banyak waktu dibandingkan dengan menginstal paket biner biasa. Selama ini, serangkaian dependensi perlu diunduh dan dikompilasi secara lokal di FreeBSD.

Selain itu, serangkaian perintah akan muncul di layar Anda, meminta Anda memilih paket apa yang akan digunakan pada waktu kompilasi untuk setiap dependensi. Pada layar pertama, pilih alat berikut, dengan menekan tombol [spasi], untuk mengkompilasi ketergantungan python27, seperti yang diilustrasikan pada gambar di bawah.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • BENANG
  • UCS4 untuk dukungan Unicode

4. Selanjutnya, pilih DOCS dan THREADS untuk ketergantungan gettext-tools dan tekan OK untuk melanjutkan seperti yang ditunjukkan pada gambar di bawah ini.

5. Pada layar berikutnya biarkan opsi TESTS dinonaktifkan untuk libffi-3.2.1 dan tekan OK untuk berpindah lebih jauh.

6. Selanjutnya, tekan spasi untuk memilih DOCS untuk ketergantungan py27-enum34, yang akan menginstal dokumentasi untuk ini alat, dan tekan OK untuk melanjutkan, seperti yang diilustrasikan pada gambar di bawah.

7. Terakhir, pilih untuk menginstal contoh contoh untuk ketergantungan py27-openssl dengan menekan tombol [spasi] dan tekan OK untuk menyelesaikan proses kompilasi dan instalasi untuk klien py-certbot.

8. Setelah proses kompilasi dan instalasi utilitas py-certbot selesai, jalankan perintah di bawah ini untuk mengupgrade alat ke versi paket terbaru seperti yang diilustrasikan dalam gambar tangkapan layar di bawah ini.

pkg install py27-certbot

9. Untuk menghindari beberapa masalah yang mungkin terjadi saat memperoleh sertifikat Let's Encrypt gratis, kesalahan yang paling umum adalah “pkg_resources.DistributionNotFound ” , pastikan dua dependensi berikut juga ada di sistem Anda: py27-salt dan py27-acme.

pkg install py27-salt
pkg install py27-acme

Langkah 3: Instal Let’s Encrypt Certificate untuk Nginx di FreeBSD

10. Untuk mendapatkan sertifikat mandiri Let's Encrypt untuk domain Anda, jalankan perintah berikut dan berikan nama domain dan semua subdomain yang ingin Anda dapatkan sertifikatnya dengan menyiratkan -d bendera.

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Saat membuat sertifikat, Anda akan diminta memasukkan alamat email Anda dan menyetujui persyaratan layanan Let's Encrypt. Ketik a dari keyboard untuk menyetujui dan melanjutkan dan Anda juga akan ditanya apakah Anda bersedia membagikan alamat email Anda dengan mitra Let's Encrypt.

Jika Anda tidak ingin membagikan alamat email Anda, cukup ketik kata no pada perintah dan tekan tombol [enter] untuk melanjutkan. Setelah sertifikat untuk domain Anda berhasil diperoleh, Anda akan menerima beberapa catatan penting yang akan memberi tahu Anda di mana sertifikat disimpan di sistem Anda dan kapan masa berlakunya habis.

12. Jika Anda ingin mendapatkan sertifikat Let's Encrypt menggunakan plugin “webroot” dengan menambahkan direktori webroot server Nginx untuk domain Anda , jalankan perintah berikut dengan tanda --webroot dan -w. Secara default, jika Anda belum mengubah jalur webroot Nginx, jalur tersebut harus ditempatkan di jalur sistem /usr/local/www/nginx/.

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Seperti dalam prosedur --strandalone untuk mendapatkan sertifikat, prosedur --webroot juga akan meminta Anda memberikan alamat email untuk pembaruan sertifikat dan pemberitahuan keamanan, untuk menekan a untuk menyetujui syarat dan ketentuan Let's Encrypt dan tidak atau yes untuk atau tidak membagikan alamat email mitra Let's Encrypt seperti yang diilustrasikan dalam contoh di bawah ini.

Ketahuilah bahwa klien certbot dapat mendeteksi alamat email palsu dan tidak akan membiarkan Anda melanjutkan pembuatan sertifikat sampai Anda memberikan alamat email asli.

Sampel Cerbot:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

Langkah 4: Perbarui Sertifikat TLS Nginx

13. Lokasi sertifikat dan kunci Let's Encrypt yang diperoleh di FreeBSD adalah /usr/local/etc/letsencrypt/live/www.domainanda.com/ jalur sistem. Keluarkan perintah ls untuk menampilkan komponen sertifikat Let's Encrypt Anda: file rantai, file rantai penuh, kunci pribadi, dan file sertifikat, seperti yang diilustrasikan dalam contoh berikut.

ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Untuk memasang sertifikat Let's Encrypt untuk domain Anda di server web Nginx, buka file konfigurasi utama Nginx atau file konfigurasi untuk server TLS Nginx, jika itu adalah file terpisah, dan ubah baris di bawah ini untuk mencerminkan jalur mari Enkripsi sertifikat yang diterbitkan seperti yang diilustrasikan di bawah ini.

nano /usr/local/etc/nginx/nginx.conf

Perbarui baris berikut agar terlihat seperti dalam contoh ini:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Selain itu, jika baris ssl_dhparam ada dalam konfigurasi Nginx SSL, Anda harus membuat bit 2048 baru kunci Diffie–Hellman dengan perintah berikut:

openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Terakhir, untuk mengaktifkan konfigurasi TLS Nginx, pertama-tama periksa konfigurasi global Nginx untuk mengetahui kemungkinan kesalahan sintaksis, lalu mulai ulang layanan Nginx untuk menerapkan konfigurasi SSL dengan mengeluarkan perintah berikut.

nginx -t
service nginx restart

17. Konfirmasikan apakah daemon Nginx mengikat pada port 443 dengan mengeluarkan perintah berikut yang dapat mencantumkan semua soket jaringan yang terbuka di sistem dalam keadaan mendengarkan.

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. Anda juga dapat mengunjungi alamat domain Anda melalui protokol HTTPS dengan membuka browser dan mengetikkan alamat berikut untuk mengonfirmasi bahwa sertifikat Let's Encrypt berfungsi seperti yang diharapkan. Karena Anda menggunakan sertifikat yang dihasilkan oleh Otoritas Sertifikat yang valid, tidak ada kesalahan yang ditampilkan di browser.

https://www.yourdomain.com

19. Utilitas Openssl juga dapat membantu Anda menemukan informasi tentang sertifikat yang diperoleh dari Let's Encrypt CA, dengan menjalankan perintah dengan opsi berikut.

openssl s_client -connect www.yourdomain.com:443

Jika Anda ingin memaksa Nginx untuk mengarahkan semua permintaan http ke https yang diterima untuk domain Anda pada port 80 ke HTTPS, buka file konfigurasi Nginx, cari direktif server untuk port 80 dan tambahkan baris di bawah ini setelah pernyataan server_name seperti yang diilustrasikan dalam contoh di bawah ini.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Menyiapkan perpanjangan otomatis untuk sertifikat yang diterbitkan oleh otoritas Let's Encrypt sebelum masa berlakunya habis dapat dilakukan dengan menjadwalkan tugas cron untuk dijalankan sekali sehari dengan mengeluarkan perintah berikut.

crontab -e

Tugas Cron untuk memperbarui sertifikat.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

Itu saja! Nginx sekarang dapat menyajikan aplikasi web aman kepada pengunjung Anda menggunakan sertifikat gratis Let's Encrypt.