SpamAssassin-HOWTO
	*******************************************************************************
	[Begin of SPAMASSASSIN_INSTALL.HOWTO]


	    УСТАНОВКА И НАСТРОЙКА SPAMASSASSIN ДЛЯ ФИЛЬТРАЦИИ СПАМА
			    НА ПОЧТОВОМ СЕРВЕРЕ (QMAIL)
			    
			       (STEP-BY-STEP HOWTO)


	СОДЕРЖАНИЕ:
	    1. Требования к системе
	    2. Необходимые компоненты
	    3. Установка SPAMASSASSIN
	    4. Настройка SPAMASSASSIN
	    5. Bayes-фильтры и утилита SA-LEARN
	    6. Действия с маркированными письмами (обработка)
	

	====================
1.	ТРЕБОВАНИЯ К СИСТЕМЕ
	====================
	
	Вообще-то SPAMASSASSIN не предъявляет особых требований к системе, однако,
	на некоторых моментах стоит остановиться особо:
	    * ну, естественно, Linux! :)
	    * и, само собой, MTA (в нашем случае - QMAIL). PROCMAIL тоже нужен.
	    * для того, чтобы заработало BAYES-фильтрование, необходим PERL версии 
	      не ниже 5.6.1

	======================
2.	НЕОБХОДИМЫЕ КОМПОНЕНТЫ
	======================
	
	Поскольку SPAMASSASSIN почти полностью написан на PERL, то и компоненты для него
	нужны, в основном, PERL'овые, то есть, библиотеки. Я не вижу особого смысла
	в том, чтобы ставить SPAMASSASSIN из RPM, предварительно собранного из
	исходников. По вышеописанной причине. Естественно, наличие/отсутствие некоторых
	PERL-библиотек полностью зависит от варианта (опций) установки PERL на конкретном
	почтовом сервере. Поэтому, RPM-пакет не будет являться универсальным и решающим 
	все проблемы способом установки на любой машине. Гораздо проще и удобнее 
	поставить SPAMASSASSIN с CPAN, о чем и рассказывается ниже. В этом случае, 
	установщик сам определит, какие библиотеки уже установлены, а какие необходимо 
	поставить дополнительно (что он и сделает).
	
	======================
3.	УСТАНОВКА SPAMASSASSIN
	======================
	
	3.1. Первое, что нужно сделать перед установкой SPAMASSASSIN - проверить версию PERL
	на почтовом сервере. Для этого в командной строке пишем:
	
		perl -v
	    
	И смотрим на результат в первых строках:
	
		This is perl, v5.8.0 built for i386-linux-thread-multi
		(with 1 registered patch, see perl -V for more detail)
	 
		Copyright 1987-2002, Larry Wall
	
	В данном случае (у меня) установлена версия 5.8.0, значит, обновления PERL
	не потребуется. Если вы видите, что версия, установленная у вас ниже 5.6.1 - 
	придётся обновить, иначе вам придётся забыть о BAYES-фильтровании.
	
	3.2. Теперь непосредственно переходим к установке SPAMASSASSIN. Из командной
	строки даём команду:
	
		perl -MCPAN -e shell
	
	на экране появится следующая информация и загрузится оболочка CPAN-сервера:

		cpan shell -- CPAN exploration and modules installation (v1.61)
		ReadLine support available (try 'install Bundle::CPAN')
 
		cpan>
	
	Далее (уже непосредственно в оболочке CPAN-сервера) пишем:
	
		o conf prerequisites_policy ask		(жмём ENTER)
нужно проверить наличие и при необходимости установить следующие модули
perl:

		Cwd-2.20
		DB_File-1.810
		Digest-1.08
		Digest-HMAC-1.01
		Digest-SHA1-2.10
		ExtUtils-MakeMaker-6.21
		File-Spec-0.88
		Mail-SpamAssassin-2.64
		Net-DNS-0.48
		PodParser-1.28
		install Mail::SpamAssassin		(жмём ENTER)
		
	И можно идти пить кофе. Правда, иногда установщик задаёт вопросы по поводу
	обновления уже установленных модулей до более подходящей версии. Рекомендую
	не отказываться. После того, как появится пустое приглашение
	
		cpan>
		
	смотрим - не было ли выше никаких ошибок при установке. Если всё нормально - 
	можно считать, что SPAMASSASSIN установлен. Мои поздравления! Выходим из
	CPAN-оболочки:
	    
		cpan> quit
		
	Всё! С установкой разобрались.
	Теперь необходимо проверить, работает ли SPAMASSASSIN. В командной строке пишем:
	
		spamassassin
	
	и жмём ENTER. И видим, что никакой реакции в ответ на эту команду не происходит.
	Курсор просто переходит на следующую строчку и всё. У вас может создаться впечатление,
	что процесс просто "висит". Спокойно! Не надо бежать за валидолом. Так и должно
	быть, ЭТО НОРМАЛЬНО! Если вы нажмёте комбинацию клавиш , то увидите следующее:
	
		root@yourserver:~>spamassassin				(нажмите Ctrl-D)
	
		X-Spam-Checker-Version: SpamAssassin 2.64 (2004-01-11) on yourserver.ru
		X-Spam-Report:
	    		*  2.0 FROM_NO_LOWER 'From' has no lower-case characters
			*  1.9 DATE_MISSING Missing Date: header
		X-Spam-Status: No, hits=3.9 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER
	    		autolearn=no version=2.64
		X-Spam-Level: ***
				 
		root@yourserver:~>
		
	Это значит, что SPAMASSASSIN нормально установился и работает. Теперь надо сделать
	скрипт для автоматического запуска демона spamd (на случай, если сервер вдруг будет
	перезагружен). Для этого делаем такой скрипт:
	

		#!/bin/sh
		#########################################################################
		#
		# chkconfig: 2345 99 99
		# description: "spamd" is the spamassassin daemon
		#
		# Start / stop script for spamd
		#
		# In order to be distibution independant, the server known a few
		# extra commands:
		#   start
		#   stop
		#
		#
		##########################################################################
                                                                                                                                            
		# Special options, adapt this
		NAME=spamd
		PIDFILE=/var/run/spamd.pid
                                                                                                                                            
		# where the program is located
                                                                                                                                            
		PROG=/usr/bin/spamd
                                                                                                                                            
		case $1 in
		    start)
		        echo -n "Starting $NAME                            "
		        $PROG -d -r $PIDFILE;
		        RETVAL=$?;
		        test $RETVAL && echo [  OK  ];
		        test $RETVAL || echo [FAILED];;
		    stop)
		        echo -n "Stopping  $NAME                            "
		        test -f $PIDFILE && kill `cat $PIDFILE` && RETVAL=$? && rm -f $PIDFILE;
		        test $RETVAL && echo [  OK  ];
		        test $RETVAL || echo [FAILED];;
		    restart)
		        $0 stop
		        sleep 2
		        $0 start
		        RETVAL=$?;;
		    status)
		        $PROG status;;
		    *)
		    echo "Syntax `basename $0` start|stop|status|restart"
		    RETVAL=1;;
		esac
					                                                                                                                                                
		RETVAL=$?
		exit $RETVAL

	и помещаем его в /etc/rc.d/init.d под именем spamd c правами 0755.
	
	Запускаем демона (если он ещё не запущен):
	    
		/etc/init.d/spamd start
		
	Всё... SPAMASSASSIN установлен и работает. Переходим к настройке.
		
	======================    
4.	НАСТРОЙКА SPAMASSASSIN
	======================
	
	Настройка SPAMASSASSIN очень проста. Файл настроек находится в каталоге
	/etc/mail/spamassassin и называется local.cf
	
	Для нормальной работы SPAMASSASSIN достаточно, чтобы в этом файле присутствовали
	следующие строки (в фигурных скобках - мои комментарии, ИХ ПИСАТЬ НЕ НУЖНО!)
		
	
	trusted_networks 195.69.148/24 127/8 # all in 192.168.*.* and 127.*.*.*
	trusted_networks 127. # all in 127.*.*.* localhost
	# whitelist
	whitelist_from *@cf1.ru                 # Accept ALL from our domains
	whitelist_from *@center-f1.ru
	                                                                                                                                            
	whitelist_from *@kenga.cf1.ru
	whitelist_from *@panda.cf1.ru
	whitelist_from *@mail.cf1.ru
	whitelist_from *@squid.cf1.ru
	whitelist_from *@kenga.center-f1.ru
	whitelist_from *@panda.center-f1.ru
	whitelist_from *@mail.center-f1.ru
	whitelist_from *@squid.center-f1.ru
	                                                                                                                                            
	whitelist_from localhost                # Accept ALL from this machine
	                                                                                                                                            
	                                                                                                                                            
	                                                                                                                                            
	                                                                                                                                            
	                                                                                                                                            
	#blacklist
	#blacklist_from
	#blacklist_to
	#переписать поле subject
	rewrite_subject 1
	subject_tag [SPAM-SPAM-SPAM]:              # Mark header of bulk mail with this signature
	required_hits 5.0
	report_safe 0
	use_terse_report 0
	auto_learn 1
	skip_rbl_checks 0
	use_razor2 0
	use_dcc 0
	use_pyzor 0
	always_add_report 1
	#use_auto_whitelist 1
	#auto_whitelist_path /etc/mail/spamassassin/auto_whitelist
	use_bayes 1
	bayes_path /var/sa_bayes/sa_bayes
	bayes_file_mode 0666
	#bayes_auto_expire       1
	#bayes_auto_learn        1
	ok_languages ru en
	ok_locales ru en
	report_charset windows-1251
	lang ru
	score NAME_OF_TEST 3.0
	score MIME_HTML_ONLY 2.0
	score HTML_MESSAGE 1.0
	score HTML_FONTCOLOR_RED 2.0
	score FROM_ILLEGAL_CHARS 1.5
	score HEAD_ILLEGAL_CHARS 1.5
	
	

	
	
	
	
	
	
	
	
	
	
	
	Для того, чтобы он начал фильтровать
	почту у конкретного пользователя, надо в файл .qmail в домашнем каталоге 
	пользователя внести некоторые изменения.
	
	

	==============================================
6.	ДЕЙСТВИЯ С МАРКИРОВАННЫМИ ПИСЬМАМИ (ОБРАБОТКА) 
	==============================================

	После того, как SPAMASSASSIN начал маркировать заголовки писем, у вас есть
	три варианта обработки маркированных писем:

	    Вариант А:
	    ----------
		Маркированные письма можно пропускать через почтовый сервер ничего
		с ними не делая. То есть, ваш MUA (например, KMail или TheBAT!) 
		может непосредственно отфильтровывать маркированные письма и складывать
		их в отдельную папку. Для этого вам в вашем почтовом клиенте надо 
		создать новой правило фильтрации для входящей почты:
		    * ФИЛЬТРОВАТЬ ПО ТЕМЕ ПИСЬМА
		    * ЕСЛИ ТЕМА ПИСЬМА СОДЕРЖИТ МЕТКУ 
		    
			    [SPAM-SPAM-SPAM]:
			    
		     ТО СКЛАДЫВАТЬ ЭТИ ПИСЬМА В ОТДЕЛЬНУЮ ПАПКУ (например, SPAM)
		     	    
		Этот вариант идеален, если вам необходимо получить ВСЕ письма и вы 
		сами хотите решать, что с ними делать. Для этого варианта файл 
		.procmail в домашнем каталоге пользователя изменять не потребуется.

	    Вариант Б:
	    ----------
		В этом варианте промаркированные письма можно складывать в отдельную
		папку в домашнем каталоге пользователя на сервере. Я не думаю, что 
		кто-нибудь остановится на этом варианте, поскольку он не имеет никакой
		пользы и имеет много минусов: засорение дискового пространства в разделах,
		невозможность контроля обычными пользователями пришедших промаркированных
		писем, и т.д. Однако, всё же приведу настройки файла .procmail для этого
		варианта:
		
		############## Begin of .procmail #####################################
		
		
		############## End of .procmail #######################################

	    Вариант В:
	    ----------
		Этот вариант - наиболее рискованный с точки зрения потери информации. Он
		заключается в том, что все письма, промаркированные, как спам, можно сразу
		же удалять на почтовом сервере, не помещая письма в пользовательские
		почтовые каталоги. Пользоваться этим вариантом можно только тогда,
		когда Байес-фильтр у вас уже достаточно натренирован (см. пункт Х) и
		ваш КЛС (коэффициент ложных срабатываний) практически равен нулю. Для того,
		чтобы задействовать этот вариант, необходимо в файле .procmail прописать
		следующее:
		
		############## Begin of .procmail #####################################
		
		
		############## End of .procmail #######################################
		
		Этим самым вы говорите обработчику почты, что все письма, содержащие
		в теме письма метку [SPAM-SPAM-SPAM]: будут перенаправляться в /dev/null - 
		то есть, попросту говоря, удаляться, не доходя до почтовых ящиков
		конечных пользователей. Ещё раз особо подчеркну, что этот вариант опасен тем,
		что какое-нибудь важное письмо, которое фильтр посчитает спамом (хотя, на 
		самом деле, оно будет для вас очень важным) будет просто удалено без суда и
		следствия.

	От себя скажу, что я использую вариант А (о чем нисколько не жалею). Те пользователи,
	которых не интересует возможное наличие среди кучи спама важных писем, настроили фильтры
	своих почтовиков так, что весь спам при получении автоматически удаляется в Корзину
	почтового клиента. Остальные (более осторожные) бегло просматривают эту кучу мусора
	на предмет наличия важных писем, а потом всё равно удаляют.
				
	
русский и прочий спам не идентифицируется до тех пор пока в базе менее 200
ham записей. Это видно при анализе подробных логов spamd в режиме Debug
(spamd -d -D):
Sep 27 16:44:43 medvejonok spamd[24688]: debug: Failed to parse line in SpamAssassin configuration, skipping: use_auto_whitelist 0
Sep 27 16:44:43 medvejonok spamd[24688]: debug: Failed to parse line in SpamAssassin configuration, skipping: lang ru
Sep 27 16:44:43 medvejonok spamd[24688]: debug: bayes: 24688 tie-ing to DB file R/O /var/sa_bayes/sa_bayes_toks
Sep 27 16:44:43 medvejonok spamd[24688]: debug: bayes: 24688 tie-ing to DB file R/O /var/sa_bayes/sa_bayes_seen
Sep 27 16:44:43 medvejonok spamd[24688]: debug: bayes: found bayes db version 2
Sep 27 16:44:43 medvejonok spamd[24688]: debug: bayes: Not available for scanning, only 33 ham(s) in Bayes DB < 200
Sep 27 16:44:43 medvejonok spamd[24688]: debug: bayes: 24688 untie-ing

Для этого небходимо в первую очередь (!) обучить spamd пополнив базы ham и spam:
sa-learn --spam --showdots /dir-spam
sa-learn --ham --showdots /dir-ham

При настройке spamd могут появиться следующего рода ошибки:	
Sep 28 09:16:01 medvejonok spamd[28152]: connection from localhost.localdomain [127.0.0.1] at port 1665
Sep 28 09:16:01 medvejonok spamd[28160]: info: setuid to lev succeeded 
Sep 28 09:16:01 medvejonok spamd[28160]: processing message <200409280911.56602.xinyong090607@yahoo.com> for lev:500.
Sep 28 09:16:03 medvejonok spamd[28160]: cannot write to /var/sa_bayes/sa_bayes_journal, Bayes db update ignored
Sep 28 09:16:03 medvejonok spamd[28160]: identified spam (19.4/5.0) for lev:500 in 2.0 seconds, 16582 bytes.

Для этого нужно всего лишь изменить права на /var/sa_bayes (666)	
	
	
	
	
	[End of SPAMASSASSIN_INSTALL.HOWTO]
	*******************************************************************************
	
	HOWTO написан исключительно на основе собственного опыта и не претендует на 
	авторские права сторонних людей, которые когда-либо описывали процесс установки 
	и настройки SPAMASSASSIN для QMAIL. Если вы считаете, что я что-либо упустил в
	процессе описания - сообщите мне и я постараюсь это исправить.
	
	2004 (C) Алексей Фастович 
	Группа компаний "F1", Новосибирск.
(c) 2004