2025 Security engineer Bootcamp/4. Docker(WEB)

Docker 설정 및 실습

Hoon`ss 2025. 10. 28. 19:53

1. Docker: 컨테이너 기술의 이해와 실전 활용

 

Docker는 애플리케이션을 컨테이너라는 독립적인 환경에서 실행할 수 있도록 돕는 혁신적인 기술입니다. 

  • Docker 설치 및 기본 명령어
    • Docker 엔진을 설치하고,
      docker version 
      docker images 
      docker search 
      와 같은 기본 명령어를 통해 이미지를 관리하는 방법을 익힐 수 있습니다.
    •  
    • Docker 설치 예시 (CentOS)
      $ sudo yum install -y net-tools wget
      $ sudo yum install epel-release
      $ cd /etc/yum.repos.d
      $ sudo wget https://download.docker.com/linux/centos/docker-ce.repo
      $ sudo yum install docker-ce docker-ce-cli containerd.io -y
      $ sudo systemctl --now enable docker 
    • Docker 패키지 설치 중 오류 발생 시 대처
       
      다운로드 중 오류가 발생하면 캐시 정보를 삭제한 후 재설치해야 합니다.
      $ sudo yum clean all 
    • Docker 데몬 시작 및 활성화
      $ sudo systemctl status docker.service
      $ sudo systemctl start docker.service
      $ sudo systemctl enable docker.service 
    • 사용자에게 Docker 권한 부여
      $ sudo usermod -aG docker user 
      사용자 로그아웃 후 재로그인하면 Docker 관련 명령어 실행이 가능해집니다.
  • 컨테이너 라이프사이클 관리
    • docker run 
      docker stop 
      docker start 
      docker rm 
      등 컨테이너를 생성하고 실행하며, 중지 및 삭제하는 과정을 실습을 통해 배울 수 있습니다. 특히
      -it 
      옵션을 활용한 상호 입출력 컨테이너 실행은 개발 환경에서 매우 유용합니다.
    • 컨테이너 실행 예시
      $ docker container run -i -t --name centos_1 centos /bin/bash 
    • 컨테이너에 명령어 전달
       
      컨테이너 내부에 직접 접근하여 명령어를 입력하거나, 호스트 시스템에서 컨테이너에 명령어를 보낼 수 있습니다.
      $ docker container exec -i -t [CONTAINER] /bin/bash
      $ docker container exec [CONTAINER] [CMD] 
    • 컨테이너 종료 및 시작
      $ docker container stop CONTAINER
      $ docker container start CONTAINER 
    • 컨테이너 초기화
       
      모든 컨테이너를 중지하고 삭제하는 명령어입니다.
      $ docker stop $(docker ps -a -q)
      $ docker rm $(docker ps -a -q) 
  • Docker 네트워크
    • Bridge, Host, Null 네트워크와 같은 다양한 Docker 네트워크 드라이버를 이해하고, 컨테이너 간 또는 컨테이너와 외부 네트워크 간 통신 방식을 설정하는 방법을 다룹니다.
      --internal 
      옵션을 사용하여 외부 접근을 제한하는 프라이빗 네트워크 구성도 가능합니다.
    • Bridge 네트워크 생성 예시
      # docker network create --driver bridge my_bridge 
    • 내부 네트워크 생성 및 외부 통신 차단 확인
      $ docker network create --driver bridge --subnet 172.20.0.0/16 --internal my_private
      $ docker container run -d -t --network my_private --name my_centos2 centos:latest
      $ docker container exec my_centos2 ping -c 3 8.8.8.8 
      (3 packets transmitted, 0 received, 100% packet loss, time 2009ms)
  • Docker 볼륨
    • 컨테이너의 데이터를 영구적으로 저장하고 관리하기 위한 볼륨(Volume)과 바인드 마운트(Bind Mount)의 개념 및 실습 방법을 제공합니다. 이를 통해 컨테이너가 삭제되어도 데이터가 유실되지 않도록 보장할 수 있습니다.
    • 볼륨 생성 예시
      $ docker volume create webdata 
    • Bind Mount를 이용한 컨테이너 생성
      $ docker container run -d -p 8081:80 --volume ~/data/web/:/usr/local/apache2/htdocs/ --name httpd_2 httpd:2.4.55 
  • Dockerfile을 활용한 이미지 빌드
    • Dockerfile은 이미지를 생성하기 위한 스크립트 파일로, 코드 형태로 인프라를 관리하는 IaC(Infrastructure as Code)의 핵심입니다.
      FROM 
      RUN 
      CMD 
      EXPOSE 
      COPY 
      등 Dockerfile의 주요 명령어를 사용하여 자신만의 맞춤형 이미지를 빌드하는 과정을 실습할 수 있습니다.
    •  
    • Dockerfile 예시
      FROM centos:7
      LABEL maintainer "DevOps"
      LABEL description="Centos 7 web test"
      RUN yum -y install httpd
      CMD /usr/sbin/httpd -D FOREGROUND
      EXPOSE 80
      COPY index.html /var/www/html/index.html 
    • 이미지 빌드 및 실행
      $ docker build -t centostest:v1 .
      $ docker run -it -d --name centostest -p 172.17.0.1:8888:80 centostest:v1 

Docker는 마이크로서비스 아키텍처와 CI/CD 파이프라인 구축에 필수적인 기술이므로, 이 자료들을 통해 탄탄한 기본기를 다지는 것이 중요합니다.

 

2. Linux 시스템 보안: KISA CCE 기준 점검 스크립트 분석

 

pre_linux_v1.0.sh 

라는 중요한 셸 스크립트 파일이 포함되어 있습니다. 이 스크립트는 KISA(한국인터넷진흥원)의 CCE(Common Configuration Enumeration) 기준에 따라 Linux 시스템의 보안 취약점을 점검합니다. 주요 점검 항목은 다음과 같습니다.

  • U-01 root 계정의 원격 접속 제한
    • root 계정의 직접적인 원격 접속을 제한하여 보안을 강화합니다.
  • U-02 패스워드 복잡성 설정
    • 안전한 패스워드 사용을 위한 복잡성 규칙을 확인합니다. (수동 점검 필요)
  • U-03 계정 잠금 임계값 설정
    • 로그인 실패 시 계정 잠금 정책을 점검하여 무차별 대입 공격을 방지합니다. (수동 점검 필요)
  • U-04 패스워드 최대 사용기간 설정
    • 패스워드 변경 주기를 강제하여 보안을 유지합니다. 90일 이상인 경우 취약으로 판단합니다.
  • U-05 패스워드 파일 보호
    • /etc/shadow 
      와 같은 중요한 패스워드 파일의 접근 권한을 확인합니다.
  • U-06 root 홈, 패스 디렉터리 권한 및 패스 설정
    • root 사용자의 홈 디렉터리 및 PATH 환경 변수의 보안 설정을 점검합니다.
  • U-07 파일 및 디렉터리 소유자 설정
    • 시스템 중요 파일 및 디렉터리의 소유자가 올바르게 설정되었는지 확인합니다.
  • U-08 ~ U-13 중요 파일 소유자 및 권한 설정
    • /etc/passwd 
      /etc/shadow 
      /etc/hosts 
      /etc/(x)inetd.conf 
      /etc/syslog.conf 
      /etc/services 
      등 핵심 시스템 파일들의 소유자 및 권한 설정을 점검합니다.
  • U-14 SUID, SGID, Sticky bit 설정 파일 점검
    • 특수 권한이 설정된 파일들을 점검하여 잠재적인 보안 위험을 파악합니다.
  • U-15 사용자, 시스템 시작파일 및 환경파일 소유자 및 권한 설정
    • 사용자 홈 디렉터리 및 시작 스크립트 파일들의 권한 설정을 확인합니다.
  • U-16 world writable 파일 점검
    • 누구나 쓰기 가능한 파일들을 찾아 보안 취약점을 제거합니다. (수동 점검 필요)
  • U-17 ```
    $HOME/.rhosts
    ```, ```
    hosts.equiv
    ``` 사용 금지
    • 원격 접속 보안을 위해 사용이 권장되지 않는 파일들의 존재 여부를 확인합니다.
  • U-18 접속 IP 및 포트 제한
    • 시스템 접근 제어 설정을 점검합니다. (수동 점검 필요)
  • U-19 cron 파일 소유자 및 권한 설정
    • cron 관련 파일들의 소유자 및 권한을 점검하여 비정상적인 작업 실행을 방지합니다.
  • U-20 finger 서비스 비활성화
    • finger 서비스는 사용자 정보를 노출할 수 있으므로 비활성화 여부를 점검합니다.
  • U-21 Anonymous FTP 비활성화
    • 익명 FTP 서비스는 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다. (수동 점검 필요)
  • U-22 r계열 서비스 비활성화
    • rsh, rlogin, rexec 등 r계열 서비스는 보안에 취약하므로 비활성화 여부를 점검합니다.
  • U-23 DoS 공격에 취약한 서비스 비활성화
    • echo, discard, daytime, chargen 등 DoS 공격에 악용될 수 있는 서비스의 비활성화 여부를 점검합니다.
  • U-24 NFS 서비스 비활성화
    • NFS(Network File System) 서비스는 적절한 접근 제어가 없으면 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다.
  • U-25 NFS 접근 통제
    • NFS 서비스가 활성화되어 있다면,
      /etc/exports 
      파일을 통해 접근 통제가 제대로 이루어지고 있는지 점검합니다. (수동 점검 필요)
  • U-26 automountd 제거
    • automountd 서비스는 NFS와 관련된 취약점을 가질 수 있으므로 제거 여부를 점검합니다.
  • U-27 RPC 서비스 확인
    • rpc.cmsd, rpc.ttdbserverd, sadmind 등 불필요한 RPC 서비스의 활성화 여부를 점검합니다.
  • U-28 NIS, NIS+ 점검
    • NIS(Network Information Service) 및 NIS+ 서비스는 중앙 집중식 계정 관리에 사용되지만, 보안 취약점이 있을 수 있으므로 활성화 여부를 점검합니다.
  • U-29 tftp, talk 서비스 비활성화
    • tftp, talk, ntalk 서비스는 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다.
  • U-30 Sendmail 버전 점검
    • Sendmail 메일 서버의 버전을 점검하여 최신 보안 패치 적용 여부를 확인합니다. (수동 점검 필요)
  • U-31 스팸 메일 릴레이 제한
    • Sendmail의 스팸 메일 릴레이 제한 설정 여부를 점검합니다. (수동 점검 필요)
  • U-32 일반 사용자의 Sendmail 실행 방지
    • 일반 사용자가 Sendmail을 실행하여 악용하는 것을 방지하는 설정 여부를 점검합니다.
  • U-33 DNS 보안 버전 패치
    • DNS 서버(named)의 버전을 점검하여 최신 보안 패치 적용 여부를 확인합니다. (수동 점검 필요)
  • U-34 DNS ZoneTransfer 설정
    • DNS Zone Transfer 설정이 적절하게 제한되어 있는지 점검하여 민감한 정보 노출을 방지합니다.
  • U-35 최신 보안패치 및 벤더 권고사항 적용
    • 시스템에 최신 보안 패치와 벤더 권고사항이 적용되었는지 전반적으로 점검합니다. (수동 점검 필요)

이 스크립트는 Linux 시스템의 기본적인 보안 강화를 위한 좋은 참고 자료이며, 주기적인 점검을 통해 시스템의 안전성을 확보하는 데 기여할 수 있습니다.

 

3. 웹 애플리케이션 아키텍처: 서비스 설계의 청사진

 

DAY1 폴더의 'Web Application Architecture 완벽 가이드.pdf' 파일은 다양한 웹 아키텍처 패턴을 소개하며, 각 아키텍처의 특징, 장단점, 그리고 적합한 적용 사례를 명확하게 설명합니다.

  • Monolithic Architecture (모놀리식 아키텍처)
    • 모든 기능이 하나의 통합된 코드베이스로 구성된 전통적인 방식입니다. 개발 초기에는 빠르지만, 규모가 커질수록 유지보수가 어려워지는 단점이 있습니다. 소규모 프로젝트, 스타트업의 MVP(Minimum Viable Product), 단순한 비즈니스 로직에 적합합니다.
  • Microservices Architecture (마이크로서비스 아키텍처)
    • 각 비즈니스 기능이 독립적인 서비스로 분리되어 API를 통해 통신하는 방식입니다. 높은 확장성과 유연성을 제공하며, 팀 간 독립적인 개발이 가능하고 장애 격리가 용이하다는 장점이 있습니다. 하지만 시스템 복잡도가 증가하고 분산 시스템 관리가 어렵다는 단점이 있습니다. Netflix, Amazon, Uber와 같은 대규모 서비스, 높은 확장성이 필요한 서비스에서 주로 사용됩니다.
  • Layered (N-Tier) Architecture
    • 애플리케이션을 논리적 계층으로 분리하여 각 계층이 특정 책임만을 가지도록 하는 구조입니다. 유지보수와 테스트가 용이하며 재사용성이 높지만, 계층 간 의존성 관리와 성능 오버헤드가 발생할 수 있습니다. 전통적인 웹 애플리케이션, 엔터프라이즈 애플리케이션(은행, 보험 시스템)에 적합합니다.
  • Client-Server Architecture
    • 클라이언트와 서버로 명확히 분리된 구조로, 역할 분리가 명확하고 독립적인 업데이트가 가능합니다. 웹 애플리케이션(브라우저-서버), 모바일 앱(앱-API 서버), 데스크톱 애플리케이션 등 광범위하게 적용됩니다.
  • Serverless Architecture
    • 서버 관리 없이 클라우드 제공자가 인프라를 관리하며, 함수 단위로 코드를 실행하는 방식(FaaS)입니다. 인프라 관리 부담이 없고 자동 스케일링, 비용 효율적이라는 장점이 있습니다. 하지만 콜드 스타트 지연과 벤더 종속성이 단점입니다. API 백엔드, 이벤트 처리(이미지 리사이징, 로그 처리), 주기적 작업(크론 잡), 챗봇, IoT 백엔드 등에 활용됩니다.
  • Event-Driven Architecture
    • 이벤트의 생성, 감지, 소비를 중심으로 구성되며, 컴포넌트 간 느슨한 결합과 비동기 통신이 특징입니다. 높은 확장성과 유연성, 실시간 처리가 가능하며 새로운 기능 추가가 용이합니다. 그러나 디버깅이 복잡하고 이벤트 순서 보장이 어려울 수 있습니다. 실시간 알림 시스템, 주문 처리 시스템, IoT 데이터 처리, 로그 및 모니터링 시스템에 적합합니다.
  • MVC (Model-View-Controller) Architecture
    • Model, View, Controller로 구성되어 관심사를 명확하게 분리하는 패턴입니다. 병렬 개발과 테스트가 용이하지만, 소규모 프로젝트에는 과도할 수 있습니다. Ruby on Rails, Django (Python), Spring MVC (Java), ASP.NET MVC 등 다양한 프레임워크에서 활용됩니다.
  • Microkernel (Plugin) Architecture
    • 코어 시스템은 최소 기능만 제공하고 확장 기능은 플러그인으로 추가하는 방식입니다. 높은 확장성과 유연성이 특징이며, Eclipse IDE, Visual Studio Code, WordPress, Jenkins 등에서 활용됩니다.

아키텍처 선택 가이드에서는 프로젝트 규모, 팀 구성, 확장성 요구사항, 개발 속도, 예산 및 리소스, 기술 역량 등 다양한 기준을 고려하여 적합한 아키텍처를 선택하는 방법을 제시합니다. 실제 프로젝트에서는 여러 아키텍처 패턴을 조합하는 하이브리드 접근 방식이 일반적이며, 모놀리식에서 마이크로서비스로 전환하는 스트랭글러 패턴(Strangler Pattern), 데이터베이스 분리, API Gateway 도입, 모니터링 강화 등의 마이그레이션 전략도 함께 다룹니다.

 

DAY1 폴더의 자료들은 현대 소프트웨어 개발에서 필수적인 Docker 컨테이너 기술, Linux 시스템 보안의 중요성, 그리고 다양한 웹 애플리케이션 아키텍처 패턴에 대한 깊이 있는 지식을 제공합니다. 이 내용들을 잘 숙지하고 실제 프로젝트에 적용한다면, 더욱 견고하고 효율적인 시스템을 구축하는 데 큰 도움이 될 것입니다.

'2025 Security engineer Bootcamp > 4. Docker(WEB)' 카테고리의 다른 글

WEB 보안 기초  (0) 2025.11.03