안녕하세요 오늘은 gitlab 에있는 웹훅 (webhook) 기능을 사용하다 발생한 이슈에 대해서 작성 하려고 합니다.


최신 버전 GitLab 에서 같은 서버에있는 CI(Jenkins) 에 webhook 을 요청시에는


Internal Server Error 500 이 나타납니다.


일단 해당 이슈는 ssrf 관련 이슈이기 때문에 gitlab ssrf 라고 검색 하여도 충분한 결과를 얻을수는 있을 겁니다.


ssrf이슈인지 파악이 안됐었.. ㅜ


해당 내용 설명에 앞서 ssrf에 대해서 간단하게 작성하자면


SSRF ( Server - Side - Request - Forgery ) 서버 요청 위조 

CSRF ( Client - Side - Request - Forgery ) - 클라이언트 요청 위조

SSRF는 CSRF 와 달리 서버가 직접 호출해서 발생하는 문제입니다.  서버가 직접 요청하는 바람에 외부에서 내부에 있는 리소소스 등 접근해서 서버 직접 제어가 가능해지기 때문에 해당 의 경우 SSRF의 위험성이 있기 때문에


Jenkins 서버와 GitLab이 같은 서버에 위치할때 루프백 (자기자신) 으로 요청하게 되면 SSRF 가 발생하게됩니다.


gitlab webhook 은 기본적으로 내부 서버 요청을 서버가 직접 하는것들을 SSRF 이슈로 인해 허용하지 않기 때문입니다.


그래서 기본적으로 gitlab 생성후 webhook 을 내부 같은 서버에 있는 jenkins(CI)에 호출하게되면 500 Internal Server Error 가 발생합니다.


우선 gitlab 업데이트 노트를 보겠습니다.



SSRF 이슈때문에 설정을 변경하여야 한다고 되어있습니다.


GitLab 에 접속합니다.  (ROOT 계정)


루트 계정으로 접속하게되면 위와같이 admin Area 가 있습니다. 해당 스패너를 클릭합시다.




최하단에보면 Settings 라고 있습니다.


그리고 우측에서 쭉 내리다보면


Outbound requests가 있습니다.

Expand 해 주신 후에

Allow requests to the local network from hooks and services 

체크 해줍시다.





자 이제 gitlab을 재시작 하고 webhook 을 테스트 해보면 정상적으로 됨을 확인 하실수 있습니다.


gitlab 시작 및 종료


sudo -s gitlab-ctl start

sudo -s gitlab-ctl stop


gitlab 재 설정 후 재 시작


sudo -s gitlab-ctl reconfigure


// gitlab 기본 설정 

https://ipex.tistory.com/entry/gitlab-기본-설정?category=768899




감사합니당~


+ Recent posts