Ключевые слова:mail, spam, linux, suse, postfix, cypt, ssl, (найти похожие документы)
From: gennadi@gennadi.dyn.ee
Newsgroups: http://gennadi.dyn.ee
Date: Mon, 28 Feb 2004 14:31:37 +0000 (UTC)
Subject: Устанока SpamAssassin (Postfix, MySQL, SSL, WebUsePpref)
Оригинал: http://gennadi.dyn.ee/modules.php?name=Forums&file=viewtopic&t=11
Устанока SpamAssassin, Postfix, MySQL, WebUsePpref
Mail-relay (со Spam-Фильтром) принимает почту из интернета,
анализирует её и передаёт на локальный Mail-Server ( напр. Domino)
Домен: gennadi.ru
Mail-relay: mail-relay.gennadi.ru 192.168.0.1
Mail-Server Domino:domino.gennadi.ru 192.168.0.2
Итак... для полного счастья нам необходимо будет установить следующие
пакеты:
rpm -i perl-Digest-SNA1*
rpm -i perl-Digest-SMAC*
rpm -i perl-HTML-Target*
rpm -i perl-HTML-Parser*
rpm -i perl-Net-DNSr*
rpm -i perl-Time-HiResr*
rpm -i spamassassin*
Если это SuSE - это будет:
mail-relay:~ # yast
- и т.д,
если RedHat то :
mail-relay:~ # up2date spamassassin
1.) Установка Postfix
Файл /etc/postfix/main.cf выглядит так:
mail_spool_directory = /var/mail
canonical_maps = hash:/etc/postfix/canonical
virtual_maps = hash:/etc/postfix/virtual
relocated_maps = hash:/etc/postfix/relocated
transport_maps = hash:/etc/postfix/transport
sender_canonical_maps = hash:/etc/postfix/sender_canonical
masquerade_exceptions = root
masquerade_classes = envelope_sender, header_sender, header_recipient
masquerade_domains = gennadi.ru
mydomain = gennadi.ru
myorigin = $mydomain
myhostname = mail-relay.gennadi.ru
internal_mail = 192.168.0.2 #(Ваш Domino Mail-Server)
program_directory = /usr/lib/postfix
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain
defer_transports =
disable_dns_lookups = no
relayhost =
content_filter =
mailbox_command =
mailbox_transport = cyrus
fallback_transport = cyrus
smtpd_sender_restrictions = hash:/etc/postfix/access
smtpd_relay_reject = no
smtpd_client_restrictions =
smtp_always_send_ehlo = yes
smtpd_helo_required = no
smtpd_helo_restrictions =
strict_rfc821_envelopes = no
smtpd_recipient_restrictions =
permit_mynetworks,permit_mx_backup,permit_sasl_authenticated,check_rel
ay_domains
broken_sasl_auth_clients = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_auth_enable = yes
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/certs/cert.pem
smtpd_tls_cert_file = /etc/ssl/certs/cert.pem
smtpd_tls_CAfile = /etc/ssl/certs/cert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
alias_maps = hash:/etc/aliases
mailbox_size_limit = 51200000
message_size_limit = 10240000
2.) В файл /etc/postfix/transport внесём следующую строку:
gennadi.ru smtp:[192.168.0.2 ]
и актуализируем transport.db
mail-relay:~ # postmap /etc/postfix/transport
3.) В файл /etc/postfix/master.cf внесём следующие изменения:
#
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#
smtp inet n - n - - smtpd
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o
smtpd_sasl_auth_enable=yes
#submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 nqmgr
#tlsmgr fifo - - n 300 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
local unix - n n - - local
virtual unix - n n - - virtual
#lmtp unix - - n - - lmtp
#localhost:10025 inet n - n - - smtpd -o content_filter=
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus unix - n n - - pipe flags=R user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -m ${extension} ${user}
uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
vscan unix - n n - 10 pipe user=vscan argv=/usr/sbin/amavis ${sender} ${recipient}
procmail unix - n n - - pipe flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}
filter unix - n n - - pipe user=spamfilter argv=/usr/local/bin/spamfilter.sh -f $(sender) -- $(recipient)
smtp inet n - y - - smtpd -o content_filter=filter:
4.) Создайте SSL Cerifikat для Postfix
mail-relay: # openssl req -new -x509 -sha1 -extensions v3_ca -nodes -days 365 -out cert.pem
Получили два файла - privkey.pem и cert.pem. Теперь:
mail-relay: # cat privkey.pem cert.pem > /etc/ssl/certs/server.crt
mail-relay: # mv -f privkey.pem /etc/ssl/certs/server.key
5.) Создадим юзера spamfilter, от имени которого будет выполняться
скрипт spamfilter.sh .
mail-relay:~ # useradd -s /bin/false -d /var/spool/filter spamfilter
mail-relay:~ # mkdir /var/spool/filter
mail-relay:~ # chown spamfilter:mail /var/spool/filter
6.) Этот скрипт spamfilter.sh поместим в директорию /usr/local/bin.
---------------------------------
#!/bin/sh
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -i"
SPAMASSASSIN=/usr/bin/spamc
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }
# Clean up when done or when aborting.
trap "rm -f in.$$; rm -f out.$$" 0 1 2 3 15
cat | $SPAMASSASSIN > out.$$ || { echo Message content rejected; exit
$EX_UNAVAILABLE; }
$SENDMAIL "$@" < out.$$
exit $?
---------------------------------
7.) Конфигурация SpamAssissin.
В директории /etc/mail/spamassassin найдите файл local.cf и запишите
туда нижеследующие строки:
required_hits 5
rewrite_header 1
report_safe 1
use_bayes 1
auto_learn 1
use_terse_report 1
always_add_headers 1
fold_headers 1
spam_level_stars 1
spam_level_char *
rewrite_subject 1
subject_tag !!!!*****SPAM*****!!!!
ok_languages ru
ok_locales en
use_razor1 1
use_razor2 1
use_pyzor 1
use_dcc 1
skip_rbl_checks 0
body VIAGRA /viagra/i
body PENIS /penis/i
score VIAGRA 2
score PENIS 2
blacklist_from *@msn.com
blacklist_from *@hotmail.com
whitelist_from *@gennadi.ru
Это простая конфигурация ( для примера ), где я указал, что письма
содержащие слова VIAGRA и PENIS или от отправителей *@msn.com и
*@hotmail.com будут признаны как spam. Письма от отправителей
*@gennadi.ru будут свободно проходить.
Сконфигурируйте его для своей сети и своих нужд.
В Google достаточно примеров по конфигурации этого файла.
mail-relay:~ # postfix reload
mail-relay:~ # /etc/init.d/postfix restart
mail-relay:~ # /etc/init.d/spamd restart
8.) Что бы все письма из интернета проходили проверку на spam,
сделайте на вашем firewall'e NAT к хосту mail-relay.gennadi.ru на порт
25 ( smtp) и порт 465 ( smtps ).
9.) Test
Теперь можно послать письмо из интернета локальному юзеру.
В моём примере это gennadi@gmx.net посылает письмо на адрес
gennadi@gennadi.ru.
mail-relay:~ # tail -fn 100 /var/log/mail
Jan 25 16:37:33 mail-relay postfix/smtpd[7484]: starting TLS engine
Jan 25 16:37:33 mail-relay postfix/smtpd[7484]: connect from unknown[213.165.64.20]
Jan 25 16:37:33 mail-relay postfix/smtpd[7484]: 93F9924C9E: client=unknown[213.165.64.20]
Jan 25 16:37:33 mail-relay postfix/cleanup[7486]: 93F9924C9E: message-id=<16175.1075044591@www15.gmx.net>
Jan 25 16:37:34 mail-relay postfix/qmgr[1555]: 93F9924C9E: from=<gennadi@gmx.net>, size=897, nrcpt=1 (queue active)
Jan25 16:37:34 mail-relay postfix/smtpd[7484]: disconnect from unknown[213.165.64.20]
Jan 25 16:37:34 mail-relay spamd[7483]: connection from localhost [127.0.0.1] at port 34496
Jan 25 16:37:34 mail-relay spamd[7491]: info: setuid to spamfilte succeeded
Jan 25 16:37:34 mail-relay spamd[7491]: processing message <16175.1075044591@www15.gmx.net> for spamfilter:501.
Jan 25 16:37:34 mail-relay spamd[7491]: clean message (0.4/2.0) for spamfilter:501 in 0.7 seconds, 872 bytes.
Jan 25 16:37:35 mail-relay postfix/pickup[7265]: 3F4D624CDB: uid=501 from=<gennadi@gmx.net>
Jan 25 16:37:35 mail-relay postfix/cleanup[7486]: 3F4D624CDB: message-id=<16175.1075044591@www15.gmx.net>
Jan 25 16:37:35 mail-relay postfix/pipe[7487]: 93F9924C9E: to=<gennadi@gennadi.ru>, relay=filter, delay=2, status=sent (mail-relay.gennadi.ru)
Jan 25 16:37:35 mail-relay postfix/qmgr[1555]: 3F4D624CDB: from=<gennadi@gmx.net>, size=1168, nrcpt=1 (queue active)
Jan 25 16:37:35 mail-relay postfix/smtp[7496]: 3F4D624CDB: to=<gennadi@gennadi.ru>, relay=192.168.0.2[192.168.0.2], delay=0, status=sent (250 Ok: queued as BBA504A75)
Письмо от gennadi@gmx.net, пройдя проверку через spamfilter направлено
на Domino-Server для юзера gennadi@gennadi.ru ....
10.) MySQL и WebUserPrefs.
Есть возможность связать SpamAssassin с MySQL'ем и управлять через
вебброузер.
Для этого нужен пакет SpamAssissin 2.55 - не ниже!.
Здесь MySQL (http://www.mysql.com/downloads/)
Здесь WebUserPrefs (http://freshmeat.net/projects/webuserprefs/?topic_id=29)
11.) Создайте SpamAssassin MySQL-БД
Таблица userpref
CREATE TABLE userpref (
username varchar(100) NOT NULL,
value varchar(100) NOT NULL,
prefid int(11) NOT NULL auto_increment,
PRIMARY KEY (prefid),
INDEX (username)
) TYPE=MyISAM;
mail-relay:~ # mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 159 to server version: 3.23.55-Max-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database spamassassin;
Query OK, 1 row affected (0.19 sec)
mysql> use spamassassin;
Database changed
mysql> CREATE TABLE userpref (
-> username varchar(100) NOT NULL,
-> value varchar(100) NOT NULL,
-> prefid int(11) NOT NULL auto_increment,
-> PRIMARY KEY (prefid),
-> INDEX (username)
-> ) TYPE=MyISAM;
Query OK, 0 rows affected (0.03 sec)
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON
spamassassin.* TO spamassassin@localhost identified by 'spampassword';
Query OK, 0 rows affected (0.12 sec)
mysql>quit
mail-relay:~ #
12.) В директории /etc/mail/spamassassin найдите файл local.cf и
запишите туда нижеследующие строки:
user_scores_dsn
DBI:mysql:spamassassin:localhost
user_scores_sql_username spamassassin
user_scores_sql_password spampassword
user_scores_sql_table userpref
13.) В файл /etc/sysconfig/spamd внесите следующие изменения ( эти
опции нужны для работы с MySQL'ем ):
## Path: Network/Mail/Spamassassin
## Description: Arguments for the spam daemon
## Type: string
## Default: "-d -c -a -L"
## ServiceRestart: spamd
SPAMD_ARGS="-d -x -q "
Примечание: У RedHat этот файл называется /etc/sysconfig/spamassassin
14.) Распакуйте сгруженный пакет WebUserPrefs и установите его в
Root-директорию - вашего Web-Server'a Apache - "/srv/www/htdocs/"
В файле /srv/www/htdocs/webuserprefs/config.php внесите следующие
изменения :
$prefs_source = "db";
$db_host = "localhost";
$db_username = "spamassassin";
$db_password = 'spampassword;
$db_database = "spamassassin";
$db_sauser = $PHP_AUTH_USER;
15.) Пароль для login spamassassin'a через Browser:
mail-relay: # mkdir /srv/www/passwd/
mail-relay: # mkdir /srv/www/passwd/spamassassin
mail-relay: # htpasswd -c /srv/www/passwd/spamassassin/users spamassassin
New password: spampassword
Re-type new password: spampassword
mail-relay: # echo "mail:spamassassin" > /srv/www/passwd/spamassassin/group
16.) Apache, SSL и spamassassin-aliases
В директории /etc/httpd найдите такой файл httpd.conf и
подредактируйте его под вашу систему:
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/srv/www/htdocs"
ServerName mail-relay.gennadi.ru
ServerAdmin [39]webadmin@gennadi.ru
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A test
# certificate can be generated with `make certificate' under
# built time. Keep in mind that if you've both a RSA and a DSA
# certificate you can configure both in parallel (to also allow
# the use of DSA ciphers, etc.)
SSLCertificateFile /etc/ssl/certs/server.crt
#SSLCertificateFile /etc/httpd/ssl.crt/server-dsa.crt
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/ssl/certs/server.key
#SSLCertificateKeyFile /etc/ssl/certs/server.key
Alias /spamassassin/ /srv/www/htdocs/spamassassin
<Directory /srv/www/htdocs/spamassassin/>
Options None
SSLRequireSSL
order deny,allow
deny from all
AuthType Basic
AuthUserFile /srv/www/passwd/spamassassin/users
AuthGroupFile /srv/www/passwd/spamassassin/group
AuthName "SpamAssassin Admin"
require group mail
Satisfy Any
</Directory>
В директории /etc/ найдите такой файл php.ini найдите такую строку:
register_globals = Off
замените на:
register_globals = On
В директории /etc/sysconfig найдите такой файл apache найдите такую
строку:
HTTPD_SEC_MOD_SSL=no
замените на:
HTTPD_SEC_MOD_SSL=yes
У SuSE и UnitedLinux необходимо выполнить следуюшие приказы:
mail-relay: # SuSEconfig
mail-relay: # rcapache restart
У других дистрибутивов
mail-relay: # service apache restart
или
mail-relay: # /etc/init.d/apache restart
https://mail-relay.gennadi.ru/webuserprefs
17.) Дополнительные возможности версии SpamAssissin 2.55
Одна из важных функций этой версии даёт возможность обучать
SpamAssissin делать различие между SPAM и NOSPAM.
В SpamAssissin интегрирован Bayesian Filter, который активируется
приказом sa-learn. Сначала пользователь собирает до 1000 SPAM и
NOSPAM(HAM) писем и передаёт SpamAssissin'у :
mail-relay: # sa-learn -- spam /path/to/spam/ordner
mail-relay: # sa-learn -- ham /path/to/nospam/ordner
Так же учиться SpamAssissin автоматически различать письма SPAM от
NOSPAM и вводит их в BAYES-базу данных (Autolearning). После того как
SpamAssissin выучит достаточно правил и соберёт их в BAYES-базе
данных, эти правила автоматически активируются.
Ну вот и всё ....
Успехов!
Я использую связку, amavis + clamav, amavis так же юзает спамасасин, как их настроить amavis есть у него в докаx, править в постфиксе надо будет main.cf master.cf. Плюс конфиг амависа поправить на тему что ему использовать, какие антивирусники, и использовать ему спамасасин или нет. Короче доки там нормальные настроить не сложно.
Меня больше интересует процесс обучения Spamassassin-а, может кто нить поподробней описать как ето делается?
обучение спамассасина
cd /way/to/mail/with/spam
ls
к примеру есть там письмо в формате майлдир типа 11121213.box и ты знаешь что оно содержит спам
тогда пишешь
#sa-learn --spam ./11121213.box
оно выдает что-то типа learned from 1 message.
все спаммассасин обучился письму ...аналогично для
--ham
--forget