it-swarm.com.de

Jenkins Slave-Portnummer für die Firewall

Wir verwenden Jenkins 1.504 unter Windows .

Wir müssen Master und Slave in unterschiedlichen Subnetzen mit dazwischenliegender Firewall haben.
Wir können keine Firewallregeln für jeden Port festlegen, wir müssen genaue Portnummern angeben.

Ich weiß, dass der Hafenmeister lauscht.

Ich sehe auch, dass der Slave die Verbindung zum Master über den beliebigen Port öffnet, der bei jedem Durchlauf dynamisch zugewiesen wird, und der Port auf der Masterseite ist ebenfalls beliebig.
Ich kann den Master-Port reparieren, indem ich ihn unter Jenkins verwalten> Globale Sicherheit konfigurieren> TCP Port für JNLP-Slave-Agenten) spezifiziere.

Wie kann man den Slave Port reparieren?


[~ # ~] update [~ # ~]: Hier beschriebener Verbindungsmechanismus: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI#JenkinsCLI-Connectionmechanism

Ich denke, es könnte für uns funktionieren, aber es wäre immer noch besser, eine Festnetz-2-Festnetz-Verbindung zu haben.

38
Ivan

Wir hatten eine ähnliche Situation, aber in unserem Fall stimmte Infosec zu, 1 zuzulassen, sodass wir den Slave-Port nicht reparieren mussten. Stattdessen funktionierte der Master mit JNLP-Port 49187 ("Configure Global Security" -> "TCP-Port") für JNLP-Slave-Agenten ").

TCP
49187 - Fixed jnlp port
8080 - jenkins http port

Andere Ports, die zum Starten von Slave als Windows-Dienst benötigt werden

TCP
135 
139 
445

UDP
137
138
38
Ganga

Ein Slave ist kein Server, sondern eine Client-Anwendung. Netzwerkclients verwenden (fast) nie einen bestimmten Port. Stattdessen fragen sie das Betriebssystem nach einem zufälligen freien Port. Dies funktioniert viel besser, da Sie normalerweise Clients auf vielen Computern ausführen, auf denen die aktuelle Konfiguration nicht im Voraus bekannt ist. Dies verhindert, dass tausende von "Client würde nicht starten, weil Port bereits verwendet wird" -Bugmeldungen jeden Tag.

Sie müssen der Sicherheitsabteilung mitteilen, dass der Slave kein Server, sondern ein Client ist, der eine Verbindung zum Server herstellt, und Sie müssen unbedingt eine Regel haben, die lautet: Client: ANY -> Server: FIXED. Die Client-Portnummer sollte> = 1024 sein ( Ports 1 bis 1023 benötigen spezielle Berechtigungen ), aber ich bin nicht sicher, ob Sie tatsächlich etwas gewinnen, indem Sie eine Regel dafür hinzufügen - wenn ein Angreifer privilegierte Ports öffnen kann Im Grunde besitzen sie die Maschine bereits.

Wenn sie sich streiten, fragen Sie sie, warum sie nicht für alle Webbrowser, die in Ihrem Unternehmen verwendet werden, die gleiche Regel benötigen.

10
Aaron Digulla

Ich habe ein ähnliches Szenario und hatte keine Probleme mit der Verbindung, nachdem Sie den JNLP-Port wie beschrieben festgelegt und eine einzelne Firewall-Regel hinzugefügt haben, die eine Verbindung auf dem Server über diesen Port zulässt. Zugegeben, es handelt sich um einen zufällig ausgewählten Client-Port, der zu einem bekannten Server-Port wechselt (eine Host: ANY -> Server: 1-Regel ist erforderlich).

Beim Lesen des Quellcodes sehe ich keine Möglichkeit, den lokalen Port für die Anforderung vom Slave festzulegen. Es ist unglücklich, es wäre ein nettes Feature.

Alternativen:

Verwenden Sie auf Ihrem Client einen einfachen Proxy, der Port N überwacht und dann alle Daten über einen konstanten lokalen Port an den tatsächlichen Jenkins-Server auf dem Remote-Host weiterleitet. Verbinden Sie Ihren Slave mit diesem lokalen Proxy anstelle des echten Jenkins-Servers.

Erstellen Sie einen benutzerdefinierten Jenkins-Slave-Build, mit dem eine Option zum Angeben des zu verwendenden lokalen Ports angegeben werden kann.

Denken Sie auch daran, wenn Sie HTTPS über ein selbstsigniertes Zertifikat verwenden, müssen Sie die Konfigurationsdatei jenkins-slave.xml auf dem Slave ändern, um die Option - noCertificateCheck in der Befehlszeile anzugeben.

1
metaforge