[시큐리티 팁!팁!팁] ClamAV로 안전한 안티 바이러스 메일 서버 구축하기
  출판일 :2006년 9월호

 메일 송수신을 하다 보면 하루에 수십 통씩 쌓이는 바이러스 메일 때문에 고생할 때가 많다. 물론 각 PC마다 백신 프로그램을 설치해 해결할 수도 있다. 하지만 비용도 만만치 않고, 혹 설치했다 하더라도 매번 업데이트를 하도록 설정해야 하기 때문에 무척 번거롭다.

홍석범 | 오늘과 내일 차장

그렇다면 어떤 방법을 통해 바이러스 메일을 차단해야 할까. 서버차원에서 웜이나 바이러스 메일을 차단하는 방법이 있다. 특히 라이선스나 비용부담 없이 무료로 제공되면서도 바이러스에 대한 빠른 업데이트를 제공한다면 더할 나위가 없을 것이다. 이 때 고려해 볼 수 있는 것이 바로 ClamAV라는 프로그램인데, 실제 많은 상용 메일 솔루션에서 활용하고 있다. ClamAV의 특징은 다음과 같다.


 - GNU 라이선스로 자유롭게 이용할 수 있다.
 - 빠른 스캔을 제공한다.
 - 리눅스와 FreeBSD의 경우 온 액세스(On-Access) 스캔 기능도 제공한다.
 - 6만여 개 이상의 바이러스와 웜 등을 인식한다.
 - RAR이나 ZIP, gzip, TAR 등 압축된 파일에 대한 탐지도 가능하다.
 - 많은 써드파티 애플리케이션이 개발돼 제공되고 있다.
 
·ClamAV 설치
이제 ClamAV로 안티 바이러스용 메일 서버를 구축해보자. ClamAV가 작동하기 위해서는 먼저 zlib와 zlib-devel 패키지와 GCC 컴파일러가 존재해야 한다. 대부분 기본적으로 설치돼 있으므로 별도로 설치하지 않아도 될 것이다.
가장 간편하게 설치할 수 있는 방법은 기존의 sendmail에 libmilter 형태로 설치하는 것이다. 이를 위해서는 sendmail 뿐만 아니라 버전에 맞는 sendmail-devel과 sendmail-cf 패키지도 설치돼 있어야 한다. 만약 설치돼 있지 않으면 다음 명령어로 설치하기 바란다.


# yum -y install sendmail-cf*
# yum -y install sendmail-devel*


이후 홈페이지에서 최신 버전의 ClamAV를 다운로드해 설치하도록 한다.


# tar  zxvfp clamav-0.8x.x.tar.gz


다음으로는 ClamAV가 작동하게 될 사용자를 생성한다. 별도로 인증을 하지 않으므로 ClamAV의 암호는 설정할 필요가 없다.


# adduser clamav


소스가 설치된 디렉토리에서 다음과 같이 현재 시스템에 맞도록 설정한다. 


# ./configure --enable-milter --prefix=/usr/local/clamav


이는 /usr/local/clamav 디렉토리에 설치하되 milter 기능을 활성화해 설정하겠다는 의미다. 이후 컴파일하고 설치한다.


# make; make install


그러면 /usr/local/clamav/ 디렉토리에 관련 파일들이 설치된 것을 확인할 수 있을 것이다.

이제 sendmail과 연동하기 위해 ClamAV-milter를 설정하자. ClamAV-milter는 sendmail을 위해 개발된 빠른 속도의 이메일 스캐너다.
sendmail.cf 파일에 직접 추가할 때는 다음과 같이 설정하면 된다.


O InputMailFilters=clmilter
Xclmilter, S=local:/var/run/clamav/clmilter.sock,F=,T=S:4m;R:4m


sendmail.mc 파일에 추가할 경우에는 다음과 같이 설정한다.


INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter')


mc 파일에 추가한 뒤에는 m4로 sendmail.cf를 다시 생성하도록 한다.


# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


설정이 끝난 뒤, 본격적으로 실행을 하려면 /usr/local/clamav/etc/clamd.conf 파일을 열어 상단에 있는 Example 부분에 주석(#)을 추가한다. 이후 다음과 같이 ClamAV-milter를 실행해보자.


# /usr/local/clamav/sbin/clamav-milter -lo /var/run/clamav/clmilter.sock


마지막으로 netstat -lnp를 실행했을 때, 소켓 형태를 띠고 있으면 성공한 것이다.


unix  2      [ ACC ]     STREAM     LISTENING     282731 24398/clamav-milter /var/run/clamav/clmilter.sock


만약 소켓 파일이 생성되는 /var/run/clamav 디렉토리에 적당한 소유권과 퍼미션이 없다면, 다음과 같은 에러가 나면서 작동하지 않으므로, ClamAV와 같은 적당한 권한을 주는 것이 좋다.


Aug 14 14:00:37 cdn-w1 clamav-milter: ClamAv: Unable to bind to port /var/run/clamav/clmilter.sock: 허가 거부됨
Aug 14 14:00:37 cdn-w1 clamav-milter: ClamAv: Unable to create listening socket on conn /var/run/clamav/clmilter.sock


이제 sendmail을 재가동하면 기본적인 설정이 끝났다는 것을 확인할 수 있다.


·자동 업데이트 설정하기
ClamAV에서는 바이러스에 대한 정보를 업데이트하기 위해 FreshClam이라는 것을 제공하고 있다. 이 프로그램은 정해진 시각에 database.clamav.net에 접속해 서버에 설치된 정보와 비교해 업데이트 여부를 체크한다. 업데이트에 대한 기본정보는 다음과 같이 설정해 /var/log/clam-update.log 파일에 남도록 한다.


# touch /var/log/clam-update.log
# chmod 600 /var/log/clam-update.log
# chown clamav /var/log/clam-update.log


아무런 설정없이 FreshClam을 실행하면 다음과 같이 바이러스 정보를 최신 정보로 업데이트하게 되며, 관련 DB 파일은 /usr/local/clamav/share/clamav에 저장된다.  


# ./freshclam
ClamAV update process started at Mon Aug 14 11:12:32 2006
main.cvd is up to date (version: 39, sigs: 58116, f-level: 8, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 1655, sigs: 7324, f-level: 8, builder: sven)
Database updated (65440 signatures) from database.clamav.net (IP: 61.205.61.201)


최신 정보로 업데이트된 후 재실행하면 다음과 같은 화면이 보인다.


 


# ./freshclam
ClamAV update process started at Mon Aug 14 11:17:50 2006
main.cvd is up to date (version: 39, sigs: 58116, f-level: 8, builder: tkojm)
daily.cvd is up to date (version: 1655, sigs: 7324, f-level: 8, builder: sven)


자동으로 업데이트하도록 설정하는 것에는 두 가지 방법이 있다.
우선 다음과 같이 단순히 FreshClam을 데몬 형태로 실행하는 방법이 있다. 이 경우 /usr/local/clamav/etc/freshclam.conf에 설정된 조건에 따라 실행되는데, 기본적으로 매 2시간씩 업데이트 여부를 체크하게 된다.
 
 # freshclam -d


다음으로는 Cron에 설정하는 방법이 있다. 이런 경우 /etc/crontab 등에 다음과 같이 설정하면 4분마다 업데이트 여부를 체크한다.
 
 4 * * * * /usr/local/clamav/bin/freshclam --quiet


·ClamAV 테스트하기
이제 ClamAV가 바이러스 메일을 정상적으로 차단하는지를 확인하기 위해 바이러스 메일을 찾아 ClamAV가 설치된 서버로 전송해 보자. 서버에 바이러스 메일이 전송될 때 maillog 파일을 보면 다음과 같은 정보를 확인할 수 있다.


sendmail[25038]: k7E5v4qD025038: Milter add: header: X-Virus-Status: Infected with Worm.Bagz.C

sendmail[25038]: k7E5v4qD025038: Milter: data, reject=554 5.7.1 virus Worm.Bagz.C detected by ClamAV - http://www.clamav.net

sendmail[25038]: k7E5v4qD025038: to=<root@cdnlog.tt.co.kr>, delay=00:00:01, pri=237759, stat=virus Worm.Bagz.C detected by ClamAV - http://www.clamav.net
 
여기서 Worm.Bagz.C라는 바이러스에 감염된 메일이 발견돼 이 메일을 거부하고, 로그에 남긴 것을 확인할 수 있다. 잠시 후 메일 발송자에게 다음과 같은 반송 메일이 도착할 것이다.

//(화면 1) 메일 발송자에게 도착한 반송 메일


·인식 가능한 바이러스 이름 확인하는 방법
ClamAV는 6만여 개 이상의 바이러스를 인식할 수 있다. 만약 바이러스 DB에 있는 바이러스 명을 조회하려면 다음과 같이 실행하고 잠시 기다리면 곧 6만여 개의 목록을 확인할 수 있다.


# sigtool --list-sigs
HTML.Phishing.Bank-493
HTML.Phishing.Bank-494
HTML.Phishing.Bank-495
W97M.Sappatra
JS.Feebs.AM
HTML.Phishing.Pay-141
HTML.Phishing.Pay-142
HTML.Phishing.Bank-496
Trojan.Downloader.Small-1396
Trojan.Proxy.Ranky-76
Trojan.W32.Pigeon-16


·ClamAV-milter의 고급기능 활용
ClamAV-milter의 메인 페이지를 보면 앞에서 언급되지 않은 고급기능을 활용할 수 있음을 알 수 있다. 유용한 몇 가지만 살펴보자.


- 송수신되는 모든 메일을 체크하고자 할 때
앞에서 ClamAV-milter를 실행할 때, 기본적으로 다음과 같이 실행했다. 여기서 'lo'의 의미는 'local'과 'outgoing'으로, 이 서버를 통과하는 모든 메일을 체크한다는 의미다. 


# /usr/local/clamav/sbin/clamav-milter -lo /var/run/clamav/clmilter.sock


- 통보 기능을 사용하지 않고자 할 때
기본적으로 바이러스 메일이 확인되면 ClamAV-milter는 해당 메일을 반송하고 관리자에게도 바이러스 메일에 대해 통보해 준다. 하지만 이 경우 불필요한 부하를 유발할 수도 있고, 발신자 주소가 위조되는 경우가 많다. 이 때, -N 옵션을 추가하면 메일을 반송하지 않는다.


# /usr/local/clamav/sbin/clamav-milter -Nlo /var/run/clamav/clmilter.sock


이때 maillog를 보면 다음과 같은 정보가 나오고, 발송자와 이메일 관리자에게 바이러스에 대한 메일을 발송하지 않게 된다.
 
Aug 14 15:42:00 cdnlog sendmail[25449]: k7E6fxX2025449: Milter: data, discard
Aug 14 15:42:00 cdnlog sendmail[25449]: k7E6fxX2025449: discarded


- 헤더에 추가를 원하지 않을 때
기본적으로 ClamAV를 통과하면 다음과 같은 부분이 헤더에 추가된다. 만약 이 부분이 추가되는 것을 원하지 않을 경우 ClamAV-milter 옵션에 -n을 추가해 실행하면 된다. 


X-Virus-Scanned: ClamAV version 0.88.4, clamav-milter version 0.88.4
X-Virus-Status: Clean


- 바이러스 메일을 특정한 사용자에게 포워딩하고자 할 때
기본적으로 바이러스 메일을 삭제하지 않고 특정 사용자에게 포워딩할 수 있다. 이 경우 -Q 옵션을 추가해 실행하면 되는데, 다음과 같이 실행할 경우에는 바이러스 메일을 발견하면 삭제하지 않고 antihong@antihong.org으로 포워딩한다.


# /usr/local/clamav/sbin/clamav-milter  -lo -  /var/run/clamav/clmilter.sock


지금까지 sendmail 기반의 메일 서버에 ClamAV를 활용해 안티 바이러스 시스템을 구축하는 방법에 대해 살펴봤다. 이외에도 더 많은 기능을 활용할 수 있으므로 ClamAV에 대한 자세한 내용은 홈페이지를 참고하기 바란다.  월간 온더넷 2006년 9월호

Creative Commons License
Creative Commons License

이올린에 북마크하기(0) 이올린에 추천하기(0)
이 글의 관련글
2008/09/19 11:04 2008/09/19 11:04
Posted by Jaehun

트랙백 보낼 주소 : http://help.jaehun.org/trackback/91

댓글을 달아주세요

[로그인][오픈아이디란?]

<< PREV : [1] : ... [9] : [10] : [11] : [12] : [13] : [14] : [15] : [16] : [17] : ... [101] : NEXT >>

BLOG main image

카테고리

전체 (101)
(11)
OS (54)
게임 (1)
여행 (8)
영화 (0)
보안 (14)
지식 (9)
취미 (4)
자료실 (0)

최근에 받은 트랙백

달력

«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

글 보관함

Total : 26168
Today : 202 Yesterday : 196

374

187

-30 days

today : 202

Statistics Graph

17명이 RSS를 구독하고 있습니다.