Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

Maven/Gradle: Betrieb hinter einer Enterprise-Firewall

Einer meiner Kunden setzt eine Firewall kombiniert mit einem Proxy-Server ein, um das interne Netz vom Internet abzukoppeln. Der Zugriff vom internen Netz in’s Internet ist dadurch stark eingeschränkt.

  • Manche Web-Seiten werden generell geblockt … ist bislang kein Problem für mich
  • Zugriff auf’s Internet ist generell nur mit bestimmten Browsern möglich – der HTTP Header “User-Agent” muß bestimmte Werte haben … dadurch werden Build-Tools wie Gradle und Maven geblockt
  • Zugriff auf’s Internet geht generell nur, wenn man sich am Proxy-Server angemeldet hat … dadurch funktioniert bei mir der Zugriff von Eclipse aus nicht, man kann Eclipse-Plugins nur sehr umständlich installieren

Zur Lösung der letzten beiden Probleme gibt es nun die Idee, einen eigenen Proxy-Server zu betreiben, der dann die Anmeldung am “richtigen” Proxy-Server übernimmt und der den User-Agent auf geeignete Werte setzt.

Das GitHub-Projekt

Den Proxy-Server habe ich in Java implementiert und im Rahmen meiner “Mini-Tools” auf GitHub abgelegt. Zu finden ist der Proxy-Server hier: Forward-Proxy.

Die Zutaten

Der eigentliche Kern des Proxy-Servers ist recht klein – die meisten Zutaten liefert das Projekt Jetty. Konkret habe ich hiervon verwendet:

Zur Kompilierung des Projektes verwende ich Gradle. Von mir selbst stammen ein paar Ergänzungen, die

  • diverse Einstellungen aus Properties-Dateien lesen
  • die Anmeldung am Enterprise-Proxy-Server vornehmen
  • das Programm paketieren und einfach ausführbar machen auf Kommandozeilenebene

Das Bauen

Das Bauen des Projektes ist denkbar einfach, sofern ein JDK7 installiert und im PATH verfügbar ist:

  • Shell-Fenster öffnen
  • In den Ordner “uli-mini-tools/forward-proxy” wechseln
  • Ausführen: ../gradlew (… oder unter Windows: ..\gradlew)

Danach gibt es die beiden Dateien

  • forward-proxy-{version}.sh … für Unix/Linux
  • forward-proxy-{version}.bat … für Windows

Sie können direkt von der Shell aus ausgeführt werden.

Der Test

Getestet habe ich den neuen Proxy-Server mit einem einfachen Gradle-Projekt:

  • Konfigurationsdatei “forward-proxy.properties” für den Forward-Proxy:

    proxyPort           = 8888
    parentProxyHost     = 192.168.178.47
    parentProxyPort     = 3128
    parentProxyUser     = uli
    parentProxyPassword = xxxxxx
    replaceHeaders      = User-Agent
    User-Agent          = InternetExploder
    
  • Start vom Forward-Proxy:

    ./forward-proxy*.sh
    
  • gradle.properties:

    systemProp.http.proxyHost=localhost
    systemProp.http.proxyPort=8888
    
  • Gradle-Projekt auspacken und neu bauen mit

    ./gradlew --refresh-dependencies
    # Windows: .\gradlew --refresh-dependencies
    

Comments