Ключевые слова:sendmail, mail, virus, spam, milter, freebsd, (найти похожие документы)
From: Дмитриев Геннадий Федорович <stranger03@mail.ru>
Newsgroups: email
Date: Mon, 17 Nov 2003 14:31:37 +0000 (UTC)
Subject: FreeBSD 5.1 + Sendmail + Spamassisn + AVP
0. Введение
Ну вот, я почти доделал свою антиспам-систему.
К сожалению, подробно описывать процедуру практически нет времени, да
и лениво. Потому на все вопросы готов ответить по почте
stranger03@mail.ru.
Но сначала небольшое отступление. В данной статье будет описана
процедура надстройки для вашего почтового сервера для фильтрации
почтового мусора (спама) и проверки входящей и исходящей почты на
вирусы. Надеюсь для чего это надо, объяснять не надо. Так же полагаю,
что вы хоть чуть-чуть знакомы с системой и вам не придеться объяснять,
как поставить систему, как настоить сам почтовый сервер и что такое
make и на кой она нужна.
Вся процедура состоит из нескольких частей:
1. Обновление дерева портов
2. Обновление почтового демона
3. Установка и настройка демона spamd, который разбирает сообщение по
кусочкам и ставит спам-балл Если балл превышает некую цифру,
которую вы можете изменять, письмо преобразуется определенным
образом.
4. Установка и настройка milter-а (spamass-milter) для почтового
демона. Он будет передавать сообщение демону spamd и принимать его
обратно, пересылая дальше по цепочке
5. Установка и настройка Касперского. В пояснении не нуждается.
6. Установка и настройка milter-а (kavmilter) для почтового демона.
Он будет передавать сообщение Касперскому.
7. И последнее, настройка самого почтового демона.
Вот собственно и все отступление, icon_smile.gif . Приступим.
1. Обновление дерева портов
---------------------------
Для начала обновим дерево портов:
cd /usr/ports/net/cvsup-without-gui
make
make install
Далее в домашнем каталоге создаем для большего удобства два файлика.
Один со списком обновляемых портов, другой со скриптом запуска.
cd /home/user
mkdir cvsup
cd cvsup
vi cvsup.ports
# =====начало файла cvsup.ports=========
*default host=cvsup.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default tag=.
*default delete use-rel-suffix compress
ports-mail
ports-net
ports-security
ports-sysutils
ports-www
# =====конец файла cvsup.ports==========
В принципе вы можете здесь обновлять все порты, систему, если вам это
необходимо. Для меня было достаточно этих портов. Про сам cvsup можете
почитать здесь: http://www.freebsd.org.ru/how-to/cvsup/
vi cvsup.sh
# =======начало файла cvsup.sh==========
#!/bin/sh
/usr/local/bin/cvsup -g -L 2 cvsup.ports
# =======конец файла cvsup.sh===========
chmod +x cvsup.sh
./home/user/cvsup/cvsup.sh
После такой процедуры ваши волосы, тьфу, порты станут относительно
новыми. Из них вам понадобится поставить следующие порты (технология
стандартная, make & make install):
/usr/ports/mail/sendmail
/usr/ports/mail/p5-Mail-SpamAssassin
/usr/ports/mail/spamass-milter
2. Обновление почтового демона
------------------------------
Поскольку изначально в FreeBSD 5.1 ставится Sendmail 8.12.9, обновим
его до 8.12.10 из портов. После установки его будет удобно собирать
отсюда:
/usr/ports/mail/sendmail/work/sendmail-8.12.10/cf/cf
Как, поясню чуть позже. Дополнительно, в каталоге
/usr/ports/mail/sendmail надо сделать make mailer.conf
3. Установка и настройка демона spamd
-------------------------------------
Далее, с sendmail все понятно. Для двух других портов небольшие
пояснения.
Основной демон, фильтрующий вашу почту - spamd. Его конфигурационный
файл находится здесь: /usr/local/etc/mail/spamassassin/local.cf
# ==========начало файла local.cf========
# don't use agent
use_razor2 0
use_dcc 0
use_pyzor 0
# check rdl
skip_rbl_checks 0
# autowhitelist
use_auto_whitelist 1
auto_whitelist_path /var/spool/filter/.spamassassin/auto_whitelist
# bayes
use_bayes 1
bayes_path /var/spool/filter/.spamassassin/bayes
auto_learn 1
ok_languages en ru de
ok_locales en ru de
# rewrite subject
rewrite_subject 1
subject_tag *SPAM*_HITS_ points* :
required_hits 3.5
report_charset koi8-r
allow_user_rules 0
clear_report_template
report This message has identified this incoming email as possible spam.
report
report Content preview: _PREVIEW_
report
report Content analysis details: (_HITS_ points, _REQD_ required,_BAYES_ bayes score)
report
report pts rule name description
report ---- ---------------------- --------------------------------------------------
report _SUMMARY_
clear_unsafe_report_template
# network whitelist
whitelist_from localhost
whitelist_to spam@mycompany.ru (mailto:spam@mycompany.ru)
# ==========конец файла local.cf=========
По пунктам объяснять не буду. Многое разжовано в статье Сергея Тараненко
http://www.3nity.ru/viewtopic.htm?t=1459
Файл /usr/local/etc/rc.d/spammerdaemon.sh. Собственно скрипт,
запускающий сам демон. Обратите внимание на два параметра. Первый -u
filter означает, что демон запускается от некоего виртуального
пользователя, имеющего ограниченные права. Про самого пользователя
чуть ниже. Второй параметр -s local5. Это вывод сообщений в другой
файл-лог. Изначальньно демон spamd все пишет в maillog. Мне это не
понравилось, я вывел сообщения от него в другой файл. Так удобнее
анализировать. В принципе, я бы вообще его отключил, да вот в
документации не нашел, как.
# =========начало файла spammerdaemon.sh==
#!/bin/sh
case "$1" in
start)
kill `ps ax | grep spamd | grep -v grep | awk '{print $1}' | head -1`
>/dev/null 2>/dev/null && echo -n ' spamd'
[ -x /usr/local/bin/spamd ] && /usr/local/bin/spamd -d -a -u filter -x \
-s local5 && echo -n ' spamd'
;;
stop)
kill `ps ax | grep spamd | grep -v grep | awk '{print $1}' | head -1`
>/dev/null 2>/dev/null && echo -n ' spamd'
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0
# =========конец файла spammerdaemon.sh===
Стоит добавить пользователя filter, группу filter, создать каталог
/var/spool/filter и назначить пользователя filter его владельцем.
vipw
filter:*:1025:1025::0:0:Mail Filter:/var/spool/filter:/sbin/nologin
vi /etc/group
filter:*:1025:filter
mkdir /var/spool/filter
chown filter:filter /var/spool/filter
Как я уже говорил, мне удобнее, когда сообщения от разных демонов
пишутся в разные лог-файлы. Потому, чтобы перенаправить сообщения от
spamd в другой файл, создадим пустой файл spamd.log:
cd /var/log
cat >./spamd.log
chown filter:filter spamd.log
И скорректируем содержимое двух файлов syslog.conf и newsyslog.conf:
# ========добавка в файл syslog.conf======
local5.* /var/log/spamd.log
# =========конец файла syslog.conf========
# ======добавка в файл newsyslog.conf=====
/var/log/spamd.log filter:filter 640 3 2000 * Z
# =======конец файла newsyslog.conf=======
4. Установка и настройка milter-а (spamass-milter) для почтового демона.
------------------------------------------------------------------------
Собственно, сам демон, разбирающий почту по косточкам готов. Перейдем
к настройкам milter-а, который будет передавать письмо от sendmail к
spamd. При установке spamass-milter файлик, объясняющий процедуру
активизации фильтра, лежит здесь: /usr/local/share/doc/spamass-milter/activation.txt.
Из всего этого я вынес для себя только одну полезную строчку:
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
Ну и собственно скрипт для запуска milter-фильтра. Там ничего сложного
нет. Единственное изменение, которое я сделал - это добавил в скрипт
адрес, на который будет пересылаться почта, идентифицированная
как "СПАМ".
/usr/local/etc/rc.d/spamass-milter.sh
# =======начало файла spamass-milter.sh===
#!/bin/sh
DAEMON=/usr/local/sbin/spamass-milter
SOCKET=/var/run/spamass-milter.sock
PIDFILE=/var/run/spamass-milter.pid
SPAMADRESS=spam@mycompany.ru
case "$1" in
start)
if [ -f "${DAEMON}" -a -x "${DAEMON}" ]
then
"${DAEMON}" -b "${SPAMADRESS}" -p "${SOCKET}" -f &
echo $! > "${PIDFILE}"
sleep 1
kill -HUP `head -1 /var/run/sendmail.pid`
echo -n ' spamass-milter running'
fi
;;
stop)
if [ -f "${PIDFILE}" ]
then
read -r pid junk < "${PIDFILE}"
kill ${pid}
rm -f "${SOCKET}" "${PIDFILE}"
sleep 1
kill -HUP `head -1 /var/run/sendmail.pid`
echo -n ' spamass-milter stopped'
fi
;;
esac
# ========конец файла spamass-milter.sh===
5. Установка и настройка Касперского.
-------------------------------------
С настройками фильтров, определяющих наличие спама в сообщениях
покончено. Перейдем к установке господина Касперского и мильтера для
почтовика. Соответсвенно, качаем откуда-нибудь kav-MailServer-4.0.4.0-FreeBSD-4.x.tgz
tar xzvf kav-MailServer-4.0.4.0-FreeBSD-4.x.tgz
pkg_add kav-WorkStationSuite-4.0.4.0-FreeBSD-4.x.tgz
Из всего, что поставится в каталог /usr/local/share/AVP - интересны
только эти файлы:
kavdaemon
kavscanner
defUnix.prf
AvpUnix.ini
Содержание конфигурационных файлов:
# =======начало файла AvpUnix.ini=========
[AVP32]
DefaultProfile=/usr/local/share/AVP/defUnix.prf
[Configuration]
KeysPath=/usr/local/share/AVP
SetFile=avp.set
BasePath=/usr/local/share/AVP/Bases
SearchInSubDir=No
UpdatePath=http://downloads2.kaspersky-labs.com/updates/
# ========конец файла AvpUnix.ini=========
# =======начало файла defUnix.ini=========
# same section with parameters for objects
[Object]
Names=*/home;*/tmp;*/var/tmp;/usr/src;/mnt/cdrom;/usr/tmp;/tmp/kav
Memory=No
Sectors=No
ScanAllSectors=No
Files=Yes
FileMask=2
UserMask=*.tar.gz
ExcludeFiles=0
ExcludeMask=*.txt *.cmd
ExcludeDir=
Packed=Yes
Archives=Yes
SelfExtArchives=Yes
MailBases=Yes
MailPlain=Yes
Embedded=Yes
InfectedAction=3
BackupInfected=No
IfDisinfImpossible=1
Warnings=Yes
CodeAnalyser=Yes
RedundantScan=No
SubDirectories=Yes
CrossFs=Yes
# global(common) options sections
[Options]
ScanRemovable=Yes
ScanSubDirAtEnd=No
ParallelScan=No
LimitForProcess=16
EndlesslyScan=No
ScanDelay=-1
Symlinks=1
[Report]
Report=Yes
UseSysLog=No
ReportFileName=/var/log/kav/kavscan.rpt
Append=Yes
ReportFileLimit=Yes
ReportFileSize=500
RepCreateFlag=600
ExtReport=No
WriteTime=Yes
WriteExtInfo=No
UseCR=No
RepForEachDisk=No
LongStrings=Yes
UserReport=No
UserReportName=/var/log/kav/userreport.log
# Showing objects
ShowOK=No
ShowPack=No
ShowPassworded=No
ShowSuspision=No
ShowWarning=No
ShowCorrupted=No
ShowUnknown=No
# Action with infected files
[ActionWithInfected]
InfectedCopy=No
InfectedFolder=/usr/local/share/AVP/infected
CopyWithPath=Yes
# Action with same infection file
ChangeExt=None
NewExtension=Virs
ChownTo=None
ChModTo=No
# Action with suspicion files
[ActionWithSuspicion]
SuspiciousCopy=No
SuspiciousFolder=/usr/local/share/AVP/suspicious
CopyWithPath=No
# Action with same suspicious file
ChangeExt=None
NewExtension=Susp
ChownTo=None
ChModTo=No
# Action with corrupted files
[ActionWithCorrupted]
CorruptedCopy=No
CorruptedFolder=/usr/local/share/AVP/corrupted
CopyWithPath=No
# Action with same corrupted file
ChangeExt=None
NewExtension=Corr
ChownTo=None
ChModTo=No
[TempFiles]
UseMemoryFiles=Yes
LimitForMemFiles=6000
MemFilesMaxSize=20000
TempPath=/tmp
[Priority]
Father=0
Child=0
[Customize]
Sound=No
UpdateCheck=No
UpdateInterval=90
OtherMessages=No
RedundantMessage=No
DeleteAllMessage=No
ExitOnBadBases=Yes
UseExtendedExitCode=Yes
# ========конец файла defUnix.ini=========
В стандартных конфигах я кое-что переделал. Во первых, при установке
Касперского, он норовит свои конфигурационные файлы поместить в
/etc/Avp. Мне это не понравилось, я выкинул оттуда все и поместил в
домашний каталог Касперского /usr/local/share/AVP. Отсюда несколько
изменений в перечисленных конфигах. Далее, создал два каталога, куда
будут валиться логи и временные файлы для проверки на вирусы.
mkdir /var/log/kav
mkdir /tmp/kav
6. Установка и настройка milter-а (kavmilter) для почтового демона.
-------------------------------------------------------------------
Осталось поставить milter для Касперского. Сам порт находится здесь:
/usr/ports/mail/kavmilter.
Процедура все таже, make & make install
При установке kavmilter создается три файлика, один файл запуска
самого kavmilter, второй файл запуска демона kavdaemon, третий
конфигурационный. Там опять же, я многое поменял, потому просто
содержимое файликов:
/usr/local/etc/kavmilter.conf
# =======начало файла kavmilter.conf========
SendmailPipe = /var/run/kavmilter
KAVPipe = /var/run/AvpCtl
PIDFile = /var/run/kavmilter.pid
TempDirectory = /tmp/kav
KAVTimeout = 60
SendmailTimeout = 300
DebugLevel = 0
DaemonMode = yes
InfectedAction = discard
# ========конец файла kavmilter.conf========
/usr/locat/etc/rc.d/kavmilter.sh
# =======начало файла kavmilter.sh==========
!/bin/sh
PREFIX=/usr/local/libexec
PIPE=/var/run/kavmilter
KAVPIPE=/var/run/AvpCtl
PIDFILE=/var/run/kavmilter.pid
TEMPDIR=/tmp/kav
DPARMS="-D 0"
case "$1" in
start)
rm -f ${PIPE} > /dev/null && \
${PREFIX}/kavmilter ${DPARMS} > /dev/null && echo -n ' kavmilter'
;;
stop)
killall -TERM kavmilter > /dev/null && rm -f ${PIPE} && \
rm -f ${PIDFILE} && \
echo "kavmilter stopped"
;;
restart)
killall -TERM kavmilter > /dev/null && rm -f ${PIPE} && \
rm -f ${PIDFILE} && sleep 5 && \
${PREFIX}/kavmilter ${DPARMS} > /dev/null && \
echo "kavmilter restarted"
;;
*)
echo "Usage: `basename $0` {start|stop|restart}" >&2
;;
esac
exit 0
# ========конец файла kavmilter.sh==========
При установке Касперского в /usr/local/etc/rc.d/ создается файл kavd.sh.
Я его удалил, вместо него следует использовать другой, что ставится
вместе с kavmilter. Некоторые строки мною изменены, потому просто
содежимое файла /usr/local/etc/rc.d/kavdaemon.sh:
# =======начало файла kavdaemon.sh==========
#!/bin/sh
PREFIX="/usr/local/share/AVP"
BINDIR="/usr/local/share/AVP"
AVPDIR="/tmp/kav"
AVPPIPE="/var/run"
DPARMS="-Y -f=$AVPPIPE -MP -dl -MD -I0 -o{$AVPDIR} $AVPDIR"
case "$1" in
start)
$BINDIR/kavdaemon $DPARMS && echo -n ' kavdaemon'
;;
stop)
[ -f $AVPDIR/AvpPid ] && $BINDIR/kavdaemon -ka > /dev/null \
&& echo "kavdaemon terminated"
;;
restart) [ -f $AVPDIR/AvpPid ] && $BINDIR/kavdaemon -ka > /dev/null \
&& $BINDIR/kavdaemon $DPARMS > /dev/null && echo 'kavdaemon restarted'
;;
*)
echo "Usage: `basename $0` {start|stop|restart}" >&2
;;
esac
exit 0
# ========конец файла kavdaemon.sh==========
7. Настройка самого почтового демона.
-------------------------------------
Ну и последнее. Настройка sendmail для фильтрации почты от спама,
вирусов и проч. Переходим в каталог с конфигурационными файлами sendmail
cd /usr/ports/mail/sendmail/work/sendmail-8.12.10/cf/cf
Создаем файл main.mc следующего содержания:
# =======начало файла main.mc===============
divert(-1)
divert(0)
include(`../m4/cf.m4')
VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.11 2001/07/14 18:07:27 gshapiro Exp $')
OSTYPE(freebsd5)
DOMAIN(generic)
FEATURE(`no_default_msa')
DAEMON_OPTIONS(`Port=smtp, Name=MTA')
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(relay_based_on_MX)
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
dnl Realtime Blocking List - AntiSpam Control
dnl FEATURE(dnsbl)
dnl FEATURE(dnsbl, `relays.osirusoft.com', `Mail rejected - see http://relays.osirusoft.com/')
FEATURE(dnsbl,`relays.ordb.org',`Mail rejected - see http://ordb.org/')
FEATURE(dnsbl,`blackholes.easynet.nl',`Mail rejected - see http://blackholes.easynet.nl/')
dnl FEATURE(dnsbl,`inputs.orbz.org', `Mail rejected - see http://orbz.org/')
dnl FEATURE(dnsbl,`relays.visi.com', `Mail rejected - see http://relays.visi.com/')
dnl FEATURE(dnsbl, `ex.dnsbl.org', `Mail rejected - see http://www.dnsbl.org/')
dnl FEATURE(dnsbl,`blackholes.mail-abuse.org',`Mail rejected - see http://mail-abuse.org/')
dnl FEATURE(dnsbl,`relays.mail-abuse.org',`Mail rejected - see http://work-rss.mail-abuse.org/')
dnl FEATURE(dnsbl,`dialups.mail-abuse.org',`Mail rejected; see http://mail-abuse.org/dul/enduser.htm')
dnl Russian DialUp Blocking List
FEATURE(`dnsbl',`dul.ru',`Mail rejected - your are spammer')
dnl Uncomment the first line to change the location of the default
dnl /etc/mail/local-host-names and comment out the second line.
dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confMAX_MESSAGE_SIZE', 5000000)
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS',
`authwarnings,noexpn,novrfy,noetrn,nobodyreturn,goaway,restrictmailq,restrictqrun')
define(`confSMTP_LOGIN_MSG',`Antispam-MTA; "Non-authorized relaying DENIED." $b')
define(`confMAX_RCPTS_PER_MESSAGE', `5')
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
INPUT_MAIL_FILTER(`kavmilter',`S=unix:/var/run/kavmilter,F=T')
define(`confMILTER_LOG_LEVEL',`6')
MAILER(local)
MAILER(smtp)
# ========конец файла main.mc===============
Полагаю, что вы немного знакомы с настройкой sendmail, потому не буду
объяснять все позиции. Поясню лишь три:
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
Эта строчка говорит, что при получении письма почтовиком, письмо
передается фильтру spamassassin для проверки на спам. В результате
обработки письму присваивается некий рейтинг.
INPUT_MAIL_FILTER(`kavmilter',`S=unix:/var/run/kavmilter,F=T')
Эта строчка говорит о том, что после обработки письма на потенциальный
спам, письмо попадает к Касперскому, а тот уже делает вывод, содержит ли
письмо вирус или нет.
define(`confMILTER_LOG_LEVEL',`6')
Ну и эта строка лишь уменьшает количество выводимой информации в логи.
Что удобно после отладки. Мне ведь нужны в принципе только строки о
поступлении и пересылке письма. Для разбора полета письма их вполне
достаточно, icon_smile.gif.
Собираем конфигурационный файл sendmail:
m4 main.mc>sendmail.cf
Его надо перезаписать поверх старого файла /etc/mail/sendmail.cf.
Ну и несколько последних штрихов. На самом деле вы можете этот шаг
пропустить или сделать так, как вам удобнее. Я для собственного
успокоения создал каталог /usr/local/etc/script. Переместил туда все
необходимые мне стартовые скрипты kavdaemon.sh, spammerdaemon.sh,
kavmilter.sh, spamass-milter.sh. В каталоге /usr/local/etc/rc.d создал
исполняемый скрипт следующего содержания:
# =======начало файла start.sh===============
#!/bin/sh
# my start script
# kavdaemon - antiviral tolkien pro
/usr/local/etc/script/kavdaemon.sh start
# starting mail filter daemon
/usr/local/etc/script/spammerdaemon.sh start
/usr/local/etc/script/kavmilter.sh start
/usr/local/etc/script/spamass-milter.sh start
# ========конец файла start.sh===============
Просто мне так удобнее.
Вот вроде бы и все. Буду благодарен за любые замечания на адрес stranger03@mail.ru
Все права на этот документ принадлежат мне.
Огромное спасибо:
Андрееву Павлу, системному администратору Novavox и Тараненко Сергею,
системному администратору Trinity за неоценимую помощь в создании данной системы.
С уважением, Дмитриев Геннадий Федорович.
Системный администратор ООО "Компьютеры Линтек"
Все хорошо, только не забудьте убрать dnsbl relays.osirusoft.com иначе лучше сразу всю почту направить >/dev/null при этом Вы секономите хотя бы времо процессора %)
спамассассин совершенно не подходит для серверов обрабатывающих 100000 и более писем в час.
даже с ограничением в 300 и менее кб, сервер загнется, каким бы крутым он не был.