강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

clamav를 이용한 Viruswall 설치 방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

clamav를 이용한 Viruswall 설치 방법

 


바이러스 필터링을 위해서는 앞에서 살펴본 방법과 같이 메일을 수신하는 서버에서 메일 데몬과 직접 결합하여 송수신되는 메일의 바이러스 여부를 모니터링 하는 방법도 있지만, 별도의 서버에 필터링 모듈을 설치하여 메일들이 직접 서버에 전달되기 전에 필터링 서버를 거치도록 설정함으로써 바이러스 메일은 차단되고, 정상적인 메일만 원래의 메일 서버로 전달되도록 구성하는 방법도 있다.

 

이러한 원리로 동작하는 서버를 바이러스 월(viruswall)이라고 하며 대부분의 상용 스팸/바이러스 장비(appliance)에서 사용하는 방법이다.

아래 그림을 보면 원래의 메일 서버인 mail.server.com으로 전달되기 전에 먼저

viruswall.server.com 서버를 거치도록 하는 것을 알 수 있다.

 

이는 DNS MX 설정을 변경하면 가능한데, 역시 clamav를 활용하여 설정하는 방법에 대해 살펴보도록 하자.

 

ce496f943b7906781e23d3aa923c67c8_1670220609_1658.png
 

[그림] viruswall 구성도

 

3.5.1 바이러스월의 용도

 

대부분의 viruswall은 다음과 같은 경우 사용이 가능하다.

 

* 메일서버에 바이러스 필터링 모듈 설치가 불가능한 OS인 경우

만약 메일 서버가 Windows Server이거나 Unix등 필터링 프로그램을 설치할 수 없는 경우 달리 방법이 없을 것이다.

이러한 경우 위 그림과 같이 기존의 형태를 유지한

채 모든 메일이 바이러스 월을 먼저 거쳐 가도록 설정하면 될 것이다.

 

* 여러 대에 흩어져 있는 도메인을 모두 필터링 설정하고자 할 경우

이러한 경우 각각의 서버에 모두 필터링 모듈을 설치하여야 하므로 여간 번거롭지 않

을 수 없다.

 

이러한 경우 DNS를 변경하여 모든 메일이 바이러스 월을 먼저 거쳐가도 록 설정하면 될 것이다.

 

* 메일 서버가 극도의 안정성을 추구하고자 할 경우

필터링 모듈을 직접 운영 중인 서버에 설치하면 어느 정도의 부하를 유발하게 되고,

심할 경우 서비스 장애를 초래할 수도 있다.

 

이러한 경우 필터링 프로그램 설치가 오히

려 더 큰 문제를 유발하는 격이 되므로 메일 서버의 안정성을 유지하면서 바이러스

필터링을 하고자 한다면 바이러스 월을 사용하는 것이 좋다. 만약 바이러스월에 장애가

발생하여 서버가 다운되는 경우에는 바이러스 월을 통과하지 않고 원래의 메일 서버로

바로 전송되므로 최소한 메일이 유실되는 일은 없을 것이다.

 

그렇다면, 특정 도메인의 메일이 메일 서버로 전달되기 전에 별도로 지정한 바이러스월 서버로 전달되도록 하려면 어떻게 하여야 할까? 이는 앞에서 살펴본 대로 DNS에서 MX 레코드를 수정하는 방법으로 가능하다.

 

, 기존의 MX 설정이 다음과 같다면

#dig @ns.dacom.co.kr server.com mx

server.com 3600 IN MX 10 mail.server.com.

 

아래와 같이 조정하면 될 것이다.

이러한 경우 메일은 MX 레코드 값이 작은 서버로 먼저 전달되므로 MX 값이 0인 바이러스월 서버로 먼저 메일이 발송될 것이다.

만약 바이러스월 서버가 다운되거나 25번 포트가 정상 작동하지 않는다면 다음 MX 레코드 값인 mail.server.com 으로 메일이 전달될 것이다.

 

#dig @ns.dacom.co.kr server.com mx

 

server.com. 3600 IN MX 0 viruswall.server.com.

server.com. 3600 IN MX 10 mail.server.com.

 

위와 같이 구성하려면 DNS 서버에서의 zone 파일은 다음과 같을 것이다.

$TTL 1D

@ IN SOA ns.server.com. root.server.com. (

2008020730 ; Serial

28800 ; Refresh(8 hr)

14400 ; Retry(4 hr)

3600000 ; Expire(6 weeks)

300 ) ; Minimum

IN NS ns.server.com.

IN MX 10 mail

IN MX 0 viruswall

mail IN A 192.168.64.2

viruswall IN A 192.168.64.10

 

이제 DNS에서의 설정은 끝났으므로 바이러스월 서버에서 설정만 하면 된다.

 

 

 

 

3.5.2 바이러스월 설정

 

바이러스월 서버에서의 clamav 설치 및 설정은 앞에서 살펴본 내용과 동일하다. 다만 위에서 살펴본 DNS에서의 MX 값 변경 및 바이러스월로 사용할 서버에서의 /etc/mail/access만 설정하면 간단히 완료된다.

 

, 위와 같이 바이러스월 서버인 viruswall.server.com 에서는 /etc/mail/access에 바이러스를 검사할 도메인에 대해 아래와 같이 RELAY만 설정해 주면 된다.

 

 

 

server.com RELAY

antihong.com RELAY

superuser.co.kr RELAY

 

이후 access 파일을 db로 만들기 위해

#makemap hash /etc/mail/access < /etc/mail/access를 실행한다.

 

 

이제 바이러스월로 들어온 메일 중 바이러스 메일은 삭제되거나 별도로 쌓이고 정상 메일만 메일서버로 전달되게 된다.

 

그런데, 이렇게 바이러스 월을 설정한 이후에도 바이러스 메일이 많이 줄기는 했지만 여전히 들어오는 경우가 있다.

 

이러한 경우에는 메일의 헤더를 살펴보아야 정확한 원인을 알 수 있는데, 메일 헤더를 분석하는 방법은 3.7절을 참고하기 바란다.

 

메일 헤더에서 Received: from 부분을 보면 메일이 전송되는 순차적인 경로에 대해 확인할 수 있는데, 헤더를 보면 바이러스월을 거친 메일과 그렇지 않은 메일이 있을 수 있다.

 

바이러스 월을 거친 바이러스 메일은 그야말로 바이러스 월에서 미처 바이러스로 인식하지 못했거나 바이러스 정보가 제때 업데이트 되지 않아 바이러스로 인식하지 못했기 때문에 발생한 것인데, 실제 업데이트는 자동으로 되기 때문에 이러한 경우는 거의 없다.

 

그렇다면 바이러스월을 아예 거치지 않고 메일서버로 직접 들어온 바이러스 메일은 무엇인가? 이는 앞에서 언급한 바와 같이 일부 바이러스 메일의 경우 MX 알고리즘을 무시하고 아예 MX 레코드에 있는 모든 서버로 바이러스를 발송하거나 또는 첫 번째 MX 대신 바로 두 번째나 세 번째 MX로 직접 발송하기 때문이다.

왜냐하면 웜 바이러스의 경우 소스코드의 사이즈를 줄이기 위해 아예 MX 레코드를 계산하는 부분을 빼어 메일 발송 과정을 단순하게 하려고 하거나, MX를 계산할 때는 MX 레코드가 여러 개인 경우 수치가 낮은 메일 서버는 바이러스월일 가능성이 높기 때문에 첫 번째나 두 번째를 건너뛰고 바로 메일 서버로 전송하기 때문이다.

 

따라서 이러한 경우에는 다음과 같이 대처할 수 있을 것이다.

각각의 방법이 일장일단이 있으므로 각자 적절한 방법을 사용하기 바란다.

 

 

 

기존의 바이러스월과 함께 원래 메일 서버에도 바이러스 필터링 모듈을 설치하여 운영한다.

 

, clamav를 이용한 바이러스월과 함께 원래의 메일 서버에 clamav를 설치하는 것으로 이러한 경우 중복 설치로 인하여 불필요한 부하가 유발될 수 있다.

 

 

방화벽을 이용하여 원래 메일 서버의 25번 포트에 대해 바이러스월 소스ip 에서만 접근 가능하도록 설정한다.

 

왜냐하면 일반적인 메일은 모두 바이러스월을 거쳐 와야 하기 때문이다.

따라서 바이러스 월을 거쳐서 오는 메일만 메일 서버에서 수신하도록 하고, 직접 들어오는 메일은 차단하도록 한다.

 

이러한 경우 MX가 높은 메일서버로 전송시도한 메일은 반송되거나 사라지는 것이 아니라 바이러스월 메일서버로 자동 전송되게 된다.

 

이는 대부분의 상용 솔루션에서 사용하는 방법인데, 그러나 만약 바이러스월 서버가 다운되거나 25/tcp 포트가 다운이 되었을 경우에는 메일이 반송될 수 있으므로 주의하여야 한다.

 

물론 중요한 사이트라면 L4스위치를 이용, 이중화하거나 DNS 기반 라운드로빈으로 바이러스월 서버를 이중화하면 될 것이다.

그리고 이때 iptables를 이용할 경우 다음과 같이 설정하면 된다.

 

 

설정 예)

바이러스월 : 192.168.1.2

메일서버 : 192.168.1.3

 

바이러스월 : 모든 소스ip에 대해 25/tcp 접속을 받아들인다.

iptables -A INPUT -p tcp -s 0/0 --dport 25 -j ACCEPT

 

메일서버 : 바이러스월에서의 25/tcp 접속만 받아들인다.

iptables -A INPUT -p tcp -s 192.168.1.2 --dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 --dport 25 -j DROP

 

# dig imbc.com mx

 

imbc.com. 7200 IN MX 0 spam.mbc.co.kr.

imbc.com. 7200 IN MX 10 star.mbc.co.kr.

 

외부에서는 star.mbc.co.kr25/tcp로 접속이 안 되고, spam.mbc.co.kr로만 접속이된다.

 

 

 

DNSZone 정보에서 바이러스 월에 대한 MX만 남기고, 원래 메일 서버에 대한 MX 를 삭제한 후 바이러스 월에서 원래의 메일 서버 IPrelay 하도록 설정한다.

 

따라서 외부에서는 원래 메일서버의 IP가 보이지 않게 되므로 직접 메일 발송이 불가능하게 된다.

 

 

그러나 앞의 경우와 마찬가지로 만약 바이러스 월 서버가 다운되거나 25/tcp 포트가 다운될 경우에는 메일이 반송될 수 있으므로 바이러스월 서버를 2중화할 경우 가용성을 더욱 극대화할 수 있을 것이다.

 

# dig kbs.co.kr mx

 

kbs.co.kr. 3600 IN MX 10 spamcenter.kbs.co.kr.

 

 

 

바이러스월과 큐잉서버를 함께 이용하는 방법이 있다.

 

MX 설정시 1차는 바이러스월로, 2차는 큐잉서버로 설정하여 원래의 메일 서버는 MX 질의에서 보이지 않도록 한다.

 

 

이렇게 하면 1차 바이러스월이나 2차 큐잉 서버로만 메일이 전송되는데, 만약 2차 큐잉 서버로 발송된 메일은 일단 큐잉된 후 MX값에 우선권이 있는 1차 바이러스월로 전송하게 되고, 바이러스월에서는 바이러스 체크 후 원래의 메일 서버로 포워딩하면 된다.

 

그러나 DNSMX에는 바이러스월과 큐잉서버만 있을 뿐 메일을 수신할 메일 서버의 정보는 없으므로 바이러스월에서 원래의 메일 서버로 포워딩할 수 없게 된다.

 

따라서 바이러스월에는 별도의 DNS 서버를 구축하고 해당 도메인의 MX를 조정하여 원래의 메일 서버에 전송되도록 하면 된다.

 

, 이렇게 구성할 경우 해당 도메인의 DNS 정보는 원래의 DNS와 바이러스월 이렇게 두 곳에 설정되어야 한다.

 

또는 DNSview 기능을 이용하여 동일한 도메인이라도 질의ip에 따라 다른 정보로 보이도록 설정하는 방법을 사용해도 된다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,032 명
  • 현재 강좌수 :  35,772 개
  • 현재 접속자 :  98 명