Die Konfiguration eines Proxys unter Linux umfasst das Setzen von Umgebungsvariablen für Benutzersitzungen, die Konfiguration von APT für die Paketverwaltung und die Angabe von Proxy-Einstellungen für Systemd-Dienste, um sicherzustellen, dass alle Systemkomponenten über den Proxy auf externe Netzwerke zugreifen können.
Viele Linux-Umgebungen arbeiten hinter Unternehmensfirewalls oder erfordern die Weiterleitung des Datenverkehrs über einen Proxyserver für Sicherheit, Protokollierung oder Zugriffskontrolle. Eine ordnungsgemäße Proxy-Konfiguration ist entscheidend für die Systemfunktionalität, einschließlich Software-Updates, Internetzugang für Benutzeranwendungen und die Kommunikation von Hintergrunddiensten. Dieser Artikel beschreibt die Methoden zur Konfiguration von Proxy-Einstellungen über gängige Linux-Komponenten hinweg.
Umgebungsvariablen
Shell-Umgebungen und Anwendungen, die von ihnen erben, verlassen sich oft auf Standard-Umgebungsvariablen für die Proxy-Konfiguration. Diese Variablen definieren die Proxyserver-Adresse für HTTP-, HTTPS- und FTP-Verkehr sowie Ausnahmen für direkte Verbindungen.
Standard-Proxy-Umgebungsvariablen
HTTP_PROXY: Proxy für HTTP-Verbindungen.HTTPS_PROXY: Proxy für HTTPS-Verbindungen.FTP_PROXY: Proxy für FTP-Verbindungen.NO_PROXY: Eine durch Kommas getrennte Liste von Hostnamen, IP-Adressen oder CIDR-Bereichen, die den Proxy umgehen sollen. Beispiel:localhost,127.0.0.1,*.local,192.168.0.0/24.
Diese Variablen sind in einigen Kontexten groß-/kleinschreibungsempfindlich (z.B. verwendet wget oft das kleingeschriebene http_proxy, während andere das großgeschriebene HTTP_PROXY bevorzugen). Es ist üblich, sowohl die Groß- als auch die Kleinschreibung für eine breitere Kompatibilität zu setzen.
Temporäre Shell-Sitzungskonfiguration
Um Proxy-Variablen für die aktuelle Shell-Sitzung und alle von ihr gestarteten Prozesse zu setzen:
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"
# Für Kompatibilität auch kleingeschriebene Versionen setzen
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"
Ersetzen Sie proxy.example.com:8080 durch die Adresse und den Port Ihres Proxyservers. Wenn eine Authentifizierung erforderlich ist, fügen Sie Anmeldeinformationen hinzu: http://user:password@proxy.example.com:8080.
Persistente benutzerspezifische Konfiguration
Damit Proxy-Einstellungen über Benutzeranmeldesitzungen hinweg bestehen bleiben, fügen Sie die export-Befehle zur Shell-Profildatei des Benutzers hinzu.
- Bash:
~/.bashrcoder~/.profile - Zsh:
~/.zshrc
Beispiel für ~/.bashrc:
# Proxy-Einstellungen
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"
Nach der Änderung die Datei neu laden oder ab- und wieder anmelden: source ~/.bashrc.
Persistente systemweite Konfiguration
Für systemweite Proxy-Einstellungen, die alle Benutzer und einige Systemprozesse betreffen (obwohl nicht alle Systemd-Dienste direkt), verwenden Sie /etc/environment oder Dateien in /etc/profile.d/.
/etc/environment
Diese Datei wird von PAM (Pluggable Authentication Modules) beim Login für alle Dienste und Anwendungen gelesen, die von einer Login-Shell gestartet werden. Sie unterstützt nur die Syntax KEY="value", ohne export.
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"
Änderungen an /etc/environment erfordern in der Regel einen Neustart oder eine erneute Anmeldung, damit neue Sitzungen sie übernehmen.
/etc/profile.d/
Skripte, die in /etc/profile.d/ platziert werden, werden von Login-Shells geladen. Dies ist geeignet, um Umgebungsvariablen zu setzen, die Logik oder export-Anweisungen erfordern. Erstellen Sie eine neue Datei, z.B. /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"
Stellen Sie sicher, dass das Skript ausführbar ist: sudo chmod +x /etc/profile.d/proxy.sh.
sudo und Proxy-Variablen
Bei der Verwendung von sudo werden Umgebungsvariablen aus Sicherheitsgründen oft zurückgesetzt. Um Proxy-Einstellungen für Befehle, die mit sudo ausgeführt werden, beizubehalten:
- Verwenden Sie
sudo -E: Dies bewahrt die aktuellen Umgebungsvariablen.
bash sudo -E apt update - Konfigurieren Sie
sudoers: Bearbeiten Sie/etc/sudoersmitsudo visudound fügen Sieenv_keephinzu/ändern Sie es.
Defaults env_keep += "HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY http_proxy https_proxy ftp_proxy no_proxy"
Dieser Ansatz ist im Allgemeinen sicherer alssudo -Efür persistente Systemkonfigurationen.
APT (Advanced Package Tool)
APT, der Paketmanager, der von Debian-basierten Distributionen (z.B. Ubuntu) verwendet wird, erfordert eine eigene Proxy-Konfiguration, getrennt von den Shell-Umgebungsvariablen.
APT Proxy-Konfigurationsdatei
Die Proxy-Einstellungen von APT werden in Konfigurationsdateien innerhalb von /etc/apt/apt.conf.d/ definiert. Erstellen Sie eine neue Datei, z.B. /etc/apt/apt.conf.d/01proxy, mit folgendem Inhalt:
Acquire::http::Proxy "http://proxy.example.com:8080/";
Acquire::https::Proxy "http://proxy.example.com:8080/";
# Acquire::ftp::Proxy "ftp://proxy.example.com:8080/"; # Auskommentierung entfernen, falls benötigt
Ersetzen Sie proxy.example.com:8080 durch die Adresse und den Port Ihres Proxyservers.
Wenn der Proxy eine Authentifizierung erfordert:
Acquire::http::Proxy "http://user:password@proxy.example.com:8080/";
Acquire::https::Proxy "http://user:password@proxy.example.com:8080/";
Für Hosts, die den APT-Proxy umgehen sollen, verwenden Sie Acquire::NoProxy:
Acquire::NoProxy "localhost,127.0.0.1,archive.ubuntu.com";
Dies wird seltener verwendet als das globale NO_PROXY, kann aber spezifisch für APT sein.
Nach dem Erstellen oder Ändern der Datei verwendet APT diese Einstellungen automatisch für nachfolgende Operationen (z.B. apt update, apt install). Es ist kein Dienstneustart erforderlich.
Systemd-Dienste
Systemd verwaltet Systemdienste und Anwendungen. Von Systemd gestartete Dienste erben Proxy-Umgebungsvariablen, die in Shell-Profilen oder /etc/environment gesetzt wurden, nicht automatisch. Jede Systemd-Einheit, die Proxy-Zugriff benötigt, muss explizit konfiguriert werden.
Proxy für einen spezifischen Systemd-Dienst
Um Proxy-Einstellungen für einen einzelnen Systemd-Dienst zu konfigurieren, erstellen Sie eine Override-Datei. Dies ist die empfohlene Methode, um eine direkte Änderung der ursprünglichen Unit-Dateien zu vermeiden, die bei Paketaktualisierungen überschrieben werden können.
-
Erstellen Sie ein Override-Verzeichnis:
bash sudo systemctl edit <service_name>
Dieser Befehl öffnet einen Editor für/etc/systemd/system/<service_name>.service.d/override.conf. -
Fügen Sie Proxy-Umgebungsvariablen hinzu:
Fügen Sie im Editor den Abschnitt[Service]und dieEnvironment-Direktiven hinzu: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"
JedeEnvironment-Direktive kann mehrere Variablen enthalten, die durch Leerzeichen innerhalb der Anführungszeichen getrennt sind, oder Sie können mehrereEnvironment-Zeilen verwenden. Der\dient zur Zeilenfortsetzung in der Override-Datei. -
Speichern und beenden: Speichern Sie die Datei. Systemd lädt den Daemon automatisch neu und fordert Sie auf, den Dienst neu zu starten. Bestätigen Sie den Neustart. Wenn Sie nicht dazu aufgefordert werden, laden Sie manuell neu und starten Sie neu:
bash sudo systemctl daemon-reload sudo systemctl restart <service_name>
Globale Systemd-Proxy-Konfiguration
Für Dienste, die keine spezifischen Proxy-Einstellungen haben, oder für eine systemweite Standardeinstellung, konfigurieren Sie Proxy-Einstellungen in der globalen Umgebung von Systemd. Dies betrifft alle Dienste, die diese Variablen nicht explizit überschreiben.
-
Erstellen Sie ein Verzeichnis für Drop-in-Konfigurationen:
bash sudo mkdir -p /etc/systemd/system.conf.d/ -
Erstellen Sie eine Proxy-Konfigurationsdatei:
bash sudo nano /etc/systemd/system.conf.d/proxy.conf -
Fügen Sie Proxy-Umgebungsvariablen hinzu:
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 neu laden und Dienste neu starten:
bash sudo systemctl daemon-reload sudo systemctl restart --all # Mit Vorsicht verwenden, startet alle Benutzer- und Systemdienste neu
Ein vollständiger Systemneustart ist oft der sicherste Weg, um sicherzustellen, dass alle Dienste diese globalen Änderungen übernehmen.
Überprüfung
Nach der Konfiguration der Proxy-Einstellungen überprüfen Sie deren Wirksamkeit:
- Umgebungsvariablen:
bash env | grep -i proxy - APT:
bash apt config dump | grep -i proxy
Versuchen Sie ein Update:sudo apt update. - Allgemeiner Netzwerkzugriff:
bash curl -v http://ifconfig.me
Die Ausgabe sollte die IP-Adresse des Proxyservers anzeigen, wenn der Datenverkehr über diesen geleitet wird, oder Ihre externe IP, wennNO_PROXYwirksam ist. - Systemd-Dienst: Überprüfen Sie den Dienststatus und die Protokolle auf Konnektivitätsprobleme.
bash sudo systemctl status <service_name> sudo journalctl -u <service_name>
Sie können auch die Umgebung eines laufenden Dienstprozesses inspizieren. Finden Sie die PID des Dienstes, dann:
bash sudo cat /proc/<PID>/environ | tr '\0' '\n' | grep -i proxy
Vergleich der Proxy-Konfigurationsmethoden
| Methode | Geltungsbereich | Persistenz | Betroffene Komponenten | Konfigurationsbeispiel |
|---|---|---|---|---|
| Shell-Umgebung (Temporär) | Aktuelle Shell-Sitzung | Nein | Befehle, die von der aktuellen Shell gestartet werden | export HTTP_PROXY="..." |
Benutzerprofil (~/.bashrc) |
Anmeldesitzungen des Benutzers | Ja | Benutzeranwendungen, Shell-Befehle | export-Zeilen zu ~/.bashrc hinzufügen |
Systemweit (/etc/environment) |
Alle Anmeldesitzungen, einige Systemprozesse | Ja | Login-Shells, einige Anwendungen (nicht-Systemd) | HTTP_PROXY="..." in /etc/environment |
Systemweit (/etc/profile.d/) |
Alle Login-Shells | Ja | Login-Shells, von ihnen gestartete Anwendungen | Skript mit export-Zeilen in /etc/profile.d/ |
APT (/etc/apt/apt.conf.d/) |
Nur APT-Paketmanager | Ja | apt, apt-get, aptitude |
Acquire::http::Proxy "..."; in 01proxy |
Systemd-Dienst-Override (override.conf) |
Spezifische Systemd-Einheit | Ja | Ein Systemd-Dienst | Environment="..." in /etc/systemd/system/<service>.service.d/override.conf |
Global Systemd (system.conf.d/) |
Alle Systemd-Dienste (Standard) | Ja | Alle Systemd-Dienste, sofern nicht überschrieben | DefaultEnvironment="..." in /etc/systemd/system.conf.d/proxy.conf |