- 구성 가능한 제한
- Git 및 컨테이너 레지스트리의 실패한 인증 금지
- 구성할 수 없는 제한
- 사용자 이름 업데이트
- 사용자 이름 존재 여부
- 프로젝트 작업 API 엔드포인트
- AI 작업
- API를 사용하여 멤버 삭제
- 문제 해결
요율 제한
요율 제한은 웹 애플리케이션의 보안과 내구성을 향상시키는 데 사용되는 일반적인 기술입니다.
예를 들어, 간단한 스크립트가 초당 수천 개의 웹 요청을 만들 수 있습니다. 이러한 요청은 다음과 같을 수 있습니다:
- 악의적인.
- 무관심한.
- 버그일 수도 있습니다.
귀하의 애플리케이션 및 인프라는 해당 부하를 견딜 수 없을 수 있습니다. 자세한 내용은 서비스 거부 공격을 참조하세요. 대부분의 경우 단일 IP 주소로부터의 요청 속도를 제한함으로써 이러한 사례를 완화할 수 있습니다.
대다수 무차별 대입 공격도 유사하게 요율 제한으로 완화됩니다.
구성 가능한 제한
인스턴스의 관리자 영역에서 다음 요율 제한을 설정할 수 있습니다: - 가져오기/내보내기 요율 제한 - 이슈 요율 제한 - 노트 요율 제한 - 보호된 경로 - Raw 엔드포인트 요율 제한 - 사용자 및 IP 요율 제한 - 패키지 레지스트리 요율 제한 - Git LFS 요율 제한 - Git SSH 작업 요율 제한 - 파일 API 요율 제한 - 미사용 API 요율 제한 - GitLab Pages 요율 제한 - 파이프라인 요율 제한 - 사건 관리 요율 제한 - 프로젝트 목록 API에 대한 인증되지 않은 접근 요율 제한
이러한 요율 제한을 Rails 콘솔을 사용하여 설정할 수 있습니다: - Webhook 요율 제한
Git 및 컨테이너 레지스트리의 실패한 인증 금지
단일 IP 주소로부터 3분 동안의 30개의 인증 실패 요청이 수신된 경우, GitLab은 1시간 동안 HTTP 상태 코드 403
을 반환합니다. 이는 다음에만 적용됩니다:
- Git 요청.
- 컨테이너 레지스트리(/jwt/auth
) 요청.
이 제한:
- 성공적으로 인증하는 요청에 의해 재설정됩니다. 예를 들어, 29개의 인증 실패 요청 후 1회의 성공적인 요청, 그리고 다시 29개의 인증 실패 요청은 금지를 유발하지 않습니다.
- gitlab-ci-token
에 의해 인증된 JWT 요청에는 적용되지 않습니다.
- 기본적으로 비활성화됩니다.
응답 헤더는 제공되지 않습니다.
구성 정보에 대한 자세한 내용은 Omnibus GitLab 구성 옵션을 참조하세요.
구성할 수 없는 제한
저장소 아카이브
저장소 아카이브 다운로드에 대한 요율 제한이 제공됩니다. 이 제한은 프로젝트와 다운로드를 시작하는 사용자에게 적용됩니다. UI 또는 API를 통해 다운로드를 시작합니다.
요율 제한은 사용자 당 분당 5회 요청입니다.
웹훅 테스트
웹훅 테스트에 대한 요율 제한이 있으며, 웹훅 기능의 남용을 방지합니다.
요율 제한은 사용자 당 분당 5회 요청입니다.
사용자 등록
/users/sign_up
엔드포인트에 IP 주소당 요율 제한이 있습니다. 이것은 엔드포인트를 남용하려는 시도를 완화하기 위한 것입니다. 예를 들어, 사용자명 또는 사용 중인 이메일 주소를 대량으로 확인하는 시도를 완화하기 위함입니다.
요율 제한은 IP 주소당 분당 20회 요청입니다.
사용자 이름 업데이트
- GitLab 14.7에서 소개됨.
사용자 이름을 변경할 수 있는 빈도에 대한 요청 한도가 있습니다. 이는 해당 기능의 오용을 완화하기 위해 시행됩니다. 예를 들어, 어떤 사용자 이름이 사용 중인지 대규모로 알아내는 것과 같은 오용을 막기 위함입니다.
요청 한도는 인증된 사용자 당 분당 10회입니다.
사용자 이름 존재 여부
- GitLab 14.7에서 소개됨.
/users/:username/exists
내부 엔드포인트의 요청 한도가 있습니다. 이는 가입 시 선택한 사용자 이름이 이미 사용 중인지 확인하는 데 사용되며, 사용 중인 사용자 이름을 대규모로 발견하는 것과 같은 오용을 완화하기 위한 것입니다.
요청 한도는 IP 주소당 분당 20회입니다.
프로젝트 작업 API 엔드포인트
- 플래그
ci_enforce_rate_limits_jobs_api
를 사용한 GitLab 15.7에서 소개됨. 기본적으로 비활성화됨.- Feature flag
ci_enforce_rate_limits_jobs_api
가 제거된 GitLab 16.0에서 일반적으로 사용 가능해짐.
project/:id/jobs
엔드포인트의 요청 한도가 있으며, 작업을 검색할 때 타임아웃을 줄이기 위해 시행됩니다.
요청 한도는 인증된 사용자 당 기본적으로 분당 600회입니다. 요청 한도를 구성할 수 있습니다.
AI 작업
- GitLab 16.0에서 소개됨.
GraphQL aiAction
변이의 요청 한도가 있으며, 이 엔드포인트를 오용하는 것을 방지하기 위해 시행됩니다.
요청 한도는 인증된 사용자 당 8시간당 160회입니다.
API를 사용하여 멤버 삭제
- GitLab 16.0에서 소개됨.
API 엔드포인트인 /groups/:id/members
또는 /project/:id/members
를 사용하여 프로젝트나 그룹 멤버를 삭제하는 경우 요청 한도가 있습니다.
요청 한도는 분당 60회의 삭제입니다.
문제 해결
Rack Attack가 로드 밸런서를 차단함
Rack Attack는 모든 트래픽이 로드 밸런서에서 오는 것처럼 보일 때 로드 밸런서를 차단할 수 있습니다. 이 경우 다음을 수행해야 합니다:
-
nginx[real_ip_trusted_addresses]
구성. 이를 통해 사용자의 IP가 로드 밸런서 IP로 나열되는 것을 막을 수 있습니다. - 로드 밸런서의 IP 주소를 허용목록에 추가합니다.
-
GitLab을 다시 구성합니다:
sudo gitlab-ctl reconfigure
Redis를 사용하여 Rack Attack에서 차단된 IP 제거
차단된 IP를 제거하려면:
-
프로덕션 로그에서 차단된 IP를 찾습니다:
grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
-
차단 목록이 Redis에 저장되어 있으므로,
redis-cli
를 열어야 합니다:/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
-
실제 IP로 바꿔
<ip>
를 대체하여 다음 구문을 사용하여 차단을 제거할 수 있습니다:del cache:gitlab:rack::attack:allow2ban:ban:<ip>
-
IP가 더 이상 표시되지 않는지 확인합니다:
keys *rack::attack*
기본적으로
keys
명령어가 비활성화됨. -
IP를 다시 허용목록에 추가하여 다시 차단되지 않도록 할 수도 있습니다.