Remote PowerShell über einen HTTP Proxy

Kurzes Vorwort

Hi Codez.one Community,

ich bin Paul und bin ab heute auch ein Autor auf dieser Website. Von mir werdet ihr besonders Artikel lesen über PowerShell und auch ab und an mal .NET (Core). Der Rest des Jahres wird wohl sehr voll sein mit PowerShell.
Ein Thema, welches ich eigentlich nie Ansprechen möchte, aber nicht drumherum komme sind Proxies. Diese Dinger sind meine besondere Hassliebe. Also freut euch auf ab und an mal unterschwellig bösen Artikel gegen diese Dinger. 🙄
Ihr könnt mich auf GitHub unter paule96 finden und auf Twitter unter @JeschkePaul.

So das soll es über mich gewesen sein. Auf zu dem Nerd kram. 🤓

Ausgangssituation

Oft ist es so dass viele Firmen HTTP(s) Proxies (nachfolgend 💣) zwischen ihren Client Netz und dem Internet stehen haben. Diese werden besonders dafür eingesetzt, um zum Beispiel unbeliebten Traffic zu filtern, aber auch um die Client Netze der Firma für externe Server unsichtbar zu machen. Problematisch sind 💣 aber immer dann, wenn man nicht per HTTP(s) auf Ressourcen des Internets zugreifen möchte. Dies können z.B. VMs in einer Cloud sein. Gerade das Cloudgeschäft hat in letzter Zeit einen enormen Zuwachs bekommen, so dass ich immer häufiger mal Spiel VMs im Azure provisioniert habe. In der Regel bekommt man diese aber in kein Firmen VPN bzw. dauert dies meist zu lange. Die Lösung ist nun einfach seiner Client Maschine bekannt mit dem 💣 zu machen.

💣 für die PowerShell Session konfigurieren

Der 💣 für Remote PowerShell kennt mehr oder minder zwei Wege, um an die 💣 Einstellungen zu kommen. Entweder über WINHTTP (netsh) oder über die IE Einstellungen. Wichtig dabei ist, dass eine Remote PowerShell keine WPAD Scripte interpretieren kann. Somit muss man eine explizite 💣 Adresse kennen. Hat man dies durchgeführt kann man nun ein neues PowerShell Session Options Objekt erstellen. Dies versorgt man einfach mit den entsprechenden Informationen:

$options = New-PSSessionOption -ProxyAccessType IEConfig;

Die Eigenschaft ProxyAccessType einfach bei Bedarf auf IEConfig oder auf WinHttpConfig. Je nachdem ob man über NETSH den 💣 konfiguriert hat oder über den Internet Explorer.

Nach dem man dies getan hat kann man nun eine neue Session öffnen:

Enter-PSSession  myComputer -SessionOption $options -UseSSL

Wichtig: Die 💣 Konfiguration kann nur mit SSL verwendet werden. Über HTTP kann man diese Einstellung nicht verwenden.

Noch ein kurzer Hinweis zur Firewall

Dieser oben beschriebene Zugriff sollte nur für Testsystem verwendet werden, da ein 💣 wie schon erwähnt die Client IP versteckt. Das heißt jeder Client hinter einem 💣 sieht gleich aus. Also im Falle eines Angriffes hat man keine Chance die Clients auseinander zu halten. Also für Produktive zwecke sollte hier immer über ein VPN nachgedacht werden. Aber diese 💣 Geschichte hat auch einen Vorteil: auf eurer Zielmaschine müsst ihr nur noch eure Public 💣 IP-Adressen freischalten. Aber denkt immer dran diesen nicht blind zu vertrauen. Wie gesagt hinter so einer IP können tausende Clients sitzen.