에어갭 환경에서 Mattermost 배포하기#

이 가이드는 자체 호스팅 에어갭 환경에서 Mattermost를 배포하는 방법을 설명하며, 성공적인 배포에 필요한 지원 인프라 설정에 중점을 둡니다. 에어갭 환경은 공용 인터넷과 격리되어 있어 필요한 모든 구성 요소를 로컬에서 사용할 수 있어야 합니다.

에어갭 환경에서 Mattermost를 배포하는 것은 네트워크 내에서 중요한 구성 요소의 중단 없는 가용성을 보장하기 위한 상세한 준비가 필요합니다. 이러한 노력은 안전하고 지역화된 리소스에 대한 접근을 보장함으로써 인터넷 연결 부재와 관련된 위험을 완화합니다. 주요 고려사항은 다음과 같습니다:

  • Kubernetes 또는 Docker에 배포할 때 필요한 컨테이너 이미지.

  • Linux 서버에 직접 배포할 때 필요한 Mattermost 서버 패키지 및 종속성.

  • PostgreSQL 데이터베이스 접근.

  • 여러 Mattermost 서버에서 파일을 안정적으로 접근하기 위한 객체 스토리지 또는 공유 파일시스템 서비스.

  • 인증을 위한 LDAP, 성능 좋은 게시물 검색을 위한 Elasticsearch 등 규모와 성능 요구사항에 따라 필요한 기타 지원 서비스.

필요에 따라 Mattermost를 설정하려면 Mattermost 배포 문서를 참조하세요. 이 가이드는 이러한 환경에서 Mattermost를 배포하기 전에 필요한 에어갭 배포를 위한 지원 인프라에 중점을 둡니다.

자체 호스팅 프라이빗 컨테이너 레지스트리 설정#

프라이빗 컨테이너 레지스트리는 에어갭 배포를 위한 Docker 이미지를 안전하게 저장하여 데이터 격리 요구사항을 준수합니다. Kubernetes 또는 Docker에서 로컬 배포를 가능하게 하는 데 사용하세요.

레지스트리에 이미지를 업로드하는 프로세스는 에어갭 네트워크의 보안 정책에 맞게 조정되어야 합니다. 예를 들어, 레지스트리가 공용 인터넷에서 이미지를 가져올 수 있을 수도 있습니다. 그렇지 않은 경우, 공용 인터넷에 접근할 수 있는 기계에서 레지스트리로 이미지를 업로드해야 합니다.

이상적으로는 에어갭 네트워크에 이미 프라이빗 레지스트리가 있을 것입니다. 없다면 Docker Registry 또는 Harbor를 사용하여 프라이빗 레지스트리를 설정할 수 있습니다.

  1. Docker Registry 설치:

    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    
  2. 영구 스토리지 구성:

    docker run -d -p 5000:5000 --restart=always --name registry \
    -v /mnt/registry:/var/lib/registry \
    registry:2
    
  3. TLS 보안 추가 (권장):

    1. 자체 서명 인증서 생성:

      mkdir -p certs
      openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
      -x509 -days 365 -out certs/domain.crt
      
    2. TLS로 레지스트리 실행:

      docker run -d -p 5000:5000 --restart=always --name registry \
      -v /mnt/registry:/var/lib/registry \
      -v $(pwd)/certs:/certs \
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
      registry:2
      

더 고급 기능을 위해서는 Harbor 사용을 고려하세요.

  1. 에어갭 전에 Harbor 오프라인 설치 프로그램 다운로드:

    https://github.com/goharbor/harbor/releases 에서 다운로드

  2. 압축 해제 및 구성:

    tar xzvf harbor-offline-installer-v2.x.x.tgz
    cd harbor
    cp harbor.yml.tmpl harbor.yml
    # Edit harbor.yml to configure settings
    
  3. Harbor 설치:

    ./install.sh --with-trivy
    
  4. 구성에 따라 https://harbor-hostname 에서 Harbor에 접근

프라이빗 레지스트리 채우기#

프라이빗 레지스트리가 공용 인터넷에 접근할 수 없는 경우, 외부 기계에서 이미지를 검색하고 승인된 데이터 전송 방법을 사용하여 안전하게 전송하세요.

# Pull the required Mattermost images
docker pull mattermost/mattermost-enterprise-edition:latest

# Tag the images for your private registry
docker tag mattermost/mattermost-enterprise-edition:latest registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest

# Push to your private registry
docker push registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest

프라이빗 이미지 레지스트리를 사용하도록 Kubernetes 구성하기#

에어갭 환경에서 Kubernetes를 사용할 때는 프라이빗 레지스트리를 사용하도록 구성해야 합니다.

레지스트리 자격 증명 생성하기#

  1. 레지스트리 인증을 위한 kubernetes secret 생성:

    kubectl create secret docker-registry regcred \
      --docker-server=registry.example.com:5000 \
      --docker-username=your_username \
      --docker-password=your_password \
      --docker-email=your_email@example.com
    
  2. pod 명세에서 secret 참조하기:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mattermost-pod
    spec:
      containers:
      - name: mattermost
        image: registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest
      imagePullSecrets:
      - name: regcred
    
  3. Helm 배포의 경우, values.yaml 에서 레지스트리를 지정하세요:

    image:
      repository: registry.example.com:5000/mattermost/mattermost-enterprise-edition
      tag: latest
      pullPolicy: IfNotPresent
    
    imagePullSecrets:
      - name: regcred
    

프라이빗 이미지 레지스트리를 사용하도록 Docker 구성하기#

모든 호스트에서 Docker가 프라이빗 레지스트리를 신뢰하고 사용하도록 구성하세요.

Docker 데몬 구성#

  1. Docker의 신뢰할 수 있는 레지스트리에 레지스트리 추가하기:

    /etc/docker/daemon.json 편집 또는 생성:

    {
      "insecure-registries": ["registry.example.com:5000"]
    }
    

    자체 서명 인증서를 사용하는 레지스트리의 경우:

    mkdir -p /etc/docker/certs.d/registry.example.com:5000
    cp domain.crt /etc/docker/certs.d/registry.example.com:5000/ca.crt
    
  2. Docker 데몬 재시작:

    systemctl restart docker
    
  3. 구성 테스트:

    docker pull registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest
    

프라이빗 Debian 패키지 미러 설정하기#

로컬 Debian 미러를 사용하면 시스템 업데이트 및 종속성을 위한 패키지를 유지할 수 있습니다. 이 경우 미러는 debian 기반 호스트에 Mattermost 서버용 패키지를 제공하는 데 사용됩니다.

이상적으로는 에어갭 네트워크에 이미 로컬 미러가 있어야 합니다. 그렇지 않은 경우 Aptly나 debmirror와 같은 로컬 미러를 설정할 수 있습니다.

  1. Aptly 설치 (인터넷 연결된 기계에서):

    apt-get update
    apt-get install aptly gnupg
    
  2. 패키지 서명을 위한 GPG 키 생성:

    gpg --gen-key
    
  3. 미러 구성 생성:

    aptly mirror create -architectures=amd64 debian-bullseye http://deb.debian.org/debian bullseye main contrib non-free
    
  4. 패키지를 다운로드하도록 미러 업데이트:

    aptly mirror update debian-bullseye
    
  5. 스냅샷 생성 및 게시:

    aptly snapshot create debian-bullseye-$(date +%Y%m%d) from mirror debian-bullseye
    aptly publish snapshot debian-bullseye-$(date +%Y%m%d)
    
  6. 저장소 제공:

    aptly serve
    

더 간단한 방법:

  1. debmirror 설치:

    apt-get install debmirror
    
  2. 미러 스크립트 생성:

    #!/bin/bash
    debmirror --host=deb.debian.org \
             --root=/debian \
             --method=http \
             --dist=bullseye \
             --section=main,contrib,non-free \
             --arch=amd64 \
             --nosource \
             --progress \
             --ignore-release-gpg \
             /path/to/mirror/debian
    
  3. 미러를 제공하기 위한 웹 서버 (nginx와 같은) 설정:

    apt-get install nginx
    
    # Create nginx configuration
    cat > /etc/nginx/sites-available/debian-mirror << EOF
    server {
       listen 80;
       server_name mirror.example.com;
       root /path/to/mirror;
       autoindex on;
    }
    EOF
    
    ln -s /etc/nginx/sites-available/debian-mirror /etc/nginx/sites-enabled/
    systemctl restart nginx
    

클라이언트 구성#

에어갭 시스템에서 로컬 미러를 사용하도록 apt 구성:

cat > /etc/apt/sources.list << EOF
deb http://mirror.example.com/debian bullseye main contrib non-free
EOF

프라이빗 RHEL 패키지 미러 설정#

Red Hat Enterprise Linux 환경에서는 로컬 저장소 미러가 필요합니다.

이상적으로는 에어갭 네트워크에 이미 로컬 미러가 있어야 합니다. 그렇지 않은 경우 reposync와 같은 로컬 미러를 설정할 수 있습니다.

reposync 사용#

  1. 필요한 도구 설치 (인터넷 연결된 RHEL 시스템에서):

    yum install yum-utils createrepo
    
  2. 패키지 다운로드:

    mkdir -p /var/www/html/repos/rhel8
    reposync -p /var/www/html/repos/rhel8 --download-metadata --repo=rhel-8-for-x86_64-baseos-rpms
    reposync -p /var/www/html/repos/rhel8 --download-metadata --repo=rhel-8-for-x86_64-appstream-rpms
    
  3. 저장소 메타데이터 생성:

    createrepo /var/www/html/repos/rhel8/rhel-8-for-x86_64-baseos-rpms
    createrepo /var/www/html/repos/rhel8/rhel-8-for-x86_64-appstream-rpms
    
  4. 웹 서버 설정:

    yum install httpd
    systemctl enable httpd
    systemctl start httpd
    

클라이언트 구성#

에어갭 RHEL 시스템에서:

  1. 기존 저장소 비활성화:

    cd /etc/yum.repos.d/
    mkdir backup
    mv *.repo backup/
    
  2. 새 저장소 파일 생성:

    cat > /etc/yum.repos.d/local-baseos.repo << EOF
    [local-baseos]
    name=Red Hat Enterprise Linux 8 BaseOS
    baseurl=http://mirror.example.com/repos/rhel8/rhel-8-for-x86_64-baseos-rpms
    enabled=1
    gpgcheck=0
    EOF
    
    cat > /etc/yum.repos.d/local-appstream.repo << EOF
    [local-appstream]
    name=Red Hat Enterprise Linux 8 AppStream
    baseurl=http://mirror.example.com/repos/rhel8/rhel-8-for-x86_64-appstream-rpms
    enabled=1
    gpgcheck=0
    EOF
    
  3. 캐시 지우기 및 테스트:

    yum clean all
    yum repolist
    

에어갭 배포를 위한 Mattermost 서버 구성#

에어갭 환경에서 Mattermost를 배포할 때는 인터넷 접근 부재를 수용하기 위한 구성 옵션이 있습니다. 다음은 이러한 구성 옵션과 설정에 대한 권장사항을 다룹니다.

모바일 푸시 알림#

Mattermost는 새 메시지와 활동에 대해 사용자에게 알리기 위해 모바일 푸시 알림을 사용할 수 있습니다. 이러한 알림은 모바일 기기로 알림을 보내기 위한 서버 구성 요소가 필요합니다. 기본적으로 Mattermost는 에어갭 환경에서 사용할 수 없는 공용 푸시 알림 서비스를 사용합니다. 시스템 콘솔 > 환경 > 푸시 알림 서버 에서 푸시 알림 비활성화 를 권장합니다.

추가 고려사항#

에어갭 환경은 안전하고 최신 상태를 유지하기 위해 지속적인 유지 관리가 필요하다는 점을 기억하세요. 환경이 안전하고 최신 상태를 유지하기 위해서는 Mattermost 서버와 기타 구성 요소에 대한 정기적인 업데이트가 필요합니다.

네트워크 보안#

에어갭 환경에서는 네트워크 보안이 중요합니다:

  1. 네트워크 세그먼트 간 트래픽을 제어하기 위해 엄격한 방화벽 규칙 구현.

  2. 중요 인프라 구성 요소를 격리하기 위해 네트워크 세그먼테이션 사용.

  3. 환경이 적절히 격리되어 있는지 확인하기 위해 정기적으로 네트워크 접근 감사.

에어갭 네트워크로 데이터 전송#

초기 설정 및 업데이트를 위해:

  1. 승인된 데이터 다이오드 또는 단방향 전송 장치 사용.

  2. 에어갭 환경에 들어가는 모든 물리적 미디어에 대해 엄격한 미디어 제어 구현.

  3. 환경에 들어가기 전에 모든 수신 데이터를 악성코드 검사.

시스템 최신 상태 유지#

정기적인 업데이트를 위한 프로세스 개발:

  1. 로컬 미러에 대한 주기적인 업데이트 일정 수립.

  2. 배포 전 모든 업데이트에 대해 일관된 테스트 프로세스 유지.

  3. 사용 중인 모든 패키지와 버전에 대한 포괄적인 문서화 유지.

모니터링 및 로깅#

에어갭 환경 내에서 견고한 모니터링 보장:

  1. 인터넷 접근이 필요하지 않은 로컬 모니터링 솔루션 배포.

  2. 정상적인 시스템 동작을 위한 기준선 설정.

  3. 보안 분석 및 문제 해결을 위한 중앙 집중식 로깅 구현.