[Hands On] 폐쇄망에서의 O/S Patch

00. 폐쇄망 및 Patch

폐쇄망이란?

폐쇄망이란 인터넷 연결이 되지 않는 망 분리 환경을 의미합니다. 망 분리란 외부 인터넷망을 통한 불법적인 접근과 내부 정보의 유출을 차단하기 위해 업무망과 외부 인터넷망을 분리한 것을 의미합니다.

Patch란 운영 체제의 기능 개선이나 수정을 위해 설계된 업데이트 프로그램을 의미합니다.
OS patch를 하는 방법은 아래와 같습니다.

  • AWS Systems Manager (Patch Manager)
  • AWS OpsWorks (Chef Automate)
  • Repository
  • WSUS (Windows Server Update Services)

이번 Hands On에서는Repository Server를 이용한 Ubuntu OS patch, Repository Bucket을 이용한 Amazon Linux OS patch에 대해서 소개해 보려고 합니다.


01. Ubuntu 20.04 LTS

01-01. Architecture

Ubuntu OS 패치를 위한 구성도는 위의 사진과 같습니다.
보안을 위해 모든 Server들은 Bastion을 통해 접속하며, Ubuntu Repository Server는 Nat Gateway를 통해 인터넷과 통신 되도록 구성하였습니다.


01-02. Ubuntu Repository Server 구축

apt-get update 확인

Bastion Host를 통해 Repository Server에 접속한 후 ‘apt-get update’로 패치를 진행합니다.
Repository Server는 인터넷 통신이 가능한 상태이므로 패치가 정상적으로 이루어지는 것을 확인할 수 있습니다.


패키지 저장소 디렉토리 생성

‘mkdir -p’ 명령을 통해 원하는 패키지 저장소 디렉토리를 생성합니다.

# mkdir -p /var/www/html/ubuntu

‘chown’ 명령을 통해 소유자 권한을 www-data로 변경시킵니다. www-data는 가지고 있는 권한이 매우 적기 때문에 www-data의 권한이 탈취 당한다고 해도 업로드 및 수정이 불가능하기 때문에 보안적인 측면에서 권장되고 있습니다.

# chown www-data:www-data /var/www/html/ubuntu


apt-mirror 패키지 설치
apt install -y apt-mirror

apt-mirror 서버를 설치하게 되면 mirror.list 파일이 생성됩니다.

이후에 mirror 서버 수정 시 오류를 대비해 mirror.list에 대한 backup 파일을 만듭니다.

# cp /etc/apt/mirror.list /etc/apt/mirror.list.bak


mirror.list 수정
[이미지 출처] https://ko.wikipedia.org/wiki/%EC%9A%B0%EB%B6%84%ED%88%AC_%EB%B2%84%EC%A0%84_%EC%97%AD%EC%82%AC

① 기본 경로 변경: 기본 경로를 /var/spool/apt-mirror에서 앞서 생성한 ubuntu 디렉토리로 변경합니다.
② Ubuntu 코드명 변경: 20.04 LTS 버전의 코드명인 ‘Focal Fossa’로 변경해 줍니다.
③ deb-src 주석처리: 스토리지의 용량이 충분하다면 변경하지 않아도 되지만, 해당 소스를 다운로드하지 않아도 업데이트에는 지장이 없기 때문에 주석 처리합니다.


postmirror.sh 복사 및 미러링

postmirror.sh에는 미러링 설정에 대한 내용을 담고 있습니다. 그런 postmirror.sh 파일을 복사한 후 미러링을 진행합니다.

# mkdir -p /var/www/html/ubuntu/var
# cp /var/spool/apt-mirror/var/postmirror.sh /var/www/html/ubuntu/var
# apt-mirror


cnf.sh 생성

미러링 작업이 완료되면 cnf.sh를 생성하여 아래 내용을 추가해줍니다.

Ubuntu 20.04 LTS의 경우에는 cnf 디렉토리와 동기화하므로 파일 복사를 해야 합니다. 만약 해당 파일 없이 클라이언트 서버(Target Server)에서 패치를 진행할 경우 아래와 같은 오류가 발생하게 됩니다.


cnf.sh 권한 설정 및 실행

생성한 스크립트 파일의 실행 권한을 주기 위해 ‘chmod’명령으로 권한을 변경해 줍니다.

# chmod +x cnf.sh
# bash cnf.sh

이후 스크립트 파일을 실행하게 되면 ‘archive.ubuntu.com’이라는 디렉토리가 생성되는 것을 확인할 수 있습니다.


archive.ubuntu.com 디렉터리 복사

위에서 생성된 디렉토리를 ‘/var/www/html/ubuntu/mirror/’에 복사합니다.

# cp –av archive.ubuntu.com /var/www/html/ubuntu/mirror/

Ubuntu Repository Server 작업을 완료했으므로 완전한 폐쇄망 환경을 만들어주기 위해서 Nat Gateway와의 연결을 끊어줍니다.

01-03. Target Server에 Patch

Target Server 또한 Bastion Host를 통해서 접속합니다.


Patch 확인

Target Server에 접속 후 patch를 시도해 보겠습니다.

# apt-get update

Target Server는 인터넷 연결이 되어있지 않기 때문에 위의 사진과 같이 패치가 실패하는 것을 확인할 수 있습니다.


source.list 수정

패치를 진행하는 경로를 인터넷을 통한 경로가 아닌 Repository Server의 경로를 통할 수 있도록 ‘focal’과 ‘focal-security’ 경로에 해당하는 부분을 모두 아래와 같이 바꾸어줍니다.

변경을 완료했으면 아래의 명령을 통해 source.list 파일이 제대로 수정되었는지 확인해 봅니다.

# grep –v ‘#’ /etc/apt/sources.list


Patch 진행

패치를 진행해 보면 아래와 같이 성공적으로 패치가 되는 것을 확인할 수 있습니다.

# apt-get update


02. Amazon Linux

02-01. Architecture

Amazon Linux의 경우는 Amazon에서 제공하는 S3 리포지토리 버킷을 이용합니다.
따라서 Ubuntu와 달리 리포지토리 서버를 생성하지 않고 S3 리포지토리 버킷에 대한 엑세스를 허용하는 정책을 통해 패치를 진행합니다.


02-02. Target Server에 Patch

Update 확인

Amazon Linux 타겟 서버는 인터넷이 연결되어 있지 않은 상태이므로 아래 사진과 같이 패치가 진행되지 않습니다.


Endpoint 생성

VPC > Endpoint에 들어가 Endpoint를 생성해줍니다.

이름 태그를 지정한 후 서비스 범주는 ‘AWS 서비스’를 선택합니다.

서비스 이름은 타겟 서버가 있는 리전의 S3를 선택하고, 유형은 ‘Gateway’를 선택합니다.

라우팅 테이블은 타겟 서버의 라우팅 테이블을 선택합니다.

정책은 ‘사용자 지정’으로 선택한 후 S3 버킷에 대한 엑세스를 허용하는 정책을 추가해줍니다.


Patch 진행

엔드포인트를 생성한 후 타깃 인스턴스에 접속 후 패치를 진행해 보면 정상적으로 완료되는 것을 확인할 수 있습니다.

# yum update