Cara Mengaktifkan HTTPS untuk Varnish Cache menggunakan Hitch di CentOS-RHEL 8


Varnish Cache tidak memiliki dukungan asli untuk SSL/TLS dan protokol lain yang terkait dengan port 443. Jika Anda menggunakan Varnish Cache untuk meningkatkan kinerja aplikasi web, Anda perlu menginstal dan mengonfigurasi perangkat lunak lain yang disebut proxy penghentian SSL/TLS, untuk bekerja bersama Varnish Cache untuk mengaktifkan HTTPS.

Hitch adalah proksi SSL/TLS sumber terbuka gratis, berbasis libev, dan dapat diskalakan yang dirancang untuk Varnish Cache, yang saat ini berfungsi di Linux, OpenBSD, FreeBSD, dan MacOSX. Ini mengakhiri koneksi TLS/SSL dengan mendengarkan pada port 443 (port default untuk koneksi HTTPS) dan meneruskan lalu lintas yang tidak terenkripsi ke Varnish Cache, namun , ini juga dapat berfungsi dengan backend lain.

Mendukung TLS1.2 dan TLS1.3 serta TLS 1.0/1.1 lama, mendukung ALPN (Negosiasi Protokol Lapisan Aplikasi) dan NPN (Negosiasi Protokol Berikutnya) untuk HTTP/2, sebuah protokol PROXY untuk memberi sinyal kepada klien IP/port ke backend, koneksi soket domain UNIX ke asal, SNI (Indikasi Nama Server), dengan dan tanpa sertifikat wildcard. Selain itu, ini berfungsi dengan baik untuk instalasi besar yang memerlukan hingga 15.000 soket pendengar dan 500.000 sertifikat.

Sebagai kelanjutan dari dua artikel kami sebelumnya tentang menginstal Varnish Cache untuk server HTTP Nginx dan Apache, panduan ini menunjukkan cara mengaktifkan HTTPS< untuk Varnish Cache menggunakan Hitch TLS Proxy di CentOS/RHEL 8.

Panduan ini mengasumsikan bahwa Anda telah menginstal Varnish untuk server web Nginx atau Apache, jika tidak, lihat:

  • Cara Install Varnish Cache 6 untuk Nginx Web Server di CentOS/RHEL 8
  • Cara Install Varnish Cache 6 untuk Apache Web Server di CentOS/RHEL 8

Langkah 1: Instal Hitch di CentOS/RHEL 8

1. Paket Hitch disediakan di repositori EPEL (Paket Ekstra untuk Enterprise Linux). Untuk menginstalnya, pertama-tama aktifkan EPEL di sistem Anda dan kemudian instal paketnya setelahnya. Jika Anda belum menginstal paket OpenSSL, instal juga.

dnf install epel-release
dnf install hitch openssl

2. Ketika instalasi paket selesai, Anda harus mengonfigurasi Varnish Cache agar berfungsi Hitch. Anda juga perlu mengonfigurasi Hitch untuk menggunakan sertifikat SSL/TLS dan Varnish sebagai backend. File konfigurasi utama Hitch terletak di /etc/hitch/hitch.conf, yang dijelaskan di bawah.

Langkah 2: Mengonfigurasi Varnish Cache untuk Hitch

3. Selanjutnya, aktifkan Varnish untuk mendengarkan port tambahan (8443 dalam kasus kami) menggunakan protokol PROXY dukungan, untuk komunikasi dengan Hitch.

Jadi buka file layanan Varnish systemd untuk diedit.

systemctl edit --full varnish

Cari baris ExecStart dan tambahkan tanda -a tambahan dengan nilai 127.0.0.1:8443,proxy. Menggunakan nilai 127.0.0.1:8443 berarti Varnish hanya akan menerima koneksi internal (dari proses yang berjalan di server yang sama, yaitu halangan dalam kasus ini) tetapi tidak menerima koneksi eksternal.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Simpan file lalu mulai ulang layanan Varnish untuk menerapkan perubahan terbaru.

systemctl restart varnish

Langkah 3: Mendapatkan Sertifikat SSL/TLS

4. Di bagian ini, kami akan menjelaskan cara membuat paket sertifikat SSL/TLS untuk digunakan di bawah Hitch. Untuk panduan ini, kami akan menjelaskan berbagai opsi tentang cara menggunakan sertifikat yang ditandatangani sendiri, sertifikat komersial, atau sertifikat dari Let’s Encrypt.

Untuk membuat sertifikat yang ditandatangani sendiri (yang hanya boleh Anda gunakan di lingkungan pengujian lokal), Anda dapat menggunakan alat OpenSSL.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Kemudian buat bundel sertifikat dan kunci sebagai berikut.

cat tecmint.crt tecmint.key >tecmint.pem

Catatan: Untuk penggunaan produksi, Anda dapat membeli sertifikat dari Otoritas Sertifikat komersial (CA) atau dapatkan sertifikat gratis, otomatis, dan sepenuhnya diakui dari Let's Encrypt. Kemudian buat bundel PEM.

Jika Anda membeli sertifikat dari CA komersial, Anda perlu menggabungkan kunci pribadi, sertifikat, dan paket CA seperti yang ditunjukkan.

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Untuk Let's Encrypt, sertifikat, kunci pribadi, dan rantai lengkap akan disimpan di /etc/letsencrypt/live/example.com/, jadi buatlah bundel seperti yang ditunjukkan .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Langkah 4: Mengonfigurasi dan Memulai Hitch

5. Selanjutnya, konfigurasikan Varnish sebagai backend untuk Hitch dan tentukan file sertifikat SSL/TLS yang akan digunakan untuk HTTPS, di file konfigurasi utama Hitch, buka untuk diedit.

vi /etc/hitch/hitch.conf

Bagian frontend menentukan alamat IP dan port yang akan didengarkan oleh Hitch. Konfigurasi defaultnya adalah mendengarkan semua antarmuka IPv4 dan IPv6 yang terpasang di server dan berjalan pada port 443 dan menangani HTTPS< yang masuk permintaan, menyerahkannya ke Varnish.

Ubah port proxy backend default dari 6086 menjadi 8443 (port yang digunakan untuk meneruskan permintaan ke Varnish) di Tambahkan file konfigurasi, menggunakan parameter backend. Tentukan juga file sertifikat menggunakan parameter pem-file seperti yang ditunjukkan.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Simpan file dan tutup.

6. Sekarang mulai layanan hitch dan aktifkan layanan tersebut untuk memulai secara otomatis saat boot sistem. Perhatikan bahwa saklar --now ketika digunakan dengan aktifkan, akan memulai layanan systemd juga dan kemudian memeriksa status untuk melihat apakah layanan tersebut aktif dan berjalan seperti berikut.

systemctl enable --now hitch
systemctl status hitch

7. Sebelum Anda melanjutkan untuk menguji apakah situs web/aplikasi Anda sekarang berjalan di HTTPS, Anda harus mengizinkan port layanan HTTPS 443 di firewall untuk mengizinkan permintaan yang ditujukan ke port tersebut di server untuk melewati firewall.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Langkah 5: Menguji Pengakhiran SSL/TLS dengan Pengaturan Varnish Cache-Hitch

8. Sekarang saatnya menguji penyiapan Varnish Cache-Hitch. Buka browser web dan gunakan IP domain atau server Anda untuk bernavigasi melalui HTTPS.

https://www.example.com
OR
https://SERVER_IP/

Setelah halaman indeks aplikasi web Anda dimuat, periksa header HTTP untuk mengonfirmasi bahwa konten disajikan melalui Varnish Cache.

Untuk melakukannya, klik kanan pada laman web yang dimuat, pilih Periksa dari daftar opsi untuk membuka alat pengembang. Kemudian klik tab Jaringan, dan Muat ulang laman, lalu pilih permintaan untuk melihat header HTTP, seperti yang disorot dalam tangkapan layar berikut.

Langkah 6: Mengarahkan HTTP ke HTTPS di Varnish Cache

9. Untuk menjalankan situs web Anda di HTTPS saja, Anda perlu mengalihkan semua lalu lintas HTTP ke HTTPS. Anda dapat melakukan ini dengan menambahkan konfigurasi berikut di file konfigurasi Hitch Anda.

vi /etc/hitch/hitch.conf 

Pertama tambahkan baris import std; tepat di bawah vlc 4.0;, lalu cari subrutin vlc_recv yaitu subrutin VCL pertama yang langsung dieksekusi setelah Varnish Cache menguraikan permintaan klien ke dalam struktur data dasarnya. Di sinilah kita dapat memodifikasi header permintaan dan menjalankan synth untuk mengarahkan ulang permintaan klien.

Ubah menjadi seperti ini.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Perhatikan bahwa protokol PROXY memungkinkan Varnish melihat port pendengaran Hitch 443 dari server.ip variabel. Jadi baris std.port(server.ip) mengembalikan nomor port tempat koneksi klien diterima.

Jika port bukan 443 untuk HTTPS (seperti yang diperiksa oleh (std.port(server.ip) != 443)), subrutinnya akan menyetel header permintaan Lokasi HTTP (set req.http.location) ke permintaan aman (“https://” + req.http.host< + req.url) cukup meminta browser web untuk memuat versi halaman web HTTPS (yaitu pengalihan URL).

Header Lokasi akan dikirim ke subrutin vcl_synth (yang dipanggil menggunakan return(synth(301))) dengan kode status HTTP 301 (Dipindahkan secara permanen).

10. Selanjutnya, tambahkan subrutin vcl_synth berikut (salah satu dari banyak kasus penggunaannya adalah mengalihkan pengguna), untuk memproses synth di atas.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Ia memeriksa apakah status responsnya adalah 301, header Lokasi HTTP dalam respons disetel ke header Lokasi HTTP dalam permintaan yang sebenarnya merupakan pengalihan ke HTTPS dan menjalankan tindakan pengiriman.

Tindakan deliver membuat respons dengan respons dari backend, menyimpan respons dalam cache, dan mengirimkannya ke klien.

Simpan file dan tutup.

11. Sekali lagi, terapkan perubahan baru pada konfigurasi Varnish dengan memulai ulang layanan. Kemudian gunakan alat baris perintah curl untuk mengonfirmasi pengalihan dari HTTP ke HTTPS.

systemctl restart varnish
curl -I http://eaxmple.com/

Dari browser, responnya juga sama seperti pada screenshot berikut.

Kami berharap semuanya berjalan dengan baik hingga saat ini. Jika tidak, berikan komentar atau pertanyaan melalui formulir umpan balik di bawah. Untuk opsi konfigurasi lanjutan apa pun, buka dokumentasi Varnish Cache dan dokumentasi Hitch.