Linux ETC

nmap 사용법

2008.05.15 01:57

sylee 조회 수:29306


Nmap(Network Mapper)은 네트워크 보안을 위한 유틸리티로, 대규모 네트워크를 고속으로 스캔하는 도구이다.
Nmap은 raw IP 패킷을 사용하여 네트워크에 어느 호스트가 살아있고, 그들이 어떠한 서비스(포트)를 제공하며, 운영체제(OS 버전)가 무엇이며, filter/firewall의 패킷 타입이 무엇인지 등 네트워크의 수많은 특징들을 점검할 수 있다.

[사용방법]
nmap [Scan Type(s)] [Options] <host or net>

<Scan Type>
-sT
TCP connect() scan : TCP scanning의 가장 기초적인 형태로 connect() 함수를 사용해서 모든 포트에 대해 스캔하는 방식이다. 만약 포트가 listening 상태라면 connect()는 성공할 것이고, 그렇지 않으면 reachable 되지 않는다.

-sS
TCP SYN scan : full TCP 접속을 하지 않으므로 "half-open" 스캐닝이라 한다. 하나의 SYN 패킷을 보내어 SYN|ACK 응답이 오면 그 포트는 listening 상태임을 나타내며, RST 응답이 오면 non-listener임을 나타낸다.

-sF
-sX
-sN
Stealth FIN, Xmas Tree, Null scan : 이들은 SYN 패킷을 막아놓은 방화벽이나 패킷 필터 또는 Synlogger와 Courtney 같은 스캔을 탐지하는 프로그램들을 무사히 통과할 수 있다. open 포트로 FIN 패킷을 보내면 이 패킷을 무시하고, closed 포트로 보내면 RST 패킷이 온다. 이들 스캔은 주로 유닉스계열 OS에서만 사용 가능하며, 루트권한이 필요하다.

-sP
Ping scanning : 네트워크의 어느 호스트가 살아있는지를 알고 싶을 때 사용한다. nmap은 명시한 네트워크의 모든 IP 주소로 ICMP echo request packet을 보내어 이것을 행한다. 호스트가 살아 있다면 응답을 보낸다. 하지만 microsoft.com 같은 일부 사이트는 echo requst packet을 방해한다. 따라서 nmap은 포트번호 80(default) 으로 TCP ack packet을 보낸다. 만약 RST back을 받았다면 이 시스템은 살아있는 것이다.

-sU
UDP scans : 이것은 호스트의 어떠한 UDP 포트가 open 되어 있는지를 결정하기 위해 사용된다. 이 기술은 시스템의 각 포트에 0 바이트의 udp 패킷을 보낸다. 만일 ICMP port unreachable 메시지를 받았다면 이 포트는 closed 상태이며, 다른 경우라 open 상태라고 할 수 있다. 일부에서는 UDP 스캐닝이 무의미하다라고 말한다. 하지만 최근의 Solaris rcpbind hole을 보면 Rpcbind가 32770 이상의 정의되지 않은 UDP 포트에서 발견되고 있다. 이것은 111 포트가 방화벽에서 차단되어지는 것과는 별개의 문제이다. 따라서 UDP 스캐너로 30,000번 이상의 high 포트들이 listening 상태인지를 점검해봐야 한다. 이것은 루트만이 실행가능하다.

-sA
ACK scan : 이 방법은 방화벽의 룰셋을 정밀하게 계획하기 위해 사용된다. 특히 방화벽이 stateful한지 아니면 단순히 들어오는 SYN 패킷을 차단하는 패킷필터인지를 점검하는데 도움이 된다. 포트에 ACK 패킷을 보내어 RST 응답을 받으면 그 포트는 "unfilterd"이며, 아무런 응답이 없으면 "filtered" 이다. nmap은 "unfilterd" 포트는 프린트하지 않는다.

-sW
Window scan : TCP Window 크기의 변칙 때문에 filtered/nonfiltered 뿐만 아니라 open 포트도 스캔할 수 있다는 점을 제외하면 ACK scan과 매우 유사하다.

-sR
RPC scan : 이 스캔 방법은 nmap의 다양한 포트 스캔 방법을 조합해서 이루어진다. 이것은 열려져있는 TCP/UDP 포트에 대해 그들이 RPC 포트인지, 서비스를 제공하는 프로그램은 무엇이며, 버전은 무엇인지 등을 확인하기 위해 SunRPC program NULL commands를 계속 보내게 된다.

<Options>
  -P0
이것은 방화벽에 의해 ICMP echo requests (or responses)를 막아놓은 네트워크의 스캔을 가능하게 한다. ping을 막아놓은 호스트를 스캔하기 위해서는 -P0 나 -PT80을 사용해야 한다.

-PT
어느 호스트가 살아 있는지를 알기 위해 TCP "ping"을 사용한다.

-PS
이 옵션은 루트사용자를 위해 ACK 패킷 대신에 SYN (connection request)을 사용한다.

-PI
이 옵션은 오리지날 ping (ICMP echo request) packet을 사용한다.

-O
이것은 TCP/IP fingerprinting을 통해 리모트 호스트를 확인하는데 사용된다

-p
<port ranges>
점검하고자 하는 포트를 지정하는 옵션이다.

-F
nmap-services에 나열된 포트만 스캔한다.


<예제1>
# nmap -v 192.168.100.10

Nmap은 타겟을 설정함에 있어 매우 유연한 동작을 보인다. 하나의 호스트 스캔은 물론이고 연속되지 않은 여러 개의 호스트 스캔, 연속되는 여러 개의 호스트 스캔, 클래스 단위의 스캔 등 다양하게 타겟을 설정할 수 있다.

-연속되지 않은 여러 개의 호스트를 스캔할 경우 : 호스트 사이에 "," 입력
-연속되는 여러 개의 호스트를 스캔할 경우 : 첫 번째 호스트와 마지막 호스트 사이에 "-" 입력
-클래스 단위 스캔 : "/mask" 이용( B class : /16, C class : /24 ), "*" 이용, "-" 이용

예로 B class를 스캔하고 할 때는 172.16.0.0/16 또는 172.16.*.* 또는 172.16.0-255.0-255로 정의해 주면 된다.

<예제2> 호스트가 살아있는지를 알기 위해서는 -sP를 사용한다.
# nmap -sP 192.168.100.101


번호 제목 글쓴이 날짜 조회 수
386 kornet SMTP 서비스 종료에 따른 구글 SMTP 활용 방안 file 호스트웨이 2016.04.28 9009
385 extundelete tool을 이용하여 삭제된 파일 복구하기 호스트웨이 2016.02.29 12504
384 Login 실패시 계정 잠그기 및 PAM 설정 file 호스트웨이 2016.01.04 30141
383 fdisk 명령어를 이용하여 수동으로 파티션 나누기 file 호스트웨이 2015.11.30 57713
382 SFTP 퍼미션 조정 및 chroot 설정으로 상위폴더 접근 제한하기 호스트웨이 2015.10.29 31746
381 리눅스 CD로 손상된 파일 복구하기 호스트웨이 2015.09.29 13083
380 find 명령을 통한 소유자, 백도어, 파일 찾기 호스트웨이 2015.09.29 10479
379 Linux 설치된 OS 커널의 Bit확인 호스트웨이 2015.09.26 10331
378 SYN_Flooding 공격 막기 호스트웨이 2015.09.25 6554
377 Linux ssh 무작위 공격 방어하기 - fail2ban 호스트웨이 2015.09.24 9137
376 사용 가능한 쉘 확인 및 변경법 호스트웨이 2015.09.24 10845
375 삭제된 파일 복구 - 2 호스트웨이 2015.09.24 7892
374 프로그램의 사용 메모리 확인 호스트웨이 2015.09.23 7389
373 사용하지 않는 데몬 끄기 호스트웨이 2015.09.23 7531
372 리눅스 서버 보안 관련 설정 호스트웨이 2015.09.23 8781
371 서버시간 매시간마다 동기화 설정 호스트웨이 2015.09.23 11712
370 리눅스 상에서 메모리 사용 현황 확인하기 호스트웨이 2015.09.23 6994
369 터미널 접속 시 한글이 깨질 때 호스트웨이 2015.09.23 6973
368 서버 계정을 다른서버로 이전하기 호스트웨이 2015.09.23 11751
367 동일 네트워크의 중복 IP검색 호스트웨이 2015.09.23 10724