스팸 필터링 기능이있는 작은 메모리 공간 리눅스 메일 서버


8

원래 웹 서버로 예정된 VPS가 있지만 독립 실행 형 서버로 보내기 및 받기를 포함한 일부 최소 메일 기능도 배포해야합니다.

현재 설정은 다음과 같습니다.

  • Postfix는 메일을 감지하고 사용자는 가상 테이블에 있으며 MySQL에 저장됩니다.
  • 연결시 모든 서버는 일부 DNSBL에 대해 정책 기반 서비스로 테스트됩니다.
  • 모든 메일은 spamc client의 도움으로 SpamAssassin spamd를 통해 실행됩니다
  • 그런 다음 메일은 가상 사용자 인 Dovecot 2 'LDA (로컬 배달 에이전트)와 함께 배달됩니다.

보셨 듯이 ...

  • 바이러스 스캐너가 실행되지 않으며 그 이유가 있습니다. clamav는 가능한 모든 메모리를 사용하며 바이러스 메일도이 설정으로 필터링됩니다 (1,5 년 동안 ClamAV를 사용하도록 설정 한 상태에서 바이러스 메일이 없음) ClamAV에 도착)
  • 나는 amavisd를 사용하지 않고 정말로 원하지 않는다. 메모리 많고 동시 스캐너 가 많은 경우 해당 몬스터 만 필요 합니다. 또한 손으로 미세 조정하는 것은 악몽입니다.
  • postfix에서 정책 및 기본 DNSBL 대신 정책 가중치를 실행합니다. 하나의 서비스가 목록을 작성했기 때문에 누군가를 멀리 보내고 싶지 않습니다.

중요한 진술 : 모든 것이 잘 작동합니다. 매우 적은 양의 스팸을 수신하고 거의 오 탐지를 얻지 못하며 대부분의 잘못된 메일은 정책적 가중치에 의해 중지됩니다. 서비스가 총체적이라고 생각하는 유일한 "문제"는 모두 약간의 메모리를 사용합니다.

나는 이미 spamassassin 모듈을 잘라 냈지만 (아래 참조) 최대한 SpamAssassin이 필요로하는 플러그인과 거의 쓸모없는 플러그인 , 메모리 풋 프린트를 최대한 줄이는 방법에 대한 조언을 듣고 싶습니다. 현재 접미사 및 정책 가중치 설정과 관련하여 ?

SpamAssassin 규칙도 sa-compile로 컴파일됩니다 (sa-update는 cron에서 일주일에 한 번 실행되고 그 직후 컴파일 실행)

이것들은 중요한 현재 구성 중 일부입니다. 더 필요한 것이 있으면 알려주십시오.

postfix/master.cf (부품 만)

dovecot   unix  -       n       n        -      -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/bin/spamc -e /usr/lib/dovecot/deliver -d ${recipient} -f {sender}

postfix/main.cf (부품 만)

smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks,
        reject_invalid_hostname,
        permit

smtpd_recipient_restrictions =  permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_hostname,
        reject_non_fqdn_hostname,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unauth_pipelining,
        reject_unauth_destination,
        check_policy_service inet:127.0.0.1:12525,
        permit

policyd-weight.conf (부품 만)

$REJECTMSG = "550 Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs";

$REJECTLEVEL = 4;
$DEFER_STRING = 'IN_SPAMCOP= BOGUS_MX=';
$DEFER_ACTION = '450';
$DEFER_LEVEL  = 5;
$DNSERRMSG = '450 No DNS entries for your MTA, HELO and Domain. Contact YOUR administrator';

# 1: ON, 0: OFF (default)
# If ON request that ALL clients are only checked against RBLs
$dnsbl_checks_only = 0;

# 1: ON (default), 0: OFF
# When set to ON it logs only RBLs which affect scoring (positive or negative)
$LOG_BAD_RBL_ONLY  = 1;

## DNSBL settings
@dnsbl_score = (
        # host,                 hit,    miss,   log name
        'dnsbl.ahbl.org',       3,      -1,     'dnsbl.ahbl.org',
        'dnsbl.njabl.org',      3,      -1,     'dnsbl.njabl.org',
        'dnsbl.sorbs.net',      3,      -1,     'dnsbl.sorbs.net',
        'bl.spamcop.net',       3,      -1,     'bl.spamcop.net',
        'zen.spamhaus.org',     3,      -1,     'zen.spamhaus.org',
        'pbl.spamhaus.org',     3,      -1,     'pbl.spamhaus.org',
        'cbl.abuseat.org',      3,      -1,     'cbl.abuseat.org',
        'list.dsbl.org',        3,      -1,     'list.dsbl.org',
);

# If Client IP is listed in MORE DNSBLS than this var, it gets REJECTed immediately
$MAXDNSBLHITS  = 3;

# alternatively, if the score of DNSBLs is ABOVE this level, reject immediately
$MAXDNSBLSCORE = 9;

$MAXDNSBLMSG = '550 Az levelezoszerveruk IP cime tul sok spamlistan talahato, kerjuk ellenorizze! / Your MTA is listed in too many DNSBLs; please check.';

## RHSBL settings
@rhsbl_score = (
        'multi.surbl.org',              4,      0,      'multi.surbl.org',
        'rhsbl.ahbl.org',               4,      0,      'rhsbl.ahbl.org',
        'dsn.rfc-ignorant.org',         4,      0,      'dsn.rfc-ignorant.org',
#       'postmaster.rfc-ignorant.org',  0.1,    0,      'postmaster.rfc-ignorant.org',
#       'abuse.rfc-ignorant.org',       0.1,    0,      'abuse.rfc-ignorant.org'
);

# skip a RBL if this RBL had this many continuous errors
$BL_ERROR_SKIP = 2;

# skip a RBL for that many times
$BL_SKIP_RELEASE = 10;

## cache stuff
# must be a directory (add trailing slash)
$LOCKPATH = '/var/run/policyd-weight/';

# socket path for the cache daemon.
$SPATH = $LOCKPATH.'/polw.sock';

# how many seconds the cache may be idle before starting maintenance routines
#NOTE: standard maintenance jobs happen regardless of this setting.
$MAXIDLECACHE = 60;

# after this number of requests do following maintenance jobs: checking for config changes
$MAINTENANCE_LEVEL = 5;

# negative (i.e. SPAM) result cache settings ##################################

# set to 0 to disable caching for spam results. To this level the cache will be cleaned.
$CACHESIZE = 2000;

# at this number of entries cleanup takes place
$CACHEMAXSIZE = 4000;

$CACHEREJECTMSG  = '550 temporarily blocked because of previous errors';

# after NTTL retries the cache entry is deleted
$NTTL = 1;

# client MUST NOT retry within this seconds in order to decrease TTL counter
$NTIME = 30;

# positve (i.,e. HAM) result cache settings ###################################

# set to 0 to disable caching of HAM. To this number of entries the cache will be cleaned
$POSCACHESIZE = 1000;

# at this number of entries cleanup takes place
$POSCACHEMAXSIZE = 2000;

$POSCACHEMSG = 'using cached result';

#after PTTL requests the HAM entry must succeed one time the RBL checks again
$PTTL = 60;

# after $PTIME in HAM Cache the client must pass one time the RBL checks again.
#Values must be nonfractal. Accepted time-units: s, m, h, d
$PTIME = '3h';

# The client must pass this time the RBL checks in order to be listed as hard-HAM
# After this time the client will pass immediately for PTTL within PTIME
$TEMP_PTIME = '1d';


## DNS settings

# Retries for ONE DNS-Lookup
$DNS_RETRIES = 1;

# Retry-interval for ONE DNS-Lookup
$DNS_RETRY_IVAL  = 5;

# max error count for unresponded queries in a complete policy query
$MAXDNSERR = 3;

$MAXDNSERRMSG = 'passed - too many local DNS-errors';

# persistent udp connection for DNS queries.
#broken in Net::DNS version 0.51. Works with Net::DNS 0.53; DEFAULT: off
$PUDP= 0;

# Force the usage of Net::DNS for RBL lookups.
# Normally policyd-weight tries to use a faster RBL lookup routine instead of Net::DNS
$USE_NET_DNS  = 0;

# A list of space separated NS IPs
# This overrides resolv.conf settings
# Example: $NS = '1.2.3.4 1.2.3.5';
# DEFAULT: empty
$NS  = '';

# timeout for receiving from cache instance
$IPC_TIMEOUT  = 2;

# If set to 1 policyd-weight closes connections to smtpd clients in order to avoid too many
#established connections to one policyd-weight child
$TRY_BALANCE  = 0;

# scores for checks, WARNING: they may manipulate eachother
# or be factors for other scores.
#  HIT score, MISS Score
@client_ip_eq_helo_score = (1.5, -1.25 );
@helo_score  = (1.5, -2 );
@helo_score  = (0, -2 );
@helo_from_mx_eq_ip_score= (1.5, -3.1  );
@helo_numeric_score= (2.5,  0 );
@from_match_regex_verified_helo= (1,-2 );
@from_match_regex_unverified_helo = (1.6, -1.5  );
@from_match_regex_failed_helo  = (2.5,  0 );
@helo_seems_dialup = (1.5,  0 );
@failed_helo_seems_dialup= (2, 0 );
@helo_ip_in_client_subnet= (0,-1.2  );
@helo_ip_in_cl16_subnet  = (0,-0.41 );
#@client_seems_dialup_score  = (3.75, 0 );
@client_seems_dialup_score  = (0, 0 );
@from_multiparted  = (1.09, 0 );
@from_anon= (1.17, 0 );
@bogus_mx_score = (2.1,  0 );
@random_sender_score  = (0.25, 0 );
@rhsbl_penalty_score  = (3.1,  0 );
@enforce_dyndns_score = (3, 0 );

spamassassin/init.pre (.pre 파일을 함께 넣었습니다)

loadplugin Mail::SpamAssassin::Plugin::Hashcash
loadplugin Mail::SpamAssassin::Plugin::SPF
loadplugin Mail::SpamAssassin::Plugin::Pyzor
loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
loadplugin Mail::SpamAssassin::Plugin::Check
loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
loadplugin Mail::SpamAssassin::Plugin::URIDetail    
loadplugin Mail::SpamAssassin::Plugin::Bayes
loadplugin Mail::SpamAssassin::Plugin::BodyEval
loadplugin Mail::SpamAssassin::Plugin::DNSEval
loadplugin Mail::SpamAssassin::Plugin::HTMLEval
loadplugin Mail::SpamAssassin::Plugin::HeaderEval
loadplugin Mail::SpamAssassin::Plugin::MIMEEval
loadplugin Mail::SpamAssassin::Plugin::RelayEval
loadplugin Mail::SpamAssassin::Plugin::URIEval
loadplugin Mail::SpamAssassin::Plugin::WLBLEval
loadplugin Mail::SpamAssassin::Plugin::VBounce
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody

spamassassin/local.cf (부속)

use_bayes                       1
bayes_auto_learn                1
bayes_store_module              Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn                   DBI:mysql:db:127.0.0.1:3306
bayes_sql_username              user
bayes_sql_password              pass
bayes_ignore_header             X-Bogosity
bayes_ignore_header             X-Spam-Flag
bayes_ignore_header             X-Spam-Status

### User settings
user_scores_dsn                 DBI:mysql:db:127.0.0.1:3306
user_scores_sql_password        user
user_scores_sql_username        pass
user_scores_sql_custom_query    SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC

# for better speed
score DNS_FROM_AHBL_RHSBL       0
score __RFC_IGNORANT_ENVFROM    0
score DNS_FROM_RFC_DSN          0
score DNS_FROM_RFC_BOGUSMX      0
score __DNS_FROM_RFC_POST       0
score __DNS_FROM_RFC_ABUSE      0
score __DNS_FROM_RFC_WHOIS      0

업데이트 01

어댑터가 정책에 따라 가중치를 설정하고 포스트 픽스 포스트 스크린을 구성한 후 RAM 사용량이 약 -15-20MB로 훨씬 빨라졌습니다. 전체 용량으로 작동하는지 확실하지 않지만 유망한 것으로 보입니다.


1
접미사 2.8+로 업그레이드; postscreen은 정책 가중치에 대한 필요성을 거의 제거합니다. 전체 DNSBL 및 RHSBL 화이트리스트 및 블랙리스트와 가중치 DNSBL 점수가 포함됩니다.
adaptor

@adaptr 그것은 postfix 2.8.5-2 ~ build1을 가지고있는 것 같습니다, 서버는 우분투 11.10입니다. postfix 에서이 새로운 기능을 보지 못했지만 유망한 것 같습니다.이 구성에 대한 예제 구성을 찾을 수 없으며 매뉴얼 페이지는 순수한 청교도의 유일한 문제입니다. 예를 지적하거나 게시 할 수 있습니까?
petermolnar

OK, smtps 연결을보고 있는지 확실하지 않은 경우를 제외하고는 다소 구성되어 있습니다. 누구든지 이것에 대해 대답 할 수 있다면, 자세한 질문은 여기에 있습니다 : serverfault.com/questions/372448/…
petermolnar

공식 postscreen 문서는 시작하는 충분합니다; 물론 일반적으로 postfix를 사용하는 방법을 이해해야합니다.
어댑터

답변:


2

나는 후위 2.8 이상 및 배포로 업그레이드를 추천 할 것입니다 postscreen ; 이 서버는 좀비 / DNSBL 심사 서버로 특별히 설계되었으며 여러 블랙리스트를 고속으로 처리합니다.

또한 완전 가중치 검정 / 화이트리스트 스코어링, 명시 적 화이트리스트 등을 제공합니다.

두 번째 질문과 관련하여 spamass-milter 를 확인하는 것이 좋습니다 . 인라인 밀 터는 외부 프로세스보다 훨씬 효율적입니다.


서둘러 들리고 싶지는 않지만 몇 시간 후 포스트 스크린을 켜고 정책을 적용하여 RAM을 많이 사용하면 눈에 띄게 낮아집니다. 나는 팁에 대해 정말 우아하지만 SpamAssassin에 대한 팁도 여전히 듣고 싶습니다.
petermolnar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.