Ну вот, я почти доделал свою антиспам-систему, .
К сожалению, подробно описывать процедуру практически нет времени, да и лениво. Потому на все вопросы готов ответить по почте stranger03@mail.ru.
Но сначала небольшое отступление. В данной статье будет описана процедура надстройки для вашего почтового сервера для фильтрации почтового мусора (спама) и проверки входящей и исходящей почты на вирусы. Надеюсь для чего это необходимо, объяснять не надо. Так же полагаю, что вы хоть чуть-чуть знакомы с системой и вам не придется объяснять, как поставить систему, как настроить сам почтовый сервер, и что такое make и на кой она нужна.
Вся процедура состоит из нескольких частей:
- Обновление дерева портов
- Обновление почтового демона
- Установка и настройка демона spamd, который разбирает сообщение по кусочкам и ставит спам-балл Если балл превышает некую цифру, которую вы можете изменять, письмо преобразуется определенным образом.
- Установка и настройка milter-а (spamass-milter) для почтового демона. Он будет передавать сообщение демону spamd и принимать его обратно, пересылая дальше по цепочке
- Установка и настройка Касперского. В пояснении не нуждается.
- Установка и настройка milter-а (kavmilter) для почтового демона. Он будет передавать сообщение Касперскому.
- И последнее, настройка самого почтового демона.
Вот собственно и все отступление, . Приступим.
Для начала обновим дерево портов:
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==========
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
# ==========конец файла local.cf=========
Файл /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===
vipw
filter:*1025::0:0:Mail Filter:/var/spool/filter:/sbin/nologin
vi /etc/group
filter:*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@lintec.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===
С настройками фильтров, определяющих наличие спама в сообщениях покончено. Перейдем к установке господина Касперского и мильтера для почтовика. Соответсвенно, качаем откуда-нибудь
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=========
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========
Код: Выделить всё
# =======начало файла 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==========
Код: Выделить всё
# =======начало файла 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==========
Ну и последнее. Настройка 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===============
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')
Ну и эта строка лишь уменьшает количество выводимой информации в логи. Что удобно после отладки. Мне ведь нужны, в принципе, только строки о поступлении и пересылке письма. Для разбора полета письма их вполне достаточно, .
Собираем конфигурационный файл 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, за неоценимую помощь в создании данной системы, .
С уважением, Дмитриев Геннадий Федорович.
Системный администратор ООО «Компьютеры Линтек»