http://www.ibm.com/developerworks/kr/library/tutorial/au-unixnetworkanalysis/section2.html
UNIX 네트워크 분석
UNIX 시스템 네트워크 구성 이해하기 요약: 여러 가지 도구를 사용하여 네트워크에 대한 정보를 찾아볼 수 있습니다. 네트워크 레이아웃, 패킷의 이동 위치, 사용자가 수행 중인 작업 등을 확인하려면 네트워크 레이아웃과 네트워크에서 수행 중인 작업을 보여 주는 다양한 도구를 사용해야 합니다. 이 튜토리얼에서는 UNIX® 네트워크의 트래픽과 컨텐츠를 모니터링하는 기술과 네트워크의 문제점을 파악하여 진단하는 방법에 대해 설명합니다.
원문 게재일: 2009 년 5 월 05 일
난이도: 중급
PDF: A4 and Letter (61 KB | 22 pages)Get Adobe® Reader®
페이지뷰: 4199 회
의견: 0 (의견 추가)
난이도: 중급
PDF: A4 and Letter (61 KB | 22 pages)Get Adobe® Reader®
페이지뷰: 4199 회
의견: 0 (의견 추가)
이 튜토리얼은 다양한 장치에서 실행되고 있는 서비스 및 시스템을 포함한 네트워크 구조 및 구성에 대한 정보를 효율적으로 검색 및 확인할 수 있는 방법을 찾고 있는 UNIX 시스템 관리자를 대상으로 한다. 이 튜토리얼을 이해하려면 UNIX 운영 체제, 네트워크 및 IP(Internet protocol)의 작동 방법에 대한 기본 지식이 있어야 한다.
이 튜토리얼의 정보
새 UNIX 시스템뿐 아니라 기존 UNIX 시스템의 복잡한 작동 방법을 이해하는 데 있어서 핵심이 되는 부분은 네트워크 구성이다. 문제점을 올바르게 식별하고 잠재적인 문제점을 예방하기 위해서는 네트워크의 여러 가지 특성을 숙지하고 있어야 한다. 몇 가지 기본적인 도구와 명령을 사용하여 단일 시스템의 구성에 대한 여러 가지 정보를 확인할 수 있으며, 이 기본적인 이해를 바탕으로 네트워크의 나머지 부분에 대한 구성도 이해할 수 있다. 또한 몇 가지 추가 도구를 사용하여 네트워크 내의 추가 시스템 및 서비스에 대한 정보를 확인함으로써 이해의 지평을 넓힐 수 있다.
이 튜토리얼에서는 UNIX 환경 내에서 몇 가지 기본 도구를 사용하여 시스템의 구성 정보를 확인한다. 이러한 도구와 출력되는 정보를 이해하게 되면 시스템 네트워크 구성과 네트워크의 작동 방법에 이해의 깊이도 깊어질 것이다. 또한 더 넓은 네트워크를 검색하여 네트워크의 세부 정보, 잠재적 보안 문제 및 문제가 발생했을 때 문제점을 식별 및 진단하는 데 도움이 되는 주요 정보를 제공할 수 있는 도구 및 솔루션에 대해서도 살펴본다.
호스트의 네트워크 이해
네트워크를 이해하는 과정의 첫 번째 단계는 현재 사용 중인 시스템의 네트워크 구성을 이해하는 것이다. 이 단계에서는 현재 호스트의 IP 주소, DNS 구성 및 현재 호스트에서 연결하여 통신할 수 있는 시스템 등에 대한 여러 가지 기본적인 정보를 확인하게 된다.
구성 정보 찾기
작업 중인 시스템의 현재 구성을 보면 사용자의 환경에 대한 기본 정보를 파악할 수 있다. 우선 현재 시스템의 IP 주소와 네트워크 마스크를 확인할 수 있다. 이러한 두 값이 있으면 현재 시스템의 주소뿐만 아니라 현재 시스템에서 직접(예를 들어, 라우터를 사용하지 않고) 연결할 수 있는 네트워크 상의 다른 시스템을 확인할 수 있다.
IP 주소를 확인하기 전에 hostname 명령을 사용하여 시스템의 호스트 이름을 가져온다(Listing 1 참조).
Listing 1. 호스트 이름 가져오기
$ hostname sulaco |
-a
옵션을 지정하고서 ifconfig 명령을 실행하면 사용자의 시스템에 구성되어 있는 모든 네트워크 장치의 현재 구성 정보가 표시된다. 예를 들어, Listing 2에서는 Solaris 시스템에서 실행한 ifconfig 명령의 출력을 보여 준다. Listing 2. Solaris에서 실행한 ipconfig의 출력
$ ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 pcn0: flags=201004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4,CoS> mtu 1500 index 2 inet 192.168.1.25 netmask fffffc00 broadcast 192.168.3.255 lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1 inet6 ::1/128 pcn0: flags=202004841<UP,RUNNING,MULTICAST,DHCP,IPv6,CoS> mtu 1500 index 2 inet6 fe80::20c:29ff:fe7f:dc5/10 |
이 출력을 보면 루프백 장치인 lo0이 있고, 이 장치의 주소가 로컬 호스트의 일반적인 주소인 127.0.0.1이라는 것을 알 수 있다. 또한 이 장치에 동등한 IPv6 주소도 있다는 것을 알 수 있다.
pcn0 장치는 네트워크 주소 192.168.1.25와 네트워크 마스크 fffffc00(255.255.252.0에 해당)으로 구성되어 있다. 또한 이 장치의 주소는 DHCP를 사용하여 설정되었다는 것을 알 수 있다(DHCP 플래그 목록 참조).
특히 네트워크 마스크가 중요하다. 왜냐하면 네트워크 마스크만 있으면 사용자가 직접 연결되어 있는 네트워크의 크기(등록된 IP 주소의 관점에서)를 확인할 수 있기 때문이다. 이 장치의 네트워크 마스크인 255.255.252.0은 클래스 C 주소가 4개임을 나타낸다(256(최대 호스트 수) - 252(마스킹된 호스트 수) = 4).
네트워크 마스크와 구성된 IP 주소를 결합하여 로컬 네트워크에 있는 IP 주소의 범위를 추측할 수 있다. 일반적으로 IP 블록은 전체 그룹별로 차례대로 분할되기 때문에 이 네트워크의 IP 주소 범위는 192.168.0.0부터 192.168.3.255까지이다. 4개의 클래스 C 주소로 구성된 네트워크 마스크를 사용하면 일반적으로 전체 범위(192.168.0.0-192.168.255.255)가 동일한 블록들로 분할되므로 주소 접두어가 192.168.1.x인 주소는 4개의 주소 블록 중 첫 번째 블록에 있다.
이 정보(및 세부 사항)는 운영 체제마다 각기 다른 방식으로 표시된다. Listing 3에서는 Linux® 시스템의 출력을 보여 준다.
Listing 3. Linux 시스템의 출력
eth0 Link encap:Ethernet HWaddr 00:1d:60:1b:9a:2d inet addr:192.168.0.2 Bcast:192.168.3.255 Mask:255.255.252.0 inet6 addr: fe80::21d:60ff:fe1b:9a2d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2371085881 errors:36 dropped:0 overruns:0 frame:36 TX packets:2861233776 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:913269364222 (850.5 GiB) TX bytes:3093820025338 (2.8 TiB) Interrupt:23 Base address:0x4000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:279755697 errors:0 dropped:0 overruns:0 frame:0 TX packets:279755697 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:388038389807 (361.3 GiB) TX bytes:388038389807 (361.3 GiB) |
Listing 4에서는 Mac OS X™ 시스템의 출력을 보여 준다.
Listing 4. Mac OS X 시스템의 출력
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 stf0: flags=0<> mtu 1280 en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.101 netmask 0xfffffc00 broadcast 192.168.3.255 ether 00:16:cb:a0:3b:cb media: autoselect (1000baseT <full-duplex,flow-control>) status: active supported media: autoselect 10baseT/UTP <half-duplex> 10baseT/UTP <full-duplex> 10baseT/UTP <full-duplex,hw-loopback> 10baseT/UTP <full-duplex,flow-control> 100baseTX <half-duplex> 100baseTX <full-duplex> 100baseTX <full-duplex,hw-loopback> 100baseTX <full-duplex,flow-control> 1000baseT <full-duplex> 1000baseT <full-duplex,hw-loopback> 1000baseT <full-duplex,flow-control> none fw0: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 2030 lladdr 00:17:f2:ff:fe:7b:84:d6 media: autoselect <full-duplex> status: inactive supported media: autoselect <full-duplex> en1: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500 ether 00:17:f2:9b:3d:38 media: autoselect (<unknown type>) supported media: autoselect en5: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::21c:42ff:fe00:8%en5 prefixlen 64 scopeid 0x7 inet 10.211.55.2 netmask 0xffffff00 broadcast 10.211.55.255 ether 00:1c:42:00:00:08 media: autoselect status: active supported media: autoselect en6: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::21c:42ff:fe00:9%en6 prefixlen 64 scopeid 0x8 inet 10.37.129.2 netmask 0xffffff00 broadcast 10.37.129.255 ether 00:1c:42:00:00:09 media: autoselect status: active supported media: autoselect |
일반적으로 모든 운영 체제의 출력에서 연결된 네트워크 장치의 인터넷 주소와 네트워크 마스크를 볼 수 있다. 여러 개의 네트워크 장치가 있는 경우에는 각 장치에 대한 정보가 출력에 표시되며 사용자는 단 하나의 시스템에서 폭넓은 범위의 다양한 네트워크 및 시스템에 연결할 수 있다.
이름 확인 서비스 찾기
현재 시스템의 구성을 확인하는 과정의 다음 단계는 다른 시스템의 서비스에 액세스할 때 사용자의 시스템 이름 및 도메인 이름을 IP 주소로 변환하는 이름 서비스 시스템의 구성과 관련된다.
대부분의 시스템에서 이 구성은 /etc/nsswitch.conf 파일을 통해 설정하며, 이 파일에는 다양한 이름 서비스(호스트, 사용자 등)의 목록과 이름 확인에 사용할 다양한 서비스(DNS, NIS 또는 로컬 파일)의 순서가 들어 있다. Listing 5에서 이 파일의 예를 볼 수 있다.
Listing 5. 이름 서비스 시스템 확인하기
passwd: files group: files hosts: files dns ipnodes: files dns networks: files protocols: files rpc: files ethers: files netmasks: files bootparams: files publickey: files netgroup: files automount: files aliases: files services: files printers: user files auth_attr: files prof_attr: files project: files tnrhtp: files tnrhdb: files |
예를 들어, Listing 5에서 호스트 이름 정보는 시스템에 있는 로컬 파일(예: /etc/hosts)과 DNS(Domain Name System)를 차례대로 검색하여 확인한다.
DNS가 구성되어 있는 경우에는 /etc/resolv.conf 파일에서 이름을 IP 주소로 변환하는 데 사용 중인 시스템을 확인할 수 있다. Listing 6에서는 이 파일의 예제를 보여 준다.
Listing 6. 이름을 IP 주소로 변환하는 데 사용 중인 시스템
domain example.pri nameserver 192.168.0.2 nameserver 192.168.0.3 |
이 정보는 해당 시스템의 정보를 직접 쿼리하려는 경우에 유용하게 사용할 수 있다. dig 및 nslookup과 같은 도구를 사용하여 이름 및 IP 주소의 이름 서비스 및 확인에 대한 정보를 추출할 수 있다.
경로 검사하기
네트워크의 외부에 있는(즉, 현재 IP 주소와 비교하여 네트워크 마스크의 범위에서 벗어난) 호스트는 다른 시스템으로 전달되기 위해 라우터로 전송된다. 라우터는 부서 간, 다양한 물리적 사이트 및 인터넷과 같은 공용 외부 사이트를 포함한 네트워크의 모든 레벨에서 사용할 수 있다.
사용자의 시스템에서 '로컬' 네트워크의 외부에 있는 시스템과 통신하려는 경우 netstat 명령을 사용하여 연결된 시스템 또는 라우터를 구별할 수 있다. 예를 들어, 아래 Listing 7에서는 Solaris 시스템에서 실행한 netstat 명령의 출력을 보여 준다.
Listing 7. netstat 명령
$ netstat -r Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ---------- --------- default voyager.example.pri UG 1 139 pcn0 192.168.0.0 solaris2.example.pri U 1 447 pcn0 solaris2 solaris2 UH 1 35 lo0 Routing Table: IPv6 Destination/Mask Gateway Flags Ref Use If --------------------------- --------------------------- ----- --- ------- ----- fe80::/10 fe80::20c:29ff:fe7f:dc5 U 1 0 pcn0 solaris2 solaris2 UH 1 0 lo0 |
기본 경로는 현재 네트워크의 외부에 있거나 특정 IP 주소 또는 IP 주소 범위의 다른 경로에서 아직 처리되지 않은 패킷을 라우팅하는 데 사용되는 게이트웨이(라우터)를 보여 준다.
현재 이름 서비스가 작동되지 않거나 올바른 정보를 리턴하지 않는 경우에는 이 정보를 확인할 필요가 있으며 -n 옵션을 지정하여 이름 대신 IP 주소를 사용하여 이 정보를 표시할 수 있다.
지원되는 서비스 검사하기
netstat 명령은 현재 호스트에서 공유 또는 노출하고 있는 서비스를 확인할 때도 사용할 수 있다. 이러한 서비스에는 DNS, NFS, 웹 서비스 및 기타 정보를 포함한 모든 네트워크 서비스가 포함된다. 표시된 정보는 클라이언트 연결을 대기하기 위해 '수신 중' 상태로 열려 있는 포트 또는 이미 열려 있는 상태에서 클라이언트와 통신 중인 포트를 기반으로 한다.
이 정보를 통해 서비스가 실행 중인지 여부를 확인할 수 있을 뿐 아니라 표준 보안 검사의 일환으로 시스템이 공유되고 있거나 필요 이상의 위험에 노출되어 있는지 여부를 확인할 수 있다.
Listing 8에서는 이 명령의 출력 예제를 볼 수 있다. 이 예제에서는
-a
를 사용하여 새 연결에 대해 설정된 상태로 수신 중인 모든 열려 있는 포트 및 서비스를 표시한다. 기본적으로 netstat 명령은 열려 있는 UNIX 도메인 소켓을 보여 주며 이러한 소켓은 현재 시스템에만 액세스할 수 있다. 간단히 설명하기 위해 이 출력 예제에서는 이들 소켓을 생략했다. Listing 8.
-a
를 사용한 출력$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:imaps *:* LISTEN tcp 0 0 *:nfs *:* LISTEN tcp 0 0 *:vmware-authd *:* LISTEN tcp 0 0 localhost:10024 *:* LISTEN tcp 0 0 localhost:10025 *:* LISTEN tcp 0 0 *:mysql *:* LISTEN tcp 0 0 *:imap *:* LISTEN tcp 0 0 localhost:783 *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 bear.example.pri:http *:* LISTEN tcp 0 0 *:cisco-sccp *:* LISTEN tcp 0 0 *:47506 *:* LISTEN tcp 0 0 *:34452 *:* LISTEN tcp 0 0 172.16.217.1:domain *:* LISTEN tcp 0 0 192.168.92.1:domain *:* LISTEN tcp 0 0 bear.example.pri:domain *:* LISTEN tcp 0 0 localhost:domain *:* LISTEN tcp 0 0 *:53941 *:* LISTEN tcp 0 0 *:3128 *:* LISTEN tcp 0 0 localhost:rndc *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 bear.example.pri:imap sulaco.example.p:65452 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65459 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65412 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65417 ESTABLISHED tcp 0 0 bear.example.pri:mysq bear.example.pri:35475 TIME_WAIT tcp 0 0 bear.example.pri:http sulaco.example.p:49603 FIN_WAIT2 tcp 0 0 bear.example.pri:nfs sulaco.example.p:49552 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65433 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65431 ESTABLISHED tcp 1 0 bear.example.pri:nfs sulaco.example.p:51900 CLOSE_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65415 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65475 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65472 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65429 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65430 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65438 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65443 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65418 ESTABLISHED tcp 0 0 bear.example.pri:nfs narcissus.exampl:62968 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65448 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65423 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65468 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65445 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65476 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65453 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65456 ESTABLISHED tcp 1 0 bear.example.pri:nfs sulaco.example.p:59172 CLOSE_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65416 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65439 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65441 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65446 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65470 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65450 ESTABLISHED tcp 0 0 bear.example.pri:nfs sulaco.example.p:65320 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65465 ESTABLISHED tcp 0 0 bear.example.pri:36230 solaris2.vmbear.mcs:ssh ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65421 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65464 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65474 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:64955 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65473 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65461 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65454 ESTABLISHED tcp 0 0 bear.example.pri:http sulaco.example.p:49608 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65471 ESTABLISHED tcp 0 0 localhost:50123 localhost:ssh ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65420 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65466 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65463 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65451 ESTABLISHED tcp 0 0 bear.example.pri:35471 bear.example.pri:mysql TIME_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65457 ESTABLISHED tcp 1 0 bear.example.pri:nfs sulaco.example.p:53877 CLOSE_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65432 ESTABLISHED tcp 0 0 bear.example.pri:mysql bear.example.pri:35470 TIME_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65467 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65414 ESTABLISHED tcp 0 0 bear.example.pri:50112 bear.example.pri:imap TIME_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65462 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65460 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65469 ESTABLISHED tcp 0 0 bear.example.pri:imap sulaco.example.p:65422 ESTABLISHED tcp 0 0 bear.example.pri:50110 bear.example.pri:imap TIME_WAIT tcp 0 0 bear.example.pri:50111 bear.example.pri:imap TIME_WAIT tcp 0 0 bear.example.pri:imap sulaco.example.p:65442 ESTABLISHED tcp6 0 0 [::]:imaps [::]:* LISTEN tcp6 0 0 [::]:11211 [::]:* LISTEN tcp6 0 0 [::]:imap [::]:* LISTEN tcp6 0 0 [::]:cisco-sccp [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:rndc [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN tcp6 0 0 bear.example.pri:ssh sulaco.example.p:52786 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:56220 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:63895 ESTABLISHED tcp6 0 0 localhost:ssh localhost:50123 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:60914 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:64669 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:56053 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:52268 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:49528 ESTABLISHED tcp6 0 0 bear.example.pri:ssh sulaco.example.p:65408 ESTABLISHED udp 0 0 *:nfs *:* udp 0 0 *:42498 *:* udp 0 0 *:54680 *:* udp 0 0 172.16.217.1:domain *:* udp 0 0 192.168.92.1:domain *:* udp 0 0 bear.example.p:domain *:* udp 0 0 localhost:domain *:* udp 0 0 *:45495 *:* udp 0 0 *:icpv2 *:* udp 0 0 *:bootps *:* udp 0 0 *:964 *:* udp 0 0 *:11211 *:* udp 0 0 *:sunrpc *:* udp 0 0 *:50042 *:* raw 0 0 *:icmp *:* 7 |
이 출력에서 볼 수 있듯이 이 시스템에서는 매우 많은 작업이 수행되고 있다. 세 번째 열은 열려 있거나 수신 중인 각 연결에 대한 호스트 이름과 포트(콜론으로 구분)를 보여 준다. TCP 또는 UDP 서비스 번호가 알려진 포트 번호(/etc/services 파일 내에 정의된 포트 번호)와 일치하면 해당 서비스 이름이 출력에 표시된다. 호스트의 경우 호스트 이름, 대체 IP 주소 또는 '*' 기호가 표시된다. 별표는 해당 서비스 및 포트가 모든 IP 주소에서 열려 있고 수신 중임을 나타낸다.
예를 들어, Listing 9의 출력에서 시스템이 NFS를 지원하도록 구성되어 있고 열린(설정된) 연결이 있음을 알 수 있다.
Listing 9. NFS를 지원하도록 구성된 시스템
$ netstat -a|grep nfs tcp 0 0 *:nfs *:* LISTEN tcp 1 0 bear.example.pri:nfs sulaco.example.p:51900 CLOSE_WAIT tcp 0 0 bear.example.pri:nfs narcissus.example.p:62968 ESTABLISHED tcp 1 0 bear.example.pri:nfs sulaco.example.p:59172 CLOSE_WAIT tcp 0 0 bear.example.pri:nfs sulaco.example.p:65320 ESTABLISHED tcp 1 0 bear.example.pri:nfs sulaco.example.p:53877 CLOSE_WAIT udp 0 0 *:nfs *:* |
또한 이 출력에서는 현재 시스템과 통신 중인 시스템을 확인할 수도 있다. 예를 들어, 다섯 번째 열을 정렬한 다음 목록에서 중복된 항목을 제거하여 현재 시스템에 연결된 시스템 목록을 추출할 수 있다(Lisiting 10 참조).
Listing 10. 연결된 시스템 목록 추출하기
$ netstat -a|egrep 'tcp|udp'|grep ESTABLISHED|awk '{ print $5; }'|cut -d: -f1|sort|uniq localhost narcissus.mcslp.p nautilus.wireless polarbear.wireles solaris2.vmbear.mcs sulaco.mcslp.pri |
이 기능은 인식하지 못하고 있거나 원하지 않는 사용자 또는 컴퓨터가 현재 시스템에 연결되어 있는지 확인할 때 유용하게 사용할 수 있다.
이러한 다른 시스템에 대한 정보를 확인하려면 먼저 사용자의 네트워크에 있는 다른 컴퓨터를 검색해야 한다.
다른 호스트에 대한 정보 찾기
이제 로컬 시스템에 대한 기본 정보를 알고 있으므로 이제 네트워크의 다른 시스템도 검색하여 사용 가능한 시스템과 각 시스템에서 제공하는 서비스를 확인할 수 있다. 올바른 도구를 사용하여 이러한 시스템에서 실행 중인 운영 체제와 공유하고 있는 서비스까지도 확인할 수 있다.
호스트 검사하기
원격 시스템을 가장 쉽고 명확하게 검사하는 방법은 ping 도구를 사용하여 특정 호스트가 실행 중이고 사용 가능한지 여부를 검사하는 것이다. 매우 단순한 작업을 수행하는 ping 도구는 응답을 요청하는 원격 호스트에 패킷을 보낸 후 응답이 수신되면 시간 차이를 계산한다. 이렇게 패킷을 보내고 받는데 걸린 시간을 사용하여 현재 시스템과 대상 시스템의 거리를 표시할 수 있다.
예를 들어, 사용자의 네트워크에 있는 시스템에 대해 ping을 실행할 경우에는 ping 패킷에 대한 응답이 매우 빠르게 수신된다(Listing 11 참조).
Listing 11. 사용자의 네트워크에 있는 시스템에 대해 ping 실행하기
$ ping bear PING bear.mcslp.pri (192.168.0.2): 56 data bytes 64 bytes from 192.168.0.2: icmp_seq=0 ttl=64 time=0.154 ms 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.162 ms 64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.149 ms 64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.161 ms 64 bytes from 192.168.0.2: icmp_seq=4 ttl=64 time=0.162 ms 64 bytes from 192.168.0.2: icmp_seq=5 ttl=64 time=0.161 ms ^C --- bear.mcslp.pri ping statistics --- 6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.149/0.158/0.162/0.005 ms |
ping 도구는 구현 형태에 따라 각기 다른 방식으로 작동한다. Linux 및 Mac OS X의 경우 이 도구는 기본적으로 패킷을 지속적으로 보내면서 사용자가 Ctrl-C를 눌러서 애플리케이션을 종료할 때까지 응답을 기다린다.
Solaris™, AIX® 및 일부 기타 UNIX 운영 체제에서는 추가 인수 없이 ping 도구를 실행하면 원격 호스트가 응답했는지 여부만 표시된다(Listing 12 참조).
Listing 12. 기타 UNIX 운영 체제에서 추가 인수 없이 ping 실행하기
$ ping bear bear is alive |
더 긴 테스트를 수행하려면 Listing 13과 같이
-s
옵션을 사용한다. Listing 13.
-s
옵션을 사용하여 ping 실행하기$ ping -s bear PING bear: 56 data bytes 64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=0. time=0.288 ms 64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=1. time=0.247 ms 64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=2. time=0.208 ms 64 bytes from bear.mcslp.pri (192.168.0.2): icmp_seq=3. time=0.230 ms ^C ----bear PING Statistics---- 4 packets transmitted, 4 packets received, 0% packet loss round-trip (ms) min/avg/max/stddev = 0.208/0.243/0.288/0.034 |
각 행의 time 필드에는 각 패킷에 대한 속도와 지연 시간(응답이 수신되기 전까지의 지연 시간 및 활동 레벨을 나타내기도 함)이 표시된다. 출력을 중지하면 보내고 받은 패킷의 수와 시간 통계에 대한 요약 정보가 표시된다.
ping 패킷이 이동해야 하는 거리가 멀수록 원격 호스트의 응답 시간이 길어집니다. 예를 들어, 인터넷에 있는 공용 서버에 대해 ping을 실행할 경우에는 응답 패킷을 수신하는 데 걸린 시간이 상당히 커집니다(Listing 14 참조).
Listing 14. 인터넷에 있는 공용 서버에 대해 ping 실행하기
$ ping www.example.com PING www.example.com (67.205.21.169) 56(84) bytes of data. 64 bytes from mcslp.com (67.205.21.169): icmp_seq=1 ttl=44 time=193 ms 64 bytes from mcslp.com (67.205.21.169): icmp_seq=2 ttl=44 time=194 ms 64 bytes from mcslp.com (67.205.21.169): icmp_seq=3 ttl=44 time=197 ms 64 bytes from mcslp.com (67.205.21.169): icmp_seq=4 ttl=44 time=194 ms ^C --- www.example.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3039ms rtt min/avg/max/mdev = 193.737/195.120/197.123/1.353 ms |
인터넷 서비스에 연결하는 데 걸린 시간(193ms)과 로컬 호스트에 연결하는 데 걸린 시간(0.23ms)을 비교해 보자.
ping 도구를 사용하면 연결하려는 원격 호스트에 도달할 수 있는지 여부도 빠르게 확인할 수 있다. 존재하지 않는 호스트에 대해 ping을 실행하면 특정 오류가 리턴된다(Listing 15 참조).
Listing 15. 존재하지 않는 호스트에 대해 ping 실행하기
$ ping notinhere PING notinhere (192.168.0.110) 56(84) bytes of data. >From bear.mcslp.pri (192.168.0.2) icmp_seq=1 Destination Host Unreachable >From bear.mcslp.pri (192.168.0.2) icmp_seq=2 Destination Host Unreachable >From bear.mcslp.pri (192.168.0.2) icmp_seq=3 Destination Host Unreachable ^C --- notinhere ping statistics --- 5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4039ms |
ping 도구를 사용하려면 네트워크에 있는 다른 시스템에 대한 정보를 알아야 한다. 이제 이름이나 IP 주소를 사용하지 않고 네트워크에 있는 호스트를 확인하는 방법을 살펴보자.
네트워크에 있는 호스트 검색하기
이더넷 네트워크 시스템(및 기타 시스템) 내에서 네트워크의 모든 장치는 하드웨어 네트워크 장치와 연관된 고유 주소를 가지고 있다. MAC(Media Access Control) 번호는 네트워크 장치를 고유하게 식별하며 IP(Internet Protocol)와 같은 상위 레벨 프로토콜을 사용하여 MAC 주소와 호스트 이름을 연관시킬 수 있다.
MAC 주소는 운영 체제에서 패킷을 네트워크의 외부로 보낼 때(및 그 반대의 경우에) 사용된다. 패킷을 특정 호스트 이름으로 보낼 때 운영 체제에서는 호스트 이름을 MAC 주소로 변환하여 네트워크의 외부로 보낼 하드웨어(이더넷) 패킷을 생성한다.
ARP(Address Resolution Protocol)는 이 맵핑을 처리하는 프로토콜이며 arp 도구를 사용하여 현재 가지고 있는 호스트 및 해당 호스트 이름 또는 IP 주소에 대한 정보를 표시할 수 있다.
다른 시스템과 통신하려는 네트워크의 모든 시스템은 MAC 주소와 IP 주소로 구성된 패킷을 보내야 하므로 시스템의 ARP 캐시에 수집된 정보를 사용하여 네트워크에 있는 다른 시스템을 찾을 수 있다(Listing 16 참조).
Listing 16. arp 명령 사용하기
$ arp Address HWtype HWaddress Flags Mask Iface gendarme.mcslp.pri ether 00:1B:2F:F0:39:6A C eth0 narcissus.mcslp.pri ether 00:16:CB:85:2D:15 C eth0 solaris2.vmbear.mcslp.p ether 00:0C:29:7F:0D:C5 C eth0 nautilus.wireless.mcslp ether 00:17:F2:40:4D:1B C eth0 sulaco.mcslp.pri ether 00:16:CB:A0:3B:CB C eth0 |
기존 허브 구조 대신 최신 이더넷 스위치를 사용할 경우에는 arp의 출력 정보를 특정 호스트와 보내고 받은 패킷으로 제한할 수 있다. 서버에서 arp를 실행할 수 있다면 더 긴 목록의 정보를 볼 수도 있지만 이 방법을 사용할 수 없는 경우도 있다.
일부 네트워크 스위치에는 모든 패킷이 에코되고 다른 네트워크 장치에 대한 정보를 수집하여 네트워크 구조를 파악하는 데 사용할 수 있는 네트워크 관리 또는 모니터링 포트가 있다. 이 정보에 액세스할 수 없는 경우에는 다른 강력한 도구를 통해 네트워크에 있는 호스트를 찾아야 한다.
네트워크에 있는 다른 호스트 검색하기
nmap 도구는 네트워크에 대해 다양한 유형의 검사를 수행하여 다양한 레벨의 정보를 찾고 확인할 수 있는 유틸리티이다. 기본 레벨에서는 지정된 네트워크 내의 모든 호스트를 찾는 데 사용할 수 있다.
이 기사의 앞 부분에서 호스트의 현재 IP 주소 및 네트워크 마스크 정보를 가져오는 방법을 살펴보았다. 이 정보를 사용하여 네트워크의 모든 호스트를 찾는 데 필요한 nmap의 기본 검색 매개변수를 설정할 수 있다. 이 정보를 지정하려면 CIDR 형식의 주소를 사용해야 한다. CIDR 형식은 호스트의 IP 주소와 네트워크 마스크의 비트 수를 사용하여 네트워크의 범위를 결정한다.
예제 호스트에서 192.168.1.25는 IP 주소이고 네트워크 마스크는 255.255.252.0이다. 이는 22비트에 해당한다. 즉, 첫 번째 부분에 8비트, 두 번째 부분에 8비트 그리고 세 번째 부분에 6비트가 해당한다.
이 주소를 사용하여 nmap을 실행하면 범위 내의 모든 단일 IP 주소(예를 들어, 192.168.0.0과 192.168.3.255 사이의 모든 주소)에 대한 검색이 수행되고 응답하는 호스트가 확인된다.
표준 ping 프로토콜을 사용하는 테스트나 다른 네트워크 포트를 시도하는 강력한 테스트(ping 프로토콜을 사용할 수 없는 경우)를 포함한 여러 가지 테스트를 수행할 수 있다. 예를 들어, ping 테스트를 수행하면 Listing 17과 같은 호스트 목록이 표시된다.
Listing 17. nmap을 실행하여 IP 주소 범위 검색하기
$ nmap -sP 192.168.1.25/22 Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 15:59 GMT Host 192.168.0.1 appears to be up. Host bear.mcslp.pri (192.168.0.2) appears to be up. Host narcissus.mcslp.pri (192.168.0.3) appears to be up. Host 192.168.0.10 appears to be up. Host 192.168.0.27 appears to be up. Host sulaco.mcslp.pri (192.168.0.101) appears to be up. Host nautilus.wireless.mcslp.pri (192.168.0.109) appears to be up. Host 192.168.1.1 appears to be up. Host 192.168.1.25 appears to be up. Host gentoo1.vmbear.mcslp.pri (192.168.1.52) appears to be up. Host gentoo2.vmbear.mcslp.pri (192.168.1.53) appears to be up. Nmap done: 1024 IP addresses (11 hosts up) scanned in 5.78 seconds |
ping 검사를 수행하면 네트워크에 있는 다른 시스템을 매우 빠르게 확인할 수 있다. 이 경우에는 11개의 호스트가 검색되었지만 이들 중 일부 호스트는 이름을 다시 확인할 수 없다. 이는 DNS 구성에 오류가 있음을 나타낸다. 일부 시스템에서는 역방향 조회(IP 주소로 이름을 확인하는 조회)를 사용하여 클라이언트 IP 주소가 변조되지 않았는지 확인하는 보안 검사를 수행하므로 이 오류는 수정되어야 한다.
네트워크에 있는 다른 서비스 찾기
ping 검사가 유용하기는 하지만 개별 시스템에서 실제로 노출하고 있는 서비스를 알고 싶을 때는 TCP 검사를 사용해야 한다. TCP 검사를 수행하면 nmap이 목록 내에 있는 각 호스트에서 TCP/IP 프로토콜을 사용하는 포트를 열려고 시도하므로 더 많은 시간이 소요된다. 이 검사는 네트워크에 있는 호스트를 표시하고 각 호스트의 열려 있는 포트에 대한 세부 정보를 제공하려는 경우에 효과적이다. Listing 18에서 이 검사의 출력 예제를 볼 수 있다.
Listing 18. TCP 검사 사용하기
$ nmap -sT 192.168.1.25/22 Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:03 GMT Interesting ports on 192.168.0.1: Not shown: 997 closed ports PORT STATE SERVICE 80/tcp open http 8080/tcp open http-proxy 49153/tcp open unknown Interesting ports on bear.mcslp.pri (192.168.0.2): Not shown: 987 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 111/tcp open rpcbind 143/tcp open imap 443/tcp open https 902/tcp open iss-realsecure 993/tcp open imaps 2000/tcp open callbook 2049/tcp open nfs 3128/tcp open squid-http 3306/tcp open mysql Interesting ports on narcissus.mcslp.pri (192.168.0.3): Not shown: 982 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 88/tcp open kerberos-sec 106/tcp open pop3pw 111/tcp open rpcbind 311/tcp open asip-webadmin 389/tcp open ldap 548/tcp open afp 625/tcp open apple-xsrvr-admin 749/tcp open kerberos-adm 1021/tcp open unknown 1022/tcp open unknown 3659/tcp open unknown 3689/tcp open rendezvous 4111/tcp open unknown 5900/tcp open vnc 8086/tcp open unknown 8087/tcp open unknown Interesting ports on 192.168.0.10: Not shown: 997 closed ports PORT STATE SERVICE 23/tcp open telnet 80/tcp open http 443/tcp open https Interesting ports on 192.168.0.27: Not shown: 999 closed ports PORT STATE SERVICE 22/tcp open ssh Interesting ports on sulaco.mcslp.pri (192.168.0.101): Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 88/tcp open kerberos-sec 548/tcp open afp 631/tcp open ipp 2170/tcp open unknown Interesting ports on nautilus.wireless.mcslp.pri (192.168.0.109): Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 88/tcp open kerberos-sec 111/tcp open rpcbind 1001/tcp open unknown 5900/tcp open vnc Interesting ports on 192.168.1.1: Not shown: 995 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 80/tcp open http 5431/tcp open unknown Interesting ports on 192.168.1.25: Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 111/tcp open rpcbind 4045/tcp open lockd Interesting ports on gentoo1.vmbear.mcslp.pri (192.168.1.52): Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 111/tcp open rpcbind 3128/tcp open squid-http Interesting ports on gentoo2.vmbear.mcslp.pri (192.168.1.53): Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 111/tcp open rpcbind Nmap done: 1024 IP addresses (11 hosts up) scanned in 32.27 seconds |
이 출력을 보면 다양한 서비스를 제공하는 수많은 서버가 네트워크에 있다는 것을 알 수 있다. 예를 들어, 192.168.0.1의 장치는 HTTP 및 HTTP 프록시 서비스를 제공한다. 또한 bear.mcslp.pri는 http뿐만 아니라 smtp, imap, nfs 및 MySQL 서비스도 제공한다.
이러한 서비스에 대한 구체적인 정보를 확인하려는 경우에는 다시 한번 nmap을 버전 인수와 함께 사용하여 특정 호스트에 열려 있는 프로토콜 및 포트에 대한 구체적인 버전 정보 목록을 확인할 수 있다.
예를 들어, 메인 서버처럼 보이는 호스트(bear)를 검사해 보면 이러한 각 포트에서 실행되고 있는 서비스를 매우 정확히 파악할 수 있다(Listing 19 참조).
Listing 19. 버전 인수와 함께 nmap 사용하기
$ nmap -sT -sV bear Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:17 GMT Interesting ports on localhost (127.0.0.1): Not shown: 985 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.1 (protocol 2.0) 25/tcp open smtp Postfix smtpd 53/tcp open domain ISC BIND 9.4.3-P1 111/tcp open rpcbind 143/tcp open imap Cyrus IMAP4 2.3.13-Gentoo 443/tcp open ssl/http Apache httpd 783/tcp open spamassassin SpamAssassin spamd 902/tcp open ssl/vmware-auth VMware Authentication Daemon 1.10 (Uses VNC) 993/tcp open ssl/imap Cyrus imapd 2000/tcp open sieve Cyrus timsieved 2.3.13-Gentoo (included w/cyrus imap) 2049/tcp open rpcbind 3128/tcp open http-proxy Squid webproxy 2.7.STABLE6 3306/tcp open mysql MySQL 5.0.60-log 10024/tcp open smtp amavisd smtpd 10025/tcp open smtp Postfix smtpd Service Info: Hosts: gendarme.mcslp.com, bear, 127.0.0.1 Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.12 seconds |
이 출력에서는 수많은 특정 서비스를 볼 수 있으며, 각 포트에서 제공하는 버전 정보뿐 아니라 애플리케이션 정보까지도 확인할 수 있다.
네트워크에서 식별되지 않은 호스트 확인하기
네트워크에 있는 호스트를 검색한 후 호스트에 대한 정보 특히, 즉시 인식되지 않는 호스트에 대한 정보를 확인할 수 있다. TCP 포트 검사는 호스트에서 지원하고 있는 서비스를 보여 주기는 하지만 반드시 모든 정보를 보여 주는 것은 아니다. 일부 장치 및 시스템의 경우에는 네트워크의 서비스를 즉시 확인할 수 없는 방식으로 포트를 노출하기도 하며 더 나아가 노출하지 않을 수도 있다.
nmap 운영 체제 검사는 열려 있는 포트를 검사한 후 다양한 서비스가 실행되고 있는 운영 체제를 확인한다. 이 기능은 네트워크에서 열려 있는 포트와 새 장치가 있는 서버를 식별하는 기능과는 다르다.
예를 들어, Listing 20에서와 같이 bear라는 서버에 대해 운영 체제 식별을 실행하면 일반적인 Linux 버전이 시스템에서 실행되고 있다는 것을 식별할 수 있으며 이는 해당 시스템이 표준 컴퓨터임을 나타낸다.
Listing 20. nmap 운영 체제 검사
# nmap -sT -O bear Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:20 GMT Interesting ports on localhost (127.0.0.1): Not shown: 985 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 111/tcp open rpcbind 143/tcp open imap 443/tcp open https 783/tcp open spamassassin 902/tcp open iss-realsecure 993/tcp open imaps 2000/tcp open callbook 2049/tcp open nfs 3128/tcp open squid-http 3306/tcp open mysql 10024/tcp open unknown 10025/tcp open unknown Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.17 - 2.6.25 Network Distance: 0 hops OS detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds |
OS 검사는 완벽하지 않으며 finger printing 기술을 사용하여 열려 있는 포트 및 리턴된 버전 정보의 의미를 확인한다. 예를 들어, Listing 21의 검사에서는 포트 유형을 기반으로 잠재적 운영 체제의 수를 식별한다.
Listing 21. 잠재적 운영 체제의 수를 식별하는 검사
# nmap -sT -O some.faroffhost.com Starting Nmap 4.76 ( http://nmap.org ) at 2009-03-24 16:23 GMT Interesting ports on some.faroffhost.com (205.196.217.20): Not shown: 976 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 110/tcp open pop3 111/tcp filtered rpcbind 113/tcp open auth 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 143/tcp open imap 548/tcp open afp 554/tcp open rtsp 555/tcp open dsf 587/tcp open submission 687/tcp open unknown 993/tcp open imaps 995/tcp open pop3s 1720/tcp filtered H.323/Q.931 5222/tcp open unknown 5269/tcp open unknown 5666/tcp open unknown 7070/tcp open realserver 8000/tcp open http-alt 8001/tcp open unknown 8649/tcp open unknown Device type: print server|general purpose|storage-misc|WAP|switch|specialized Running (JUST GUESSING) : HP embedded (92%), Linux 2.6.X|2.4.X (92%), Buffalo embedded (91%), Acorp embedded (89%), Actiontec Linux 2.4.X (89%), Linksys embedded (89%), Netgear embedded (89%), Infoblox NIOS 4.X (89%) Aggressive OS guesses: HP 4200 PSA (Print Server Appliance) model J4117A (92%), Linux 2.6.20 (Ubuntu 7.04 server, x86) (92%), Linux 2.6.9 (92%), Buffalo TeraStation NAS device (91%), Linux 2.6.18 (CentOS 5.1, x86) (91%), OpenWrt 7.09 (Linux 2.4.34) (90%), Acorp W400G or W422G wireless ADSL modem (MontaVista Linux 2.4.17) (89%), HP Brocade 4100 switch; or Actiontec MI-424-WR, Linksys WRVS4400N, or Netgear WNR834B wireless broadband router (89%), HP Brocade 4Gb SAN switch (89%), Infoblox NIOS Release 4.1r2-5-22263 (89%) No exact OS matches for host (test conditions non-ideal). Network Distance: 18 hops OS detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 23.66 seconds |
nmap 검사는 로컬 및 원격 네트워크 둘 다에 대해 실행할 필요는 없다. 위 원격 테스트에서 nmap은 패킷이 대상 시스템에 도달하기 전까지 통과해야 하는 다양한 시스템을 확인했다. 사용자의 시스템과 다른 시스템 사이에 있는 다양한 장치를 파악하는 작업은 네트워크 레이아웃을 이해하고 파악하는 과정의 마지막 단계이다.
네트워크 구조 결정하기
IP 네트워크 패킷이 네트워크에서 전송될 경우, 시스템이 패킷을 다른 네트워크 또는 시스템으로 전달할 때마다 특수 카운터가 증가된다. 패킷 전달은 여러 다양한 시스템에서 발생한다. 여러 네트워크 스위치가 함께 연결되어 있는 경우 각 허브는 자신을 새 장치로 식별할 수 있다. 또한 무선 액세스 포인트와 기존 라우터 모두 패킷을 전달하는 장치이므로 패킷의 네트워크 경로의 일부로 간주된다.
대부분의 네트워크 환경에서 로컬 네트워크에 있는 허브, 스위치 및 기타 구성 요소는 이 값을 증가시키지 않는다. 하지만 외부 네트워크로까지 시선을 넓히면 네트워크 규모가 더 커지고 복잡해지므로 개별 패킷의 경로를 이해할 수 있다면 성능 및 연결 문제를 식별하는 데 많은 도움이 된다.
호스트와의 통신 경로에 대한 정보를 표시하는 데 주로 사용되는 도구는 traceroute이다. 이 도구는 현재 호스트에서 대상까지의 지정된 경로 내에 있는 각 호스트의 IP 주소를 확인한다. 대상 호스트가 로컬 호스트 자신이면 직접 경로로 표시된다(Listing 22 참조).
Listing 22. traceroute 사용하기
$ traceroute solaris2 traceroute to solaris2 (192.168.1.25), 30 hops max, 40 byte packets 1 solaris2.mcslp.pri (192.168.1.25) 0.651 ms 0.892 ms 0.969 ms |
Listing 23에서는 로컬 라우터나 브리지를 통해 액세스할 수 있는 로컬 네트워크에 있는 호스트를 보여 준다.
Listing 23. 로컬 네트워크에 있는 호스트
$ traceroute gentoo1 traceroute to gentoo1 (192.168.1.52), 30 hops max, 40 byte packets 1 gendarme.mcslp.pri (192.168.0.1) 3.163 ms 3.159 ms 6.618 ms 2 gentoo1.mcslp.pri (192.168.1.52) 34.336 ms 34.341 ms 34.341 ms |
원격 네트워크에 대한 연결은 패킷이 통과하게 되는 각 라우터와 단계를 보여 준다(Listing 24 참조.
Listing 24. 원격 네트워크 연결
$ traceroute www.ibm.com traceroute to www.ibm.com (129.42.58.216), 30 hops max, 40 byte packets 1 gendarme.mcslp.pri (192.168.0.1) 3.163 ms 3.159 ms 6.618 ms 2 gauthier-dsl1.hq.zen.net.uk (62.3.82.17) 34.336 ms 34.341 ms 34.341 ms 3 lotze-ge-0-0-1-136.hq.zen.net.uk (62.3.80.137) 37.581 ms 47.276 ms 50.548 ms 4 nietzsche-ae2-0.ls.zen.net.uk (62.3.80.70) 43.945 ms 47.239 ms 50.529 ms 5 nozick-ge-3-1-0-0.ls.zen.net.uk (62.3.80.74) 55.343 ms 55.341 ms 55.339 ms 6 lorenz-ge-3-0-0-0.te.zen.net.uk (62.3.80.78) 66.347 ms 63.118 ms 63.105 ms 7 82.195.188.13 (82.195.188.13) 146.039 ms 118.175 ms 124.532 ms 8 sl-bb22-lon-8-0.sprintlink.net (213.206.128.60) 50.460 ms 47.273 ms 40.991 ms 9 sl-bb20-lon-12-0.sprintlink.net (213.206.128.52) 47.107 ms 47.094 ms 43.711 ms 10 sl-crs2-nyc-0-5-3-0.sprintlink.net (144.232.9.164) 111.579 ms 113.173 ms 113.159 ms 11 144.232.18.238 (144.232.18.238) 116.353 ms 111.633 ms 111.619 ms 12 0.xe-5-0-1.XL3.NYC4.ALTER.NET (152.63.3.125) 114.812 ms 111.788 ms 115.000 ms 13 0.so-7-1-0.XT3.STL3.ALTER.NET (152.63.0.6) 151.969 ms 142.573 ms 142.574 ms 14 POS6-0.GW8.STL3.ALTER.NET (152.63.92.37) 142.552 ms 253.001 ms 252.986 ms 15 ibm-gw.customer.alter.net (65.206.180.74) 179.655 ms 228.775 ms 228.751 ms 16 10.16.255.10 (10.16.255.10) 145.847 ms 139.310 ms 142.509 ms 17 * * * 18 129.42.58.216 (129.42.58.216) 143.118 ms 141.181 ms 141.152 ms |
호스트 목록을 확인하는 nmap과 함께 이 방법을 사용하면 네트워크에 있는 호스트에 대한 정보와 이러한 시스템에 도달하는 데 사용되는 라우터 및 시스템에 대한 정보를 훨씬 더 자세히 볼 수 있다.
결론
이 튜토리얼에서는 네트워크에 있는 호스트, 이러한 호스트에 액세스하는 방법, 연결되어 있는 장치 및 시스템, 제공되는 서비스 및 시스템 등에 대한 다양한 정보를 확인하는 데 사용할 수 있는 여러 가지 UNIX 도구 및 기술을 살펴보았다.
이제 이러한 기술을 통해 UNIX 환경에 액세스하여 네트워크 구성을 확인할 수 있어야 하며, 필요한 정보를 기록하여 문제점 및 그 이유를 파악하고 해결 방법까지도 알아낼 수 있어야 한다.
기사의 원문보기
댓글 없음:
댓글 쓰기