Nmap 으로 포트 스캔 실습

NmapBeginner
지금 연습하기

소개

이 실습에서는 강력한 네트워크 스캐닝 도구인 Nmap 을 사용하여 다양한 포트 스캔을 수행하는 방법을 배우게 됩니다. TCP 연결 스캔, SYN 스캔을 포함한 다양한 스캔 유형을 탐색하고, 특정 포트, 포트 범위 및 가장 일반적인 "상위 포트"를 스캔하는 기술을 익힐 것입니다. 이 실습을 마치면 대상 시스템에서 열린 포트와 서비스를 발견하는 데 Nmap 을 사용하는 실질적인 이해를 얻게 될 것이며, 이는 네트워크 정찰 및 보안 감사에서 필수적인 기술입니다.

각 스캔 유형은 고유한 특징과 사용 사례를 가지고 있습니다. 예를 들어, TCP 연결 스캔은 전체 TCP 3-way 핸드셰이크를 완료하여 신뢰할 수 있지만 쉽게 감지될 수 있습니다. 반면 SYN 스캔은 핸드셰이크를 완료하지 않아 더 은밀합니다. Xfce 터미널에서 Nmap 명령어를 실행하고 출력을 분석하여 다양한 포트의 상태를 이해할 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

nmap -sT 127.0.0.1 명령어로 TCP 연결 스캔 수행

이 단계에서는 Nmap 을 사용하여 TCP 연결 스캔을 수행합니다. 이는 대상 포트와 연결을 설정하기 위해 전체 TCP 3-way 핸드셰이크를 완료하는 기본적이고 신뢰할 수 있는 TCP 스캔 방법입니다. 신뢰할 수 있지만, 이 방법은 다른 스캔 유형보다 은밀성이 떨어집니다. 왜냐하면 연결을 완전히 설정하고 해제하기 때문이며, 이는 대상 시스템에서 쉽게 기록될 수 있습니다.

TCP 3-way 핸드셰이크를 간략히 살펴보겠습니다.

  1. SYN(동기화): 스캐너는 대상 포트에 SYN 패킷을 전송합니다.
  2. SYN/ACK(동기화/확인): 포트가 열려 있으면 대상은 SYN/ACK 패킷으로 응답합니다.
  3. ACK(확인): 스캐너는 ACK 패킷을 대상으로 다시 전송하여 연결을 완료합니다.

Nmap 의 -sT 옵션은 명시적으로 이러한 전체 TCP 연결 스캔을 수행합니다. TCP 연결을 완료하기 때문에 루트 권한이 필요하지 않지만, 이후 단계와의 일관성을 위해 sudo를 사용할 것입니다.

이제 127.0.0.1(로컬 호스트) 에 대한 TCP 연결 스캔을 수행해 보겠습니다. 이 IP 주소는 항상 사용자의 컴퓨터를 가리키므로 연습용 안전한 대상입니다.

  1. Xfce 터미널을 엽니다. 홈 디렉토리 (~/project) 에 있어야 합니다.

  2. 다음 명령어를 실행하여 TCP 연결 스캔을 수행합니다.

    sudo nmap -sT 127.0.0.1

    이 명령은 Nmap 에 IP 주소 127.0.0.1에 대한 TCP 연결 스캔 (-sT) 을 수행하도록 지시합니다. labex 사용자는 비밀번호 없이 sudo 권한을 가지고 있으므로 프롬프트가 나타나면 Enter 키를 누르기만 하면 됩니다.

  3. 터미널에서 출력을 확인합니다. 로컬 머신의 일반적인 포트와 상태 목록이 표시됩니다. 출력은 다음과 유사합니다.

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000052s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

    출력은 PORT 번호, STATE, 그리고 Nmap 이 해당 포트와 연결하는 SERVICE를 보여줍니다.

    • open은 Nmap 이 해당 포트에 대한 TCP 연결을 성공적으로 설정했음을 의미합니다.
    • closed는 Nmap 이 SYN 패킷에 대한 응답으로 TCP RST(리셋) 패킷을 받았음을 의미하며, 포트가 수신 대기하지 않음을 나타냅니다.
    • 포트 22, 2121, 2222, 3001, 그리고 8080open임을 주목하세요. 사용자 정의 서비스 (2121, 2222, 8080) 는 실습 환경에서 설정되었으며, 포트 22 의 SSH 와 포트 3001 의 다른 서비스도 함께 설정되었습니다.

nmap -sS 127.0.0.1 명령어로 SYN 스캔 실행

이 단계에서는 "반 연결" 스캔으로 알려진 SYN 스캔을 수행하는 방법을 배웁니다. 이 기술은 TCP 연결 스캔보다 일반적으로 더 은밀합니다. 왜냐하면 전체 TCP 3-way 핸드셰이크를 완료하지 않기 때문이며, 이는 대상 시스템의 애플리케이션에서 기록될 가능성을 줄입니다.

SYN 스캔의 작동 방식은 다음과 같습니다.

  1. SYN(동기화): 스캐너는 대상 포트에 SYN 패킷을 전송합니다.
  2. SYN/ACK(동기화/확인): 포트가 열려 있으면 대상은 SYN/ACK 패킷으로 응답합니다.
  3. RST(리셋): 연결을 완료하기 위해 ACK 를 전송하는 대신, 스캐너는 연결을 갑작스럽게 종료하기 위해 즉시 RST 패킷을 전송합니다.

전체 TCP 연결이 설정되지 않기 때문에 SYN 스캔은 덜 침입적이며, 완료된 연결만 모니터링하는 단순한 방화벽 규칙을 종종 우회합니다. 그러나 SYN 스캔은 일반적으로 원시 패킷을 생성하기 위해 루트 권한이 필요하며, 이것이 sudo를 사용하는 이유입니다.

이제 127.0.0.1에 대한 SYN 스캔을 수행해 보겠습니다.

  1. Xfce 터미널에 있는지 확인합니다.

  2. 다음 명령어를 실행합니다.

    sudo nmap -sS 127.0.0.1

    이 명령은 Nmap 에 IP 주소 127.0.0.1에 대한 SYN 스캔 (-sS) 을 수행하도록 지시합니다. 비밀번호를 요청하면 Enter 키를 누릅니다.

  3. 출력을 확인합니다. 출력은 TCP 연결 스캔과 유사하지만 기본 메커니즘은 다릅니다.

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000040s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

    STATE 열은 각 포트의 상태를 나타냅니다.

    • open은 Nmap 이 SYN 패킷에 대한 응답으로 SYN/ACK 패킷을 받았음을 의미합니다.
    • closed는 Nmap 이 RST 패킷을 받았음을 의미합니다.
    • filtered (다른 시나리오에서 볼 수 있음) 는 Nmap 이 포트가 열려 있는지 닫혀 있는지 확인할 수 없었음을 의미하며, 네트워크 필터링 (예: 방화벽) 이 Nmap 이 포트에 도달하는 것을 차단하고 있기 때문입니다.

nmap -p 2222,8080,2121 127.0.0.1 명령어로 특정 포트 스캔

이 단계에서는 Nmap 을 사용하여 대상 시스템의 특정 포트를 스캔하는 방법을 배웁니다. 이는 특정 서비스나 애플리케이션에 대한 스캔을 집중하고 싶을 때, 모든 일반적인 포트를 스캔하는 대신 유용합니다.

Nmap 의 -p 옵션을 사용하면 스캔할 정확한 포트를 지정할 수 있습니다. 쉼표로 구분된 개별 포트, 포트 범위 또는 둘의 조합을 지정할 수 있습니다. 이 경우 127.0.0.1의 포트 2222, 8080, 2121을 스캔합니다. 이들은 실습 환경의 초기화 스크립트에서 설정된 사용자 정의 TCP 서비스입니다.

  • 포트 2222는 SSH 서비스를 실행하도록 구성되어 있습니다.
  • 포트 8080은 Nginx 웹 서버를 실행하도록 구성되어 있습니다.
  • 포트 2121은 FTP 서비스를 실행하도록 구성되어 있습니다.
  1. Xfce 터미널에 있는지 확인합니다.

  2. 다음 명령어를 실행합니다.

    sudo nmap -p 2222,8080,2121 127.0.0.1

    이 명령은 Nmap 에 IP 주소 127.0.0.1의 포트 2222, 8080, 2121만 스캔하도록 지시합니다 (-p 2222,8080,2121). sudo가 사용되므로 Nmap 은 기본 SYN 스캔 방법을 사용합니다. 비밀번호를 요청하면 Enter 키를 누릅니다.

  3. 출력을 확인합니다. 지정된 세 포트 모두 open으로 보고되는 것을 볼 수 있습니다.

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000028s latency).
    
    PORT     STATE SERVICE
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

    출력은 지정된 포트의 상태를 확인합니다. open은 Nmap 이 SYN/ACK 패킷을 받았으며, 포트가 연결을 활발히 수신 대기하고 있음을 나타냅니다.

nmap -p 1-9000 127.0.0.1 명령어로 포트 범위 스캔

이 단계에서는 Nmap 을 사용하여 대상 시스템의 포트 범위를 스캔하는 방법을 배웁니다. 이는 특정 숫자 범위 내의 모든 열린 포트를 식별하여 비표준 포트에서 실행 중인 서비스를 발견하는 데 유용합니다.

이전 단계에서 배운 것처럼 Nmap 의 -p 옵션을 사용하여 포트를 지정할 수 있습니다. 포트 범위를 스캔하려면 시작-끝 구문을 사용합니다. 여기서 시작은 시작 포트 번호이고 은 끝 포트 번호입니다. 이 경우 127.0.0.1의 포트 1부터 9000까지 스캔합니다. 이 범위는 실습 환경에서 설정된 사용자 정의 서비스 (2121, 2222, 8080) 를 포함하도록 선택되었습니다.

  1. Xfce 터미널에 있는지 확인합니다.

  2. 다음 명령어를 실행합니다.

    sudo nmap -p 1-9000 127.0.0.1

    이 명령은 Nmap 에 IP 주소 127.0.0.1의 포트 1부터 9000까지 스캔하도록 지시합니다. Nmap 은 기본 SYN 스캔 방법을 사용합니다. 비밀번호를 요청하면 Enter 키를 누릅니다.

  3. 출력을 확인합니다. 지정된 범위 내의 모든 열린 포트 목록이 표시됩니다. 이는 확인해야 할 포트 수가 많기 때문에 특정 포트를 스캔하는 것보다 시간이 더 오래 걸릴 수 있습니다.

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000020s latency).
    Not shown: 8992 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    953/tcp  open  rndc
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    3002/tcp open  exlm-agent
    5353/tcp open  mdns
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds

    출력은 로컬 머신의 1-9000 범위 내 포트의 상태를 보여줍니다. SSH(22), DNS 관련 서비스 (953, 5353) 및 추가 서비스 (3001, 3002) 와 함께 사용자 정의 포트 (2121, 2222, 8080) 가 open으로 표시됩니다. Not shown: 8992 closed ports는 Nmap 이 대규모 범위를 스캔할 때 기본적으로 open 또는 filtered 포트만 표시함을 나타냅니다.

nmap --top-ports 10 127.0.0.1 명령어로 상위 포트 스캔

이 단계에서는 Nmap 의 --top-ports 옵션을 사용하여 대상 시스템의 가장 일반적인 포트를 스캔하는 방법을 배웁니다. 이는 모든 65535 개의 가능한 포트를 스캔하지 않고도 호스트에서 실행 중인 가장 가능성이 높은 서비스를 신속하게 식별하는 데 유용합니다. Nmap 은 통계 데이터에서 컴파일된 가장 자주 사용되는 포트의 내부 목록을 유지합니다.

--top-ports 옵션은 Nmap 에 가장 일반적인 포트의 지정된 수를 스캔하도록 지시합니다. 예를 들어, --top-ports 10은 10 개의 가장 일반적인 TCP 포트를 스캔합니다.

이 경우 127.0.0.1의 상위 10 개의 가장 일반적인 포트를 스캔합니다.

  1. Xfce 터미널에 있는지 확인합니다.

  2. 다음 명령어를 실행합니다.

    sudo nmap --top-ports 10 127.0.0.1

    이 명령은 Nmap 에 IP 주소 127.0.0.1의 상위 10 개의 가장 일반적인 포트 (--top-ports 10) 를 스캔하도록 지시합니다. Nmap 은 기본 SYN 스캔 방법을 사용합니다. 비밀번호를 요청하면 Enter 키를 누릅니다.

  3. 출력을 확인합니다. 로컬 머신의 상위 10 개 포트의 상태가 표시됩니다.

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000010s latency).
    
    PORT     STATE  SERVICE
    21/tcp   closed ftp
    22/tcp   open   ssh
    23/tcp   closed telnet
    25/tcp   closed smtp
    80/tcp   closed http
    110/tcp  closed pop3
    139/tcp  closed netbios-ssn
    443/tcp  closed https
    445/tcp  closed microsoft-ds
    3389/tcp closed ms-wbt-server
    
    Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

    출력은 상위 10 개의 가장 일반적인 포트의 상태를 보여줍니다. 8080, 2121, 2222 와 같은 일부 사용자 정의 포트가 이 목록에 없는 것을 알 수 있습니다. 이는 전 세계적으로 가장 일반적인 상위 10 개 포트 중 하나가 아니기 때문이며, 오히려 우리 실습 환경에 특정한 포트이기 때문입니다. 이는 --top-ports가 효율적이지만 덜 일반적이지만 여전히 중요한 서비스를 놓칠 수 있음을 보여줍니다.

요약

이 실습에서 Nmap 을 사용하여 다양한 포트 스캔을 수행하는 방법을 배웠습니다. 127.0.0.1에서 -sT 옵션을 사용하여 TCP 연결 스캔을 수행하고, 관련된 전체 TCP 3-way 핸드셰이크를 이해했습니다. 또한 127.0.0.1에서 -sS를 사용하여 SYN 스캔을 실행했는데, 이는 더 은밀한 반열린 스캔입니다. -p 2222,8080,2121을 사용하여 특정 포트를 스캔하고 -p 1-9000을 사용하여 127.0.0.1에서 더 넓은 포트 범위를 스캔하는 연습을 했습니다. 마지막으로 --top-ports 10을 사용하여 127.0.0.1에서 가장 일반적인 포트를 효율적으로 스캔하는 방법을 배웠습니다. 이러한 실습을 통해 네트워크 정찰을 위한 다양한 스캔 유형을 이해하고 Nmap 출력을 해석하는 실질적인 경험을 얻었습니다.