아웃바운드 요청 필터링
데이터 유실 및 노출 리스크에 대비하기 위해, 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 site-local (ffc0::/10
) 주소를 포함한 사설 네트워크 주소.
이러한 주소에 대한 액세스를 허용하려면:
- 왼쪽 사이드바에서 아래쪽으로 이동하여 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- 웹훅 및 통합에서 로컬 네트워크로의 요청 허용 확인란을 선택합니다.
시스템 후크로부터 로컬 네트워크로의 요청 방지
선행조건: - 인스턴스의 관리자 액세스가 필요합니다.
시스템 후크는 기본적으로 로컬 네트워크로의 요청을 만들 수 있습니다. 로컬 네트워크로의 시스템 후크 요청을 방지하려면:
- 왼쪽 사이드바에서 아래쪽으로 이동하여 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- 시스템 후크로부터 로컬 네트워크로의 요청 허용 확인란을 해제합니다.
DNS 리바인딩 공격 방지 강화
선행조건: - 인스턴스의 관리자 액세스가 필요합니다.
DNS 리바인딩은 악의적인 도메인 이름이 내부 네트워크 리소스로 해석되어 로컬 네트워크 액세스 제한을 우회하는 기술입니다. GitLab은 이 공격에 대한 보호를 기본적으로 활성화하고 있습니다. 이러한 보호를 비활성화하려면:
- 왼쪽 사이드바에서 아래쪽으로 이동하여 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- DNS 리바인딩 공격 방지 강화 확인란을 해제합니다.
요청 필터링
- GitLab 15.10에서 도입되었습니다.
선행조건: - GitLab 인스턴스의 관리자 액세스가 필요합니다.
여러 요청을 차단하도록 요청을 필터링하려면:
- 왼쪽 사이드바에서 아래쪽으로 이동하여 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- IP 주소, IP 범위 및 허용 목록에 정의된 도메인 이름만 예외로 모든 요청 차단 확인란을 선택합니다.
이 확인란이 선택되면 다음 항목에 대한 요청은 여전히 차단되지 않습니다: - Geo, Git, GitLab Shell, Gitaly, PostgreSQL, 및 Redis와 같은 핵심 서비스. - 객체 스토리지. - 허용 목록에 있는 IP 주소 및 도메인. 이 설정은 주로 본 GitLab 애플리케이션에 의해 적용되며, Gitaly와 같은 다른 서비스는 여전히 이 규칙을 위반하는 요청을 보낼 수 있습니다. 또한, GitLab의 일부 영역은 아웃바운드 필터링 규칙을 존중하지 않습니다.
특정 IP 주소 및 도메인에 대한 아웃바운드 요청 허용
선행조건: - 인스턴스의 관리자 액세스가 필요합니다.
특정 IP 주소 및 도메인으로의 아웃바운드 요청을 허용하려면:
- 왼쪽 사이드바에서 아래쪽으로 이동하여 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- 웹훅 및 통합에서 액세스할 수 있는 로컬 IP 주소 및 도메인에 로컬 IP 주소 및 도메인을 입력합니다.
항목은 다음 조건을 충족해야 합니다:
- 세미콜론, 쉼표 또는 공백(새 줄을 포함)으로 구분될 수 있습니다.
- 호스트 이름, IP 주소, IP 주소 범위처럼 다양한 형식으로 입력될 수 있습니다. IPv6가 지원됩니다. 유니코드 문자를 포함하는 호스트 이름은 IDNA 인코딩을 사용해야 합니다.
- 포트를 포함할 수 있습니다. 예를 들어, 127.0.0.1:8080
은 127.0.0.1
의 포트 8080으로의 연결만 허용합니다. 포트가 지정되지 않으면 해당 IP 주소 또는 도메인의 모든 포트가 허용됩니다. IP 주소 범위에 대한 모든 IP 주소의 모든 포트가 허용됩니다.
- 각 항목은 1000개의 항목을 넘지 않으며 255자를 넘지 않아야 합니다.
- 와일드카드를 포함해서는 안 됩니다(예: *.example.com
).
예시:
plaintext
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 코드 제안 문제 해결 문서를 참조하십시오.