Bölüm 19: Explicit Proxy ve IDE/Tool Trafiği¶
Explicit Proxy'ye Genel Bakış¶
Explicit Proxy (forward proxy), istemcinin bilinçli olarak Arceris'i proxy olarak yapılandırarak trafiğini yönlendirdiği çalışma modudur. Transparent proxy'den farkı, istemcinin proxy kullanımından haberdar olması ve kendi yapılandırmasında bunu açıkça belirtmesidir.
Bu yaklaşım özellikle geliştirici araçları (VS Code, Cursor, JetBrains), CLI istemcileri (curl, httpie), AI SDK'ları ve kurumsal uygulamalar için uygundur. Bu araçlarda proxy ayarı yapmak, ağ altyapısında yönlendirme yapmaktan daha kolay ve daha kontrollüdür.
Ne Zaman Kullanılmalı?¶
- IDE ve editör eklentileri: GitHub Copilot, Continue.dev, Cline gibi araçlar proxy ayarını destekler. Arceris explicit proxy olarak yapılandırılarak bu araçların AI trafiği denetlenebilir.
- CLI istemcileri:
curl,httpieveya özel API istemcileri,--proxyveyaHTTPS_PROXYortam değişkeniyle Arceris'e yönlendirilebilir. - AI SDK'ları: OpenAI SDK, Anthropic SDK gibi yazılım geliştirme kitleri çoğu zaman proxy yapılandırmasını destekler.
- Kurumsal uygulamalar: AI entegrasyonu olan dahili uygulamalar, Arceris'i forward proxy olarak kullanabilir.
- Geliştirici iş istasyonları: Ağ seviyesinde transparent proxy kurulumunun pratik olmadığı durumlarda, geliştirici makinede explicit proxy yapılandırması daha uygundur.
Yapılandırma¶
Explicit proxy, Arceris kurulumu sırasında .env dosyasındaki ortam değişkenleriyle yapılandırılır. Ayarlar değiştirildiğinde Arceris'in yeniden başlatılması gerekir.
EXPLICIT_PROXY_ENABLED: Explicit proxy'yi açar/kapar. Varsayılan: false. Etkinleştirildiğinde Arceris, belirtilen port üzerinde forward proxy dinleyicisini başlatır.
EXPLICIT_PROXY_PORT: Explicit proxy'nin dinlediği port. Varsayılan: 3128. Kurumun güvenlik duvarı kurallarında bu porta izin verilmesi gerekir.
EXPLICIT_PROXY_MITM_ENABLED: HTTPS trafiği için MITM (TLS interception) özelliğini açar/kapar. Varsayılan: false. Etkinleştirildiğinde, CONNECT tüneli üzerinden gelen HTTPS trafiğinde TLS bump yapılır ve içerik denetimi (PII, prompt guard vb.) uygulanır. Devre dışı bırakıldığında HTTPS trafiği blind tunnel olarak iletilir ve içerik denetimi yapılmaz.
TLS_BUMP_HOSTS: MITM'in hangi hedef alan adlarına uygulanacağını belirten virgülle ayrılmış liste. Varsayılan: api.openai.com,api.anthropic.com,generativelanguage.googleapis.com,copilot-proxy.githubusercontent.com. Yalnızca bu listedeki alan adlarına yapılan CONNECT isteklerinde TLS bump yapılır; diğer alan adları blind tunnel olarak iletilir.
Kimlik Doğrulama (Proxy Token)¶
Explicit proxy, Proxy-Authorization header'ı ile kimlik doğrulaması yapar. Her kullanıcıya özel bir proxy token oluşturulur ve bu token istemci tarafında proxy kimlik bilgisi olarak kullanılır.
Proxy Token Nasıl Oluşturulur:
- Kullanıcı
https://<ARCERIS_HOST>:8443/user/loginadresinden giriş yapar. - Profile sayfasında "Proxy Token" bölümünde "Generate" butonuna tıklar.
- Parolasını girerek onaylar.
- Sistem bir proxy token üretir ve ekranda gösterir. Bu token yalnızca bir kez gösterilir; güvenli bir yere kaydedilmelidir.
- Admin, User Management sayfasından da kullanıcının proxy token'ını yönetebilir (generate, regenerate, revoke).
Proxy Token Nasıl Kullanılır:
İstemci tarafında iki kimlik doğrulama yöntemi desteklenir:
-
Bearer token:
En basit kullanım. HTTP_proxy veya HTTPS_PROXY ortam değişkeniyle birlikte kullanılabilir.Proxy-Authorization: Bearer <proxy_token> -
Basic auth:
Bazı istemciler (ör. curl, IDE'ler) Basic proxy auth'u daha iyi destekler. Kullanıcı adı herhangi bir değer olabilir; önemli olan parola alanının proxy token olmasıdır.Proxy-Authorization: Basic base64(<username>:<proxy_token>)
Örnek Kullanımlar:
# curl ile
curl --proxy https://localhost:3128 \
--proxy-header "Proxy-Authorization: Bearer abc123token" \
https://api.openai.com/v1/chat/completions
# Ortam değişkeniyle
export HTTPS_PROXY=https://localhost:3128
export HTTPS_PROXY_AUTH="Bearer abc123token"
Proxy Token Yönetimi:
- Generate: Yeni bir token oluşturur. Önceki token varsa geçersiz kalır.
- Regenerate: Mevcut token'ı geçersiz kılarak yenisini oluşturur.
- Revoke: Token'ı kalıcı olarak iptal eder. İstemci yeni token alana kadar proxy'yi kullanamaz.
Token güvenliği için: - Token'lar yalnızca bir kez gösterilir; kaybolursa regenerate yapılmalıdır. - Token'lar kod reposuna, log dosyalarına veya paylaşılan alanlara yazılmamalıdır. - Kullanıcı ayrıldığında veya şüpheli durumda token hemen revoke edilmelidir.
İstek Akışı¶
- İstemci, Arceris explicit proxy'sine (ör.
localhost:3128) bir istek gönderir. - Arceris,
Proxy-Authorizationheader'ından kullanıcıyı doğrular. - HTTP istekleri: İstek doğrudan hedefe iletilir, ancak PII taraması, prompt injection kontrolü ve model ACL denetimi uygulanır.
- HTTPS istekleri (CONNECT):
- Hedef
TLS_BUMP_HOSTSlistesindeyse: TLS bump yapılır, içerik denetlenir ve güvenlik politikaları uygulanır. - Hedef listede değilse: Blind tunnel olarak iletilir, içerik denetlenmez.
- Eşleşme bulunursa istek engellenir veya maskelenir; bulunmazsa hedefe iletilir.
MITM ve TLS Bump Mekanizması¶
HTTPS trafiğinde içerik denetimi yapabilmek için Arceris, TLS bağlantısını kesip (bump) tekrar şifreler. Bu işlem için Arceris CA sertifikası kullanılır.
EXPLICIT_PROXY_MITM_ENABLED=trueolduğunda ve hedefTLS_BUMP_HOSTSlistesinde olduğunda TLS bump yapılır.- İstemci cihazda Arceris CA sertifikasının güvenilir kök sertifikalar arasına eklenmiş olması gerekir (Transparent Proxy'deki CA güven dağıtımı ile aynı).
- MITM devre dışı bırakıldığında, HTTPS trafiği blind tunnel olarak iletilir. Bu durumda Arceris trafiği görür (kim, nereye bağlanıyor) ancak içeriği göremez.
IDE ve CLI Yapılandırma Örnekleri¶
VS Code / Cursor (GitHub Copilot):
settings.json dosyasına eklenir:
{
"http.proxy": "https://localhost:3128",
"http.proxyStrictSSL": false,
"http.proxyAuthorization": "Bearer <proxy_token>"
}
JetBrains IDE (PyCharm, IntelliJ):
Settings → Appearance & Behavior → System Settings → HTTP Proxy:
- Proxy type: HTTP
- Host: <ARCERIS_HOST>
- Port: 3128
- Proxy authentication: Basic
- Username: herhangi bir değer
- Password: <proxy_token>
curl:
curl --proxy https://<ARCERIS_HOST>:3128 \
--proxy-header "Proxy-Authorization: Bearer <proxy_token>" \
https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer <real_api_key>" \
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello"}]}'
Python OpenAI SDK:
import openai
client = openai.OpenAI(
api_key="<real_api_key>",
http_client=httpx.Client(
proxy="https://<ARCERIS_HOST>:3128",
headers={"Proxy-Authorization": "Bearer <proxy_token>"}
)
)
Transparent ve Explicit Proxy Karşılaştırması¶
| Özellik | Transparent Proxy | Explicit Proxy |
|---|---|---|
| İstemci yapılandırması | Gerekmez | Gerekir (proxy ayarı) |
| Ağ yönlendirme | Gerekir (DNS/PBR) | Gerekmez |
| Kimlik doğrulama | Captive portal / proxy token | Proxy token |
| Kullanım senaryosu | Tarayıcı, son kullanıcı | IDE, CLI, SDK, geliştirici araçları |
| MITM | Her zaman aktif | Yapılandırma ile (TLS_BUMP_HOSTS) |
| CA güven dağıtımı | Gerekli | MITM açıksa gerekli |
| Port | 443 (varsayılan) | 3128 (varsayılan) |
En sağlıklı yaklaşım, kullanım türlerine göre bu modelleri birlikte kullanmaktır: tarayıcı trafiği için transparent proxy, geliştirici araçları için explicit proxy.
Güvenlik Değerlendirmesi¶
- Explicit proxy kimlik doğrulama gerektirir; anonim istekler reddedilir.
- Proxy token'lar uzun ömürlüdür ancak istediğiniz zaman revoke edilebilir.
- MITM kapalıyken bile Arceris bağlantı metadata'sını (kim, nereye, ne zaman) kaydeder.
TLS_BUMP_HOSTSlistesi, yalnızca denetlenmesi gereken alan adlarını içerecek şekilde dar tutulmalıdır.