Menyelami Apa Itu Forward Proxy
January 12, 2024
Kami umumnya menggunakan NGINX atau Apache sebagai load balancer dan server proxy terbalik, bahkan ketika lalu lintas jaringan eksternal diteruskan melalui perangkat lunak ini untuk mencapai layanan sebenarnya di dalam jaringan internal. Meskipun ada proxy terbalik, ada juga proxy maju. Mari kita telusuri fungsionalitas mereka.

Dari Model OSI ke Server Proxy
Saat mengakses layanan internet, kami biasanya menggunakan protokol HTTP, yang beroperasi di lapisan 7 dari model OSI. Komponen yang familiar dari protokol ini, seperti nama host, jalur, dan parameter kueri, adalah bagian dari lapisan ini. Protokol HTTP dibangun di atas protokol TCP atau UDP, yang berfungsi di lapisan 4 dari model OSI, dan konsep port yang digunakan selama akses layanan ada dalam protokol ini. Lebih jauh, baik TCP maupun UDP didasarkan pada Protokol Internet (IP), yang beroperasi di lapisan 3 dari model OSI, di mana alamat IP berfungsi sebagai "nomor rumah" internet.
Saat menggunakan jaringan IP untuk mengakses internet, protokol IP bertanggung jawab untuk mengalamatkan target, mengemas paket data sesuai aturan, dan meneruskannya dari alamat sumber ke alamat tujuan dalam jaringan IP. Misalnya, lalu lintas jaringan berjalan dari jaringan lokal pengunjung melalui perangkat gateway yang disediakan oleh ISP, terhubung ke jaringan ISP sebelum mengakses layanan penyedia sumber daya.
Pada titik ini, kami menggunakan gateway untuk mengakses internet. Ketika membahas server proxy, kita dapat menarik paralel dengan jaringan IP. Server proxy bertindak sebagai gateway, menjembatani kesenjangan untuk membantu klien mengakses layanan. Mereka pada dasarnya beroperasi antara lapisan 4 dan lapisan 7 dari model OSI, dan memang, mereka termasuk dalam lapisan 5 dari model OSI.

Tujuan Server Proxy
Server proxy biasanya digunakan untuk tujuan berikut:
- Pusat Keluar untuk Akses Jaringan Internal
Perusahaan sering memiliki persyaratan keamanan informasi tertentu, seperti kontrol akses dan pencatatan lalu lintas. Dengan prevalensi lalu lintas terenkripsi seperti HTTPS, menyembunyikan lalu lintas jaringan di bawah kata sandi membuatnya sulit untuk dicatat dan diaudit di batas jaringan, meningkatkan risiko kebocoran. Keberadaan server proxy berfungsi sebagai pintu keluar lalu lintas yang terpadu, bertindak sebagai perantara untuk menangani tugas audit lalu lintas.
Selain tujuan yang berorientasi pada manusia, layanan proxy juga dapat berfungsi sebagai pintu keluar untuk layanan yang diakses secara programatik ke jaringan eksternal. Misalnya, ketika penyedia layanan menawarkan fungsionalitas webhook, ia perlu mengarahkan lalu lintas melalui pintu keluar yang tetap, menggunakan satu alamat IP tetap atau rentang alamat IP tetap. Ini memfasilitasi penerima panggilan webhook untuk memasukkannya ke dalam daftar putih dengan benar di firewall. Kegagalan untuk melakukannya akan mengekspos kedua belah pihak panggilan webhook ke risiko keamanan potensial.
- Menyembunyikan Identitas Pengunjung
Terkadang, pengguna internet mungkin ingin menyembunyikan identitas mereka, seperti alamat IP mereka. Dalam kasus seperti ini, server proxy transparan berperan. Klien awalnya terhubung ke server proxy, menentukan alamat layanan nyata yang ingin dihubungi, dan kemudian mengakses layanan target melalui server proxy menggunakan protokol HTTPS. Keberadaan server proxy memastikan identitas klien tetap tersembunyi, sementara penggunaan protokol terenkripsi menjamin bahwa server proxy tidak dapat mencuri data selama proses ini.

Proxy Berbasis HTTP
Pada server proxy, kami biasanya menemukan proxy HTTP berbasis HTTP dan protokol berbasis biner SOCKS 4/5. Mereka melakukan fungsi yang serupa tetapi dengan metode implementasi yang berbeda. Mari kita fokus pada proxy berbasis HTTP.
Pada tahap awal implementasi protokol, lalu lintas pada HTTP terutama berupa teks biasa. Transparansi ini memungkinkan server proxy di tengah klien dan layanan untuk dengan mudah mem-parsing URL dan muatan permintaan. Melalui resolusi DNS dan proses serupa, proxy dapat terhubung ke layanan menggunakan alamat jaringan sendiri, sehingga menyembunyikan klien.
Contoh panggilan seperti itu adalah sebagai berikut:
GET http://example.com/resource HTTP/1.1 Proxy-Authorization: Basic encoded-credentials
Server proxy memahami alamat yang coba diakses oleh klien dan mengirim permintaan ke layanan untuk mendapatkan respons, yang kemudian dikembalikan ke klien.
HTTP/1.1 200 OK Content-Type: text/html ... body blahblah ...
Ini mewakili bentuk implementasi paling sederhana dari server proxy HTTP. Namun, kami mengamati kelemahan: server proxy menangani lalu lintas klien dalam teks biasa, menimbulkan risiko keamanan potensial karena mungkin mencatat lalu lintas pengguna selama penerusan. Oleh karena itu, pertimbangan metode enkripsi diperlukan untuk memastikan keamanan.
Cara Kerja Kompleks Lalu Lintas HTTPS dan Server Proxy
Dengan peningkatan proporsi lalu lintas terenkripsi HTTPS dalam semua lalu lintas HTTP, server proxy harus menyesuaikan diri dengan skenario ini.
Namun, tantangan muncul: lalu lintas yang dikirim oleh klien ke penyedia layanan sekarang terenkripsi. Server proxy tidak dapat memahami sumber daya apa yang diakses oleh klien melalui dekripsi. Ini karena lalu lintas dilindungi oleh mekanisme negosiasi kunci berdasarkan algoritma enkripsi asimetris antara klien dan penyedia layanan, dan lalu lintas terenkripsi berikutnya menggunakan kunci simetris yang tidak dapat diperoleh oleh man-in-the-middle selama komunikasi. Tujuan dasar TLS adalah untuk mencegah kemungkinan serangan man-in-the-middle.
Jadi, bagaimana server proxy bekerja dalam kasus ini?
Ini lebih kompleks dibandingkan dengan metode sebelumnya dalam mem-parsing permintaan teks biasa. Protokol HTTP memperkenalkan metode permintaan khusus CONNECT. Klien menggunakan metode ini untuk mengirim permintaan awal ke server proxy:
CONNECT server.example.com:80 HTTP/1.1 Host: server.example.com:80 Proxy-Authorization: Basic encoded-credentials
Klien mengirim permintaan CONNECT ke server proxy, termasuk domain atau alamat IP dan port yang ingin dihubungi oleh klien. Setelah menerima permintaan, server proxy membangun koneksi TCP dengan layanan target dan menyimpan pemetaan port antara klien dan layanan. Selanjutnya, klien dapat mengirim permintaan yang benar ke server proxy, yang akan meneruskan lalu lintas ke layanan sebagaimana adanya, tanpa mencoba mem-parsing data. Oleh karena itu, komunikasi terenkripsi HTTPS dapat diandalkan.
Mekanisme ini, dibandingkan dengan proxy HTTP teks biasa, lebih serbaguna. Setelah permintaan HTTP pertama memberi tahu server proxy tentang informasi untuk membangun koneksi, pada dasarnya ia menjadi saluran proxy transparan. Ini dapat memfasilitasi komunikasi untuk lalu lintas HTTPS dan lalu lintas biner TCP (seperti SSH) melalui server proxy.