Для того, чтобы ваш почтовый сервер мог принимать почту для вашего почтового домена,
необходимо чтобы выполнялись следующие условия:
Кроме того, часто бывает полезно посмотреть на очередь сообщений сервера.
Это можно сделать командочкой:
Если вы хотите форсировать отправку писем из очереди, этого можно добиться командой:
2. Установка pop3/imap сервера
Допустим, прочитав предыдущую часть, вы успешно настроили почтовый сервер таким образом,
что он может отправлять и принимать почту. Теперь нужно добиться того, чтобы
пользователи могли забирать свою почту с сервера. Для этого обычно используется протокол POP3
(Post Office Protocol version 3) или, реже, протокол IMAP.
Можно также использовать защищенные версии этих протоколов POP3s и IMAPs.
Устанавливаем пакет imap:
# urpmi imap
Этот пакет содержит сервисы, позволяющие использовать любой из четырех вышеописанных
протоколов. Теперь нам осталось только включить необходимые нам сервисы.
Итак, мы имеем дело со следующими демонами: ipop3, pop3s, imap, imaps.
Запуском этих демонов занимается демон xinetd. Для примера мы рассмотрим как включить
демон ipop3, как самый широко используемый. Аналогичные действия можно и нужно провести
со всеми четырьмя демонами.
Узнаем состояние демона, то есть определяем включен ли он в xinetd:
# chkconfig --list ipop3
Если не включен, включаем демон в xinetd:
# chkconfig ipop3 on
Отключить демон в xinetd можно так:
# chkconfig ipop3 off
Обратите внимание, что опция on сразу загружает это сервис
и делает его активным, а опция off сразу выключает и выгружает этот сервис.
Никакой дополнительной настройки эти сервисы обычно не требуют.
http://www.linux.opennet.ru/docs/RUS/mdkman/#id2873592
HOWTO postfix+spamassassin+AVP(via avcheck)+cyrus under FreeBSD
Немного предисловия
Почему POSTFIX?
postfix - альтернативный MTA, используемый
многими вместо sendmail.
У него много преимуществ (параллельная доставка писем, читаемый файл конфигурации,
встроенная поддержка MySQL (на этапе компиляции) и т.д. и т.п.), но для
меня, в своё время, ключевым моментом стала возможность запрета исполнения
команд в ~/.forward. Это достаточно серьёзный пункт, так как sendmail не
проверяет наличие шелла у пользователя при обработке файла ~/.forward и
это открывает достаточно большую дыру в безопасности сервера. Это достаточно
просто проверить, поместив строку следующего содержания в файл .forward
в домашний каталог пользователя у которого нет шелла
(| whoami | mail -s test You@e-mail.ua)
При определенных условиях этот путь позволяет провести удаленно атаку
с использованием локальных vulnerabilities.
postfix решает эту проблему так же элегантно, как и много другое, такой
строкой в файле конфигурации
# security reason - disable run commands from ~/.forward
allow_mail_to_commands = alias
p.s. telnet mx1.freebsd.org smtp :)
Почему AVP?
Так уж сложилось, что вирусов много и они научились пользоваться почтой
для своего распространения. Проверять почту стало необходимостью. Нет разницы,
какой именно антивирусной программой пользоваться. Главное - своевременное
обновление баз и возможность, настроив один раз, не вмешиваться в работу
в дальнейшем. Мы приобрели AVP, так что
и рассматривать будем только его. :) В комплект поставки входит так называемый
kavkeeper, который обеспечивает связь между MTA и самим антивирусным демоном.
С ним связано много не хороших воспоминаний. Вкратце - его использование
крайне не желательно. Его можно заставить работать, но мы тогда превратим
postfix в qmail. :( Вместо этого мы будем использовать avcheck, написанный Michael Tokarev. Кроме
того, что его код открытый, он же дает описание, как правильно установить
сам антивирусный демон. На этом мы остановимся позднее.
Почему CYRUS?
Тут всё просто и комментариев не требуется - он лучший
из бесплатных. Не нужно создавать системных пользователей. К тому же он
может использовать LMTP, а это нам может понадобится в дальнейшем. Кроме
того, идущий в комплекте с ним cyrussasl позволяет аутентифицировать пользователей,
забирающих почту по протоколам POP3/IMAP не только plain text, но и CRAM-MD5,
DIGEST-MD5. Outlook Express их не поддерживает, зато их поддерживает The
Bat!, имеющий много преимуществ и так :). Наверное, необходимо упомянуть,
что cyrus так же поддерживает SSL протоколы POP3S и IMAPS. И еще, наложив
на cyrussasl патч, мы можем научить его авторизоваться по базе MySQL.
SPAM
Наверное многие для себя уже прочувствовали всю проблему, кроме того никакие
rbl, regexp вида headers_check, body_check (в терминологии postfix) давно не
приносят должных результатов. Обратная сторона медали - ложные срабатывания.
Мне пришлось много заниматься этой проблемой. Увы, приходится принимать всё.
Проверять всё spamassassin-ом, благо его модуль BAYES работает как надо и
учится вразумительно, т.е. ему достаточно явно разложить по полочкам что есть
spam, а что есть ham - нормальная корреспонденция. Документация рулит, гугль тоже ;)
Разобравшись в используемых программах, приступим к установке.
Начнём с postfix
# cd /usr/ports/mail/postfix-current/
# make all install clean
нам будет предоставлен выбор
[ ] PCRE Perl Compatible Regular Expressions
[x] SASL Cyrus SASLv1 (Simple Authentication and Security Layer)
[ ] DB3 Berkeley DB3 (required if SASL also built with DB3)
[ ] MySQL MySQL map lookups
[ ] PgSQL PostgreSQL map lookups
[ ] OpenLDAP OpenLDAP map lookups
[ ] Test SMTP/LMTP test server and generator
[ ] TLS SSL and TLS (currently broken)
[ ] IPv6 IPv6 support (not KAME official)
в данном случае нам понадобится только SASL
после окончания сборки вся документация в /usr/local/share/doc/postfix/,
файлы конфигурации в /usr/local/etc/postfix/
В FreeBSD информация о почтовых программах находится в /etc/mail/mailer.conf
В нашем случае он должен выглядеть так
# more /etc/mail/mailer.conf
#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
Кроме того, так как sendmail, как таковой, нам больше не понадобится, добавим в /etc/make.conf строку
NO_SENDMAIL=true
При пересборке и установке мира sendmail больше не участвует.
Укажем в /etc/rc.conf, что sendmail мы больше не импользуем
sendmail_enable="NONE"
Отредактируем основной файл конфигурации postfix /usr/local/etc/postfix/main.cf
Комментарии описывают каждый параметр, но для ленивых - вкратце так:
В начале проверим соответствие установленных путей существующим. Далее
mail_owner = postfix
myhostname = имя_нашего_хоста
mydomain = имя_домена
mydestination = список через запятую или пробел хостов, для которых мы
принимаем почту (конечный пункт назначения) для раскладки её локально.
mynetworks_style = subnet (сети, почту от которых мы пересылаем во внешний мир. Адреса можно указать
здесь же, а можно и вынести это в файл. Если Вы заметили, в файле конфигурации
работают уже определенные переменные :)
mynetworks = 192.168.1.0/24, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
далее опишем домены, для которых мы релеим почту. Если не надо, оставляем
пустым.
relay_domains =
Если Вы не можете отправлять почту напрямую в мир и вам сначала перенаправить
все провайдеру, то вот этот параметр
#relayhost = SMART_хост_провайдера (в терминалогии sendmail)
определим, где файл aliases будет находится и в каком формате
#alias_maps = dbm:/etc/aliases
alias_maps = hash:/usr/local/etc/postfix/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
#alias_database = dbm:/etc/aliases
alias_database = hash:/usr/local/etc/postfix/aliases
#alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
так, как мы остановились на CYRUS, то указание об этом такое
mailbox_transport = cyrus
значение
cyrus описано в файле конфигурации /usr/local/etc/postfix/master.cf
Мы вернемся к нему после установки cyrus-а. Считая, что cyrus будет установлен
на этой же машине. Если мы будем использовать lmtp, то нам будет необходимо
настроить virtual. Более детальное описание в документации.
Сразу же укажем фильтр для проверки почты на вирусы. Если Вы не планируете
устанавливать AVP - закомментируйте эту строку, поставив
первым символ #.
# Antivirus scanner, see /usr/local/etc/postfix/master.cf for more details
content_filter = avcheck
Укажем файл, содержащий недопустимые заголовки
header_checks = regexp:/usr/local/etc/postfix/bad_headers
(он у меня выглядит так:
# don't receive mail with next file attachments
/^(Content-(Disposition: attachment;|Type:).*|(t| )+)(file)?name=.*.(vbs|pif|com|bat|scr|lnk)"?$/ REJECT We do not accepted mail with vbs|pif|com|bat|scr|lnk file extentions
/^Reply-To: .*@otvet.net/ REJECT We do not accepted mail from spammers
/^Reply-To: .*@blabla.com/ REJECT We do not accepted mail from spammers
/^Content-Type:.*X-Priority:.*X-Mailer:/ REJECT We do not accepted mail with virus
(последний (с) Netch для Klez-а)
}
Далее немного баловства :)
smtpd_banner = $myhostname ESMTP service ready (Postfix Rulezzz!!!)
стандартные описания
smtpd_sender_restrictions = hash:/usr/local/etc/postfix/access
transport_maps = hash:/usr/local/etc/postfix/transport
на последок
# security reason - disable run commands from ~/.forward
allow_mail_to_commands = alias
С этим фалом всё. В нём мы определили дополнительные файлы (access,
transport и aliases). После их редактирования создадим их hash-ы. Для
этого postfix использует свои утилиты - postmap и postalias для файла
aliases
# postmap /usr/local/etc/postfix/access
# postmap /usr/local/etc/postfix/transport
# postalias /usr/local/etc/postfix/aliases
Пока с postfix всё.
Установим cyrus.
# cd /usr/ports/mail/cyrus-imapd/
# make configure
Здесь необходимо откорректировать исходники, т.к. по RFC 2047 в Subject 8-битные символы не допускаются, ну а многие почтовики
на это просто не обращают внимание. Если же Вы приверженец соответсвию RFC, то этот шаг необходимо пропустить.
Если бы мы этого не сделали, то некоторые письма начали бы к нам приходить с темой: ХХХХХХХХХ, ну или что-то
в этом духе. Итак,
# cd work/cyrus-imapd.версия/imap/
# grep 'X' *
укажет нам, что в файле message.c (а для cyrus2 и в
lmtpengine.c) есть блок if, в котором и производится соотв. замена
символов. В принципе его необходимо просто удалить, но хочу предложить
Вам более элегантный способ ;). Просто замените
if (inheader && *p >= 0x80) {
на
if ( 0 && inheader && *p >= 0x80 ) {
При таком условии корёжащий блок никогда не выполнится ;). Продолжим установку:
# cd ../../..
# make all install clean
в процессе установки будет скомпилирован и установлен и cyrussasl
как всегда, документация в /usr/local/share/doc/cyrus/
файлы конфигурации в /usr/local/etc/ их два
cyrus.conf
imapd.conf
Если мы не используем lmtp, то файл cyrus.conf редактировать не требуется.
Конфигурируем cyrus файлом imapd.conf
Первое, что надо сделать, это указать, кто будет администратором. Рекомендуется
не использовать root для этого. Более детально в комментариях.
admins: admin
укажем пути
sievedir: /var/imap/sieve
sendmail: /usr/local/sbin/sendmail
и метод аутентификации пользователей
sasl_pwcheck_method: sasldb
Последнее, на что хотелось бы указать, так это возможность не заводить существующих
в Вашей сети пользователей вручную.
sasl_auto_transition: no
Если установить этот параметр в yes, то любой (!) пользователь, зашедший
по протоколам POP3|IMAP будет заведен в базу и для него будет создан почтовый
ящик.
После того как мы пропишем в imapd.conf все пути, нужно создать иерархию каталогов для почтовых ящиков
# /usr/local/cyrus/bin/mkimap
Имена и пароли всех пользователей хранятся в файле /usr/local/etc/sasldb.
Владелец:
-rw-r----- 1 cyrus mail sasldb
Просмотреть существующих пользователей можно командой sasldblistusers.
Нам надо добавить пользователя admin
# saslpasswd -c admin
и вводим пароль.
Теперь мы можем запустить cyrus.
cyrus по умолчанию использует системные tcp wrappers. В файле /etc/hosts.allow необходимо указать IP пользователей,
которые могут получать почту. Но возможно мои кривые руки или же версии, которыми я пользовался такие, но иногда
случается, что порт как бы "замораживается". Демон висит, слушает порт, но ничего с него не читает не пишет. :(
Я бы порекомендовал разрешить всем использовать pop3, imap, sieve (port tcp/2000), а закрыть эти порты с мира firewall-ом.
При установке cyrus-а в каталоге /usr/local/etc/rc.d/ был создан скрипт запуска
cyrus.sh.
Запустим его с параметром start.
# /usr/local/etc/rc.d/cyrus.sh start
Манипуляции с почтовыми ящиками проводят через утилиту
# cyradm -u admin localhost
при его запуске у Вас спросят пароль, который Вы вводили при создании
этого пользователя saslpasswd
Команда help расскажет Вам об остальных командах. Обратите внимание, что
почтовые ящики имеют имена формата user.Вася.
Для того, что бы создать почтовый ящик выполните здесь команду
localhost> cm user.uafug
localhost> lm
покажет Вам все существующие почтовые ящики.
localhost> quit
Мы создали почтовый ящик для пользователя uafug. Но необходимо не забыть
установить ему пароль
# saslpasswd -c uafug
Что бы знать, куда будут писаться логи, подредактируем файл /etc/syslog.conf
auth.* /var/log/auth.log
local6.debug /var/log/cyrus.log
и что бы логи не переполнили диск правим /etc/newsyslog.conf
/var/log/auth.log 600 3 100 * Z
/var/log/cyrus.log 600 3 100 * Z
для вступления исправлений в силу
# touch /var/log/auth.log /var/log/cyrus.log
# chmod 600 /var/log/auth.log /var/log/cyrus.log
# killall -HUP syslogd
Вернемся к postfix
# cd /usr/local/etc/postfix
и укажем ему, как локально доставлять почту для наших пользователей в
файле master.cf. Вот здесь мы и расшифруем указанное нами ранее в файле
main.cf значение cyrus
cyrus unix - n n - - pipe
flags=Ru user=cyrus argv=/usr/local/cyrus/bin/deliver -e -m ${extension} ${user}
проверьте правильность пути. Флаг u указывает, что имена пользователей при передаче необходимо перевести в нижний регистр.
See man pipe for more.
Если всё верно postfix готов к работе. Если у Вас еще работает sendmail - остановим его
# cd /etc/mail
# make stop
и запустим postfix
# /usr/local/sbin/postfix start
Для того, что бы postfix запускался автоматически, сделаем символьный
линк
# ln -s /usr/local/sbin/postfix /usr/local/etc/rc.d/postfix.sh
Последний штрих. Добавим в /etc/daily.local следующее
#!/bin/sh
echo
echo Checking for troubles in mail:
start=`date -v-1d '+%b %d' | sed 's/0(.)$/ 1/'`
cat /var/log/maillog | grep "$start" | egrep '(reject|warning|error|fatal|panic):'
С почтой всё.
Теперь перейдем к AVP.
Нам нужен kav-WorkStationSuit-3.0.136-FreeBSD-4.x.tgz, файл лицензий (его,
говорят, не трудно найти в тырнете) и avcheck (с сайта http://www.corpit.ru/avcheck/).
>
Из kav-WorkStationSuit-3.0.136-FreeBSD-4.x.tgz нам необходим только демон,
updater баз и пару файлов настройки. Использовать kav-postfix-3.0.136-FreeBSD-4.x.tgz
мы не будем. Каким образом их вытягивать не важно.
Для работы необходимо иметь в ядре SYSV*. Более детально см. /sys/i386/conf/LINT. Возможно
потребуется пересобрать Ваше ядро с этими опциями ;).
Создадим каталог, в котором и будут жить все наши антивирусы и который
будет chroot для нашей антивирусной компании. У меня это /var/spool/avp/.
# mkdir /var/spool/avp/
# cd /var/spool/avp/
По умолчанию kavdaemon желает работать от рута, но кто ж ему даст ;).
Итак создаем пользователей и группы для этого.
# vipw
avdaemon:*:64:65::0:0:AVP Daemon:/nonexistent:/nonexistent
avclient:*:65:65::0:0:AVP Client:/nonexistent:/nonexistent
и в /etc/group
avgroup:*:65:
Теперь мы готовы откомпилировать avcheck в моём случае avcheck-0.8
# tar xvfz avcheck-0.8.tar.gz
# cd avcheck-0.8
# make
# cp avcheck /var/spool/avp/
# cp uchroot /var/spool/avp/
# mkdir /var/spool/avp/infected
# cp infected.ex2.ru /var/spool/avp/infected
отредактируйте /var/spool/avp/infected/infected.ex2.ru
FROM=Antivirus-Daemon
VIRUS_ALERT=alert@you_host.ua # set to empty to skip administrator email
К примеру, я откорректировал этот файл так, что бы отправителю не отсылались
назад вложения (траффик тоже надо экономить ;)
Описание и документация достаточно полная, что бы всё сделать самостоятельно.
Настоятельно рекумендую читать. ;)
Итак продолжим
# cd /var/spool/avp
# cp /где/у нас/там/kavdaemon /var/spool/avp/
# cp /где/у нас/там/kavupdater /var/spool/avp/
# cp /где/у нас/там/AvpUnix.ini /var/spool/avp/
# cp /где/у нас/там/defUnix.prf /var/spool/avp/
# cp /где/у нас/там/НОМЕР/key /var/spool/avp/
# mkdir bases ctl dev proc tmp tst usr
# chown avdaemon:avgroup bases ctl kavdaemon tmp
# chown avclient:avgroup tst
# cd dev
# mknod console c 0 0
# mknod null c 2 2
в итоге мы должны получить следующее
-rw-r--r-- 1 root wheel 1199 12 ноя 2001 00030ADE.key
-rw-r--r-- 1 root wheel 116 12 ноя 2001 AvpUnix.ini
-rwxr-xr-x 1 root wheel 19282 13 фев 10:14 avcheck*
drwxr-xr-x 2 avdaemon avgroup 1024 6 июн 03:55 bases/ обратите внимание на владельца этого каталога
drwxrwx--- 2 avdaemon avgroup 512 28 май 15:38 ctl/
-rw-r--r-- 1 root wheel 1854 15 фев 09:36 defUnix.prf
drwxr-xr-x 2 root wheel 512 12 ноя 2001 dev/
drwxr-xr-x 2 root wheel 512 12 ноя 2001 infected/
-rwxr-xr-x 1 avdaemon avgroup 254572 12 ноя 2001 kavdaemon*
-rwxr-xr-x 1 root wheel 95672 15 янв 11:08 kavupdater*
drwxr-xr-x 2 root wheel 512 12 ноя 2001 proc/
drwxrwx--- 2 avdaemon avgroup 512 6 июн 11:56 tmp/
drwxr-x--- 2 avclient avgroup 512 6 июн 11:56 tst/
-rwxr-xr-x 1 root wheel 7205 13 фев 10:14 uchroot*
drwxr-xr-x 4 root wheel 512 12 ноя 2001 usr/
теперь проверим, какими библиотеками пользуются kavdaemon и kavupdater
# ldd kavupdater
kavupdater:
libintl.so.1 => /usr/local/lib/libintl.so.1 (0x28078000)
libm.so.2 => /usr/lib/libm.so.2 (0x2807d000)
libc.so.4 => /usr/lib/libc.so.4 (0x28099000)
# ldd kavdaemon
kavdaemon:
libintl.so.1 => /usr/local/lib/libintl.so.1 (0x28097000)
libm.so.2 => /usr/lib/libm.so.2 (0x2809c000)
libc.so.4 => /usr/lib/libc.so.4 (0x280b8000)
скопируем эти библиотеки в наш каталог usr/, что бы получить
такие же пути относительно текущего каталога, который и будет нам
корневым.
В файле AvpUnix.ini необходимо изменить следующие строки
[AVP32]
DefaultProfile=defUnix.prf
[Configuration]
KeyFile=00030ADE.key
KeysPath=/
SetFile=avp.set
BasePath=/bases
А в defUnix.prf:
# same section with parameters for objects
[Object]
Names=*/tst
[Report]
Report=No
[TempFiles]
UseMemoryFiles=No
LimitForMemFiles=6000
MemFilesMaxSize=20000
TempPath=/tmp
неплохо было бы включить softupdates для этого раздела ;) man tunefs
[Mail]
SendMail=No
остальное - в соответствии с документацией и по Вашему усмотрению
скачаем базы (kavupdater для скачивания баз использует wget. Его необходимо поставить из портов, если у Вас его нет)
/var/spool/avp/kavupdater -y -kb -ui=ftp://ftp.avp.ru/updates -b=/var/spool/avp/bases/
это строку можно (кхм, нужно) добавить в crontab, чтобы базы обновлялись
каждый день. По заверению support-а по killall -HUP kavdaemon он таки перечитывает
базы.
Осталось запустить демона. Я запускаю скриптом так
# more /usr/local/etc/rc.d/kavdaemon.sh
#!/bin/sh
echo Starting AVP Daemon
/usr/bin/env - HOME=/ /usr/bin/nice
/var/spool/avp/uchroot -u avdaemon
/var/spool/avp /kavdaemon -Y -MP -f=/ctl /tst
если всё нормально и демон живет, правим postfix ;)
Для начала добавим в /usr/local/etc/postfix/master.cf следующие строки
avcheck unix - n n - 5 pipe
flags=q user=avclient argv=/var/spool/avp/avcheck
-i /var/spool/avp/infected/infected.ex2.ru -h Ok
-d /var/spool/avp/./tst -s AVP:/var/spool/avp/ctl/AvpCtl -f ${sender}
-S :1025 -- ${recipient}
(строки, являющиеся продолжением flags должны начинаться с пробела)
а в начале, в зависимости от типа проверки
1) Для глобального режима (когда проверяется все, даже отправленное не
через smtp)
smtp inet n - n - - smtpd
localhost:1025 inet n - n - - smtpd -o content_filter=
обратите внимание, что при этом режиме в main.cf должно быть указано
content_filter=avcheck
2) Для relay режима (проверяется только то, что пришло через smtp)
smtp inet n - n - - smtpd -o content_filter=avcheck
localhost:1025 inet n - n - - smtpd -o content_filter=
всё, для вступления изменений в силу
# postfix reload
По логам видно, что почта принимается, отдается avcheck-у, потом перенаправляется
на localhost и отдается cyrus-у.
А как же SPAM?
У нас всё по порядку, так что к нему мы приступим только после того, как проверили, что
всё остальное уже работает. Как говорится мухи отдельно, котлеты отдельно ;)
Идём снова в порты.
# cd /usr/ports/mail/p5-Mail-SpamAssassin/
# make install clean
# cd /usr/local/etc/mail/spamassassin/
# cat local.cf
trusted_networks 192.168/16 127/8 # all in 192.168.*.* and 127.*.*.*
trusted_networks 127. # all in 127.*.*.*
clear_trusted_networks
rewrite_subject 1
subject_tag ***SPAM***
required_hits 5.0
report_safe 0
always_add_report 1
use_bayes 1
bayes_auto_learn 1
# mkdir /var/spool/spamd
# chown avclient:avclient /var/spool/spamd
# vipw
и вот здесь меняем домашний каталог avclient на /var/spool/spamd
строка будет выглядеть так:
avclient:*:65:65:AVP Client:/var/spool/spamd:/nonexistent
В скрипте запуска необходимо внести изменение в строке 38
spamd_flags=${spamd_flags:-"-u avclient -Q -L -m 16 -a -c -d -r ${pidfile}"}
И запускаем сам демон spamd.
# /usr/local/etc/rc.d/spamd.sh start
Логи пишутся в /var/log/maillog, так что внимательно читаем его ошибки и правим, ежели чего очепятались.
Ну и теперь самый изящный ход ;) Наша строка в постфиксе в файле master.cf будет вот такой
avcheck unix - n n - 5 pipe
flags=q user=avclient argv=/usr/local/bin/spamc -u avclient -e /var/spool/avp/avcheck
-i /var/spool/avp/infected/infected.ex2.ru -h Ok
-d /var/spool/avp/./tst -s AVP:/var/spool/avp/ctl/AvpCtl -f ${sender} -S :1025 -- ${recipient}
Запуск у нас стоит как бы в разрезе ;)
Последний раз помучаем постфикс
# postfix reload
Вуаля! ;)
spamassassin "из коробки" будет распознавать около 50-70% спама, но что бы его научить, необходимо ему скормить
существующие произведения спамеров и (!) нормальной почты. Создаем 2 каталога, кладём туда письма с заголовками
и на травливаем на них sa-learn. Фильтр bayes начнёт ставить свои оценки только после накопления в
базе 200 (по умолчанию) писем того и иного вида.
# mkdir /var/spool/spamd/ham
# mkdir /var/spool/spamd/spam
# mv ~ftp/incoming/spam/* spam
# mv ~ftp/incoming/ham/* ham
# sa-learn --ham /var/spool/spamd/ham/
# sa-learn --spam /var/spool/spamd/spam/
# rm /var/spool/spamd/spam/* /var/spool/spamd/ham/*
# /usr/local/etc/rc.d/spamd.sh restart
That's all, folks.
Спасибо
Gleb Smirnoff за комментарии и исправление моих ошибок.
Просьба перечитать вот такое
открытое письмо.
Тут стало модным на основаниях подобных статей делать себе рекламу, что ж... Если кто имеет что предложить - буду рад.
Думаю ясно, что не за даром. Варианты в 300-400 дохлых енотов не интересны, уж извольте. Удачи!
Konstantin Nikonenko
Last changed: пятница, 5 марта 2004 г. 09:33:32 (EET)
http://www.kot.dp.ua/postfix_avp_cyrus.html
Устанока SpamAssassin, Postfix, MySQL, WebUsePref
Пример установки SpamAssassin и DrWeb - топик внизу!!!
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-DNS*
rpm -i perl-Time-HiRes*
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)
mynetworks = $internal_mail, 127.0.0.0/8
program_directory = /usr/lib/postfix
inet_interfaces = all
mydestination = $mydomain
defer_transports =
disable_dns_lookups = no
relayhost =
content_filter =
mailbox_command =
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_relay_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/server.key
smtpd_tls_cert_file = /etc/ssl/certs/server.key
smtpd_tls_CAfile = /etc/ssl/certs/server.key
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 - y - - smtpd -o content_filter=filter:
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)
|
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 -g mail -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)
Jan 25 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 spamfilter 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
Здесь WebUserPrefs
11.) Создайте SpamAssassin MySQL-БД
Таблица userpref
| Цитата: |
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 d?mon
## 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 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 httpd 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 --dir /path/to/spam/ordner
mail-relay: # sa-learn --ham --dir /path/to/nospam/ordner |
Так же учиться SpamAssissin автоматически различать письма SPAM от
NOSPAM и вводит их в BAYES-базу данных (Autolearning). После того как
SpamAssissin выучит достаточно правил и соберёт их в BAYES-базе данных,
эти правила автоматически активируются.
Ну вот и всё ....
Успехов!
_________________
gennadi@gennadi.dyn.ee
Последний раз редактировалось: admin (Вс Авг 01, 2004 9:54 am), всего редактировалось 8 раз(а)