Complete Virtual Mail Server/amvisd spamassassin clamav/ko

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Complete Virtual Mail Server/amvisd spamassassin clamav and the translation is 100% complete.

Other languages:
English • ‎日本語 • ‎한국어 • ‎русский

도입부

스팸은 인터넷에서 더욱 문제가 될것이며 견고하고 탄탄한 해결책이 필요합니다. 스팸을 차단하는 유료 서비스가 있지만 필수는 아니며 이 글에서 언급하지 않겠습니다.

Postfix

방어의 최전선은 postfix 그 자체입니다. postfix는 스팸 또는 스패머를 차단하는 몇가지 기본 수단을 제공합니다. smtpd_client_restrictions를 활용하면 공개 DNS 블랙리스트를 활용할 수 있습니다. 다른 곳에 포함할 수 있는 DNS 블랙리스트는 세가지가 있습니다. 이 중 두가지는 상당히 정확한en 리스트입니다. 가장 중요한 한가지는 zen.spamhaus.org에 있으며 bl.spamcop.net 에 있는 목록을 백업으로 사용할 수 있습니다. 이들 목록을 postfix와 사용하는 방법은 매우 단순합니다. 이 도메인을 main.cf 파일에서 reject_rbl_client 설정에 추가하면됩니다:

파일 /etc/postfix/main.cfDNS 블랙리스트 활용
# Block spam using DNS blacklists
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net
참고
제대로된 측정을 위해 permit_mynetworkspermit_sasl_authenticated를 추가했습니다. 만약 다른 제한요소가 필요하거나 이미 사용중이라면, 제 위치에 두십시오.

Amavis

도입부

스팸 어쌔신과 ClamAV는 스팸과 바이러스를 차단하는 도구입니다만, amavis로 이들을 함께 묶어야합니다. amavis는 실제로 메일 서버처럼 동작하고, 메일을 받아들이며, 검사하고, 실제 메일 서버로 다시 보냅니다. 이 동작을 처리하려면 postfix에서 메일을 다시 받기 위해 실제로 대기해야합니다. 기본 25번 포트는 메일을 처음에 받는 경로입니다. 이 포트에서 10024번 포트를 쓰는 amavis로 보냅니다. amavis가 메시지를 잘 처리했다면 postfix의 다른 10025번 포트로 보냅니다. 이유는 명백합니다. 메일을 25번 포트에서만 받는다면 amavis로 다시 넘기고, 이 과정은 끊임없이 반복합니다. 분명히 10025번 포트에서 대기중인 postfix는 localhost와 같이 알고 있는 호스트에 대해 대기하며 더이상 스팸을 검사하지 않습니다.

참고
이 설정 때문에 약간 쉬울 수는 있지만 서로 다른 3개의 다른 호스트에서 3개의 메일 '처리자'를 보유하려면, 방화벽의 25번 포트에서 대기하는 첫번째 메일 서버를 보유할 수 있어야합니다. 이 서버는 amavis만을 실행하는 안전한 은폐 서버로 메일을 전달하고, amavis는 송신자의 메일을 메일 저장소로 보내는 내부 postfix 서버로 메일을 보냅니다.

설치

amavis는 이미 설치를 했어야 합니다만, 아직 설치하지 않았다면 이머지하십시오. 스팸 어쌔신과 clamav를 의존 요소로 끌어와야합니다.

root #emerge --ask mail-filter/amavisd-new

기본 설정

amavisd는 오류 투성이 옵션을 제공하며, 처리하려면 시간이 좀 걸립니다. 허나, /etc/amavisd.conf 설정 파일에 설명이 잘 되어 있으며, 분명하게 섹션으로 나뉘어 있습니다. 각 섹션은 필요한대로 살펴봅니다. 바꿔야 할 옵션은 가독성을 보장하기 위해 부분 부분 나누어서 언급합니다.

참고
설정 파일은 실제로 펄 코드이며, 파일을 편집하기 전 적절한 사전 경고를 숙지해야합니다.

예를 들어 amavisd를 foo 호스트에서 실행하지만 마찬가지로 다른 호스트에서도 동작한다면 amavisd는 postfix 실행 호스트와 동일한 호스트에서 실행할 필요가 없습니다. 또한 사용하는 도메인은 서버 자체를 식별하는 용도로만 사용하며, amavisd가 도메인을 검사하려고 하는건 아닙니다.

참고
amavis가 좀 복잡한데, 이 처럼 문제 해결이 복잡할 수 있습니다.

처음에는 실제 모든 검사를 비활성화하고 기록을 활성화하십시오. 또한 일부 기본값을 설정하십시오.

파일 /etc/amavisd.confspam 방지 기능 비활성, 기록 활성
@bypass_virus_checks_maps = (1);  # controls running of anti-virus code
@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code
# $bypass_decode_parts = 1;         # controls running of decoders&dearchivers
 
$mydomain = 'example.com';
$myhostname = 'foo.example.com';
 
$log_level = 5;              # verbosity 0..5, -d
참고
어떤 위반 요소로부터 정보를 받기 싫다면 virusalert@example.comspam.police@exampleundef로 바꿀 수 있습니다. 그렇지 않다면 이 전자메일 주소를 두어야합니다.

보통 postfix를 다시 시작하면 amavisd도 다시 시작합니다. 이제 amavisd에 초기 문제가 있는지 확인하기 위해 amavisd만 시작해야합니다.

root #/etc/init.d/amavisd start

amavisd를 Postfix에 연동

amavisd가 근본 동작 모드로 동작하면 이론적으로 메일을 그대로 통과시킵니다 postfix -> amavisd -> postfix 바인딩 시험은 완벽하게 이루어집니다.

우선, amavis가 메일을 넣을 2차 postfix 전송 단을 추가합니다. 대부분 옵션은 이미 확인을 했거나 아니면 혼동할 수 있으니, 빈 값이 기본값입니다.

파일 /etc/postfix/master.cfFilter mail through amavisd
localhost:10025 inet n  -       n       -       2       smtpd
  -o smtp_dns_support_level=enabled
  -o content_filter=
  -o myhostname=foo.example.com
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8

해당 위치의 전송 과정에서, localhost에서만 대기해야 하며, localhost에서 온 메일만 허용해야합니다. amavis를 다른 곳에서도 동작할 때 확장 해야겠지만, 어떤 내용이든 받아야합니다.

참고
maxprox은 위에서 2로 설정했습니다. 대기 데몬이 더 필요하면 값을 더 크게 할 수 있습니다. 하지만 amavis의 $max_servers 값과 일치해야합니다.

amavis가 어느정도 '존재함'을 고려할 수 있는 대상에 대해 다른 전송 과정을 추가합니다.

파일 /etc/postfix/master.cfamavis 전송 처리
amavis    unix  -       -       n       -       2       lmtp
  -o disable_dns_lookups=yes
  -o lmtp_send_xforward_command=yes
  -o lmtp_data_done_timeout=1200

amavis 전송 단계를 추가하고 나면 smtp는 amavis를 통해 모든 메일이 지정 경로를 돌도록 안내받아야합니다. 이를 처리하기 위해 smtpd에 두가지 옵션을 추가하고 amavis의 maxproc 값을 바꿔야합니다.

파일 /etc/postfix/master.cfamavis로 전달
smtp       inet  n       -       n       -       2       smtpd
  -o content_filter=amavis:[127.0.0.1]:10024
  -o receive_override_options=no_address_mappings
smtps     inet  n       -       n       -       2       smtpd
  -o smtpd_tls_wrappermode=yes
  -o content_filter=amavis:[127.0.0.1]:10024
  -o receive_override_options=no_address_mappings

amavisd와 postfix를 다시 시작한 후 amavisd를 통해 모든 메일을 전달하게 하십시오.

root #/etc/init.d/amavisd restart
root #/etc/init.d/postfix restart

시험

testuser@example.com 로 원격/로컬의 메시지 전달이 제대로 동작해야합니다. 메시지가 도착하면 헤더를 확인해야합니다.

참고
이 시험 과정을 진행할 때, 웹 메일을 사용하거나 다른 메일 서버 또는 25번 포트 또는 465번 포트로 오는 전자메일을 활용하는 원격 클라이언트를 활용해야합니다. amavisd를 거쳐가는 587번 포트로 메일을 전달하여 시험하지 마십시오.

메일 헤더를 살펴보십시오. amavisd로 보냈으며 postfix에서 다시 전달했음을 보여줍니다.

코드 메일 헤더
Received: from localhost (localhost [127.0.0.1])
    by foo.example.com (Postfix) with ESMTP id 03ABA22E4C
    for <testuser@example.com>; Wed, 28 Dec 2011 11:41:05 +0100 (CET)
Received: from foo.example.com ([127.0.0.1])
    by localhost (foo.example.com [127.0.0.1]) (amavisd-new, port 10024)
    with LMTP id 6N9l4nIQa620 for <testuser@example.com>; Wed, 28 Dec 2011 11:41:04 +0100 (CET)
Received: from ext.example.net (ext.example.net [1.2.3.4])
    (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
    (No client certificate requested)
    by foo.example.com (Postfix) with ESMTPS id C136021F97
    for <testuser@example.com>; Wed, 28 Dec 2011 11:41:04 +0100 (CET)

위 내용을 확인할 때 SMTPS로 postfix에서 받은 내용까지 보여줍니다. 다음 LMTP 10024번 포트를 통해 amavisd로 전달하며, 마지막으로 SMTP를 다시 활용하여 postfix로 다시 전달합니다.

ClamAV

도입부

ClamAV는 사실상 리눅스용 오픈 소스 기반 바이러스 검색기입니다. Amavis는 자유 버전과 상업용 바이러스 검색기를 연동할 수 있지만 clamav를 사용합니다. ClamAV는 전자메일을 검색하도록 설계했습니다. clamav 자체와 freshclam, 그리고 clamav 업데이트 서비스 두 부분으로 나뉩니다. 기본적으로 두시간에 한번씩 충분히 업데이트합니다.

설치

ClamAV는 이미 설치했어야하지만, 설치하지 않았다면 이머지해야합니다.

root #emerge --ask app-antivirus/clamav
참고
clamdtop 플래그는 clamav에서 바이러스 검색기용 감시 도구 clamdtop 유틸리티를 빌드하게 합니다.

설정

ClamA를 데몬 모드로 실행하도록 설정하겠습니다(예: 연결 감시). 다른 옵션(과 amavisd의 기본 대체 모드)은 amavisd를 명령행 검색기로 활용하도록 하는 건데, 매우 느리며 시스템 자원을 집중적으로 엄청나게 먹습니다.

ClamAV는 동일한 호스트에서 실행하면 안되지만, 자원 사용량에 따라 성능 문제로 동일한 호스트에서 실행하도록 내버려두는 것을 추천합니다.

상호 소통을 가능하게 하려면, clamav를 amavisd 그룹에 넣어야합니다.

root #gpasswd -a clamav amavis

다음 설정은 clamd가 일부 디버깅 정보를 출력할 수 있게 합니다.

파일 /etc/clamd.conf디버깅 옵션 활성화
# Enable debug messages in libclamav.
# Default: no
Debug yes

또한 clamd는 설정 파일에서 일부 설정을 처리하여 amavis와 상호 연동할 수 있게 해야합니다.

파일 /etc/clamd.confamavis가 clamd로 연결하도록 허용
# Path to a local socket file the daemon will listen on.
# Default: disabled (must be specified by a user)
LocalSocket /var/run/clamav/clamd.sock
 
# Initialize supplementary group access (clamd must be started by root).
# Default: no
AllowSupplementaryGroups yes
참고
이 옵션은 최근 기본 값으로 보입니다.

clamav를 보안을 강화한 커널에서 실행할 때, 일부 동작을 실행할 수 없다는 경고를 만납니다:

코드 LibClamAV 오류 예제
[LibClamAV] Bytecode: disabling JIT because SELinux is preventing 'execmem' access.

기대하던 동작이고 문제 없습니다. ClamAV는 JIT 없이 멀쩡하게 실행할 수 있습니다.

clamav를 처음 시작하기 전에 바이러스 데이터베이스를 다운로드해야합니다. Freshclam은 바이러스 데이터베이스를 다운로드하고 최신으로 유지하는 역할을 수행합니다. Flashclam은 clamd 시작 스크립트로 자동으로 시작하지만, clamd는 데이터베이스가 없어 시작에 실패할 것입니다.

root #/etc/init.d/clamd start

이제 clamav 로그 파일을 살펴보고 freshclam이 초기 바이러스 데이터베이스를 다운로드한 기록을 살펴보십시오.

파일 /var/log/clamav/freshclam.logFreshclam 시작 기록
freshclam daemon 0.98.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
ClamAV update process started at Sat Mar 21 16:30:16 2015
Downloading main.cvd [100%]
main.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Downloading daily.cvd [100%]
daily.cvd updated (version: 20219, sigs: 1354642, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
[LibClamAV] Bytecode: disabling JIT because SELinux is preventing 'execmem' access.
Run  'setsebool -P clamd_use_jit on'.
ERROR: During database load : LibClamAV Warning: RWX mapping denied: Can't allocate RWX Memory: Operation not permitted
WARNING: Database successfully loaded, but there is stderr output
bytecode.cvd updated (version: 247, sigs: 41, f-level: 63, builder: dgoddard)
Database updated (3778908 signatures) from database.clamav.net (IP: 200.236.31.1)
WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock: No such file or directory

이제 데이터베이스를 업데이트했으니, clamd를 다시 시작하십시오:

root #/etc/init.d/clamd restart
파일 /var/log/clamav/clamd.logClamAV 시작 기록
Sat Mar 21 16:35:18 2015 -> clamd daemon 0.98.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
Sat Mar 21 16:35:18 2015 -> Running as user clamav (UID 105, GID 206)
Sat Mar 21 16:35:18 2015 -> Log file size limited to 1048576 bytes.
Sat Mar 21 16:35:18 2015 -> Reading databases from /var/lib/clamav
Sat Mar 21 16:35:18 2015 -> Not loading PUA signatures.
Sat Mar 21 16:35:18 2015 -> Bytecode: Security mode set to "TrustSigned".
Sat Mar 21 16:35:29 2015 -> Loaded 3773304 signatures.
Sat Mar 21 16:35:30 2015 -> LOCAL: Unix socket file /var/run/clamav/clamd.sock
Sat Mar 21 16:35:30 2015 -> LOCAL: Setting connection queue length to 200
Sat Mar 21 16:35:30 2015 -> Limits: Global size limit set to 104857600 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: File size limit set to 26214400 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: Recursion level limit set to 16.
Sat Mar 21 16:35:30 2015 -> Limits: Files limit set to 10000.
Sat Mar 21 16:35:30 2015 -> Limits: MaxEmbeddedPE limit set to 10485760 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: MaxHTMLNormalize limit set to 10485760 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: MaxHTMLNoTags limit set to 2097152 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: MaxScriptNormalize limit set to 5242880 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: MaxZipTypeRcg limit set to 1048576 bytes.
Sat Mar 21 16:35:30 2015 -> Limits: MaxPartitions limit set to 50.
Sat Mar 21 16:35:30 2015 -> Limits: MaxIconsPE limit set to 100.
Sat Mar 21 16:35:30 2015 -> Archive support enabled.
Sat Mar 21 16:35:30 2015 -> Algorithmic detection enabled.
Sat Mar 21 16:35:30 2015 -> Portable Executable support enabled.
Sat Mar 21 16:35:30 2015 -> ELF support enabled.
Sat Mar 21 16:35:30 2015 -> Mail files support enabled.
Sat Mar 21 16:35:30 2015 -> OLE2 support enabled.
Sat Mar 21 16:35:30 2015 -> PDF support enabled.
Sat Mar 21 16:35:30 2015 -> SWF support enabled.
Sat Mar 21 16:35:30 2015 -> HTML support enabled.
Sat Mar 21 16:35:30 2015 -> Self checking every 600 seconds.

amavisd를 clamav에 연동

alavisd는 clamd 소캣으로 연결해야하며, clamav는 주요 바이러스 검사기중 하나로 활성화해야 합니다. clamav를 명령행에서 실행하는 대안을 바꾸면 안됩니다. 또한 바이러스 검사 과정을 분명히 건너뛰지 못하게 해야합니다.

파일 /etc/amavisd.confclamav 활성화
# @bypass_virus_checks_maps = (1);  # controls running of anti-virus code
 
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

amavisd를 다시 시작하고 나면 바이러스를 발견하고 차단해야합니다:

root #/etc/init.d/amavisd restart

시험

바이러스 필터가 동작하는지 시험할 때, 멀웨어 방지 시험 파일이 있는데, 전자메일을 보낼 때 이 문자열을 이용하고 바이러스 검색기를 실행해야합니다.

코드 EICAR-STANDARD-ANTIVIRUS-TEST-FILE
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
참고
다시 말씀드리지만 이 메시지는 메일 서버에서 전달하여 넘겼음을 확인해야하며, 받는 서버(foo.example.com)에서만 차단해야합니다. 25번으로 연결하는 클라이언트로 사용하면 만족할만한 릴레이를 허용합니다.

mail.log 파일을 살펴보면, 다음 내용이 나타납니다:

파일 /var/log/mail.log바이러스 감염 시험
Dec 28 14:05:33 7of9 amavis[7554]: (07554-01) Blocked INFECTED (Eicar-Test-Signature) {DiscardedInternal,Quarantined}, MYNETS LOCAL [10.0.0.2]:41144 [10.0.0.2] <root@test.example.net> -> <testuser@example.com>, quarantine: virus-WYHuLpwdzPVr, Queue-ID: 7FC7B22DF6, mail_id: WYHuLpwdzPVr, Hits: -, size: 407, 166 ms
Dec 28 14:05:33 7of9 postfix/lmtp[15452]: 7FC7B22DF6: to=<testuser@example.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.41, delays=0.21/0.02/0.01/0.16, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=07554-01 - INFECTED: Eicar-Test-Signature)

이론적으로, 바이러스 검색기는 완전한 기능을 수행해야합니다.

스팸 어쌔신

도입부

스팸 어쌔신은 멋진 스팸 필터입니다. 해를 거듭해가면서 복잡해졌으며 올바르게 설정하는 노력이 필요합니다.

설치

정말로 스팸 어쌔신을 따로 설치할 필요가 없습니다. spamassassin USE 플래그를 설정하면 amavisd-new의 의존성 항목으로 끌어옵니다.

root #emerge --ask mail-filter/spamassassin

설정

기본 설정은 표준 용도를 만족합니다.

참고
사용자가 전송 포트로 전자메일을 보내지 않는다면, trusted_networks 변수를 설정하여 알려진 사용자가 보낸 메일은 스팸 식별 과정을 통과하도록 올바르게 설정해야합니다.

업데이트

스팸 어쌔신의 핵심 기능은 자체 업데이트입니다. 업데이트는 업데이트 채널에서 관리합니다.

스팸 어쌔신은 sa-update 도구를 보유하고 있어 업데이트를 완전히 자동화할 수 있습니다. 스팸 어쌔신은 --nogpg 플래그를 사용하여 GPG 키를 무시할 수 있지만, 최종 안착지에 도달한 것처럼 끝내야합니다. 스팸 어쌔신 GPG 키를 추가하는 과정은 간단한 두 단계를 거칩니다.

root #sa-update --import GPG.KEY
root #rm GPG.KEY
경고
bug #396307 버그 가능성 때문에 키 모음용 디렉터리를 먼저 만들어야 하고 그 다음 키를 가져오기 전에 적절한 권한을 설정해야합니다.
root #mkdir -p /etc/mail/spamassassin/sa-update-keys; chmod 700 /etc/mail/spamassassin/sa-update-keys

스팸 어쌔신 업데이트 채널을 추가하고 나면 업데이트해야합니다. 이 명령을 실행하고 나서 오류를 확인하십시오.

root #sa-update -D

업데이트를 끝내고 나서 스팸 어쌔신을 활용하려면 컴파일해야합니다. 또한 여기서 오류도 잡아야합니다.

root #sa-compile

clamav와는 달리 'freshassasin'이 없으며 업데이트를 처리할 크론 작업이 필요합니다. 스팸 어쌔신을 최신으로 유지하려면, 크론 작업을 만들어야합니다.

파일 /etc/cron.daily/sa-updates스팸 어쌔신 필터 규칙 업데이트
#!/bin/sh
sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10  --channel saupdates.openprotect.com --channel updates.spamassassin.org
sa-compile

크론 작업이 제대로 동작하도록 실행 가능하게 하십시오:

root #chmod +x /etc/cron.daily/sa-updates
경고
여기서 활용한 GPG 키는 물론 바꾸고, 업데이트 하며, 수정을 위해 가져와야 할 수도 있습니다. sa-updates gpgkey 명령을 알아보려면, OpenProtect를 참고하십시오.

amavisd를 스팸 어쌔신에 연동

실제로, 스팸 어쌔신은 amavisd로 연동할 필요가 없으며, amavisd의 통합 부분입니다. amavisd에서 스팸 차단을 활성화하면 스팸 차단 역할을 수행합니다.

파일 /etc/amavisd.conf스팸 어쌔신 활성화
# @bypass_spam_checks_maps  = (1);  # controls running of anti-spam code

이 값을 바꿨으면 amavisd를 다시 시작해야합니다:

root #/etc/init.d/amavisd restart

시험

스팸 필터를 붙이지 않은 25번 포트에 클라이언트를 연결하면 시험을 다시금 진행합니다. GTUBE를 시험 데이터로 사용할 수 있습니다. 해당 사이트에는 RFC-822 형식의 적당한 메일 메시지가 있습니다.

코드 스팸 본문 예제
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

시험 사용자의 받은 편지함 또는 스팸 메일함 같은 곳을 확인하시면 메시지와 시험 과정을 거친 헤더를 찾을 수 있습니다:

코드 스팸 헤더
Received: from localhost (localhost [127.0.0.1])
    by foo.example.com (Postfix) with ESMTP id B7EDA22F62
    for <testuser@example.com>; Wed, 28 Dec 2011 16:02:46 +0100 (CET)
X-Quarantine-ID: <BukBLFBE3OWo>
X-Virus-Scanned: amavisd-new at example.com
X-Spam-Flag: YES
X-Spam-Score: 1000.907
X-Spam-Level: ****************************************************************
X-Spam-Status: Yes, score=1000.907 required=6.2 tests=[ALL_TRUSTED=-1,
    FH_FROMEML_NOTLD=0.18, GTUBE=1000, MISSING_HEADERS=1.207,
    MISSING_MID=0.14, NO_DNS_FOR_FROM=0.379, TVD_SPACE_RATIO=0.001]
    autolearn=no

Amavisd 최적화

Amavis는 세밀하게 설정할 수 있는 몇가지 더 많은 설정 항목이 있습니다.

수신자 구분 문자

postfix를 recipient_delimiter와 활용할 때, amavisd는 이 기능을 사용하도록 알릴 수 있습니다.

파일 /etc/amavisd.confamavis의 recipient_delimiters
# Delimiter must match the equivalent (final) MTA delimiter setting.
$recipient_delimiter = '+';		# (default is undef, i.e. disabled)

/etc/postfix/main.cf에 다음 내용을 추가하는게 좋아보일텐데, 이렇게 설정하지 않으면 user+foo@domain 도메인에 전달하지 않습니다:

파일 /etc/postfix/main.cfpostfix의 recipient_delimiters
# ADDRESS EXTENSIONS (e.g., user+foo)
#
# The recipient_delimiter parameter specifies the separator between
# user names and address extensions (user+foo). See canonical(5),
# local(8), relocated(5) and virtual(5) for the effects this has on
# aliases, canonical, virtual, relocated and .forward file lookups.
# Basically, the software tries user+foo and .forward+foo before
# trying user and .forward.
#
recipient_delimiter = +

분산 격리

여러 하위 디렉터리에 분산 격리할 수 있습니다. 진행하려면 디렉터리를 먼저 만들어야합니다:

root #
mkdir /var/amavis/quarantine/virus;
mkdir /var/amavis/quarantine/spam;
mkdir /var/amavis/quarantine/banned;
mkdir /var/amavis/quarantine/badh;
mkdir /var/amavis/quarantine/clean;
chown -R amavis:amavis /var/amavis/quarantine/*;
chmod -R gu+rwX /var/amavis/quarantine/*;
chmod -R o-rwx /var/amavis/quarantine/*
파일 /etc/amavisd.conf분산 격리
#$clean_quarantine_method          = 'local:clean/%m';
$virus_quarantine_method          = 'local:virus/%m';
$spam_quarantine_method           = 'local:spam/%m.gz';
$banned_files_quarantine_method   = 'local:banned/%m';
$bad_header_quarantine_method     = 'local:badh/%m';

또한, 스팸 처리 기준 레벨 설정은 저장하는 스팸 메일 양 감소에 도움이 됩니다. 기준 레벨은 스팸 가중치를 상회하는 스팸 메일을 저장하지 않게 합니다.

파일 /etc/amavisd.conf스팸 차단 수준 설정
$sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off
참고
25 가 기본값입니다. 이 값은 기타 수준에서와 마찬가지로 조직에서 필요한대로 설정할 수 있어야합니다.

스팸 배달

$final_spam_destiny의 기본 값은 D_PASS이며, 가중치가 높은 대상을 스팸으로 간주하고, 그래도 사용자 메일함에 배달함을 의미합니다. 최근 스팸 어쌔신을 신뢰하는 메일 클라이언트는 자동으로 스팸 폴더로 이동합니다.

Bayes 데이터베이스 경로

스팸 어쌔신 설정 파일의 bayes_path 옵션을 설정하여 sa-learn같은 도구가 올바른 데이터베이스 위치에 기록할 수 있도록 하십시오.

파일 /etc/spamassassin/local.cfAmavisd 홈 디렉터리에서 bayes_path 설정
bayes_path /var/amavis/.spamassassin/bayes

가상 호스트

서버에서 하나 이상의 도메인을 다룬다면, amavis에 알려 여기서 도움을 받을 수 있습니다.

파일 /etc/amavisd.confamavis에 부가 별칭 추가
@local_domains_maps = ( [".$mydomain", "mail.example.net", "mail.example.org", "mail2.example.com"] );

정리

기대한 바대로 스팸 어쌔신과 ClamAV가 동작한다면, 디버깅 정보 표시를 보통 최소화하여 줄일 수 있습니다.

파일 /etc/amavisd.confamavsd의 디버깅 비활성화
# Section III - Logging
# true (e.g. 1) => syslog;  false (e.g. 0) => logging to file
$do_syslog = 1;                   # (defaults to 0)
 
#NOTE: levels are not strictly observed and are somewhat arbitrary
$log_level = 0;		   # (defaults to 0), -d
 
# Turn on SpamAssassin debugging (output to STDERR, use with 'amavisd debug')
#$sa_debug = '1,all';  # defaults to false
파일 /etc/clamd.confclamav 디버깅 비활성화
# Enable debug messages in libclamav.
# Default: no
#Debug yes