아웃바운드 요청 필터링
Offering: GitLab Self-Managed, GitLab Dedicated
데이터 손실 및 노출의 위험으로부터 보호하기 위해 GitLab 관리자는 이제 아웃바운드 요청 필터링 제어를 사용하여 GitLab 인스턴스에서 만든 특정 아웃바운드 요청을 제한할 수 있습니다. 메인테이너 또는 오너 역할을 가진 사용자는 프로젝트 또는 그룹에서 특정 변경이 발생할 때 트리거되는 웹훅을 설정할 수 있습니다.
데이터 손실 및 노출의 위험으로부터 보호하기 위해 GitLab 관리자는 이제 아웃바운드 요청 필터링 제어를 사용하여 GitLab 인스턴스에서 만든 특정 아웃바운드 요청을 제한할 수 있습니다.
안전한 웹훅 및 통합#
메인테이너 또는 오너 역할을 가진 사용자는 프로젝트 또는 그룹에서 특정 변경이 발생할 때 트리거되는 웹훅을 설정할 수 있습니다. 트리거되면 URL로 POST HTTP 요청이 전송됩니다. 웹훅은 일반적으로 데이터를 적절한 방식으로 처리하는 특정 외부 웹 서비스로 데이터를 전송하도록 구성됩니다.
그러나 웹훅은 외부 웹 서비스 대신 내부 웹 서비스의 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) 주소를 포함한 개인 네트워크 주소
이러한 주소에 대한 액세스를 허용하려면:
- 오른쪽 상단 모서리에서 관리를 선택하세요.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택하세요.
- 아웃바운드 요청을 확장하세요.
- 웹훅 및 통합에서 로컬 네트워크로의 요청 허용 체크박스를 선택하세요.
시스템 훅에서 로컬 네트워크로의 요청 방지#
사전 요구 사항:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
시스템 훅은 기본적으로 로컬 네트워크에 요청할 수 있습니다. 시스템 훅이 로컬 네트워크에 요청하는 것을 방지하려면:
- 오른쪽 상단 모서리에서 관리를 선택하세요.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택하세요.
- 아웃바운드 요청을 확장하세요.
- 시스템 훅에서 로컬 네트워크로의 요청 허용 체크박스를 선택 취소하세요.
DNS 리바인딩 공격 보호 적용#
사전 요구 사항:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
DNS 리바인딩은 로컬 네트워크 액세스 제한을 우회하기 위해 악의적인 도메인 이름이 내부 네트워크 리소스로 해석되도록 하는 기술입니다. GitLab은 기본적으로 이 공격에 대한 보호가 활성화되어 있습니다. 이 보호를 비활성화하려면:
- 오른쪽 상단 모서리에서 관리를 선택하세요.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택하세요.
- 아웃바운드 요청을 확장하세요.
- DNS 리바인딩 공격 보호 적용 체크박스를 선택 취소하세요.
요청 필터링#
히스토리
- GitLab 15.10에서 도입되었습니다.
사전 요구 사항:
- GitLab 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
많은 요청을 차단하여 요청을 필터링하려면:
- 오른쪽 상단 모서리에서 관리를 선택하세요.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택하세요.
- 아웃바운드 요청을 확장하세요.
- 허용 목록에 정의된 IP 주소, IP 범위 및 도메인 이름을 제외한 모든 요청 차단 체크박스를 선택하세요.
이 체크박스가 선택되면 다음에 대한 요청은 여전히 차단되지 않습니다:
- Git, GitLab Shell, Gitaly, PostgreSQL, Redis와 같은 핵심 서비스
- 객체 저장소
- 허용 목록의 IP 주소 및 도메인
이 설정이 활성화되면 GitLab은 릴리스 링크와 같은 다른 객체에 포함된 URL에 대해 DNS 해석을 수행할 수 있습니다. DNS 해석이 실패하면 요청이 실패합니다. 이 문제를 해결하려면 GitLab이 해당 호스트에 대한 아웃바운드 연결을 만들 필요가 없더라도 호스트 이름을 허용 목록에 추가하세요.
이 설정은 기본 GitLab 애플리케이션에서만 준수되므로 Gitaly와 같은 다른 서비스는 규칙을 위반하는 요청을 할 수 있습니다. 또한 GitLab의 일부 영역은 아웃바운드 필터링 규칙을 준수하지 않습니다.
특정 IP 주소 및 도메인으로의 아웃바운드 요청 허용#
사전 요구 사항:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
특정 IP 주소 및 도메인으로의 아웃바운드 요청을 허용하려면:
- 오른쪽 상단 모서리에서 관리를 선택하세요.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택하세요.
- 아웃바운드 요청을 확장하세요.
- 훅 및 통합이 액세스할 수 있는 로컬 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이 클라우드 서버에 액세스한 후 수동으로 라이선스를 동기화하세요.
