아웃바운드 요청 필터링
데이터 손실 및 노출 위험을 방지하기 위해, GitLab 관리자는 이제 GitLab 인스턴스가 수행하는 특정 아웃바운드 요청을 제한하기 위해 아웃바운드 요청 필터링 제어를 사용할 수 있습니다.
안전한 웹후크 및 통합
최소한 Maintainer 역할을 가진 사용자는 프로젝트나 그룹에서 특정 변경 사항이 발생할 때 트리거되는 웹후크를 설정할 수 있습니다. 트리거되면, POST
HTTP 요청이 URL로 전송됩니다. 웹후크는 일반적으로 데이터를 특정 외부 웹 서비스로 전송하도록 구성되어 있으며, 이 웹 서비스는 데이터를 적절한 방식으로 처리합니다.
그러나 웹후크는 외부 웹 서비스 대신 내부 웹 서비스에 대한 URL로 구성될 수 있습니다. 웹후크가 트리거되면, GitLab 서버 또는 해당 로컬 네트워크에서 실행되는 비-GitLab 웹 서비스가 악용될 수 있습니다.
웹후크 요청은 GitLab 서버 자체에서 이루어지며, 인증을 위해 후크당 하나의 선택적 비밀 토큰을 사용합니다:
- 사용자 토큰이 아닙니다.
- 리포지토리 특정 토큰이 아닙니다.
그 결과, 이러한 요청은 의도한 것보다 광범위한 접근 권한을 가질 수 있으며, 웹후크가 호스팅되는 서버에서 실행 중인 모든 것에 대한 접근 권한을 포함합니다:
- GitLab 서버.
- API 자체.
- 일부 웹후크의 경우, 웹후크 서버의 로컬 네트워크에 있는 다른 서버로의 네트워크 접근, 이러한 서비스가 외부 세계에서 보호되고 접근할 수 없는 경우에도 가능합니다.
웹후크는 인증이 필요하지 않은 웹 서비스를 사용하여 파괴적인 명령을 트리거하는 데 사용될 수 있습니다. 이러한 웹후크는 GitLab 서버가 자원을 삭제하는 엔드포인트에 POST
HTTP 요청을 하도록 만들 수 있습니다.
웹후크 및 통합에서 로컬 네트워크로의 요청 허용
전제 조건:
- 인스턴스에 대한 관리자 접근 권한이 있어야 합니다.
불안전한 내부 웹 서비스의 악용을 방지하기 위해, 다음 로컬 네트워크 주소에 대한 모든 웹후크 및 통합 요청은 허용되지 않습니다:
- 현재 GitLab 인스턴스 서버 주소.
-
127.0.0.1
,::1
,0.0.0.0
,10.0.0.0/8
,172.16.0.0/12
,
192.168.0.0/16
및 IPv6 사이트-로컬 (ffc0::/10
) 주소를 포함한 사설 네트워크 주소.
이 주소에 대한 접근을 허용하려면:
-
왼쪽 사이드바에서, 하단의 Admin을 선택합니다.
-
Settings > Network를 선택합니다.
-
Outbound requests를 확장합니다.
-
웹후크 및 통합에서 로컬 네트워크로의 요청 허용 체크박스를 선택합니다.
시스템 후크에서 로컬 네트워크로의 요청 방지
전제 조건:
- 인스턴스에 대한 관리자 접근 권한이 있어야 합니다.
시스템 후크는 기본적으로 로컬 네트워크에 요청을 할 수 있습니다. 로컬 네트워크에 대한 시스템 후크 요청을 방지하려면:
-
왼쪽 사이드바에서, 하단의 Admin을 선택합니다.
-
Settings > Network를 선택합니다.
-
Outbound requests를 확장합니다.
-
시스템 후크에서 로컬 네트워크로의 요청 허용 체크박스를 해제합니다.
DNS 리바인딩 공격 보호 시행
전제 조건:
- 인스턴스에 대한 관리자 접근 권한이 있어야 합니다.
DNS 리바인딩은 악성 도메인 이름이 내부 네트워크 리소스에 해결되도록 하여 로컬 네트워크 접근 제한을 우회하는 기술입니다. GitLab은 기본적으로 이 공격에 대한 보호를 활성화하고 있습니다. 이 보호를 비활성화하려면:
-
왼쪽 사이드바에서, 하단의 Admin을 선택합니다.
-
Settings > Network를 선택합니다.
-
Outbound requests를 확장합니다.
-
DNS 리바인딩 공격 보호 시행 체크박스를 해제합니다.
요청 필터링
- GitLab 15.10에서 도입됨.
사전 요구 사항:
- GitLab 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
많은 요청으로 차단하여 요청을 필터링하려면:
-
왼쪽 사이드바에서 하단의 Admin을 선택합니다.
-
Settings > Network를 선택합니다.
-
Outbound requests를 확장합니다.
-
허용 목록에 정의된 IP 주소, IP 범위 및 도메인 이름을 제외한 모든 요청 차단 체크박스를 선택합니다.
이 체크박스를 선택하면 다음에 대한 요청은 여전히 차단되지 않습니다:
- Geo, Git, GitLab Shell, Gitaly, PostgreSQL 및 Redis와 같은 핵심 서비스.
- 객체 저장소.
- 허용 목록의 IP 주소 및 도메인.
이 설정은 GitLab 주 애플리케이션에서만 준수되므로 Gitaly와 같은 다른 서비스는 여전히 규칙을 위반하는 요청을 할 수 있습니다.
또한, GitLab의 일부 영역은 아웃바운드 필터링 규칙을 준수하지 않습니다.
특정 IP 주소 및 도메인에 대한 아웃바운드 요청 허용
사전 요구 사항:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
특정 IP 주소 및 도메인에 대한 아웃바운드 요청을 허용하려면:
-
왼쪽 사이드바에서 하단의 Admin을 선택합니다.
-
Settings > Network를 선택합니다.
-
Outbound requests를 확장합니다.
-
후크 및 통합이 액세스할 수 있는 로컬 IP 주소 및 도메인 이름에 IP 주소 및 도메인을 입력합니다.
항목은 다음과 같이 할 수 있습니다:
- 세미콜론, 쉼표 또는 공백(줄 바꿈 포함)으로 구분됩니다.
- 호스트 이름, IP 주소, IP 주소 범위와 같은 다양한 형식일 수 있습니다. IPv6가 지원됩니다. 유니코드 문자가 포함된 호스트 이름은 응용 프로그램의 국제화 도메인 이름 (IDNA) 인코딩을 사용해야 합니다.
- 포트를 포함할 수 있습니다. 예를 들어,
127.0.0.1:8080
은127.0.0.1
의 포트 8080으로만 연결을 허용합니다. 포트가 지정되지 않으면 해당 IP 주소 또는 도메인에서 모든 포트가 허용됩니다. IP 주소 범위는 해당 범위의 모든 IP 주소에서 모든 포트를 허용합니다. - 각 항목의 최대 255자 이하로 1000개 이하의 항목이어야 합니다.
- 와일드카드(예:
*.example.com
)를 포함해서는 안 됩니다.
예를 들어:
example.com;gitlab.example.com
127.0.0.1,1:0:0:0:0:0:0:1
127.0.0.0/8 1:0:0:0:0:0:0:0/124
[1:0:0:0:0:0:0:1]:8080
127.0.0.1:8080
example.com:8080
문제 해결
아웃바운드 요청을 필터링할 때 다음과 같은 문제가 발생할 수 있습니다.
구성된 URL 차단
구성된 URL이 차단되지 않으면 허용 목록에 정의된 IP 주소, IP 범위 및 도메인 이름을 제외한 모든 요청 차단 체크박스를 선택할 수 있습니다. 그렇지 않으면 URL이 차단되었다는 오류 메시지가 표시될 수 있습니다.
이 설정을 활성화할 수 없는 경우 다음 중 하나를 수행합니다:
- URL 설정을 비활성화합니다.
- 다른 URL을 구성하거나 URL 설정을 비워둡니다.
- 구성된 URL을 허용 목록에 추가합니다.
퍼블릭 러너 릴리즈 URL이 차단되었습니다
대부분의 GitLab 인스턴스는 public_runner_releases_url
이
https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-runner/releases
로 설정되어 있어,
요청 필터링을 방해할 수 있습니다.
이 문제를 해결하려면, GitLab이 더 이상 GitLab.com에서 러너 릴리즈 버전 데이터를 가져오지 않도록 구성하세요.
GitLab 구독 관리가 차단되었습니다
요청을 필터링할 때, GitLab 구독 관리가 차단됩니다.
이 문제를 해결하려면, customers.gitlab.com:443
를 허용 목록에 추가하세요.
GitLab 문서가 차단되었습니다
요청을 필터링할 때, Help page documentation base url is blocked: Requests to hosts and IP addresses not on the Allow List are denied
라는 오류 메시지가 표시될 수 있습니다.
이 오류를 해결하려면:
-
변경 사항을 되돌려 오류 메시지
Help page documentation base url is blocked
가 더 이상 표시되지 않도록 합니다. -
docs.gitlab.com
또는 리다이렉트 도움말 문서 페이지 URL을 허용 목록에 추가하세요. -
변경 사항 저장을 선택합니다.
GitLab Duo 기능이 차단되었습니다
요청을 필터링할 때, GitLab Duo 기능을 사용하려고 할 때 401
오류가 나타날 수 있습니다.
이 오류는 GitLab 클라우드 서버에 대한 아웃바운드 요청이 허용되지 않을 때 발생할 수 있습니다. 이 오류를 해결하려면:
-
https://cloud.gitlab.com:443
를 허용 목록에 추가합니다. -
변경 사항 저장을 선택합니다.
-
GitLab이 클라우드 서버에 접근할 수 있도록 한 후, 라이센스 수동 동기화를 수행합니다.
자세한 내용은 GitLab Duo Code Suggestions 문제 해결 문서를 참조하세요.