RRDtool의 이해

제  목 : 서버 모니터링 툴의 강자, RRDtool 가이드 (작성중. alpha 버전)
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.9.22(월)~

그래픽 모니터링 툴인 RRDtool과 그 프론트엔드 툴 HotSaNIC의 설치, 운영가이드이다.

1. RRDtool의 이해
2. RRDtool 설치
3. HotSaNIC 설치
4. RRDtool 직접 다루기
5. 문제 해결
6. 이용 사례


1. RRDtool의 이해

RRDtool에 대해 들어가기 전에 먼저 MRTG 툴을 설명할 필요가 있을 듯 하다.
MRTG(Multi Router Traffic Grapher)는 이름에서도 드러난대로, SNMP 프로토콜을 사용하여
라우터를 거쳐가는 트래픽을 실시간 그래픽을 통해 모니터링하는데 가장 많이 사용한다.
이외에 시스템을 모니터링하는 여러 addon들이 있다.
DISK 사용량, CPU사용량, 메모리 사용량, 데몬, 세션 개수 등..
심지어는 P2P인 당나귀의 트래픽, 프락시 서버인 Squid 트래픽까지 실시간(실시간이라기
보다는 특정 시간간격으로 변화하여 보여준다는게 더 정확하지만)으로 웹에서 볼 수 있다.

RRDtool은 MRTG처럼 실시간 그래픽 모니터링 기능을 가지고 있으면서 보다 더 개선된 형태의
툴이다. 보다 빠르고 시스템 로드를 덜 잡아먹는다. 또한 MRTG의 제약이었던 2개 이상의 데이터를
하나의 그래픽을 통해 표시할 수 있다. 그래픽의 유연성(?)면에서도 단연 RRDtool이 압도한다.

[ MRTG로 트래픽 모니터링하는 화면 ]
MRTG

[ RRDtool과 HotSaNIC으로 CPU 사용률을 모니터링하는 화면 ]

2. RRDtool 설치

RRDtool : http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

RRDtool의 시스템 요구사항은 다음과 같다.

Perl 5.005 (컴파일시에 문제가 발생하면 더 최신 것을 설치해본다.)
GNU make
GNU gcc

위 RRDtool 사이트에서 최신 버전을 받아온다. /usr/local/rrdtool에 하는 것으로 가정한다.

# tar xvfz rrdtool-1.0.45.tar.gz
# cd rrdtool-1.0.45
# ./configure –prefix=/usr/local/rrdtool
# make install
# make site-perl-install
… 중략 …
Installing /usr/lib/perl5/site_perl/5.8.0/RRDp.pm
Installing /usr/share/man/man3/RRDp.3pm
… 생략 …

3. HotSaNIC 설치

HotSaNIC : http://hotsanic.sourceforge.net/archive/

HotSaNIC은 RRDtool을 사용하는 툴로 시스템 통계정보를 그래프로 생성해준다.

* 시스템 요구 사항

– RRDtool
– iptables 또는 ipchains (네트워크 트래픽 통계용으로 쓰기 위함)

위 사이트에서 받은 최신 버전은 컴파일없이 환경설정만으로 바로 사용하므로
/usr/local에서 압축을 푼다.

# cd /usr/local
# tar xvf HotSaNIC-0-5-0-pre3.tgz ( HotSaNIC/ 디렉토리가 생성된다. )
# cd HotSaNIC

1) 제공하는 모듈

HotSaNIC은 어떤 모듈을 통해 시스템 통계를 제공하는지 알아보고,
그 모듈을 사용할 것인지 안할 것인지를 판단해보자.


———  ———————————————————–  ———————
모듈       처리하는 통계 정보                                           truefeel의 권장
———  ———————————————————–  ———————
APCUSV     APC UPS의 현황 (apcaccess 툴 사용)                       N
(APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여 모니터링중이 아니라면 N)
APPS      데몬, 응용프로그램별 프로세스 현황            Y
(프로세스 이름 별도 설정 필요)
DISKIO     각 HDD별(파티션별이 아님) 입출력            Y
(별도 설정 필요)
DNET       Distributed.Net관련 RC5, OGR,  DES, CSC ???         N
NETWORKS   네트워크 트래픽 (별도 설정 필요)            Y
PART      파티션별 사용량                  Y
PING      지정한 서버로 ping time 결과 (ping서버 설정 필요)      ping할 서버가 있다면
SENSORS    CPU, 마더보드 등의 온도, 전압등의 수치         원하는대로
SHOUTCAST  지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요)   N
SYSTEM     시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률, …   Y
TRAFFIC    네트워크 인터페이스별(eth0, …) 트래픽         Y
(SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링 가능,
물론 이 때는 별도 설정 필요)
WORMS      웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수   Y
(웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능)
———  ———————————————————–  ———————

2) setup.pl로 기본 환경 파일 생성

이제 setup.pl 으로 기본 환경 설정을 해보자.
과정은 길지만 간단하다. 모듈을 보고 Y로 할 것인, N로 할 것인지를 결정한다.
이 설정은 나중에 ./setup.pl으로 변경할 수 있으므로 맘 편하게 진행해라.
(반복되는 내용이라 메시지 중간중간 생략하였다.)

# ./setup.pl
Configuring modules:

Module found: APCUSV
—————————————-
Do you want to use this module ? (Y)es / (n)o > n

Module found: APPS
—————————————-
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module’s graphs on the webpage ? (Y)es / (n)o >

… 중략 …

Module found: DISKIO   … 중략 …
Module found: DNET     … 중략 …
Module found: NETWORKS
—————————————-
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module’s graphs on the webpage ? (Y)es / (n)o >

setting up networks …

Configuring local interfaces.
(i)nternal means an interface pointiong to your local machines (intranet)
(e)xternal means an interface connecten with the internet
(n)one means you don’t want to account this interface.

Please answer these:
found: eth0  –  (i)nternal, (e)xternal or (n)one ? e

found: lo  –  (i)nternal, (e)xternal or (n)one ? n

… 중략 …

Module found: PART      … 중략 …
Module found: PING      … 중략 …
Module found: SENSORS   … 중략 …
Module found: SHOUTCAST … 중략 …
Module found: SYSTEM    … 중략 …
Module found: TRAFFIC
—————————————-
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module’s graphs on the webpage ? (Y)es / (n)o >

setting up traffic …

Configuring local interfaces. Please answer these:
found: eth0  –  (y)es or (n)o ? y

found: lo  –  (y)es or (n)o ? n

Please check the settings file and adapt it to satisfy your needs.
If you have any interfaces slower than 100 MBit, please change the
corrosponding default values.

… 중략 …

Module found: WORMS   … 중략 …
—————————————-
Ok.
Writing main settings …
checking for OS-type (current: not configured)
OSTYPE=”Linux”
checking path to “rrdtimer” (current: not configured)
DAEMONDIR=”/usr/local/HotSaNIC”
checking path to “rrdtool” (current: not configured)
the following possibilities have been detected:
0  /usr/bin
1  /usr/local/rrdtool/bin

which one shall i use (0=default … 1) ? > 1 ( rrdtool이 2군데 설치된 경우이다.)
BINPATH=”/usr/local/rrdtool/bin”  (RRDtool 실행이 있는 디렉토리)
LOGDIR=”$DAEMONDIR/var/log/”      (로그가 저장될 디렉토리)
PIDFILE=”$DAEMONDIR/var/rrdtimer.pid”
DIAGRAMLOG=”last”
LOGSIZE=”200000″
LOGBACKUPS=”5″
DEBUGLEVEL=”-1″
STIME=”120″
SCHEDULE_MIN=”100″
SCHEDULE_MAX=”200″
RUN=”apcusv apps diskio dnet networks part ping sensors shoutcast system traffic worm
s”
WEBDIR=”not configured”
WIDTH=”600″
HEIGHT=”200″
IMAGEFORMAT=”gif”
SHOW=”apcusv apps diskio dnet networks part ping sensors shoutcast system traffic wor
ms”
ORDER=”traffic system part ping dnet sensors”
DTIME=”15″ (15분 간격으로 이미지를 갱신한다.)
CTIME=”24″ (24시간 간격으로 통계화면 메인에 표시될 작은 크기의 이미지를 갱신한다.)
guessing convert method…
checking for Image::Magick perl module… not found
checking path to “convert” from ImageMagick (current: not configured)
detected: /usr/bin/convert
is this corrrect? (y)
checking path to “snmpwalk” (current: not configured)
detected: /usr/bin/snmpwalk
is this corrrect? (y)
SNMPWALK=”/usr/bin/snmpwalk”
checking path to “snmpget” (current: not configured)
detected: /usr/bin/snmpget
is this corrrect? (y)
SNMPGET=”/usr/bin/snmpget”
checking path to “snmpbulkwalk” (current: not configured)
detected: /usr/bin/snmpbulkwalk
is this corrrect? (y)
SNMPBULKWALK=”/usr/bin/snmpbulkwalk”

— Main settings generated. —

Writing start/stop script “rrdgraph” … Ok.

Now adapt all settings files to satisfy your needs.
They are all linked to the directory  /var/settings .

3) 필요한 디렉토리 생성

이제 RRDtool의 웹용 이미지와 html이 저장될 디렉토리와 로그 파일 저장 디렉토리를 생성한다.
디폴트로 로그는 HoSaNIC 홈의 var/log에 생성된다.
(html 홈은 /usr/local/apache/htdocs/ 라고 가정)

# mkdir /usr/local/apache/htdocs/rrdtool
# mkdir var/log

4) 환경 파일의 주요 설정

HoSaNIC 홈/settings가 주 설정 파일이고
HoSaNIC 홈/modules/모듈명/settings는 각 모듈별 설정 파일이다.

주 settings 파일에서 주요 설정을 살펴보자.(반드시 확인할 것에 * 표시해둠)

# BINPATH    = rrdtool 실행 파일이 있는 경로 (*)
BINPATH=”/usr/local/rrdtool/bin”

# LOGDIR     = HoSaNIC의 로그 파일 경로
# LOGSIZE    = 로그 파일 크기
# LOGBACKUPS = 지정한 개수만큼 로그는 로데이터션되어 백업된다.
#              로그 파일명은 HotSaNIC.log, HotSaNIC.log.1, …
LOGDIR=”$DAEMONDIR/var/log/”
LOGSIZE=”200000″
LOGBACKUPS=”5″

# RUN   = 실행할 모듈 목록 (*)
# SHOW  = 웹페이지로 표시할 모듈 목록 (*)
# ORDER = 표시할 모듈의 순서를 지정(먼저 쓴 것부터 왼쪽에 표시함)
RUN=”apps diskio networks part ping sensors system traffic”
SHOW=”apps diskio networks part ping sensors system traffic”
ORDER=”traffic system part ping sensors”

# WEBDIR      = 생성된 이미지, html이 저장될 디렉토리 (*)
# IMAGEFORMAT = 이미지 파일 형식 (gif 또는 png)
WEBDIR=”/usr/local/apache/htdocs/rrdtool”
IMAGEFORMAT=”gif”

# DTIME = 지정한 간격으로 이미지를 생성한다. (단위는 분)
# CTIME = 지정한 간격으로 모니터링 메인화면의 작은 이미지를 생성한다. (단위는 시간)
#         따라서 처음 설치한 후 지정한 시간내에 convert.pl 명령을 하지 않으면 메인화면의
#         이미지는 최소 지정 시간동안 볼 수 없다.
DTIME=”15″
CTIME=”24″

# CONVERTPATH = ImageMagick 를 사용하여 이미지를 생성한다. convert 경로를 지정한다.
CONVERTPATH=”/usr/bin/convert”

# REFRESH = 지정한 초단위로 웹페이지를 리프레쉬해서 보여준다. 기본 300초(5분)
REFRESH=”300″

각 모듈별 설정은 해당 디렉토리의 settings을 보면 자세히 설명이 되어 있다.
여기서는 ping, diskio, apps에 대해서만 예를 들어본다.

* ping 모듈 ( HoSaNIC홈/modules/ping/settings )

192.168.123.15(파일서버)에 대해 ping을 한다면, 다음을 추가하면 된다.

HOST=192.168.123.15,File Server

설정했는데 ping 이미지가 생성안된다면 ‘5. 문제해결’에 해결방법을 설명해뒀다.

* diskio 모듈 ( HoSaNIC홈/modules/ping/settings )

/proc/stat 에서 disk_io 라인을 살펴보면 다음과 같이 되어 있다.

disk_io: (2,0):(1,1,2,0,0) (3,0):(306090,39930,942826,266160,5212040)
(3,1):(55015,28746,1435800,26269,909568) (8,0):(50,50,253,0,0)

여기서 (3,0) = hda, (3,1) = hdb, (8,0) = sda를 각각 의미한다.
따라서 hda와 hdb의 disk 입출력을 보려면 다음과 같이 설정한다.

DEV=3_0,hda
DEV=3_1,hdb

* apps 모듈 ( HoSaNIC/modules/apps/settings )

APP=httpd,Apache
APP=sendmail,Sendmail
APP=mysqld,Mysql Server
APP=hanterm,hanterm
APP=xmms,xmms
APP=MozillaFirebird-bin,Mozilla Web Browser

5) 실행

자~ 이제 웹페이지를 생성하고 rrdgraph만 실행하면 모니터링할 수 있다.

# ./makeindex.pl
# ./rrdgraph start

이제 웹브라우저를 띄우고 보면 된다. 아직 이미지도 안나온는데 뭘 보라는 것일까?
최소 15분(settings의 DTIME)이 지내야 모듈내의 큰 이미지들이 생성되고
24시간(CTIME)이 지나면 메인의 작은 이미지가 보일 것이다.
24시간 전이라도 적당한 시기에 ./convert.pl을 실행하면 메인에서도 이미지를 볼 수 있다.

부팅할 때 자동으로 rrdgraph가 실행되록 하려면 어떻게 해야할까?
rrdgraph 스크립트를 /etc/rc.d/init.d 에 복사를 한 후 chkconfig로 서비스를 추가한다.

# cp rrdgraph /etc/rc.d/init.d
# chkconfig -add rrdgraph

4. RRDtool 직접 다루기

HoSaNIC은 이미 정해진 모듈을 통해서 RRDtool을 다루는 것이다.
이제 시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여 통계용 이미지를 생성하는
방법을 알아본다. 간단히 과정을 정리해보면.

– RRDtool용 자체 DB(일반적으로 .rrd로 지정)를 생성한다.(create) ->
– 데이터를 업데이트하거나 (update) 가져온다.(fetch) ->
– 이미지를 생성한다. (graph)

1) rrdtool 명령 익히기

DB 생성, 이미지 만드는 것은 모두 RRDtool홈/bin/rrdtool 명령을 통해서 한다.

* 형식 : rrdtool [명령] [명령 옵션…]
* 예   : rrdtool create  coffeenix_status.rrd DS:….

rrdtool에서 사용 가능한 명령은 무엇이 있을까?


———-  ———————————————————————–
명  령      설  명
———-  ———————————————————————–
create      새로운 RRD DB를 만든다.
update      DB에 새 데이터를 저장한다.
graph       저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png)
dump        RRD DB의 데이터를 XML 포맷으로 뽑아준다.
restore     XML 포맷에서 RRD DB로 저장한다.
fetch       RRD DB에서 데이터를 얻어온다.
tune        RRD DB의 설정을 변경한다.
last        RRD DB의 최종 업데이트 시간을 알려준다.
info        RRD DB의 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값…)
rrdresize   RRA 크기를 변경한다. 가능하면 사용하지 말기를
xport       RRD DB의 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정)
———-  ———————————————————————–

2) 샘플 DB 생성

3) 이미지 만들기

5. 문제 해결

1) HoSaNIC 로그 파일을 보니 Can’t locate RRDs.pm in @INC (@INC contains… 오류가 있습니다.

RRDtool 설치할 때 make site-perl-install 를 하지 않아 RRDs.pm 펄 모듈이
설치되지 않아서 입니다.
RRDtool 소스 디렉토리에 가서 make site-perl-install을 하세요.

2) makeindex.pl 실행할 때 다음 오류가 발행합니다.
WEBDIR (path to HotSaNIC’s output directory) does not exist.

시스템 모니터링 결과가 저장될 웹디렉토리를 생성하지 않았다.
위 글중 ‘3 – 3) 필요한 디렉토리 생성’을 확인해봐라.

3) 시간이 한참지났는데 ping 이미지가 생성이 안됩니다. 물론 ping설정은 했습니다.
로그를 보니 Can’t locate asm/unistd.ph in @INC (did you run h2ph?).. 가 있습니다.

펄용 헤더 파일이 없기 때문입니다. 펄 헤더로 변환해주는 h2ph로 해결할 수 있습니다.

cd /usr/include; h2ph -r -l .

TBSD 설치 및 사용법

tbsd라는 네트워크 스캐닝 공격을 탐지 하는 툴로, 가볍고 성능도 괜찮은 것 같아서 아직도 사용중입니다.
이번에 이것을 설치, 운영하는 방법에 대해 알아 보겠습니다.
이 글을 작성하지 좀 오래되어 버전이 낮게 보여지나, 최신 버전에서도 무리없이 설치가 가능할 것으로 생각됩니다.
(레드햇 8.0까지는 설치해 사용해 보았습니다.)

TBSD란?

“Threatness Based Scan Detector”(TBSD)는 네트워크 스캐닝 공격을 탐지하는 도구로 TCP, UDP, ICMP 프로토콜을 지원한다. 세션별로 위협도를 설정하여, 특정 타임 프레임 범위내에서 위협도 limit 값을 초과하는 비 정상적인 스캔 공격을 탐지한다. 스캔 공격에 대한 요약 보고 기능과, 공격 탐지시 공격 호스트에 대한 지속적인 세션을 기록하는 기능이 있어, 공격자 모니터링도 할 수 있다. 사이트 특성을 잘 반영할 수 있도록 위협도 테이블을 설정하여 사용한다면, 상당히 좋은 보안 도구가 될 것이다
현재 더이상의 버전 업은 없는 것 같고, 관련 사이트도 존재하지 않는 것 같다.

tbsd 다운 받기

http://www.securitymap.net/ 이나 초심 자료실에서 다운 받으시기 바란다.
달리 사이트는 운영되지 않는 것 같다.

tbsd 설치하기

[root@www util]# rpm -qa|grep libpcap <== libpcap이 필요해서 미리 체크함..
libpcap-0.4-39

libpcap이 설치되어 있어도 상관없다.. tbsd-1.17에 libpcap이 함께 배포하고 있으니..

[root@www util]# tar xvfz tbsd-1.17.tar.gz
[root@www util]# cd tbsd-1.17
[root@www tbsd-1.17]# ./configure
config tbsd tbsdroot /usr/local/tbsd
config tbsd tbsduser root
tbsd requires libpcap-0.4. To install the package do these:

zcat libpcap-0.4.tar.Z | tar xf –
cd libpcap-0.4
./configure
make

libpcap-0.4 가 필요하다고 한다.. 그럼 우선..
[root@www tbsd-1.17]# tar xvfz libpcap-0.4.tar.Z
[root@www tbsd-1.17]# cd libpcap-0.4
[root@www libpcap-0.4]# ./configure
[root@www libpcap-0.4]# make
[root@www libpcap-0.4]# cd ..
[root@www tbsd-1.17]# ./configure <== 다시 하면 정상적으로 configure함..
config tbsd tbsdroot /usr/local/tbsd
config tbsd tbsduser root
creating Makefile
creating src/Makefile
creating src/config.h
creating scripts/Makefile
creating scripts/ctltbsd
creating scripts/report
creating scripts/scantype
creating scripts/scansum
creating scripts/tbsd.daily
creating scripts/rcalog
done.
[root@www tbsd-1.17]# make
[root@www tbsd-1.17]# cp src/tbsd.conf.dist src/tbsd.conf
[root@www tbsd-1.17]# vi src/tbsd.conf

trusted_nets: {
127.0.0.0/8
211.xx.xxx.xx <== 아피이 입력
}

[root@www tbsd-1.17]# make install <== root로 실행해야 함..

/usr/local/tbsd 가 새로운 생성됨..

[root@www tbsd]# /usr/local/tbsd/bin/tbsd <== 실행(root로 해야 함)

/etc/cron.daily 로 이동..
[root@www cron.daily]# vi tbsd

/usr/local/tbsd/bin/tbsd.daily
저장후 chmod 755 로 만들어준다..

그럼 이제부터 스캐닝에 관한 정보를 root 메일로 발송을 해 줄것이다..
무지 설치가 간단하다..
하지만 해당 로그를 분석하려면 약간 시간이 걸릴것이다.
아래를 참고해 해당 로그를 분석해 보기 바란다.

로그분석하기

—————————————————–
Daily Netscan Detection Report

Scan-type Hosts
——— —–
tcp.mixed 2
udp.137 1
——————————————————
mixed는 스캔의 특징을 구분할수 없는 경우 통칭하며, 패킷분실등으로 인한 탐지오류를 혼합형 스캔으로 잘못 인식할수 있음.
tcp를 혼합형 스캔을 2곳으로 스캔
udp 137 번을 1곳에서 스캔했다는 뜻이다..

————————————————————————
Address Thr-val N-conn Idle Scan-type
————— ——- —— —– ———
67.41.194.17 1002 12 13414 tcp.mixed
24.145.146.51 802 8 21347 udp.137
210.53.1.47 700 7 23971 tcp.mixed
————————————————————————-
Thr-val은 해당 스캔의 위험도를 나타내는 수치이고, 400이상은 스캔 공격으로 간주하고 있다.
N-conn 은 해당 이벤트가 일어난 수로 스캔의 횟수로 보면 될것이다.
iddle은 해당 보고서 작성당시로 부터 최종 스캔이 이루어진 시간의 차를 초로 표시한것이다.
즉 67.41.194.17은 13414초 이전에 이루어졌다는 말이다.(보고서 작성 시점부터)

—————————————————————————
udp.137 thr 802 events 8 idle 21347
Mar 16 22:06:05 24.145.146.51 > 61.xx.xxx.xxx icmp 40 echo_q 45 v 100
Mar 16 22:06:05 24.145.146.51 > 211.xxx.xxx.21 icmp 40 echo_q 45 v 100
Mar 16 22:06:36 24.145.146.51:1943 > 61.xx.xxx.xxx:139 tcp 28 S 109 v 100
Mar 16 22:06:36 24.145.146.51:1950 > 211.xxx.xxx.21:139 tcp 28 S 109 v 100
Mar 16 22:06:38 24.145.146.51:137 > 211.xxx.xxx.21:137 udp 58 109 v 200
Mar 16 22:07:10 24.145.146.51:2099 > 61.xx.xxx.xxx:80 tcp 28 S 109 v 1
Mar 16 22:07:12 24.145.146.51:137 > 61.xx.xxx.xxx:137 udp 58 109 v 200
Mar 16 22:07:12 24.145.146.51:2126 > 211.xxx.xxx.21:80 tcp 28 S 109 v 1
—————————————————————————-
thr은 위험도이고, events는 스캔 횟수이다..
각각의 이벤트는
시간, 출발지 IP 주소, 출발지 포트번호, 목적지 IP 주소, 목적지 포트번호, 프로토콜, 패킷 크기, tcp 플래그, TTL 그리고 위험도(threatness) 를 나타낸다..

tcp.mixed.R은 접속 프로토콜이 tcp이고 도착지 포트의
특징이 혼합형(mixed)이며, 초기 패킷의 flag가 SYN이 있는 대신 스텔스스캔
(stealth scan)의 한가지 유형인 RSET임을 뜻한다.

참고)
출발지 포트번호가 1,024보다 작은 예약(reserved) 포트로 스캔공격시 출발지 포트로는 자주 사용하지 않는다.
도착지 호스트의 IP 주소가 불규칙적으로 변하며 도착지 포트번호 역시 1,024보다 커서 스캔 공격에 자주 사용하지 않는 비효율적인 포트들이다.

TTL 은 Time To Live의 약어로 몇 단계까지의 라우터를 거칠때까지 패킷이 손실되지 않고 전달되도록 할 것인지에 대한 설정이다. 라우터는 패킷을 통과시킬때마다 TTL 값을 하나씩 감소시키며 결국 TTL이 0이 되면 더이상 라우터를 통과하지 못하는 것이다.
즉, TTL이 0 이라면 같은 네트워크 안에서만 패킷이 흐를 것이며 1 이상이어야 다른 네트워크로 전달될 수 있으며 멀티캐스트에서는 보통 32이라면 같은 소속 기관내의 네트워크에, 255라면 보통 전세계 네트워크를 뜻한다.

——————————————————————————
Mar 17 13:45:02 ipstat ip 11659 113 11659 113 1047876302 18
211.xxx.xxx.21 4293 47 4643 48
61.xx.xxx.xxx 3079 22 740 12
220.76.147.55 996 10 1114 10
211.49.150.27 572 5 557 5
192.168.82.1 468 9 0 0
192.149.252.22 412 2 166 2
203.248.240.141 384 3 247 3
165.243.5.15 345 4 363 4
210.94.6.106 288 4 480 4
210.180.98.91 169 1 71 1
202.30.50.50 153 1 71 1
210.117.65.100 138 1 83 1
218.145.70.1 136 2 248 2
211.216.50.150 127 1 71 1
198.133.199.110 99 1 82 1
255.255.255.255 0 0 2208 8
192.168.82.255 0 0 468 9
224.0.1.24 0 0 47 1
———————————————————————————

이것은 네트워크 사용량을 분석한 것으로 보고서 형태로 메일로 배달이 되지는 않는다..(5분 간격으로 체크함)
tbsd가 설치된 디렉토리(/usr/local/tbsd/log)로 가면 ipslog 파일이 있는데.. 이파일을 내용중 맨 끝부분이다.

맨 첫줄은 종합통계이다. 3월 17일 13시 45분, 통계종류(ipstat ip), 대상 호스트의 총 송신량(11659), 송신 패킷수(113), 대상 호스트의 총 수신량(11659), 수신 패킷수(113),
모든 호스트들의 통신량(1047876302), 호스트 수(18)를 차례로 표기한 것이다.
두번째 줄부터는 ip주소, 송신량, 송신패킷수, 수신량, 수신패킷수이다.

이 로그에서는 갑자기 수신량이나 수신 패킷이 늘어나면 로그를 철저히 분석할 필요가 있다.

$ sed -n ‘/Oct 11 07:00:00/,$p’ ipslog.0 | head -15 <== 오전 7:00 의 세부 기록중 처음 15줄을 출력
$ zcat ipslog.1.gz | grep ipstat | sed -n 73,82p <== 10월 10일자 사용량 기록
$ cat tbsdlog|grep “210.xx.xx.xxx:”|more <== 210.xx.xx.xxx 호스트의 접속 로그를 출력

tcpdump로 분석하기(공격이 의심될때)

/usr/local/tbsd/spool 의 화일을 살펴보면.. 알수 있다.
tbsd는 스캔 공격을 탐지하면 스캔 공격 호스트와의 통신 내용을 기록을 하고 있다.
하지만 spool에 있는 내용을 보기 위해서는 우선적으로 tcpdump를 설치를 해야 한다..
http://www.tcpdump.org/ 이나 rpmfind.net에서 다운 받아서 설치를 한다..
여기서는 rpmfind에서 rpm으로 다운 받아서 설치를 했다..

[root@dream rpm]# rpm -Uvh tcpdump-3.6.3-3.i386.rpm
Aغn A߅ ########################################### [100%]
1:tcpdump ########################################### [100%]

Tcpdump 는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들 을 출력해 주는 프로그램이다. 프로그램의 특성상, 네트워크 인터페이스를 아주 심도 있게 사용하기 때문에, 실행하는 사람은 반드시 네트워크 인터페이스에 대한 읽기 권 한이 있어야만 한다.

[root@dream spool]# rpm -qlf /usr/sbin/tcpdump
/usr/sbin/tcpdump
/usr/sbin/tcpslice
/usr/share/doc/tcpdump-3.6.3
/usr/share/doc/tcpdump-3.6.3/CHANGES
/usr/share/doc/tcpdump-3.6.3/README
/usr/share/man/man8/tcpdump.8.gz
/usr/share/man/man8/tcpslice.8.gz

[root@dream spool]# tcpdump -r pd.1047437815
14:15:50.730790 211.50.250.2.683 > dream.sunrpc: S 32803703:32803703(0) win 8760 (DF)
14:15:50.730842 dream.sunrpc > 211.50.250.2.683: R 0:0(0) ack 32803704 win 0 (DF)
18:41:24.344199 www.cespm.gob.mx.3283 > 61.xx.xxx.xxx.sunrpc: S 247457297:247457297(0) win 32120 (DF)
18:41:24.346211 61.xx.xxx.xxx.3287 > www.cespm.gob.mx.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
18:41:24.346833 www.cespm.gob.mx.3284 > dream.sunrpc: S 248290167:248290167(0) win 32120 (DF)
18:41:24.346883 dream.sunrpc > www.cespm.gob.mx.3284: R 0:0(0) ack 248290168 win 0 (DF)
18:41:27.318942 www.cespm.gob.mx.3283 > 61.xx.xxx.xxx.sunrpc: S 247457297:247457297(0) win 32120 (DF)
18:41:29.859526 61.xx.xxx.xxx.3287 > www.cespm.gob.mx.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
18:41:44.282512 61.xx.xxx.xxx.3287 > www.cespm.gob.mx.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
18:42:09.532545 61.xx.xxx.xxx.3287 > www.cespm.gob.mx.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
18:42:43.786816 61.xx.xxx.xxx.3287 > www.cespm.gob.mx.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
00:10:10.924369 mailer.ccnmag.com.60053 > dream.sunrpc: S 3831927552:3831927552(0) win 5840 (DF)
00:10:10.924408 dream.sunrpc > mailer.ccnmag.com.60053: R 0:0(0) ack 3831927553 win 0 (DF)

tcpdump 설치후 가장 최근의 spool의 파일을 읽어들인 것이다..
tbsd에 있는 예제파일에 있는 명령어는

$ tcpdump -Anr pd.970930874 host xx.xxx.209.70

실행시 되지 않았다. -A 옵션을 인식하지 못했다.
즉 host ip로 검색을 해 보려면..

$ tcpdump -nr pd.970930874 host xx.xxx.209.70

이처럼 해야 되었다..

tcpdump 의 옵션들..
========================================
-a : Network & Broadcast 주소들을 이름들로 바꾼다.
-c Number : 제시된 수의 패킷을 받은 후 종료한다.
-d : comile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.
-dd : packet-matching code를 C program의 일부로 출력한다.
-ddd : packet-matching code를 숫자로 출력한다.
-e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
-f : 외부의 internet address를 가급적 심볼로 출력한다(Sun의 yp server와의 사용은 가급적 피하자).
-F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은 모두 무시된다.
-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지저되지 않으면 시스템의 인터페이스 리스트를 뒤져서 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).
-l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서 tcpdump로부터 데이터를 받고자 할 때, 유용하다.
-n : 모든 주소들을 번역하지 않는다(port,host address 등등)
-N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.
-O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을 때나 쓰인다.
-p : 인터페이스를 promiscuous mode로 두지 않는다.
-q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.
-r file : 패킷들을 ‘-w’옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 “-” 가 사용되면 표준 입력을 통해서 받아들인다.

-s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때 사용한다(SunOS의 NIT에서는 최소가 96Byte이다). 68Byte는 IP,ICMP, TCP, UDP등에 적절한 값이지만 Name Server나 NFS 패킷들의 경우에는 프로토콜의 정보들을 Truncation할 우려가 있다. 이 옵션을 수정할 때는 신중해야만 한다. 이유는 샘플 사이즈를 크게 잡으면 곧 패킷 하나하나를 처리하는데 시간이 더 걸릴 뿐만아니라 패킷 버퍼의 사이즈도 자연히 작아지게 되어 손실되는 패킷들이 발생할 수 있기 때문이다. 또, 작게 잡으면 그만큼의 정보를 잃게되는 것이다. 따라서 가급적 캡춰하고자 하는 프로토콜의 헤더 사이즈에 가깝게 잡아주어야 한다.

-T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다. type에는 다음과 같은 것들이 올 수 있다. rpc(Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp(Real-Time Application control protocal), vat(Visual Audio Tool), wb(distributed White Board)

-S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.
-t : 출력되는 각각의 라인에 시간을 출력하지 않는다.
-tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.
-v : 좀 더 많은 정보들을 출력한다.
-vv : ‘-v’보다 좀 더 많은 정보들을 출력한다.
-w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.
-x : 각각의 패킷을 헥사코드로 출력한다.
===========================================

tcpdump 실행 예..

tcpdump 실행시에는 꼭 콘솔상에서 한다.. 원격에서 실행하면.. 무한 루프처럼 계속 출력한다..

# tcpdump -t <== 원격이나 외부에 어떠한 접근만 이루어져두 엄청난 양의 데이타를 출력해 준다..

패킷의 발신지가apple이고 수신지는 banana가 아닌 패킷을 출력한다.
# tcpdump src host apple and not dst host banana <== 호스트명 대신에 아이피로 입력해두 됨..

(tcp 프로토콜 통신에서 123.45.67.89가 수신지나 발신지가 아닌 모든 SYN , FIN 패킷을 출력한다)
# tcpdump ‘tcp[13] & 3 != 0 and not net 123.45.67.89’

tcpdump를 설치를 하면.. /etc/passwd에 pcap이라는 유저가 추가가 된다..
상태를 확인해 보려면.. 아래의 명령어를 입력하면 된다..

# rpm -q –scripts tcpdump

preinstall scriptlet (through /bin/sh):
/usr/sbin/groupadd -g 77 pcap 2> /dev/null || :
/usr/sbin/useradd -u 77 -g 77
-s /sbin/nologin -M -r -d /var/arpwatch pcap 2> /dev/null || ( /usr/bin/chsh pcap /sbin/nologin 2> /dev/null || : )

tcpdump의 패킷을 분석하려면.. 아래의 주소를 참조해 보기 바란다..
http://www.whiterabbitpress.com/lg/issue86/vinayak.html

Backup Server 구성.

간단하게 스크립트와 Cron 을 이용하여 어설픈 Backup 서버를 만들었다.

Server 라고 부르기에도 정말 초라한 설정이지만….이것이 현재 나의 한계이다.

뭔가……Simple 하고 Detail 하게 구성을 하고 싶었지만 지금으로서는 무리였다.

그래도 일주일마다 수동으로 하던 Backup 을 이제 한시름 놓았으니 그것으로 만족한다.

시간이 조금 걸렸지만…다음번 구성때는 이보다는 더 빠르게 구성할 수 있겠지.

일단은 이것으로 만족…

SSH2 프로그램 설치

SSH2 프로그램 설치

1. 파일받기

cd /usr/local/src

wget ftp://ftp.sogang.ac.kr/pub/ssh/ssh-3.2.9.1-tar.gz

tar zxvpf ssh-3.2.9.1.tar.gz

cd ssh-3.2.9.1

2. 컴파일

configure –with-libwrap=/etc
–with-libwrap=/etc 는 TCP-Wrapper 에 적용을 할 수 있는 옵션설정

make

make install

3. conf 파일 수정

cd /etc/ssh2

vi sshd2_config

Port                 22222
: 22 Port 공격을 방어하기 위하여 변경

IdleTimeOut      3600
: 접속 후  응답이 없을 경우 1시간 후 자동 접속해제 시간

AuthKdblnt.Retries    3
: 접속하여 Password 응답횟수

PermitEmptyPasswords  no
: 암호 없는 계정의 경우 접속 허용거부

PasswordGuesses   3
: 접속하여 Password 응답횟수

AllowUsers              server
: ssh 접속 허용 계정 여부 결정(위의 설정은 계정네임이 server 인 경우에만 ssh 접속을 허가한다는 뜻.)

PermitRootLogin        no
: root 계정 접근 허용 여부 결정

Ssh1Compatibility      no
: ssh1 를 ssh2 와 같이 사용할 것인지 여부 결정.

로그인 정보 수정 및 리눅스 버전 정보 숨기기

로그인 정보 수정 및 리눅스 버전 정보 숨기기

vi /etc/motd

vi /etc/issue

vi /etc/issue.net

vi /etc/redhat-release

# Debian 의 경우 /etc/debian-version 임.

======================= For login user ===============================

It will be punished for illegal login to this system.
It is saved fot loin information in another system.

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

파일에 위 내용을 각각 추가함.