Itu kasus penggunaan yang pasti untuk proxy . Proxy normal, bukan proxy terbalik (alias load balancers).
Yang paling terkenal dan gratis dan open-source adalah cumi-cumi . Untungnya ini adalah salah satu dari beberapa perangkat lunak open-source yang bagus yang dapat dengan mudah diinstal dengan satu apt-get install squid3
dan dikonfigurasikan dengan satu file /etc/squid3/squid.conf
.
Kami akan membahas praktik yang baik dan pelajaran untuk diketahui.
File konfigurasi resmi sedikit diubah (5000 baris komentar yang tidak berguna dihapus).
# WELCOME TO SQUID 3.4.8
# ----------------------------
#
# This is the documentation for the Squid configuration file.
# This documentation can also be found online at:
# http://www.squid-cache.org/Doc/config/
#
# You may wish to look at the Squid home page and wiki for the
# FAQ and other documentation:
# http://www.squid-cache.org/
# http://wiki.squid-cache.org/SquidFaq
# http://wiki.squid-cache.org/ConfigExamples
#
###########################################################
# ACL
###########################################################
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
#####################################################
# Recommended minimum Access Permission configuration
#####################################################
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
#####################################################
# ACL
#####################################################
# access is limited to our subnets
acl mycompany_net src 10.0.0.0/8
# access is limited to whitelisted domains
# ".example.com" includes all subdomains of example.com
acl repo_domain dstdomain .keyserver.ubuntu.com
acl repo_domain dstdomain .debian.org
acl repo_domain dstdomain .python.org
# clients come from a known subnet AND go to a known domain
http_access allow repo_domain mycompany_net
# And finally deny all other access to this proxy
http_access deny all
#####################################################
# Other
#####################################################
# default proxy port is 3128
http_port 0.0.0.0:3128
# don't forward internal private IP addresses
forwarded_for off
# disable ALL caching
# bandwidth is cheap. debugging cache related bugs is expensive.
cache deny all
# logs
# Note: not sure if squid configures logrotate or not
access_log daemon:/var/log/squid3/access.log squid
access_log syslog:squid.INFO squid
# leave coredumps in the first cache dir
coredump_dir /var/spool/squid3
# force immediaty expiry of items in the cache.
# caching is disabled. This setting is set as an additional precaution.
refresh_pattern . 0 0% 0
Konfigurasi Klien - Variabel Lingkungan
Konfigurasikan kedua variabel lingkungan ini di semua sistem.
http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128
Sebagian besar pustaka klien http (libcurl, httpclient, ...) mengkonfigurasi sendiri menggunakan variabel lingkungan. Sebagian besar aplikasi menggunakan salah satu perpustakaan umum dan dengan demikian mendukung proksi out-of-the-box (tanpa dev mengetahui bahwa mereka melakukannya).
Perhatikan bahwa sintaksisnya ketat:
- Nama variabel
http_proxy
HARUS huruf kecil di sebagian besar Linux.
- Nilai variabel TIDAK HARUS dimulai dengan
http(s)://
(protokol proxy BUKAN http).
Konfigurasi Klien - Khusus
Beberapa aplikasi mengabaikan variabel lingkungan dan / atau dijalankan sebagai layanan sebelum variabel dapat diatur (misalnya debian apt
).
Aplikasi ini akan memerlukan konfigurasi khusus (mis /etc/apt.conf
.).
Proxying HTTPS - Hubungkan
Proxy HTTPS sepenuhnya didukung oleh desain. Ini menggunakan metode "CONNECT" khusus yang membangun semacam terowongan antara browser dan proksi.
Entah banyak tentang hal itu tetapi saya tidak pernah memiliki masalah dengan itu selama bertahun-tahun. Itu hanya bekerja.
Kasus Khusus HTTPS - Proxy Transparan
Catatan tentang proxy transparan. (Yaitu Proxy disembunyikan dan mencegat permintaan klien ala. man-in-the-middle).
Proxy transparan melanggar HTTPS. Klien tidak tahu bahwa ada proxy dan tidak punya alasan untuk menggunakan metode Connect khusus.
Klien mencoba koneksi HTTPS langsung ... yang dicegat. Intersepsi terdeteksi dan kesalahan dilemparkan ke semua tempat. (HTTPS dimaksudkan untuk mendeteksi serangan man-in-he-middle).
Daftar putih domain dan CDN
Daftar putih domain dan subdomain didukung sepenuhnya oleh squid. Meskipun demikian, itu pasti gagal dengan cara yang tidak terduga dari waktu ke waktu.
Situs web modern dapat memiliki semua jenis pengalihan domain dan CDN. Itu akan mematahkan ACL ketika orang tidak berusaha keras untuk menempatkan semuanya dengan rapi dalam satu domain.
Terkadang akan ada installer atau paket yang ingin memanggil homeship atau mengambil dependensi eksternal sebelum dijalankan. Ini akan gagal setiap saat dan tidak ada yang bisa Anda lakukan.
Caching
File konfigurasi yang disediakan menonaktifkan semua bentuk caching. Lebih baik aman daripada menyesal.
Secara pribadi, saya sedang menjalankan berbagai hal di cloud saat ini, semua instance memiliki setidaknya 100 Mbps konektivitas dan penyedia menjalankan repo sendiri untuk barang-barang populer (misalnya Debian) yang ditemukan secara otomatis. Itu membuat bandwidth menjadi komoditas yang saya tidak peduli.
Saya lebih suka menonaktifkan caching daripada mengalami bug caching tunggal yang akan melelehkan otak saya dalam pemecahan masalah. Setiap orang di internet TIDAK BISA mendapatkan header caching mereka dengan benar.
Tidak semua lingkungan memiliki persyaratan yang sama. Anda dapat bekerja ekstra dan mengkonfigurasi caching.
TIDAK PERNAH memerlukan otentikasi pada proxy
Ada opsi untuk meminta otentikasi kata sandi dari klien, biasanya dengan akun LDAP mereka. Ini akan memecah setiap browser dan setiap alat baris perintah di alam semesta.
Jika Anda ingin melakukan otentikasi pada proxy, jangan.
Jika manajemen ingin otentikasi, jelaskan bahwa itu tidak mungkin.
Jika Anda seorang dev dan Anda baru saja bergabung dengan perusahaan yang memblokir internet langsung DAN memaksa otentikasi proxy, JAUHKAN SAJA.
Kesimpulan
Kami telah melalui konfigurasi umum, kesalahan umum, dan hal-hal yang harus diketahui tentang proksi.
Pelajaran yang dipelajari:
- Ada perangkat lunak sumber terbuka yang baik untuk proxy (squid)
- Ini sederhana dan mudah dikonfigurasi (satu file pendek)
- Semua tindakan keamanan (opsional) memiliki pengorbanan
- Sebagian besar opsi lanjutan akan merusak barang dan kembali menghantui Anda
- Proxy transparan melanggar HTTPS
- Otentikasi proxy adalah jahat
Seperti biasa dalam pemrograman dan desain sistem, sangat penting untuk mengelola persyaratan dan harapan.
Saya akan merekomendasikan untuk tetap berpegang pada dasar-dasar ketika menyiapkan proxy. Secara umum, proxy biasa tanpa penyaringan tertentu akan berfungsi dengan baik dan tidak menimbulkan masalah. Hanya harus ingat untuk (otomatis) mengkonfigurasi klien.