InfoGrab Docs

튜토리얼: 단일 노드 GitLab 인스턴스 설치 및 보안

요약

이 튜토리얼에서는 최대 초당 20 RPS 또는 1,000명의 사용자를 수용할 수 있는 단일 노드 GitLab 인스턴스를 설치하고 안전하게 구성하는 방법을 배웁니다. 단일 노드 GitLab 인스턴스를 설치하고 보안을 구성하려면:

이 튜토리얼에서는 최대 초당 20 RPS 또는 1,000명의 사용자를 수용할 수 있는 단일 노드 GitLab 인스턴스를 설치하고 안전하게 구성하는 방법을 배웁니다.

단일 노드 GitLab 인스턴스를 설치하고 보안을 구성하려면:

  1. 서버 보안
  2. GitLab 설치
  3. GitLab 구성
  4. 다음 단계

시작하기 전에#

  • 도메인 이름과 올바른 DNS 설정.
  • 다음 최소 사양의 Debian 기반 서버:
    • 8 vCPU
    • 7.2 GB 메모리
    • 모든 저장소를 위한 충분한 하드 드라이브 공간. 스토리지 요구 사항에 대해 더 읽어보세요.

서버 보안#

GitLab을 설치하기 전에 서버를 좀 더 안전하게 구성하는 것으로 시작합니다.

방화벽 구성#

포트 22(SSH), 80(HTTP), 443(HTTPS)을 열어야 합니다. 클라우드 공급자의 콘솔을 사용하거나 서버 수준에서 수행할 수 있습니다.

이 예에서는 ufw를 사용하여 방화벽을 구성합니다. 모든 포트에 대한 액세스를 거부하고, 포트 80과 443을 허용하고, 마지막으로 포트 22에 대한 액세스를 속도 제한합니다. ufw는 지난 30초 동안 6번 이상 연결을 시도한 IP 주소에서의 연결을 거부할 수 있습니다.

  1. ufw를 설치합니다:

    sudo apt install ufw
    
  2. ufw 서비스를 활성화하고 시작합니다:

    sudo systemctl enable --now ufw
    
  3. 필요한 포트를 제외한 다른 모든 포트를 거부합니다:

    sudo ufw default deny
    sudo ufw allow http
    sudo ufw allow https
    sudo ufw limit ssh/tcp
    
  4. 마지막으로 설정을 활성화합니다. 다음은 패키지를 처음 설치할 때만 한 번 실행해야 합니다. 메시지가 표시되면 yes(y)로 답합니다:

    sudo ufw enable
    
  5. 규칙이 존재하는지 확인합니다:

    $ sudo ufw status
    
    Status: active
    
    To                         Action      From
    --                         ------      ----
    80/tcp                     ALLOW       Anywhere
    443                        ALLOW       Anywhere
    22/tcp                     LIMIT       Anywhere
    80/tcp (v6)                ALLOW       Anywhere (v6)
    443 (v6)                   ALLOW       Anywhere (v6)
    22/tcp (v6)                LIMIT       Anywhere (v6)
    

SSH 서버 구성#

서버를 더 안전하게 하려면 공개 키 인증을 허용하고 잠재적인 보안 위험이 되는 일부 기능을 비활성화하도록 SSH를 구성합니다.

  1. 편집기로 /etc/ssh/sshd_config를 열고 다음이 있는지 확인합니다:

    PubkeyAuthentication yes
    PasswordAuthentication yes
    UsePAM yes
    UseDNS no
    AllowTcpForwarding no
    X11Forwarding no
    PrintMotd no
    PermitTunnel no
    # Allow client to pass locale environment variables
    AcceptEnv LANG LC_*
    # override default of no subsystems
    Subsystem       sftp    /usr/lib/openssh/sftp-server
    # Protocol adjustments, these would be needed/recommended in a FIPS or
    # FedRAMP deployment, and use only strong and proven algorithm choices
    Protocol 2
    Ciphers aes128-ctr,aes192-ctr,aes256-ctr
    HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
    KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
    Macs hmac-sha2-256,hmac-sha2-512
    
  2. 파일을 저장하고 SSH 서버를 다시 시작합니다:

    sudo systemctl restart ssh
    

    SSH 다시 시작이 실패하면 /etc/ssh/sshd_config에 중복 항목이 없는지 확인합니다.

Git 액세스에 SSH를 사용하는 권한 있는 사용자만 허용#

다음으로 유효한 GitLab 계정 없이는 사용자가 SSH를 사용하여 프로젝트를 풀다운할 수 없도록 합니다.

Git 액세스에 SSH를 사용하는 권한 있는 사용자만 허용하려면:

  1. /etc/ssh/sshd_config 파일에 다음을 추가합니다:

    # Ensure only authorized users are using Git
    AcceptEnv GIT_PROTOCOL
    
  2. 파일을 저장하고 SSH 서버를 다시 시작합니다:

    sudo systemctl restart ssh
    

커널 조정#

커널 조정이 공격 위협을 완전히 제거하지는 않지만 추가적인 보안 레이어를 제공합니다.

  1. 편집기로 /etc/sysctl.d 아래에 새 파일을 엽니다. 예를 들어 /etc/sysctl.d/99-gitlab-hardening.conf를 열고 다음을 추가합니다.

    [!note] 처리 순서는 이름과 소스 디렉토리에 따라 결정되는데, 마지막에 처리된 매개변수가 이전 매개변수를 재정의할 수 있으므로 중요합니다.

    ##
    ## The following help mitigate out of bounds, null pointer dereference, heap and
    ## buffer overflow bugs, use-after-free etc from being exploited. It does not 100%
    ## fix the issues, but seriously hampers exploitation.
    ##
    # Default is 65536, 4096 helps mitigate memory issues used in exploitation
    vm.mmap_min_addr=4096
    # Default is 0, randomize virtual address space in memory, makes vuln exploitation
    # harder
    kernel.randomize_va_space=2
    # Restrict kernel pointer access (for example, cat /proc/kallsyms) for exploit assistance
    kernel.kptr_restrict=2
    # Restrict verbose kernel errors in dmesg
    kernel.dmesg_restrict=1
    # Restrict eBPF
    kernel.unprivileged_bpf_disabled=1
    net.core.bpf_jit_harden=2
    # Prevent common use-after-free exploits
    vm.unprivileged_userfaultfd=0
    
    ## Networking tweaks ##
    ##
    ## Prevent common attacks at the IP stack layer
    ##
    # Prevent SYNFLOOD denial of service attacks
    net.ipv4.tcp_syncookies=1
    # Prevent time wait assassination attacks
    net.ipv4.tcp_rfc1337=1
    # IP spoofing/source routing protection
    net.ipv4.conf.all.rp_filter=1
    net.ipv4.conf.default.rp_filter=1
    net.ipv6.conf.all.accept_ra=0
    net.ipv6.conf.default.accept_ra=0
    net.ipv4.conf.all.accept_source_route=0
    net.ipv4.conf.default.accept_source_route=0
    net.ipv6.conf.all.accept_source_route=0
    net.ipv6.conf.default.accept_source_route=0
    # IP redirection protection
    net.ipv4.conf.all.accept_redirects=0
    net.ipv4.conf.default.accept_redirects=0
    net.ipv4.conf.all.secure_redirects=0
    net.ipv4.conf.default.secure_redirects=0
    net.ipv6.conf.all.accept_redirects=0
    net.ipv6.conf.default.accept_redirects=0
    net.ipv4.conf.all.send_redirects=0
    net.ipv4.conf.default.send_redirects=0
    
  2. 다음 서버 재부팅 시 값이 자동으로 로드됩니다. 즉시 로드하려면:

    sudo sysctl --system
    

잘 하셨습니다. 서버 보안 단계를 완료했습니다! 이제 GitLab을 설치할 준비가 되었습니다.

GitLab 설치#

서버가 설정되었으므로 이제 GitLab을 설치합니다:

  1. 필요한 의존성을 설치하고 구성합니다:

    sudo apt update
    sudo apt install -y curl openssh-server ca-certificates perl locales
    
  2. 시스템 언어를 구성합니다:

    1. /etc/locale.gen을 편집하고 en_US.UTF-8이 주석 해제되어 있는지 확인합니다.

    2. 언어를 재생성합니다:

      sudo locale-gen
      
  3. GitLab 패키지 저장소를 추가하고 패키지를 설치합니다:

    curl --location "https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh" | sudo bash
    
  4. GitLab 패키지를 설치합니다. GITLAB_ROOT_PASSWORD에 강력한 비밀번호를 제공하고 EXTERNAL_URL을 자신의 것으로 교체합니다. Let's Encrypt 인증서가 발급되도록 URL에 https를 포함하는 것을 잊지 마세요.

    sudo GITLAB_ROOT_PASSWORD="strong password" EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ee
    

    Let's Encrypt 인증서에 대해 더 알아보거나 자신만의 인증서를 사용하려면 TLS를 사용하여 GitLab 구성 방법을 읽어보세요.

    설정한 비밀번호가 적용되지 않은 경우 루트 계정 비밀번호 재설정에 대해 더 읽어보세요.

  5. 몇 분 후 GitLab이 설치됩니다. EXTERNAL_URL에 설정한 URL을 사용하여 로그인합니다. 사용자 이름으로 root를 사용하고 GITLAB_ROOT_PASSWORD에서 설정한 비밀번호를 사용합니다.

이제 GitLab을 구성할 시간입니다!

GitLab 구성#

GitLab에는 합리적인 기본 구성 옵션이 있습니다. 이 섹션에서는 더 많은 기능을 추가하고 GitLab을 더 안전하게 만들기 위해 이를 변경합니다.

일부 옵션에는 Admin 영역 UI를 사용하고, 일부는 GitLab 구성 파일인 /etc/gitlab/gitlab.rb를 편집합니다.

NGINX 구성#

NGINX는 GitLab 인스턴스에 액세스하는 데 사용되는 웹 인터페이스를 제공하는 데 사용됩니다. NGINX를 더 안전하게 구성하는 방법에 대한 자세한 내용은 NGINX 강화를 읽어보세요.

이메일 구성#

다음으로 이메일 서비스를 설정하고 구성합니다. 이메일은 새 가입을 확인하고, 비밀번호를 재설정하고, GitLab 활동을 알려주는 데 중요합니다.

SMTP 구성#

이 튜토리얼에서는 SMTP 서버를 설정하고 Mailgun SMTP 공급자를 사용합니다.

먼저 로그인 자격 증명을 포함하는 암호화된 파일을 만들고, Linux 패키지에 대한 SMTP를 구성합니다:

  1. SMTP 서버의 자격 증명이 포함된 YAML 파일(예: smtp.yaml)을 만듭니다.

    SMTP 비밀번호에는 구성 설정 처리 중 예기치 않은 동작을 피하기 위해 Ruby 또는 YAML에서 사용되는 문자열 구분 기호(예: ')가 포함되면 안 됩니다.

    user_name: ''
    password: ''
    
  2. 파일을 암호화합니다:

    cat smtp.yaml | sudo gitlab-rake gitlab:smtp:secret:write
    

    기본적으로 암호화된 파일은 /var/opt/gitlab/gitlab-rails/shared/encrypted_settings/smtp.yaml.enc에 저장됩니다.

  3. YAML 파일을 제거합니다:

    rm -f smtp.yaml
    
  4. /etc/gitlab/gitlab.rb를 편집하고 나머지 SMTP 설정을 구성합니다. 이미 암호화된 방식으로 설정했으므로 gitlab_rails['smtp_user_name']gitlab_rails['smtp_password']없어야 합니다.

    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.mailgun.org" # or smtp.eu.mailgun.org
    gitlab_rails['smtp_port'] = 587
    gitlab_rails['smtp_authentication'] = "plain"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_domain'] = "<mailgun domain>"
    
  5. 파일을 저장하고 GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

이제 이메일을 보낼 수 있어야 합니다. 구성이 작동하는지 테스트하려면:

  1. Rails 콘솔에 들어갑니다:

    sudo gitlab-rails console
    
  2. GitLab이 테스트 이메일을 보내도록 콘솔 프롬프트에서 다음 명령을 실행합니다:

    Notify.test_email('<email_address>', 'Message Subject', 'Message Body').deliver_now
    

이메일을 보낼 수 없는 경우 SMTP 문제 해결 섹션을 참조하세요.

잠긴 계정에 대한 이메일 확인 요구#

계정 이메일 확인은 GitLab 계정 보안에 추가적인 레이어를 제공합니다. 예를 들어 24시간 동안 3번 이상 로그인 시도가 실패한 경우와 같이 일부 조건이 충족되면 계정이 잠깁니다.

전제 조건:

  • 관리자여야 합니다.

잠긴 계정에 대한 이메일 확인을 요구하려면:

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. Sign-in restrictions를 확장합니다.
  4. Email verification for locked accounts 확인란을 선택합니다.
  5. Save changes를 선택합니다.

자세한 내용은 계정 이메일 확인을 읽어보세요.

S/MIME으로 발신 이메일 서명#

GitLab이 보내는 알림 이메일은 보안 향상을 위해 S/MIME으로 서명할 수 있습니다.

단일 키와 인증서 파일 쌍을 제공해야 합니다:

  • 두 파일 모두 PEM으로 인코딩되어야 합니다.
  • 키 파일은 GitLab이 사용자 개입 없이 읽을 수 있도록 암호화되지 않아야 합니다.
  • RSA 키만 지원됩니다.
  • 선택 사항. 각 서명에 포함할 CA(인증 기관) 인증서 번들(PEM으로 인코딩)을 제공할 수 있습니다. 이는 일반적으로 중간 CA입니다.
  1. CA에서 인증서를 구매합니다.

  2. /etc/gitlab/gitlab.rb를 편집하고 파일 경로를 조정합니다:

    gitlab_rails['gitlab_email_smime_enabled'] = true
    gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
    gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
    
  3. 파일을 저장하고 GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

자세한 내용은 S/MIME으로 발신 이메일 서명을 읽어보세요.

다음 단계#

이 튜토리얼에서는 서버를 더 안전하게 설정하고, GitLab을 설치하고, 일부 보안 표준을 충족하도록 GitLab을 구성하는 방법을 배웠습니다. GitLab을 보안하기 위해 취할 수 있는 다른 단계에는 다음이 있습니다:

  • 가입 비활성화. 기본적으로 새 GitLab 인스턴스는 가입이 활성화되어 있습니다. GitLab 인스턴스를 공개할 계획이 없다면 가입을 비활성화해야 합니다.
  • 특정 이메일 도메인을 사용한 가입 허용 또는 거부.
  • 새 사용자의 최소 비밀번호 길이 제한 설정.
  • 모든 사용자에게 이중 인증 적용.

GitLab 인스턴스를 강화하는 것 외에도 CI/CD 기능을 활용하기 위한 자체 러너 구성이나 인스턴스를 제대로 백업하는 것과 같이 구성할 수 있는 다른 많은 것들이 있습니다.

설치 후 수행할 단계에 대해 더 읽을 수 있습니다.

튜토리얼: 단일 노드 GitLab 인스턴스 설치 및 보안

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

이 튜토리얼에서는 최대 초당 20 RPS 또는 1,000명의 사용자를 수용할 수 있는 단일 노드 GitLab 인스턴스를 설치하고 안전하게 구성하는 방법을 배웁니다. 단일 노드 GitLab 인스턴스를 설치하고 보안을 구성하려면:

이 튜토리얼에서는 최대 초당 20 RPS 또는 1,000명의 사용자를 수용할 수 있는 단일 노드 GitLab 인스턴스를 설치하고 안전하게 구성하는 방법을 배웁니다.

단일 노드 GitLab 인스턴스를 설치하고 보안을 구성하려면:

  1. 서버 보안
  2. GitLab 설치
  3. GitLab 구성
  4. 다음 단계

시작하기 전에#

  • 도메인 이름과 올바른 DNS 설정.
  • 다음 최소 사양의 Debian 기반 서버:
    • 8 vCPU
    • 7.2 GB 메모리
    • 모든 저장소를 위한 충분한 하드 드라이브 공간. 스토리지 요구 사항에 대해 더 읽어보세요.

서버 보안#

GitLab을 설치하기 전에 서버를 좀 더 안전하게 구성하는 것으로 시작합니다.

방화벽 구성#

포트 22(SSH), 80(HTTP), 443(HTTPS)을 열어야 합니다. 클라우드 공급자의 콘솔을 사용하거나 서버 수준에서 수행할 수 있습니다.

이 예에서는 ufw를 사용하여 방화벽을 구성합니다. 모든 포트에 대한 액세스를 거부하고, 포트 80과 443을 허용하고, 마지막으로 포트 22에 대한 액세스를 속도 제한합니다. ufw는 지난 30초 동안 6번 이상 연결을 시도한 IP 주소에서의 연결을 거부할 수 있습니다.

  1. ufw를 설치합니다:

    sudo apt install ufw
    
  2. ufw 서비스를 활성화하고 시작합니다:

    sudo systemctl enable --now ufw
    
  3. 필요한 포트를 제외한 다른 모든 포트를 거부합니다:

    sudo ufw default deny
    sudo ufw allow http
    sudo ufw allow https
    sudo ufw limit ssh/tcp
    
  4. 마지막으로 설정을 활성화합니다. 다음은 패키지를 처음 설치할 때만 한 번 실행해야 합니다. 메시지가 표시되면 yes(y)로 답합니다:

    sudo ufw enable
    
  5. 규칙이 존재하는지 확인합니다:

    $ sudo ufw status
    
    Status: active
    
    To                         Action      From
    --                         ------      ----
    80/tcp                     ALLOW       Anywhere
    443                        ALLOW       Anywhere
    22/tcp                     LIMIT       Anywhere
    80/tcp (v6)                ALLOW       Anywhere (v6)
    443 (v6)                   ALLOW       Anywhere (v6)
    22/tcp (v6)                LIMIT       Anywhere (v6)
    

SSH 서버 구성#

서버를 더 안전하게 하려면 공개 키 인증을 허용하고 잠재적인 보안 위험이 되는 일부 기능을 비활성화하도록 SSH를 구성합니다.

  1. 편집기로 /etc/ssh/sshd_config를 열고 다음이 있는지 확인합니다:

    PubkeyAuthentication yes
    PasswordAuthentication yes
    UsePAM yes
    UseDNS no
    AllowTcpForwarding no
    X11Forwarding no
    PrintMotd no
    PermitTunnel no
    # Allow client to pass locale environment variables
    AcceptEnv LANG LC_*
    # override default of no subsystems
    Subsystem       sftp    /usr/lib/openssh/sftp-server
    # Protocol adjustments, these would be needed/recommended in a FIPS or
    # FedRAMP deployment, and use only strong and proven algorithm choices
    Protocol 2
    Ciphers aes128-ctr,aes192-ctr,aes256-ctr
    HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
    KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
    Macs hmac-sha2-256,hmac-sha2-512
    
  2. 파일을 저장하고 SSH 서버를 다시 시작합니다:

    sudo systemctl restart ssh
    

    SSH 다시 시작이 실패하면 /etc/ssh/sshd_config에 중복 항목이 없는지 확인합니다.

Git 액세스에 SSH를 사용하는 권한 있는 사용자만 허용#

다음으로 유효한 GitLab 계정 없이는 사용자가 SSH를 사용하여 프로젝트를 풀다운할 수 없도록 합니다.

Git 액세스에 SSH를 사용하는 권한 있는 사용자만 허용하려면:

  1. /etc/ssh/sshd_config 파일에 다음을 추가합니다:

    # Ensure only authorized users are using Git
    AcceptEnv GIT_PROTOCOL
    
  2. 파일을 저장하고 SSH 서버를 다시 시작합니다:

    sudo systemctl restart ssh
    

커널 조정#

커널 조정이 공격 위협을 완전히 제거하지는 않지만 추가적인 보안 레이어를 제공합니다.

  1. 편집기로 /etc/sysctl.d 아래에 새 파일을 엽니다. 예를 들어 /etc/sysctl.d/99-gitlab-hardening.conf를 열고 다음을 추가합니다.

    [!note] 처리 순서는 이름과 소스 디렉토리에 따라 결정되는데, 마지막에 처리된 매개변수가 이전 매개변수를 재정의할 수 있으므로 중요합니다.

    ##
    ## The following help mitigate out of bounds, null pointer dereference, heap and
    ## buffer overflow bugs, use-after-free etc from being exploited. It does not 100%
    ## fix the issues, but seriously hampers exploitation.
    ##
    # Default is 65536, 4096 helps mitigate memory issues used in exploitation
    vm.mmap_min_addr=4096
    # Default is 0, randomize virtual address space in memory, makes vuln exploitation
    # harder
    kernel.randomize_va_space=2
    # Restrict kernel pointer access (for example, cat /proc/kallsyms) for exploit assistance
    kernel.kptr_restrict=2
    # Restrict verbose kernel errors in dmesg
    kernel.dmesg_restrict=1
    # Restrict eBPF
    kernel.unprivileged_bpf_disabled=1
    net.core.bpf_jit_harden=2
    # Prevent common use-after-free exploits
    vm.unprivileged_userfaultfd=0
    
    ## Networking tweaks ##
    ##
    ## Prevent common attacks at the IP stack layer
    ##
    # Prevent SYNFLOOD denial of service attacks
    net.ipv4.tcp_syncookies=1
    # Prevent time wait assassination attacks
    net.ipv4.tcp_rfc1337=1
    # IP spoofing/source routing protection
    net.ipv4.conf.all.rp_filter=1
    net.ipv4.conf.default.rp_filter=1
    net.ipv6.conf.all.accept_ra=0
    net.ipv6.conf.default.accept_ra=0
    net.ipv4.conf.all.accept_source_route=0
    net.ipv4.conf.default.accept_source_route=0
    net.ipv6.conf.all.accept_source_route=0
    net.ipv6.conf.default.accept_source_route=0
    # IP redirection protection
    net.ipv4.conf.all.accept_redirects=0
    net.ipv4.conf.default.accept_redirects=0
    net.ipv4.conf.all.secure_redirects=0
    net.ipv4.conf.default.secure_redirects=0
    net.ipv6.conf.all.accept_redirects=0
    net.ipv6.conf.default.accept_redirects=0
    net.ipv4.conf.all.send_redirects=0
    net.ipv4.conf.default.send_redirects=0
    
  2. 다음 서버 재부팅 시 값이 자동으로 로드됩니다. 즉시 로드하려면:

    sudo sysctl --system
    

잘 하셨습니다. 서버 보안 단계를 완료했습니다! 이제 GitLab을 설치할 준비가 되었습니다.

GitLab 설치#

서버가 설정되었으므로 이제 GitLab을 설치합니다:

  1. 필요한 의존성을 설치하고 구성합니다:

    sudo apt update
    sudo apt install -y curl openssh-server ca-certificates perl locales
    
  2. 시스템 언어를 구성합니다:

    1. /etc/locale.gen을 편집하고 en_US.UTF-8이 주석 해제되어 있는지 확인합니다.

    2. 언어를 재생성합니다:

      sudo locale-gen
      
  3. GitLab 패키지 저장소를 추가하고 패키지를 설치합니다:

    curl --location "https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh" | sudo bash
    
  4. GitLab 패키지를 설치합니다. GITLAB_ROOT_PASSWORD에 강력한 비밀번호를 제공하고 EXTERNAL_URL을 자신의 것으로 교체합니다. Let's Encrypt 인증서가 발급되도록 URL에 https를 포함하는 것을 잊지 마세요.

    sudo GITLAB_ROOT_PASSWORD="strong password" EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ee
    

    Let's Encrypt 인증서에 대해 더 알아보거나 자신만의 인증서를 사용하려면 TLS를 사용하여 GitLab 구성 방법을 읽어보세요.

    설정한 비밀번호가 적용되지 않은 경우 루트 계정 비밀번호 재설정에 대해 더 읽어보세요.

  5. 몇 분 후 GitLab이 설치됩니다. EXTERNAL_URL에 설정한 URL을 사용하여 로그인합니다. 사용자 이름으로 root를 사용하고 GITLAB_ROOT_PASSWORD에서 설정한 비밀번호를 사용합니다.

이제 GitLab을 구성할 시간입니다!

GitLab 구성#

GitLab에는 합리적인 기본 구성 옵션이 있습니다. 이 섹션에서는 더 많은 기능을 추가하고 GitLab을 더 안전하게 만들기 위해 이를 변경합니다.

일부 옵션에는 Admin 영역 UI를 사용하고, 일부는 GitLab 구성 파일인 /etc/gitlab/gitlab.rb를 편집합니다.

NGINX 구성#

NGINX는 GitLab 인스턴스에 액세스하는 데 사용되는 웹 인터페이스를 제공하는 데 사용됩니다. NGINX를 더 안전하게 구성하는 방법에 대한 자세한 내용은 NGINX 강화를 읽어보세요.

이메일 구성#

다음으로 이메일 서비스를 설정하고 구성합니다. 이메일은 새 가입을 확인하고, 비밀번호를 재설정하고, GitLab 활동을 알려주는 데 중요합니다.

SMTP 구성#

이 튜토리얼에서는 SMTP 서버를 설정하고 Mailgun SMTP 공급자를 사용합니다.

먼저 로그인 자격 증명을 포함하는 암호화된 파일을 만들고, Linux 패키지에 대한 SMTP를 구성합니다:

  1. SMTP 서버의 자격 증명이 포함된 YAML 파일(예: smtp.yaml)을 만듭니다.

    SMTP 비밀번호에는 구성 설정 처리 중 예기치 않은 동작을 피하기 위해 Ruby 또는 YAML에서 사용되는 문자열 구분 기호(예: ')가 포함되면 안 됩니다.

    user_name: ''
    password: ''
    
  2. 파일을 암호화합니다:

    cat smtp.yaml | sudo gitlab-rake gitlab:smtp:secret:write
    

    기본적으로 암호화된 파일은 /var/opt/gitlab/gitlab-rails/shared/encrypted_settings/smtp.yaml.enc에 저장됩니다.

  3. YAML 파일을 제거합니다:

    rm -f smtp.yaml
    
  4. /etc/gitlab/gitlab.rb를 편집하고 나머지 SMTP 설정을 구성합니다. 이미 암호화된 방식으로 설정했으므로 gitlab_rails['smtp_user_name']gitlab_rails['smtp_password']없어야 합니다.

    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.mailgun.org" # or smtp.eu.mailgun.org
    gitlab_rails['smtp_port'] = 587
    gitlab_rails['smtp_authentication'] = "plain"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_domain'] = "<mailgun domain>"
    
  5. 파일을 저장하고 GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

이제 이메일을 보낼 수 있어야 합니다. 구성이 작동하는지 테스트하려면:

  1. Rails 콘솔에 들어갑니다:

    sudo gitlab-rails console
    
  2. GitLab이 테스트 이메일을 보내도록 콘솔 프롬프트에서 다음 명령을 실행합니다:

    Notify.test_email('<email_address>', 'Message Subject', 'Message Body').deliver_now
    

이메일을 보낼 수 없는 경우 SMTP 문제 해결 섹션을 참조하세요.

잠긴 계정에 대한 이메일 확인 요구#

계정 이메일 확인은 GitLab 계정 보안에 추가적인 레이어를 제공합니다. 예를 들어 24시간 동안 3번 이상 로그인 시도가 실패한 경우와 같이 일부 조건이 충족되면 계정이 잠깁니다.

전제 조건:

  • 관리자여야 합니다.

잠긴 계정에 대한 이메일 확인을 요구하려면:

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. Sign-in restrictions를 확장합니다.
  4. Email verification for locked accounts 확인란을 선택합니다.
  5. Save changes를 선택합니다.

자세한 내용은 계정 이메일 확인을 읽어보세요.

S/MIME으로 발신 이메일 서명#

GitLab이 보내는 알림 이메일은 보안 향상을 위해 S/MIME으로 서명할 수 있습니다.

단일 키와 인증서 파일 쌍을 제공해야 합니다:

  • 두 파일 모두 PEM으로 인코딩되어야 합니다.
  • 키 파일은 GitLab이 사용자 개입 없이 읽을 수 있도록 암호화되지 않아야 합니다.
  • RSA 키만 지원됩니다.
  • 선택 사항. 각 서명에 포함할 CA(인증 기관) 인증서 번들(PEM으로 인코딩)을 제공할 수 있습니다. 이는 일반적으로 중간 CA입니다.
  1. CA에서 인증서를 구매합니다.

  2. /etc/gitlab/gitlab.rb를 편집하고 파일 경로를 조정합니다:

    gitlab_rails['gitlab_email_smime_enabled'] = true
    gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
    gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
    
  3. 파일을 저장하고 GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

자세한 내용은 S/MIME으로 발신 이메일 서명을 읽어보세요.

다음 단계#

이 튜토리얼에서는 서버를 더 안전하게 설정하고, GitLab을 설치하고, 일부 보안 표준을 충족하도록 GitLab을 구성하는 방법을 배웠습니다. GitLab을 보안하기 위해 취할 수 있는 다른 단계에는 다음이 있습니다:

  • 가입 비활성화. 기본적으로 새 GitLab 인스턴스는 가입이 활성화되어 있습니다. GitLab 인스턴스를 공개할 계획이 없다면 가입을 비활성화해야 합니다.
  • 특정 이메일 도메인을 사용한 가입 허용 또는 거부.
  • 새 사용자의 최소 비밀번호 길이 제한 설정.
  • 모든 사용자에게 이중 인증 적용.

GitLab 인스턴스를 강화하는 것 외에도 CI/CD 기능을 활용하기 위한 자체 러너 구성이나 인스턴스를 제대로 백업하는 것과 같이 구성할 수 있는 다른 많은 것들이 있습니다.

설치 후 수행할 단계에 대해 더 읽을 수 있습니다.