emiliamiller
Goto Top

Kompletten Traffic durch Proxy leiten (Linux)

Hallo zusammen, bin neu hier und würde mich freuen wenn mir jemand unter die Arme greifen kann face-smile

Folgendes Problem:

Wir haben folgende Konstellation im Betrieb die lokalen Windowsrechner müssen nicht über einen Proxy heraus da Sie sich mit der AD authentifizieren.
Alle anderen Geräte kommen nur über einen Proxy mit Autentizierung heraus sofern sie nicht in der AD aufgenommen sind.

Die Proxy-Daten sehen in etwa so aus:

Proxy: proxy.firmenname.de
Port: 8080
AD-Username: bla
AD-Password: blupp

Unter Windows scheint dies nicht allzuschwer zu sein, unter Linux und darauf wird das Projekt letzten Endes aufbauen dagegen schon.

Ich habe heute gediegene 6 Stunden vor diesem Problem gesessen und gefühlt die Daten in x-verschiedenen Dateien hinterlegt, sei es /etc/environment
/etc/apt.conf, die bash.bashrc oder halt .profile bzw. direkt in der GUI des Network-Managers unter Ubuntu 19.04.


Und immer noch gibt es das ein oder andere Programm was sich nicht nicht daran hält, sei es auch nur docker das wieder die Details in einer anderen Datei
haben möchte.
Als ich heute versucht habe LineageOS unter Ubuntu 19.04 spaßeshalber zu kompilieren habe ich schnell bemerkt was für eine
Clusterf.... das sein kann, weil integrale Teile eben nicht auf einen zentralen Ort zugreifen in dem die Proxydaten hinterlegt sind, oder ich hab ihn noch nicht gefunden.


Erschwerend dazu kommt, das mein Abschlussprojekt die gleichen Probleme haben wird.

Ich möchte eine lokale Installation des Suse Manager Server auf einen eigens dafür abgestellten HP-Server mit genug Ressourcen installieren, der wiederum andere
Suse sowie Redhat-Clients (vermutlich virtualisiert unter Hyper-V im gleichen Subnetz) mit Updates versorgt.
Logischerweise dürfte es sich dort ähnlich verhalten und somit habe ich schon meinen alten Raspberry Pi 2 ausgegraben den ich im Zweifel als "Mittelsmann" dazwischenschalten würde.

Also folgendermaßen [Suma-Server ]---- kompletter Traffic --> [ Raspberry Pi 2 ] (Proxydaten hinterlegt + ETH0 eingebaut & ETH1 per Gbit-USB) --> [ INTERNET ]
Mir ist klar das der Raspberry Pi im Normalfall ein bottleneck ist aber da der Testserver sowieso an einen Switch mit 100Mbit hängt, ist es zu vernachlässigen.

Im Zweifel kann ich die URL's die für den Suma-Server benötigt werden freischalten lassen bzw. eintragen lassen das die genannten URL's für die im Suma-Server angebene IP
ohne Authentifizierung durchgelassen werden, das sollte aber nur im absoluten Notfall geschehen sollte sich keine andere Lösung finden.


Hoffe das ist nicht allzuschwer zu realisieren da mir die Zeit davon läuft und google in diesem Fall echt keine Hilfe ist.
Wenn das lokal auf der Linux-Kiste (SLES Manager) über IPTables zu realisieren ist umso besser, aber selbst die Registriereung der Test-Subscription während der Installation könnte dann vermutlich schon Probleme bereiten.


Für jede Art der Hilfe wäre ich zutiefst dankbar, da solche Probleme das an sich bereits sehr komplexe Projekt verkomplizieren...

Content-Key: 496787

Url: https://administrator.de/contentid/496787

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: Henere
Henere 21.09.2019 um 06:03:14 Uhr
Goto Top
Mitglied: emiliamiller
emiliamiller 21.09.2019 um 10:41:54 Uhr
Goto Top
Klasse das du mich das googlen gelehrt hast face-smile

Manchmal Frage ich mich warum Menschen die nichts zur Problemlösung beizutragen haben sich überhaupt die Mühe machen,
so ein unnötigen Post abzugeben.

Aber analysieren wir das ganze mal.

Die ersten Beiträge bei google beschäftigen sich mit dem setzen der Proxyvariablen über sowas wie /etc/environment, das taugt aber nix
hab ich schon durch.

Der Rest beschäftigt sich mit transparent-proxies (Squid z.B) ohne Authenfizierung was ja logisch ist, den ein transparent proxy ist nur deshalb transparent weil er keine Authentifizierung erfordert.

Steht selbst die Leute bei Squid schreiben:
http://www.squid-cache.org/Versions/v2/2.7/cfgman/auth_param.html


Ich will die Lösung echt nicht auf dem silbertablett geliefert bekommen aber ein lmgtfy ist irgendwie ein wenig altbacken.
Trotzdem danke für deine Mühen.
Mitglied: ASP.NET.Core
ASP.NET.Core 21.09.2019 aktualisiert um 11:53:07 Uhr
Goto Top
Zitat von @emiliamiller:
Unter Windows scheint dies nicht allzuschwer zu sein, unter Linux und darauf wird das Projekt letzten Endes aufbauen dagegen schon.

Hi,

das kann ich nicht bestätigen. Im Betrieb in dem ich arbeite sind Windows und Linux-Clients vorhanden, die beide nur über einen Proxy (Squid) ins Internet kommen. Bei Windows hast du die IE Proxy-Konfiguration. Die wird von einigen Programmen genutzt, wenn diese entweder das .NET Browser Control (baut auf dem IE auf) verwenden oder bei ihren Anfragen den IE-Proxy auslesen und entsprechend setzen (in .NET z.B. WebClient, HttpWebRequest, etc).

Dann gibt es noch (wie unter Linux auch) die Umgebungsariablen HTTP_PROXY und HTTPS_PROXY. Gegebenenfalls ist auch NO_PROXY wichtig, um bestimmte interne URLs vom Proxy auszuschließen. Hast du die gesetzt? Sowohl unter Windows als auch Linux werden diese Variablen von den meisten Programmen berücksichtigt, wenn man sie global setzt (z.B. in der bashrc unter Linux, oder den Benutzer-Systemvariablen von Windows).

Einziger Unterschied ist, dass Linux auch die jeweils klein geschriebenen Varianten (http_proxy, https_proxy, no_proxy) berücksichtigt und einige wenige Applikationen nur damit funktionieren. Das ist ein wenig Tricky, daher würde ich immer beide setzen. Aber sonst nehmen sich Win und Linux da nicht viel: Es kommt schlicht auf die Anwendung an, ob die Umgebungsvariablen bzw. bei Win auch noch der IE-Proxy genutzt werden. Durchaus gibt es noch Applikationen, die nichts davon unterstützen. Manche machen es sich einfach und benutzen nur ihre eigene Proxy-Konfiguration.

Dazu gibt es noch so Programme wie Visual Studio Code, die einfach nicht sauber funktionieren wollen. Beispielsweise hat da das Installieren von Plugins durch unseren Proxy nie funktioniert, an anderen Stellen wurde der Proxy aber genutzt. Obwohl ich den Proxy da in den VS Code eigenen Einstellungen gesetzt hatte. Das ist dann schlichtweg schlampige Entwicklung, das kann dich je nach Anwendung durchaus auch treffen. Müsste es bei VS Code mal wieder testen, der letzte Versuch war irgendwann Anfang des Jahres.

Docker nutzt die HTTP(S)_PROXY Variable auch nicht. Das hat aber weniger mit Schlamperei als viel mehr mit der Struktur zutun: Technisch ist das eine Client-Server Anwendung, bestehend aus dem Daemon und CLI-Client. Wenn du den Proxy setzt, kann deine Docker CLI darauf zugreifen. Aber bei einem docker pull nginx lädt eben nicht der Client dieses Image herunter, sondern leitet das an den Server weiter. Dieser läuft als Dienst, daher musst du hier den Proxy entweder im Server-Dienst (Systemd) oder der JSON Konfigurationsdatei hinterlegen.

Letztendlich sollte dir aber klar sein: So ganz trivial ist es im Alltag nicht, den kompletten Traffic durch einen Proxy zu leiten. Vor allem dann, wenn dieser Proxy den Datenverkehr noch aufbricht (MITM). Spätestens bei TLS bringt so was immer wieder Probleme. Es reicht schon wenn Programme mit Checksummen arbeiten (was ja prinzipiell auch sinnvoll ist, sowohl hinsichtlich Sicherheiet als auch irgendwelchen Transportfehlern, die zu korrupten Daten führen). Sobald das der Fall ist, kannst du nicht nur überall den Proxy hinterlegen, sondern auch gleich euer Zertifikat.

Und dann wirst du immer noch Ausnahmefälle haben, wo das eben nicht funktioniert/vorgesehen ist. Als schneller Workaround hilft dann bestenfalls das komplette Deaktivieren der Zertifikatsverifizierung. Gibt auch Kollegen, die sich den Stress gar nicht erst machen und das pauschal erst mal abschalten. Ist natürlich sicherheitstechnisch ein Fiasko und macht die Transportverschlüsselung auch erheblich zunichte, wenn aufgrund des eigenen MITM Zertifikatsfehler als Normal angesehen werden und keiner mehr darüber nachdenkt. Wenn es bei dir ohnehin schon eng wird, würde ich zumindest von so MITM-Geschichten nach Möglichkeit die Finger lassen.

Lokale Repos/Mirrors

Ein anderer Ansatz wäre, dass du lokale Repositorys aufbaust, die so was wie Pakete oder Images cachen. Das kommt beispielsweise bei Docker in Frage, den Linux-Paketmanagern oder auch NPM, NuGet & co. Am Beispiel von Docker hast du einen Server, der Docker-Images aus dem Netz laden darf. Alle anderen Clients gehen nicht direkt ins Internet, sondern greifen auf diesen Mirror-Server zu. Der kann sich häufig genutzte Images (z.B. Nginx, Apache etc) im Cache vorhalten. Wenn also 5 Leute das Image laden, wird es nur 1x aus dem Internet gezogen.

Die Adresse von dem Server muss natürlich in NO_PROXY wieder bedacht werden, wenn du für andere Programme die Proxy-Variablen dennoch setzt. Aber das hat bei größeren Umgebungen bzw. schlechten Internet-Leitungen den Performance-Vorteil und für dich als Admin hast du damit die Möglichkeit, Docker-Images einigermaßen zu kontrollieren. Das fängt bei Lizenz-Scans an und hört bei Schwachstellen-Prüfungen auf. So toll Docker auch ist, muss man immer bedenken: Wenn der Author ein neues Image pusht, kann das in eurer Umgebung mit Root-Rechten laufen.

Ist keine direkte Lösung für dein Problem und gerade wenn es zeitlich eng wird auch nicht unbedingt sinnvoll sofort umzusetzen. Aber je nachdem wie eure Umgebung so aussieht, ob du da nach dem Projekt auch weiter arbeiten wirst, wäre das für später eine Überlegung wert.
Mitglied: emiliamiller
emiliamiller 21.09.2019 um 14:53:35 Uhr
Goto Top
Danke immerhin das du dir die Mühe gemacht hast das so umfangreich zu erläutern face-smile
Bin gerade unterwegs und muss mir das nachher in Ruhe durchlesen.

Mit Docker habe ich zuerst herumexperimentiert und dabei recht schnell bemerkt wie aufwändig die Umsetzung in dieser
Umgebung war.
Mal funktionierte das eine dafür dann das andere nicht, wollte zuerst was mit Docker bzw. genauer mit RHEL Satellite machen und habe
danach auf Suse Manager umgeschwenkt, weil dort die Lernkurve steiler ist bzw. der Umfang nicht so groß wie bei ersterem

Verstehe nun übrigens auch warum gerade der Traffic der über den Proxy läuft (also ohne direkt mit Windows AD zu authentifizieren) kein
MITM betreibt und die Zertifikate dort auch denen der tatsächlichen Seite entsprechen.

Muss das mal mit der Abteilung durchkauen wie ich das am besten mache, weil so ist die Installation schon PITA geschweige den die spätere Konfiguration und einbinden der Subscriptions.
Hätte das ganze vermutlich daheim schon zwei mal umgesetzt wenn ich mich ständig mit dem Proxy herumplagen müsste, eventuell eine Option sollten da keine Ausnahmen gemacht werden können.

Es muss doch irgendwie möglich sein das hinzukriegen, eine Distribution wie Tails macht ja auch nichts andere als den gesamten Traffic durchzuleiten, kann ja nicht sein das die Authentifizierung das alles zu nichte macht.
Ist echt zum Haare raufen, wie viel Zeit ich alleine dafür verbracht habe (Wochen) nach irgendeiner Lösung zu suchen daran herumzuarbeiten, da beschäftigt man sich am Ende mehr damit um den Proxy herumzuarbeiten als um das eigentliche Thema der Projektarbeit.


Hatte was von Privoxy gelesen, aber bei gefühlten 100 Tabs die ich für die Recherche schon offen habe, geht das mittlerweile schon unter.
Nochmals danke das du dir die Zeit genommen hast, auch wenn es letztlich keine wirkliche Lösung zu dem Problem ist.

VG & ein schönes Wochenende face-smile