Linux'ta proxy yapılandırmak; kullanıcı oturumları için ortam değişkenlerinin ayarlanmasını, paket yönetimi için APT'nin yapılandırılmasını ve tüm sistem bileşenlerinin dış ağlara proxy üzerinden erişebilmesi için Systemd servislerine proxy ayarlarının tanımlanmasını kapsar.
Birçok Linux ortamı kurumsal güvenlik duvarlarının arkasında çalışır ya da güvenlik, kayıt tutma veya erişim denetimi amacıyla trafiğin bir proxy sunucusu üzerinden yönlendirilmesini gerektirir. Doğru proxy yapılandırması; yazılım güncellemeleri, kullanıcı uygulamalarının internet erişimi ve arka plan servislerinin iletişimi dahil olmak üzere sistemin işleyişi için kritiktir. Bu makale, yaygın Linux bileşenlerinde proxy ayarlarının nasıl yapılandırılacağını ayrıntılarıyla anlatır.
Ortam değişkenleri
Kabuk ortamları ve bunları devralan uygulamalar, proxy yapılandırması için genellikle standart ortam değişkenlerine dayanır. Bu değişkenler HTTP, HTTPS ve FTP trafiği için proxy sunucusu adresini ve doğrudan bağlantı istisnalarını tanımlar.
Standart proxy ortam değişkenleri
HTTP_PROXY: HTTP bağlantıları için proxy.HTTPS_PROXY: HTTPS bağlantıları için proxy.FTP_PROXY: FTP bağlantıları için proxy.NO_PROXY: Proxy'yi atlaması gereken ana makine adları, IP adresleri veya CIDR aralıklarının virgülle ayrılmış listesi. Örnek:localhost,127.0.0.1,*.local,192.168.0.0/24.
Bu değişkenler bazı bağlamlarda büyük/küçük harfe duyarlıdır (ör. wget genellikle küçük harfli http_proxy kullanırken diğerleri büyük harfli HTTP_PROXY tercih eder). Daha geniş uyumluluk için hem büyük hem küçük harfli sürümleri tanımlamak yaygın bir uygulamadır.
Geçici kabuk oturumu yapılandırması
Proxy değişkenlerini mevcut kabuk oturumu ve buradan başlatılan tüm süreçler için ayarlamak üzere:
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
# Uyumluluk için küçük harfli sürümleri de ayarlayın
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
proxy.example.com:8080 yerine kendi proxy sunucu adresinizi ve portunuzu yazın. Kimlik doğrulama gerekiyorsa kimlik bilgilerini ekleyin: http://user:[email protected]:8080.
Kullanıcıya özel kalıcı yapılandırma
Proxy ayarlarının kullanıcı oturumları arasında kalıcı olması için export komutlarını kullanıcının kabuk profil dosyasına ekleyin.
- Bash:
~/.bashrcveya~/.profile - Zsh:
~/.zshrc
~/.bashrc için örnek:
# Proxy ayarları
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
Değişiklikten sonra dosyayı kaynak olarak yükleyin ya da oturumu kapatıp yeniden açın: source ~/.bashrc.
Sistem genelinde kalıcı yapılandırma
Tüm kullanıcıları ve bazı sistem süreçlerini etkileyen (ancak tüm Systemd servislerini doğrudan kapsamayan) sistem genelindeki proxy ayarları için /etc/environment dosyasını veya /etc/profile.d/ içindeki dosyaları kullanın.
/etc/environment
Bu dosya, giriş sırasında PAM (Pluggable Authentication Modules) tarafından, oturum açan kabuk tarafından başlatılan tüm servisler ve uygulamalar için okunur. Yalnızca KEY="value" sözdizimini destekler, export kullanılmaz.
HTTP_PROXY="http://proxy.example.com:8080"
HTTPS_PROXY="http://proxy.example.com:8080"
FTP_PROXY="http://proxy.example.com:8080"
NO_PROXY="localhost,127.0.0.1,.example.com"
http_proxy="http://proxy.example.com:8080"
https_proxy="http://proxy.example.com:8080"
ftp_proxy="http://proxy.example.com:8080"
no_proxy="localhost,127.0.0.1,.example.com"
/etc/environment üzerindeki değişikliklerin yeni oturumlarca algılanması için genellikle yeniden başlatma veya yeniden oturum açma gerekir.
/etc/profile.d/
/etc/profile.d/ dizinine konan betikler, oturum açan kabuklar tarafından kaynak olarak yüklenir. Bu, mantık veya export ifadeleri gerektiren ortam değişkenlerini tanımlamak için uygundur. Yeni bir dosya oluşturun, ör. /etc/profile.d/proxy.sh:
#!/bin/bash
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"
Betiğin çalıştırılabilir olduğundan emin olun: sudo chmod +x /etc/profile.d/proxy.sh.
sudo ve proxy değişkenleri
sudo kullanılırken ortam değişkenleri güvenlik nedeniyle çoğu zaman sıfırlanır. sudo ile çalıştırılan komutlarda proxy ayarlarını korumak için:
sudo -Ekullanın: Bu, mevcut ortam değişkenlerini korur.
bash sudo -E apt updatesudoersdosyasını yapılandırın:sudo visudoile/etc/sudoersdosyasını düzenleyipenv_keepsatırını ekleyin/değiştirin.
Defaults env_keep += "HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY http_proxy https_proxy ftp_proxy no_proxy"
Kalıcı sistem yapılandırmalarında bu yaklaşım genelliklesudo -E'den daha güvenlidir.
APT (Advanced Package Tool)
Debian tabanlı dağıtımların (ör. Ubuntu) kullandığı paket yöneticisi APT, kabuk ortam değişkenlerinden bağımsız olarak kendi proxy yapılandırmasını gerektirir.
APT proxy yapılandırma dosyası
APT'nin proxy ayarları /etc/apt/apt.conf.d/ içindeki yapılandırma dosyalarında tanımlanır. Yeni bir dosya oluşturun, ör. /etc/apt/apt.conf.d/01proxy, içeriği şöyle olsun:
Acquire::http::Proxy "http://proxy.example.com:8080/";
Acquire::https::Proxy "http://proxy.example.com:8080/";
# Acquire::ftp::Proxy "ftp://proxy.example.com:8080/"; # Gerekirse yorumu kaldırın
proxy.example.com:8080 yerine kendi proxy sunucu adresinizi ve portunuzu yazın.
Proxy kimlik doğrulama gerektiriyorsa:
Acquire::http::Proxy "http://user:[email protected]:8080/";
Acquire::https::Proxy "http://user:[email protected]:8080/";
APT proxy'sini atlaması gereken ana makineler için Acquire::NoProxy kullanın:
Acquire::NoProxy "localhost,127.0.0.1,archive.ubuntu.com";
Bu, genel NO_PROXY kadar sık kullanılmaz ancak APT'ye özgü olabilir.
Dosyayı oluşturduktan veya değiştirdikten sonra APT, sonraki işlemlerde (ör. apt update, apt install) bu ayarları otomatik olarak kullanır. Servis yeniden başlatmaya gerek yoktur.
Systemd servisleri
Systemd, sistem servislerini ve uygulamalarını yönetir. Systemd tarafından başlatılan servisler, kabuk profillerinde veya /etc/environment içinde tanımlanan proxy ortam değişkenlerini otomatik olarak devralmaz. Proxy erişimi gereken her Systemd birimi ayrıca yapılandırılmalıdır.
Belirli bir Systemd servisi için proxy
Tek bir Systemd servisinin proxy ayarlarını yapılandırmak için bir override dosyası oluşturun. Paket güncellemelerinde üzerine yazılabilecek özgün birim dosyalarını doğrudan değiştirmekten kaçınmak için önerilen yöntem budur.
-
Bir override dizini oluşturun:
bash sudo systemctl edit <service_name>
Bu komut/etc/systemd/system/<service_name>.service.d/override.confdosyası için bir düzenleyici açar. -
Proxy ortam değişkenlerini ekleyin:
Düzenleyicide[Service]bölümünü veEnvironmentyönergelerini ekleyin:ini [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080" \ "HTTPS_PROXY=http://proxy.example.com:8080" \ "NO_PROXY=localhost,127.0.0.1" Environment="http_proxy=http://proxy.example.com:8080" \ "https_proxy=http://proxy.example.com:8080" \ "no_proxy=localhost,127.0.0.1"
HerEnvironmentyönergesi, tırnak içinde boşlukla ayrılmış birden fazla değişken içerebilir; alternatif olarak birden fazlaEnvironmentsatırı kullanabilirsiniz.\işareti override dosyasında satır devamı içindir. -
Kaydedin ve çıkın: Dosyayı kaydedin. Systemd daemon'u otomatik olarak yeniden yükler ve servisi yeniden başlatmayı önerir. Yeniden başlatmayı onaylayın. Öneri gelmezse elle yeniden yükleyip başlatın:
bash sudo systemctl daemon-reload sudo systemctl restart <service_name>
Genel Systemd proxy yapılandırması
Kendine özgü proxy ayarı olmayan servisler için ya da sistem genelinde bir varsayılan tanımlamak için proxy ayarlarını Systemd'nin genel ortamında yapılandırın. Bu, söz konusu değişkenleri açıkça geçersiz kılmayan tüm servisleri etkiler.
-
Drop-in yapılandırmalar için bir dizin oluşturun:
bash sudo mkdir -p /etc/systemd/system.conf.d/ -
Bir proxy yapılandırma dosyası oluşturun:
bash sudo nano /etc/systemd/system.conf.d/proxy.conf -
Proxy ortam değişkenlerini ekleyin:
ini [Manager] DefaultEnvironment="HTTP_PROXY=http://proxy.example.com:8080" DefaultEnvironment="HTTPS_PROXY=http://proxy.example.com:8080" DefaultEnvironment="NO_PROXY=localhost,127.0.0.1" DefaultEnvironment="http_proxy=http://proxy.example.com:8080" DefaultEnvironment="https_proxy=http://proxy.example.com:8080" DefaultEnvironment="no_proxy=localhost,127.0.0.1" -
Systemd daemon'unu yeniden yükleyin ve servisleri yeniden başlatın:
bash sudo systemctl daemon-reload sudo systemctl restart --all # Dikkatli kullanın, tüm kullanıcı ve sistem servislerini yeniden başlatır
Tüm servislerin bu genel değişiklikleri almasını sağlamanın en güvenli yolu genellikle sistemi tamamen yeniden başlatmaktır.
Doğrulama
Proxy ayarlarını yapılandırdıktan sonra çalıştıklarını doğrulayın:
- Ortam değişkenleri:
bash env | grep -i proxy - APT:
bash apt config dump | grep -i proxy
Bir güncelleme deneyin:sudo apt update. - Genel ağ erişimi:
bash curl -v http://ifconfig.me
Trafik proxy üzerinden geçiyorsa çıktı proxy sunucusunun IP adresini,NO_PROXYetkiliyse kendi dış IP'nizi göstermelidir. - Systemd servisi: Bağlantı sorunları için servis durumunu ve günlüklerini kontrol edin.
bash sudo systemctl status <service_name> sudo journalctl -u <service_name>
Çalışan bir servis sürecinin ortamını da inceleyebilirsiniz. Servisin PID'sini bulun, ardından:
bash sudo cat /proc/<PID>/environ | tr '\0' '\n' | grep -i proxy
Proxy yapılandırma yöntemlerinin karşılaştırması
| Yöntem | Kapsam | Kalıcılık | Etkilenen bileşenler | Yapılandırma örneği |
|---|---|---|---|---|
| Kabuk ortamı (geçici) | Mevcut kabuk oturumu | Hayır | Mevcut kabuktan başlatılan komutlar | export HTTP_PROXY="..." |
Kullanıcı profili (~/.bashrc) |
Kullanıcının oturumları | Evet | Kullanıcı uygulamaları, kabuk komutları | ~/.bashrc dosyasına export satırları ekleyin |
Sistem geneli (/etc/environment) |
Tüm oturumlar, bazı sistem süreçleri | Evet | Oturum kabukları, bazı uygulamalar (Systemd dışı) | /etc/environment içinde HTTP_PROXY="..." |
Sistem geneli (/etc/profile.d/) |
Tüm oturum kabukları | Evet | Oturum kabukları, bunlardan başlatılan uygulamalar | /etc/profile.d/ içinde export satırlarını içeren betik |
APT (/etc/apt/apt.conf.d/) |
Yalnızca APT paket yöneticisi | Evet | apt, apt-get, aptitude |
01proxy içinde Acquire::http::Proxy "..."; |
Systemd servis override'ı (override.conf) |
Belirli bir Systemd birimi | Evet | Tek bir Systemd servisi | /etc/systemd/system/<service>.service.d/override.conf içinde Environment="..." |
Genel Systemd (system.conf.d/) |
Tüm Systemd servisleri (varsayılan) | Evet | Geçersiz kılınmadıkça tüm Systemd servisleri | /etc/systemd/system.conf.d/proxy.conf içinde DefaultEnvironment="..." |
