Sun Java System Messaging Server 6.3 관리 설명서

14.6 ClamAV 사용

Messaging Server는 무료로 사용할 수 있는 인기 있는 타사 바이러스 스캐너인 ClamAV를 사용하여 바이러스와 트로이 목마에 감염된 메시지를 감지합니다. 새로 만들어진 바이러스를 감지하기 위해 ClamAV에서 사용하는 바이러스 서명은 ClamAV 소프트웨어 패키지에 제공되는 freshclam 유틸리티를 사용하여 자동으로 업데이트할 수 있습니다.

ClamAV에 대한 자세한 내용은 ClamAV 웹 사이트를 참조하십시오.

14.6.1 ClamAV/Messaging Server 작동 원리

Messaging Server에 통합된 ClamAV에서는 ClamAV 패키지의 일부로 제공되는 clamd 데몬을 활용합니다. clamd는 소켓에서 메시지 처리 요청을 수신하는 다중 스레드 프로세스입니다. 이 프로세스는 메시지를 처리한 후에 응답을 반환하고 연결을 닫습니다. ClamAV 설치에서 클라이언트 부분인 clamdscan은 사용되지 않습니다. 이 기능은 Messaging Server의 일부인 libclamav.so라는 공유 라이브러리에서 수행됩니다.

libclamav.so는 Brightmail SDK에서와 동일한 방법으로 로드됩니다.

14.6.2 ClamAV 요구 사항 및 사용 시 고려 사항

ClamAV는 자체 시스템, 단일 시스템 배포의 Messaging Server와 동일한 시스템 또는 2계층 배포의 MTA와 동일한 시스템에서 실행할 수 있습니다. LMTP(Local Mail Transfer Protocol)가 MTA와 메시지 저장소 사이에서 사용되는 경우 MTA에서 필터링을 호출해야 합니다. 메시지 저장소에서는 필터링을 호출할 수 없습니다. MTA와 메시지 저장소 사이에서 SMTP를 사용하는 경우 두 곳 모두에서 SMTP를 호출할 수 있습니다.

ClamAV를 실행 중인 서버 그룹을 사용하려면 해당 그룹의 앞에 로드 밸런서를 사용합니다. MTA는 ClamAV 서버에 대해 단일 주소로만 구성됩니다.

기타 고려 사항

14.6.3 ClamAV 배포

ClamAV를 배포하려면 다음 단계를 수행합니다.

ProcedureClamAV를 사용하여 바이러스나 트로이 목마에 감염된 전자 메일의 Jettison 수행

다음 예에서는 ClamAV에서 바이러스나 트로이 목마가 포함된 것으로 발견된 모든 메시지에 대해 jettison을 수행합니다. 답신 문자열은 사용되지 않습니다.

  1. ClamAV 구성 파일을 만듭니다.

    이 파일의 이름과 위치는 단계 2에서 지정됩니다. clamav.opt라는 이름을 사용하는 것이 좋습니다. 이 파일은 다음과 같은 행으로 구성되어 있습니다.


    # more /opt/SUNWmsgsr/config/clamav.opt
    ! ClamAV Settings
    debug=1
    host=127.0.0.1
    port=3310
    mode=1

    debug=1은 ClamAV 라이브러리에서 디버깅을 설정합니다.

    hostportclamd가 실행 중인 시스템의 이름과 clamd가 받는 요청을 수신하는 포트를 지정합니다.

    mode=1은 바이러스에 감염된 전자 메일이 감지된 경우 ClamAV 플러그 인이 ClamAV 결과 문자열을 답신으로 반환하도록 지정합니다.

  2. option.dat 파일을 수정합니다.

    option.dat 파일에 다음 행을 추가합니다.


    ! ClamAV settings 
    spamfilter2_config_file=/opt/SUNWmsgsr/config/clamav.opt 
    spamfilter2_library=/opt/SUNWmsgsr/lib/libclamav.so 
    spamfilter2_string_action=data:,require ["jettison"]; jettison;

    spamfilter2_config_file은 ClamAV 구성 파일을 지정합니다.

    spamfilter2_library는 ClamAV 공유 라이브러리를 지정합니다.

    spamfilter2_string_action은 바이러스에 감염된 전자 메일에 대해 수행할 시브(Sieve) 작업을 지정합니다.

  3. 필터링할 메시지를 지정합니다.

    로컬 메시지 저장소로 들어오는 모든 메시지를 필터링하려면 ims-ms 채널에 destinationspamfilterXoptin 바이러스 키워드를 추가하여 imta.cnf 파일을 변경합니다.


    !
    ! ims-ms 
    ims-ms defragment subdirs 20 notices 1 7 14 21 28 backoff "pt5m" "pt10m"
    "pt30m" "pt1h" "pt2h" "pt4h" maxjobs 4 pool IMS_POOL fileinto 
    $U+$S@$D destinationspamfilter2optin virus 
    ims-ms-daemon
  4. 구성을 다시 컴파일하고 서버를 다시 시작합니다.

    MTA만 다시 시작해야 합니다. stop-msg는 실행할 필요가 없습니다.


     # imsimta cnbuild
    # imsimta restart
  5. clamd 데몬을 시작합니다.

14.6.4 ClamAV 테스트

ClamAV를 테스트하려면 먼저 clamav.opt 파일에서 debug=1을 설정합니다. (imta.cnf.에서 채널별 master_debug 또는 slave_debug를 설정할 필요는 없습니다.) 그런 다음 테스트 사용자에게 EICAR 바이러스 문자열(http://www.eicar.org/anti_virus_test_file.htm)이 포함된 파일 첨부를 보냅니다. 이 문자열은 실제 바이러스를 첨부하지 않고도 바이러스 스캐너를 트리거하여 전자 메일을 바이러스에 감염된 것으로 인식할 수 있도록 설계되었습니다.


X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

테스트 로그를 검토합니다. msg-svr-base/data/log/tcp_local_slave.log* 파일은 다음과 비슷한 행으로 구성됩니다.


10:39:00.85: ClamAV callout debugging enabled; 
config /opt/SUNWmsgsr/config/clamav.opt
10:39:00.85: IP address 127.0.0.1 specified 
10:39:00.85: Port 3310 selected 
10:39:00.85: Mode 1 selected 
10:39:00.85: Field "Virus-Test: " selected 
10:39:00.85: Verdict "" selected 
10:39:00.85: Initializing ClamAV message context
 ... 
10:39:00.85: Creating socket to connect to clamd server 
10:39:00.85: Binding clamd socket 
10:39:00.85: Connecting to clamd server 
10:39:00.85: Sending ClamAV STREAM request 
10:39:00.85: Retrieving ClamAV STREAM response 
10:39:00.85: STREAM response: PORT 2003 
10:39:00.85: Creating socket to connect to clamd server data port 
10:39:00.85: Binding clamd data socket 
10:39:00.85: Connecting to clamd server data port 
10:39:00.85: Sending ClamAV the message 
10:39:00.85: Closing ClamAV data connection 
10:39:00.85: Reading ClamAV result 
10:39:00.87: Result line: stream: Eicar-Test-Signature FOUND 
10:39:00.87: Scan result: Message is infected 
10:39:00.87: Verdict line: Virus-Test: True ; Eicar-Test-Signature 
10:39:00.87: Closing connection to ClamAV 
10:39:00.87: Mode 1 verdict of Virus-Test: True ; Eicar-Test-Signature 
10:39:00.87: Mode 1 verdict of Virus-Test: True ; Eicar-Test-Signature
 ... 
10:39:00.87: Freeing ClamAV message context  

로그 파일이 위와 비슷한 행으로 구성되어 있지 않거나 clamd가 실행되고 있지 않은 경우 마지막 마침표(.)가 SMTP 서버로 보내진 후에 SMTP 대화 상자에 다음 오류 메시지가 반환됩니다.


452 4.4.5 Error writing message temporaries - Error 
connecting to ClamAV server

14.6.5 ClamAV 옵션

ClamAV 옵션 파일은 option=value 형식의 행으로 구성된 일반적인 메시징 서버 스타일의 옵션 파일입니다. 유일한 필수 옵션은 HOST입니다. 이 옵션은 clamd가 실행 중인 시스템의 이름으로 설정해야 합니다. clamd가 로컬 호스트에서 실행 중인 경우에도 이 옵션을 설정해야 합니다.

이 옵션 파일에 사용할 수 있는 추가 옵션은 다음과 같습니다.

표 14–7 ClamAV 옵션

옵션 

설명 

기본값 

DEBUG 

ClamAV 인터페이스 모듈에서 디버그 출력을 활성화하거나 비활성화합니다. (clamd 자체의 디버그 출력은 clamd 명령줄에 있는 옵션에 의해 제어됩니다.)값이 클수록 디버깅 출력이 많아집니다. 0을 설정하면 출력이 없습니다. 1은 기본 디버깅을 제공합니다. 2는 clamd에서 TCP 트래픽 로깅을 추가합니다.

FIELD 

ClamAV 결과 문자열 접두어를 지정합니다. ClamAV 결과 문자열은 일반적으로 다음 중 하나와 비슷합니다.  


Virus-Test: False 
Virus-Test: True ; Worm.Mydoom.I

FIELD 옵션을 사용하면 결과의 Virus-Test 부분을 변경할 수 있습니다. 빈 FIELD 값을 지정하면 ": "도 제거된다는 점에 주의해야 합니다.

“Virus-Test” 

MESSAGE_BUFFER_SIZE 

clamdscan/clamd 인터페이스의 특성으로 인해, ClamAV 플러그 인은 ClamAV로 메시지를 보내기 전에 메모리 버퍼에 메시지를 보관해야 합니다. 메모리 버퍼의 크기는 이 옵션에 의해 제어됩니다. 기본값은 1,048,576자입니다. 이 크기보다 긴 메시지는 잘리며 전체가 ClamAV로 전송되지 않습니다. 모든 메시지를 완전히 스캔하려면 이 값은 MTA가 받을 수 있는 최대 메시지 크기를 반영해야 합니다. 이 값을 줄이면 바이러스 스캔 시간을 절약할 수 있지만, 바이러스가 감지되지 않은 채 통과할 가능성이 있습니다.

1048576 

MODE

ClamAV 결과를 답신 정보로 변환하는 것을 제어합니다. 서로 다른 네 가지 모드를 사용할 수 있습니다. 

0 - 바이러스가 있는 메시지를 발견한 경우 VERDICT 옵션에 지정된 답신 문자열이 반환되고, 그렇지 않으면 기본 답신이 반환됩니다. VERDICT 옵션이 비어 있거나 지정되어 있지 않으면 null 답신이 반환됩니다.

1 - 바이러스가 있는 메시지를 발견한 경우 ClamAV 결과이 답신으로 반환되고, 그렇지 않으면 기본 답신이 반환됩니다.  

2 - 무조건적으로 ClamAV 결과 문자열을 답신으로 반환합니다. 기본 또는 null 답신이 반환되지 않으며 VERDICT 옵션이 사용되지 않습니다.

3 - 메시지에 바이러스가 있는 경우 ClamAV 결과 문자열이 반환되고, 그렇지 않으면 VERDICT 옵션에서 지정한 답신 문자열이 반환됩니다.

PORT

clamd가 실행 중인 포트를 지정합니다.

3310 

SOCKS_HOST

중간 SOCKS 서버의 이름을 지정합니다. 이 옵션을 지정하면 clamd가 직접 연결되지 않고 지정된 SOCKS 서버를 통해 연결됩니다.

3310 

SOCKS_PORT

중간 SOCKS 서버가 실행 중인 포트를 지정합니다. 

1080 

SOCKS_PASSWORD

SOCKS 서버를 통해 연결을 설정할 때 사용할 비밀번호를 지정합니다. 아이디/비밀번호가 필요한지 여부는 SOCKS 서버 구성에 따라 다릅니다. 

"" 

SOCKS_USERNAME

SOCKS 서버를 통해 연결을 설정할 때 사용할 아이디를 지정합니다. 

"" 

VERDICT

모드 0과 3에 사용되는 답신 문자열을 지정합니다.  

""