메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Mailgraph로 메일 서버 성능 모니터링

한빛미디어

|

2004-09-03

|

by HANBIT

20,210

저자: David Ky, 역 한동훈(traxacun at unitel.co.kr)
원문: http://www.onlamp.com/pub/a/onlamp/2004/08/12/mailgraph.html

대부분의 숙련된 관리자들은 메일 서버가 빠르게 성장하는 것에 더 익숙합니다. 규모가 커짐에 따라 메일 서버 관리는 보다 더 어려워집니다. MTA(Mail Transfer Agent)가 분당 수백에서 수천개의 요청을 처리할 때 로그 파일을 살펴보는 것은 MTA가 지금 무엇을 하고 있는지 이해할 수 있는 방법이 되지 않습니다. 이런 시점이 되면 자동화된 모니터링 도구가 위력을 발휘하게 될 것입니다. Mailgraph는 자동화된 메일 서버 모니터링 도구입니다.

Mailgraph 웹 사이트에 가면 다음 문구를 볼 수 있습니다.

또한, Mailgraph의 저자가 제공하는 실제 데모를 볼 수 있습니다.

Mailgraph 설치 과정을 통해 특정 메일 서버가 트래픽을 어떻게 처리하는지 그래픽과 수치를 이용해서 살펴볼 수 있습니다. MRTG와 같이 그래프를 이용해서 보여주는 도구를 이용한 적이 있다면, 문제를 재빨리 분석하는데 있어 이런 도구가 얼마나 유용한지 이미 알고 있을 겁니다. 그래프를 이용하면 과거, 현재, 심지어 미래에 대한 정보를 생생하게 예측할 수 있습니다.

RRDtoolTobe Oetiker가 개발한 것으로 시간대별 데이터를 저장하고 보여주는 기능을 제공하는 RRD(Round Robin Database)를 이용합니다. Mailgraph만으로 충분한 모니터링 기능을 제공하지 않는다고 느낀다면, 백엔드로 RRDtool을 사용하여 서버 평균 로드(server-load average)와 같은 서버 변수들을 모니터링하도록 지정할 수 있습니다.

Mailgraph 설치

여기서는 MTA로 Postfix를 사용하고 있으며, 독자가 Postfix를 실행하고 있다고 가정합니다. Postfix는 소스 설치, 리눅스 배포판별 패키지 매니저(portage, apt, yum 등)를 이용하여 설치되어 있다고 가정합니다. Postfix를 설치하지 않았다면 Postfix 웹 사이트에서 소스를 다운로드합니다.

또한, 스팸이나 바이러스를 예방하기 위해 SpamAssassinClamAVamavisd-new를 설치하는 것이 좋습니다. Mailgraph에는 바이러스나 스팸 검사 기능이 없지만, 스팸이나 바이러스 데이터를 그래프로 표현하지는 않습니다.

Mailgraph를 설치하는 데 필요한 패키지들은 다음과 같습니다.
  • RRDtool.
  • Perl 모듈 Time::HiResFile::Tail. 다음 명령으로 CPAN에서 다운로드 할 수 있습니다.

    perl -MCPAN -e shell

  • Mailgraph
먼저 그래프에 사용할 데이터 저장과 처리를 담당할 RRDtool을 설치합니다.

RRDtool의 최근 버전을 다운 받습니다. 현재는 1.0.48이 가장 최근에 나온 것입니다.

david@toys david $ wget http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.48.tar.gz

MD5 체크섬을 사용하여 다운로드한 파일을 검사합니다.

david@toys david $ wget http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.48.tar.gz.md5
david@toys david $ md5sum -c rrdtool-1.0.48.tar.gz.md5
rrdtool-1.0.48.tar.gz: OK

RRDtool의 압축을 풀고 해당 디렉터리로 변경합니다.

david@toys david $ tar -xvzf rrdtool-1.0.48.tar.gz
david@toys david $ cd rrdtool-1.0.48

일반적인 설치과정 configure, make, make install을 거칩니다. make site-perl-install 단계도 다른 설치와 마찬가지로 쉽습니다.

david@toys rrdtool-1.0.48 $ sh configure
david@toys rrdtool-1.0.48 $ make
david@toys rrdtool-1.0.48 $ sudo make install
david@toys rrdtool-1.0.48 $ sudo make site-perl-install

위 과정이 모두 끝나면 필요한 Perl 모듈(Time::HiRes, File::Tail)을 설치합니다. Mailgraph는 메일 로그를 추적하기 위해 이 모듈을 사용합니다. CPAN에서 설치하는 과정은 다음과 같습니다.

david@toys david $ sudo perl MCPAN -e shell
cpan> install Time::HiRes
cpan> install File::Tail
cpan> quit

위 설치 과정이 모두 끝나면 Mailgraph을 살펴보겠습니다.

Mailgraph의 최근 버전을 갖고 있는지 확인합니다.

david@toys david $ wget http://people.ee.ethz.ch/~dws/software/mailgraph/pub/mailgraph-1.8.tar.gz

압축을 풀고 해당 디렉터리로 이동합니다.

david@toys david $ tar -xvzf mailgraph-1.8.tar.gz
david@toys david $ cd mailgraph-1.8

Mailgraph 설정

mailgraph-init 스크립트를 설정에 맞게 수정합니다. MAIL_LOG와 RRD_DIR에 메일 로그 위치와 mailgraph.cgi가 위치할 웹 디렉터리를 지정합니다.

david@toys mailgraph-1.8 $ vi mailgraph-init
MAIL_LOG=/var/log/mail.log
RRD_DIR=/var/www/virtual/cgi-bin/toys.example.com/cgi-bin/

mailgraph-init 예제 스크립트를 수정했으면, 다음과 같이 파일을 복사합니다.

david@toys mailgraph-1.8 $ sudo cp mailgraph.pl /usr/local/bin/mailgraph.pl

실제 그래프를 보여주는 mailgraph.cgi를 적절한 cgi-bin 디렉터리에 복사합니다.

david@toys mailgraph-1.8 $ cp mailgraph.cgi /var/www/virtual/toys.example.com/cgi-bin/

실행에 필요한 모든 것은 mailgraph-init에서 처리합니다. 그러나 내가 다운받은 스크립트는 실행파일로 설정되어 있지 않았으므로 mailgraph-init의 권한을 변경했습니다.

david@toys mailgraph-1.8 $ chmod 755 mailgraph-init
david@toys mailgraph-1.8 $ sudo ./mailgraph-init start

브라우저를 열고 cgi-bin 디렉터리에 있는 mailgraph.cgi 파일을 실행합니다. Mailgraph 이미지를 볼 수 있다면 설치가 성공한 것이며, 그렇지 않다면 설치 과정중에 오타가 있지 않았나 자세히 살펴보기 바랍니다.

부트시에 mailgraph-init이 실행되길 원한다면 rc.local 파일이나 배보판의 설치 스크립트에 다음을 복사해서 붙여넣습니다. 일반적으로, rc.local에서 mailgraph-init을 실행하는 것이 가장 쉬운 방법입니다.

/etc/init.d/mailgraph-init start

모든 것을 마쳤다면, 그림1과 같은 그래프를 볼 수 있습니다.

그림1
그림1. Mailgraph 그래프

파란색과 녹색선으로 그려진 그래프를 보지 못했다고 해서 놀라지마라. 좋은 그래프가 생성되려면 시간이 걸립니다. Mailgraph를 몇시간 동안 실행시켜 두면 제대로 된 그래프가 생성됩니다. MTA가 메일을 처리한다면 Mailgraph는 그래프에 선을 그리고, 선 밑에는 숫자를 표시합니다.

만약 Mailgraph가 동작하지 않는 것처럼 보이거나, 버그를 발견했다고 생각된다면 메일 제목을 subscribe로 하여 mailgraph-request at list.ee.ethz.ch로 이메일을 보내어 메일링 리스트에 가입하여 질문할 수 있습니다. 질문을 할 때는 설치 과정에 대한 구체적인 정보를 포함해야 합니다.

분석하기

Mailgraph가 설치되었다면, MTA 분석의 귀중한 리소스가 될 것입니다. 설치하자마자 제대로 분석할 수 있는 것은 아니지만, 필터링 설치 등이 제대로 동작하는지 테스트하는데 이용할 수 있습니다.

예를 들어, 그림2의 그래프는 몇 가지 사실을 알려줍니다.

그림2
그림2. 주간 오류 통계
  • MTA의 수신 거부율이 매우 높습니다. 원인에는 몇 가지 요인이 있을 수 있습니다. - 아마도 header_checks를 포괄적으로 설정한 경우라든가, 사용중인 RBL에 등록된 호스트에 연결하려는 경우 일 수 있습니다. 거부율이 계속해서 증가한다면, 메일 로그에서 수상한 부분이나 메일 전달에 있어서 발생하는 문제점을 확인해보는 것이 좋습니다.

  • bounce는 어떤 경고도 설정하지 않지만, 의심스럽다면 bounce에 대한 원인을 찾아보는 것이 좋습니다.
    역주: bounce mail이라는 것은 상대방이 수신을 거부했을 때 송신자(From)에게 재전송되는 메일을 의미한다. bounce mail을 이용한 스팸은 스팸 발송자가 ccc.com의 메일 서버를 이용해서 송신자(From) user@aaa.com과 수신자(To) user@bbb.com를 설정하여 스팸을 전송하면 user@bbb.com이라는 사용자가 없으면 그 메일은 user@aaa.com에게 전달되는 것을 이용한 것이다. 즉, user@aaa.com이라는 무고한 사용자는 스팸을 받게 된다. 따라서, bounce 수치가 지나치게 높다면 누군가가 독자의 메일 서버를 이용해서 스팸을 전송하는 경우가 된다.

  • MTA에 수신된 바이러스는 정상이며, 바이러스 스톰(storm)에 대한 징후는 없지만 fleshclam을 사용하여 ClamAV 데이터베이스를 업데이트하는 것이 좋습니다. ClamAV 데이터베이스를 항상 최신으로 유지하도록 합니다.

  • 이번주에는 스팸이 거의 없었기 때문에 경고가 발생하지 않았습니다. 수신 거부율이 높기 때문에 스팸 수가 낮을 수도 있지만, header_chekcs 설정 때문에 합법적인 메일을 거부하는 경우도 있을 수 있습니다. 사용자로부터 스팸 메일이 많다거나, 메일이 도착하지 않는다는 소리를 듣게 되면, SpamAssastin을 조사하고, 새로운 규칙을 추가하거나, header_checks의 특정 부분을 제거하여 보다 많은 메일을 수신할 수 있게 재설정할 필요가 있습니다.
Mailgraph를 사용하여 발생하는 공격을 규명할 수 있으며, 피해에 대한 사후 평가를 할 수 있습니다. 예를 들어, 전용 메일 서버를 운영하고 있고, 평균 부하가 급상승하기 시작한다면 Mailgraph를 살펴보는 것 만으로 MTA가 수신하는 메일의 종류가 스팸, 거부, 바운스, 바이러스인지 알 수 있습니다. 어떤 메일이 공격인지 알 수 있으며, 메일 로그에서 의심스러운 호스트를 찾아내어 파이어월에서 걸러내거나 RBL에서 공격 호스트를 차단하는 것과 같은 조치를 취할 수 있습니다. 이처럼 앞을 내다보고, 초기에 적절한 조치를 취함으로서 사용자들로부터 이메일이 느리다고 말하는 영구가 발생하지 않게 될 것입니다.

한가지 더

여러 개의 호스트를 한번에 모니터링하기 위해 다양한 Mailgraph 설치로부터 모든 이미지를 포함하는 하나의 인덱스 페이지를 만들 필요가 있습니다. 하나로 통합된 인덱스 페이지를 만들기 위해 mailgraph.cgi의 소스를 보고, 이미지 링크를 훔쳐오면 됩니다. 이와 같이 변경한 결과는 그림3에서 볼 수 있습니다.

그림3
그림3. 통합된 서버 통계 페이지
TAG :
댓글 입력
자료실