Tôi cần lời khuyên: máy chủ thư điện tử linux bộ nhớ nhỏ với bộ lọc thư rác


8

Tôi có một VPS ban đầu được định sẵn là một máy chủ web nhưng một số khả năng thư tối thiểu cũng cần được triển khai, bao gồm gửi và nhận dưới dạng máy chủ độc lập.

Các thiết lập hiện tại là như sau:

  • Postfix trả lại thư, người dùng ở trong các bảng ảo, được lưu trữ trong MySQL
  • về kết nối, tất cả các máy chủ đều được kiểm tra dịch vụ trọng lượng policyd với một số DNSBL
  • tất cả thư được chạy qua SpamAssassin spamd với sự trợ giúp của spamc client
  • thư sau đó được gửi với Dovecot 2 'LDA (đại lý chuyển phát cục bộ), cả người dùng ảo

Như bạn đã thấy...

  • Không có trình quét vi rút nào đang chạy và đó là lý do: clamav ăn hết bộ nhớ có thể và cả thư điện tử đều được lọc với thiết lập này (Tôi đã thử nghiệm tương tự với ClamAV được kích hoạt trong 1,5 năm, không có thư virus nào thậm chí đến ClamAV)
  • Tôi không sử dụng tài sản và tôi thực sự không muốn. Bạn chỉ cần con quái vật đó nếu bạn có nhiều bộ nhớ nhiều máy quét đồng thời. Đó cũng là một cơn ác mộng để tinh chỉnh bằng tay.
  • Tôi chạy policyd-weight thay vì policyd và DNSBLs gốc trong postfix. Tôi không muốn gửi ai đó đi vì một dịch vụ duy nhất liệt kê họ.

Tuyên bố quan trọng: mọi thứ hoạt động tốt. Tôi nhận được một lượng thư rác rất nhỏ, gần như không bao giờ nhận được dương tính giả và hầu hết các thư xấu đều bị chặn bởi trọng lượng policyd. "Vấn đề" duy nhất mà tôi cảm thấy các dịch vụ nói chung sử dụng một chút bộ nhớ hoàn toàn.

Tôi đã cắt các mô-đun spamassassin (xem bên dưới), nhưng tôi thực sự muốn nghe một số lời khuyên làm thế nào để giảm dung lượng bộ nhớ càng thấp càng tốt, chủ yếu là: những gì plugin SpamAssassin thực sự cần và ít nhiều vô dụng, liên quan đến thiết lập postfix & policyd-weight hiện tại của tôi ?

Các quy tắc SpamAssassin cũng được biên dịch bằng sa-compile (sa-update chạy mỗi tuần một lần từ cron, biên dịch chạy ngay sau đó)

Đây là một số cấu hình hiện tại có thể có vấn đề, xin vui lòng cho tôi biết nếu bạn cần thêm bất cứ điều gì.

postfix/master.cf (chỉ phần)

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 (chỉ phần)

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 (chỉ phần)

$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 (Tôi đã đặt các tệp .pre lại với nhau)

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 (các bộ phận)

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

CẬP NHẬT 01

Như Adaptr khuyên tôi nên loại bỏ màn hình postfix có trọng lượng policyd và được định cấu hình, điều này dẫn đến khoảng -15-20 MB từ việc sử dụng RAM và công việc nhanh hơn rất nhiều. Tôi không chắc nó hoạt động hết công suất nhưng có vẻ đầy hứa hẹn.


1
Nâng cấp lên hậu tố 2.8+; postscreen khá nhiều làm giảm nhu cầu về trọng lượng policyd: nó bao gồm đầy đủ danh sách trắng và đen DNSBL và RHSBL, và chấm điểm DNSBL có trọng số.
thích nghi

@adaptr có vẻ như tôi có hậu tố 2.8.5-2 ~ build1, máy chủ là Ubuntu 11.10. Tôi không nhận thấy chức năng mới này trong postfix nhưng có vẻ đầy hứa hẹn - vấn đề duy nhất là tôi không thể tìm thấy bất kỳ cấu hình ví dụ nào cho nó và trang man là một dạng thuần túy. Bạn có thể chỉ hoặc gửi một ví dụ xin vui lòng?
petermolnar

OK, tôi đã cấu hình nó ít nhiều, ngoại trừ tôi không chắc nó cũng đang xem các kết nối smtps. Nếu bất cứ ai có thể trả lời cho điều này, các câu hỏi chi tiết có ở đây: serverfault.com/questions/372448/iêu
petermolnar

Các tài liệu chính thức trên màn hình nên đủ để bắt đầu; Tất nhiên, bạn cần hiểu cách cấu hình postfix nói chung để sử dụng nó.
thích nghi

Câu trả lời:


2

Tôi khuyên bạn nên nâng cấp lên postfix 2.8+ và triển khai postscreen ; nó được thiết kế đặc biệt như một máy chủ phân tách zombie / DNSBL và xử lý nhiều danh sách đen ở tốc độ cao.

Nó cũng cung cấp tính năng ghi điểm đen / danh sách trắng có trọng số đầy đủ, danh sách trắng rõ ràng và hơn thế nữa.

Đối với câu hỏi thứ hai của bạn, tôi khuyên bạn nên kiểm tra spamass-milter ; một máy vắt sữa nội tuyến hiệu quả hơn nhiều so với quy trình bên ngoài.


Tôi không muốn nghe có vẻ vội vàng nhưng sau một vài giờ chạy với màn hình sau và việc sử dụng RAM có trọng lượng policyd dường như thấp hơn đáng kể. Tôi thực sự duyên dáng với tiền boa nhưng tôi vẫn muốn nghe các mẹo về SpamAssassin.
petermolnar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.