2013-07-04 14 views
30

Używamy Jenkins 1,504 na systemu Windows.Jenkins slave numer portu na zaporze

Musimy master i slave w różnych podsieciach z zapory pomiędzy.
Nie możemy mieć dowolnego do dowolnego portu reguł zapory, musimy określić dokładne numerów portów.

Wiem, że master portu nasłuchuje.

Widzę również, że slave otwiera połączenie do Mistrza z dowolnego portu dynamicznie przypisany każdy Uruchom, a port na stronie Master jest również dowolna.
Mogę naprawić port Master, określając go w Zarządzaj Jenkins> Konfiguracja zabezpieczeń> port TCP dla agentów niewolniczych JNLP).

Jak naprawić port Slave?


UPDATE: Znaleziono Mechanizm połączenia opisane tutaj: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI#JenkinsCLI-Connectionmechanism

myślę, że może pracować dla nas, ale jeszcze lepiej byłoby, aby mieć czas 2-stałe połączenie portów.

Odpowiedz

32

Mieliśmy podobną sytuację, ale w naszym przypadku Infosec zgodził się dopuszczać do 1, więc nie mieliśmy musiał naprawić port niewolnikami, a mocowania kapitanowi wysokim poziomie portu JNLP 49187 robione („Configure Zabezpieczenia globalne” - > "Port TCP dla agentów niewolniczych JNLP").

TCP 
49187 - Fixed jnlp port 
8080 - jenkins http port 

Inne porty potrzebne do uruchomienia niewolnika jako usługa systemu Windows

TCP 
135 
139 
445 

UDP 
137 
138 
+0

Dzięki za informację o uruchomieniu niewolników. Będziemy też tego potrzebować. – Ivan

+0

Odkryłem, że uruchomienie agenta JNLP z domyślnego węzła do portu 50724. – DonBecker

+2

@DonBecker wydaje się losowy port. –

1

Mam podobny scenariusz, i nie miałem problemu z połączeniem po ustawieniu portu JNLP jak opisać i dodając jedną regułę zapory zezwalając na połączenie z serwerem za pomocą tego portu. To prawda, że ​​jest to losowo wybrany port klienta przechodzący do znanego portu serwera (wymagana jest reguła host: DOWOLNA -> serwer: 1).

Z mojego czytania kodu źródłowego, nie widzę sposobu, aby ustawić port lokalny do wykorzystania podczas składania wniosku od niewolnika. To niefortunne, to byłaby fajna funkcja.

Alternatywy:

Użyj prostego serwera proxy na kliencie, który nasłuchuje na porcie N, a następnie robi przodu wszystkie dane do rzeczywistego serwera Jenkins na zdalnym hostem przy użyciu stałego portu lokalnego. Połącz swój slave z tym lokalnym serwerem proxy zamiast z prawdziwym serwerem Jenkins.

Tworzenie niestandardowego Jenkins niewolnikami build, który umożliwia opcję, aby określić lokalny port w użyciu.

Pamiętaj również, jeśli używasz HTTPS za pomocą certyfikatu z podpisem własnym, należy zmienić plik konfiguracyjny Jenkins-slave.xml na niewolnika, aby określić opcję -noCertificateCheck w wierszu poleceń.

8

Urządzenie podrzędne nie jest serwerem, jest to aplikacja typu klient. Klienci sieci (prawie) nigdy nie używają określonego portu. Zamiast tego proszą system operacyjny o losowy wolny port. Działa to o wiele lepiej, ponieważ zwykle uruchamiasz klientów na wielu komputerach, których aktualna konfiguracja nie jest znana z góry.Zapobiega to wysyłaniu codziennie tysięcy raportów o błędach "nie uruchamia się klienta, ponieważ port jest już w użyciu".

Musisz poinformować dział bezpieczeństwa, że ​​urządzenie slave nie jest serwerem, ale klientem, który łączy się z serwerem i absolutnie potrzebujesz reguły, która mówi: DOWOLNY -> serwer: FIXED. Numer portu klienta powinien być> = 1024 (ports 1 to 1023 need special permissions), ale nie jestem pewien, czy rzeczywiście coś uzyskasz, dodając do tego regułę - jeśli atakujący może otworzyć uprzywilejowane porty, to w zasadzie już jest właścicielem maszyny.

Jeśli się spierają, zapytaj ich, dlaczego nie wymagają tej samej reguły dla wszystkich przeglądarek internetowych używanych przez twoją firmę.

+1

Dobrze, Aaron! Również klienci mogą mieć dowolne porty powyżej 1024, ponieważ mogą one działać bez uprawnień administratora. – Ivan

+0

Masz rację, ale nie jestem pewien, czy warto wymusić ten limit. Jeśli napastnik może otwierać uprzywilejowane porty, to już jest właścicielem maszyny. –

Powiązane problemy