Taeyoung Kim

Cloud & Platform

Azure 가상 머신(VM) 생성 및 보안 설정 가이드

Azure 가상 머신(VM) 생성 및 보안 설정 가이드 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.


1. Azure Linux VM 생성 및 웹 서버 구축

1.1. 가상 머신(VM) 생성

  1. 리소스 생성: Azure 포털 검색창에서 '가상 머신'을 검색하여 'Azure 가상 머신 만들기'를 선택합니다.
  2. 기본 설정:
    • 리소스 그룹: web-rg (새로 만들기)
    • 가상 머신 이름: linux-vm
    • 이미지: Ubuntu Server 24.04 LTS - x64 Gen2
    • 크기: Standard_D2s_v3 (2 vcpu, 8 GiB 메모리)
  3. 관리자 계정 설정:
    • 인증 형식: SSH 공개 키
    • 사용자 이름: azureuser (보안상 admin, root 등은 사용 불가)
    • 키 쌍 이름: linux-vm_key (새 키 쌍 생성)
  4. 인바운드 포트 규칙:
    • 공용 인바운드 포트 허용: HTTP (80), HTTPS (443), SSH (22) 선택
  5. 모니터링 설정:
    • 부트 진단: 사용 안 함으로 설정하여 스토리지 비용을 절감하고 관리를 용이하게 합니다.
    • 부트 진단은 VM 부팅 문제 발생 시 콘솔 로그와 스크린샷을 저장하여 원인 분석을 돕는 기능입니다.
  6. 생성 및 키 다운로드:
    • 설정 검토 후 VM을 생성합니다.
    • *'프라이빗 키 다운로드 및 리소스 만들기'**를 클릭하여 SSH 접속에 필요한 .pem 키 파일을 다운로드하고 안전하게 보관합니다. 이 키 파일이 없으면 VM에 접속할 수 없으므로 매우 중요합니다.

💡 Just-In-Time(JIT) 액세스 정책이란?

평상시에는 SSH(22), RDP(3389) 같은 관리 포트를 닫아두고, 필요할 때만 일시적으로 접근을 허용하여 보안을 강화하는 기능입니다. 공격에 노출될 위험을 최소화하는 효과적인 클라우드 보안 기술입니다.

1.2. VM 접속 및 웹 서버 설치

  1. SSH 접속:

    • 배포가 완료되면 '리소스로 이동'하여 생성된 VM을 확인합니다.
    • '연결' 메뉴에서 Azure CLI를 통한 SSH 접속 명령어를 확인하고, VM의 공인 IP 주소를 기록합니다.
  2. 관리자 권한 획득:Bash

    sudo su
    
  3. 패키지 업데이트:Bash

    sudo apt update -y && sudo apt upgrade -y
    
  4. LAMP 서버 설치:Bash

    sudo apt install lamp-server^ -y
    
  5. 웹 서버 접속 확인:

    • 웹 브라우저에서 기록해 둔 공인 IP 주소로 접속하여 Apache 기본 페이지가 나타나는지 확인합니다.

1.3. Apache 로그 분석

서버 운영, 보안, 문제 해결에 중요한 로그 파일은 Ubuntu/Debian 기준 /var/log/apache2/ 경로에 저장됩니다.

  • 접근 로그 (access.log):
    • 확인 명령어: tail -n 10 /var/log/apache2/access.log
    • 로그 형식: IP - - [시간] "요청방식 URL 프로토콜" 상태코드 응답크기 "이전페이지" "사용자 에이전트"
    • 예시 분석: 121.140.82.80 IP가 2025년 7월 7일GET 방식으로 루트(/) 페이지를 요청했고, 정상 응답(200)을 받음.
  • 에러 로그 (error.log):
    • 확인 명령어: tail -n 10 /var/log/apache2/error.log
    • 로그 형식: [시간] [모듈:심각도] [프로세스ID] 메시지
    • 예시 분석: 아파치 서버가 정상적으로 설정되어 재시작되었음을 알리는 일반적인 알림 로그. 설정 오류나 문제 발생 시 이곳에 기록됩니다.

1.4. Linux VM 보안 설정

1.4.1. Fail2Ban: 무차별 대입 공격 방어

Fail2Ban은 로그 파일을 감시하여 반복적인 로그인 실패 등 의심스러운 IP를 자동으로 방화벽에서 차단하는 도구입니다.

  1. 설치:Bash

    sudo apt install fail2ban -y
    
  2. 설정 파일 복사:Bash

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  3. Apache 차단 규칙 활성화:Ini, TOML

    • sudo vi /etc/fail2ban/jail.local 명령어로 설정 파일을 엽니다.
    • [apache-badbots] 섹션을 찾아 아래와 같이 수정하여 활성화합니다.
    [apache-badbots]
    enabled  = true
    port     = http,https
    logpath  = /var/log/apache2/*access.log
    bantime  = 48h
    maxretry = 1
    
  4. 서비스 재시작 및 활성화:Bash

    sudo systemctl restart fail2ban
    sudo systemctl enable fail2ban
    
  5. 상태 확인: sshdapache-badbots 규칙이 활성화되었는지 확인합니다.Bash

    sudo fail2ban-client status
    
  6. 차단 테스트:

    • HTTP: 악성 봇으로 위장하여 1회 초과 접근 시 IP가 48시간 동안 차단됩니다.Bash

      # 첫 번째 요청은 성공
      curl -A "EmailCollector" http://<VM-공인-IP>
      # 두 번째 요청부터는 타임아웃 발생 (차단됨)
      curl -A "EmailCollector" http://<VM-공인-IP>
      
    • SSH: 존재하지 않는 사용자로 5회 이상 접속 시도 시 해당 IP가 기본 10분간 차단됩니다.Bash

      for i in {1..5}; do ssh -o ConnectTimeout=3 wronguser@<VM-공인-IP> "exit"; done
      # 이후 정상적인 계정으로도 접속 시 타임아웃 발생 (차단됨)
      ssh -i ./linux-vm_key.pem azureuser@<VM-공인-IP>
      
    • 차단 로그는 /var/log/fail2ban.log 파일에서 확인할 수 있습니다.

💡 SSH 보안 강화 권장 사항

지정된 IP에서만 접근 허용, 기본 포트(22) 변경, 2단계 인증(2FA) 적용, 내부망을 통한 Bastion Host 활용 등이 더 안전한 방법입니다.

1.4.2. AppArmor: 애플리케이션 접근 제어

AppArmor는 리눅스 커널 보안 모듈(LSM)로, 각 애플리케이션이 접근할 수 있는 파일 및 권한을 프로필 기반으로 제한하여 시스템을 보호합니다. (Ubuntu 기본 활성화)

  1. 유틸리티 설치 및 활성화:Bash

    apt install apparmor-utils -y
    systemctl enable apparmor
    systemctl start apparmor
    
  2. 정책 위반 테스트 설정:Bash

    • Apache가 시스템의 중요 파일(/etc/passwd)을 읽도록 테스트용 PHP 파일을 생성합니다.
    cat <<EOF > /var/www/html/index.php
    <?php
    echo file_get_contents('/etc/passwd');
    ?>
    EOF
    rm -rf /var/www/html/index.html
    
  3. AppArmor 프로필 정의:Bash

    • /etc/apparmor.d/usr.sbin.apache2 파일에 Apache가 접근할 수 있는 경로를 명시적으로 정의합니다. /etc/passwd는 허용 목록에 없습니다.
    cat <<EOF > /etc/apparmor.d/usr.sbin.apache2 
    #include <tunables/global>
    
    profile /usr/sbin/apache2 flags=(attach_disconnected) {
      #include <abstractions/base>
    
      /var/log/apache2/** rw,
      /var/www/** r,
      /etc/apache2/** r,
      /tmp/** rw,
      /usr/lib/apache2/** mr,
      /usr/sbin/apache2 mr,
      network inet stream,
      network inet6 stream,
    }
    EOF
    
  4. 프로필 적용 및 상태 확인:Bash

    apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2
    sudo aa-status
    
  5. 결과 확인:

    • 웹 브라우저로 접속 시, Apache는 허용되지 않은 /etc/passwd 파일 접근을 시도하다 AppArmor 정책에 의해 차단(DENIED)됩니다.
    • 시스템 로그(journalctl -k | grep DENIED)에서 차단 기록을 확인할 수 있습니다.
    • 이로 인해 Apache 서비스가 비정상 종료(failed)될 수 있습니다. 정책을 다시 비활성화하려면 R 옵션을 사용합니다: sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.apache2

2. Azure Windows VM 생성 및 웹 서버(IIS) 구축

2.1. 가상 머신(VM) 생성

  1. 리소스 생성: Azure 포털에서 'Azure 가상 머신 만들기'를 선택합니다.
  2. 기본 설정:
    • 리소스 그룹: web-rg (기존 그룹 사용)
    • 가상 머신 이름: window-vm
    • 이미지: Windows Server 2019 Datacenter - x64 Gen2
    • 크기: Standard_D2s_v3 (2 vcpu, 8 GiB 메모리)
  3. 관리자 계정:
    • 사용자 이름: azureuser
    • 암호: Optional12!@ (복잡성 요구 조건 충족 필요)
  4. 인바운드 포트 규칙:
    • 공용 인바운드 포트 허용: HTTP (80), HTTPS (443), RDP (3389) 선택
  5. 모니터링:
    • 부트 진단: 사용 안 함으로 설정

2.2. VM 접속 및 IIS 설치

  1. RDP 접속:

    • 배포 완료 후 '리소스로 이동'하여 '연결' 메뉴에서 RDP 파일 다운로드를 클릭합니다.
    • 다운로드한 .rdp 파일을 실행하고, 설정한 암호(Optional12!@)를 입력하여 원격 데스크톱으로 접속합니다.
  2. IIS 설치:PowerShell

    • 원격 접속 후, Windows 아이콘을 우클릭하여 **Windows PowerShell (Admin)**을 실행합니다.
    • 아래 명령어를 실행하여 IIS 웹 서버를 설치하고 자동으로 시작되도록 설정합니다.
    Install-WindowsFeature -name Web-Server -IncludeManagementTools
    Set-Service -name W3SVC -startupType Automatic
    
  3. 웹 서버 접속 확인:

    • Azure 포털에서 window-vm의 공인 IP 주소를 복사하여 웹 브라우저로 접속하면 IIS 기본 페이지가 나타납니다.

2.3. IIS 기능 설정 및 보안

2.3.1. 디렉터리 브라우징 설정 및 위험성

  1. IIS 관리자 실행: 시작 메뉴에서 inetmgr을 검색하여 실행합니다.
  2. 기능 활성화: window-vm > Directory Browsing으로 이동하여 'Enable'을 클릭합니다.
  3. 테스트:
    • C:\inetpub\wwwroot 경로에 test 폴더와 그 안에 sample.txt 파일을 생성합니다.
    • 웹 브라우저에서 http://&lt;VM-공인-IP>/test/로 접속하면 폴더 내용이 노출됩니다.
    • 위험성: 이 기능이 활성화되면 서버의 파일 및 폴더 구조가 외부에 노출되어 중요 정보 유출이나 추가 공격의 빌미가 될 수 있습니다.

2.3.2. IIS 인증 및 접근 제어

  1. Windows 인증 기능 설치:
    • '서버 관리자' 또는 '제어판 > 프로그램 기능 켜기/끄기'에서 '역할 및 기능 추가 마법사'를 실행합니다.
    • 웹 서버(IIS) > 보안 섹션에서 **'Windows 인증'**을 선택하고 설치합니다.
  2. 인증 설정:
    • IIS 관리자에서 Default Web Site > 인증으로 이동합니다.
    • Anonymous Authentication (익명 인증)을 Disabled로 변경합니다.
    • Windows Authentication (Windows 인증)을 Enabled로 변경합니다.
  3. 결과 확인:
    • 이제 웹사이트에 접속하면 인증 창이 나타나며, VM 생성 시 설정한 계정(azureuser / Optional12!@)으로만 접근이 가능합니다.

2.3.3. 폴더별 개별 인증 설정

  1. /test 폴더에 대해 익명 접근을 허용하도록 설정을 변경합니다.
    • IIS 관리자에서 Default Web Site > test 폴더를 선택하고 '인증'으로 이동합니다.
    • Windows Authentication: Disable
    • Anonymous Authentication: Enable
    • 이제 루트 경로는 인증이 필요하지만, /test 경로는 누구나 접근할 수 있습니다.

2.3.4. 별도 사용자 생성 및 폴더 권한 부여

  1. 사용자 생성: '컴퓨터 관리 > 로컬 사용자 및 그룹'에서 test라는 새 사용자를 생성합니다. (암호: Optional12!@)
  2. 폴더 권한 설정:
    • C:\inetpub\wwwroot\test 폴더의 속성 > 보안 탭에서 '편집'을 클릭합니다.
    • '추가' 버튼을 눌러 test 사용자를 추가하고 모든 권한(Allow)을 부여합니다.
    • 기존 Administrators 그룹의 권한을 'Deny'로 설정하여 접근을 제한합니다.
  3. 결과 확인: 이제 /test 경로는 test 사용자 계정으로만 접근이 가능합니다.

2.4. 엔드포인트 보호 (Windows Defender)

Windows Server에는 기본적으로 엔드포인트 보호 솔루션인 Windows Defender가 내장되어 있어 실시간으로 악성코드를 탐지하고 차단합니다.

  1. 활성화 상태 확인: PowerShell에서 아래 명령어를 실행하여 AMServiceEnabledTrue인지 확인합니다.PowerShell

    Get-MpComputerStatus
    
  2. 탐지 테스트:

    • 메모장을 열어 EICAR 테스트 문자열을 입력하고 저장합니다.

      X5O!P%@AP[4\PZX54(P^)7CC)7&#125;$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

    • 파일 저장 즉시 Windows Defender가 이를 악성코드로 탐지하여 자동으로 제거합니다.

    • 'Windows 보안 > 바이러스 및 위협 방지'에서 탐지 기록을 확인할 수 있습니다.

2.5. IPBan: 자동 IP 차단 솔루션

IPBan은 로그인 실패가 반복되는 IP를 Windows 방화벽에서 자동으로 차단하는 오픈소스 프로그램입니다.

  1. 설치: PowerShell(관리자)에서 아래 명령어를 순차적으로 실행합니다.PowerShell

    # 폴더 생성
    $dest = "C:\\IPBan"
    New-Item -ItemType Directory -Force -Path $dest
    # 다운로드
    Invoke-WebRequest -Uri "https://github.com/DigitalRuby/IPBan/releases/download/3.0.0/IPBan-Windows-x64_3_0_0.zip" -OutFile "$dest\\IPBan-Windows-x64_3_0_0.zip"
    # 압축 해제
    Expand-Archive -Path "$dest\\IPBan-Windows-x64_3_0_0.zip" -DestinationPath $dest -Force
    
  2. 서비스 등록 및 시작:PowerShell

    # 서비스 등록
    sc.exe create IPBAN type= own start= delayed-auto binPath= "$dest\\DigitalRuby.IPBan.exe" DisplayName= IPBAN
    # 서비스 시작
    sc.exe start IPBAN
    
  3. 동작 확인:

    • IPBan은 RDP, IIS 등 다양한 서비스 로그를 감시하여 임계값 초과 시 해당 IP의 모든 접근을 차단합니다.
    • 외부에서 curl http://&lt;VM-공인-IP>와 같은 명령을 반복 실행하면 정책 위반으로 해당 IP가 차단되어 RDP 및 웹 접속이 모두 불가능해집니다.
    • 로그는 C:\IPBan 폴더에서 확인할 수 있습니다.