Устанавливаем сервер MailScanner c Вэб-мордой для офиса
Ver. 1.05 10.11.2005
Для начала - FreeBSD Handbook. Эта статья - разъяснения к общему порядку действий. Она не исключает необходимости внимательного чтения FreeBSD Handbook.
В некоторых местах статьи точки заведомо не ставились. Причины - дабы не было ошибок при копировании (понимании) скриптов и выражений.
Политика следующая – установка новой машины для централизованной обработки входящей и исходящей почты. «Старая» почтовая машина остается без изменений и ставится в глухой резерв (если на «новой» сгорит блок питания - тут же включаем старую). Устанавливается 2-й МХ на адрес «новой» машины. Внутренний и внешний интерфейсы старой машины закрываются по 25 порту Firewal-ом для принудительного пропуска и входящего и исходящего корпоративного трафика только через новую систему. Получение почты клиентами в данном варианте предполагается с других (может быть и внутренних) серверов. В данном случае - это промежуточный фильтр для нескольких почтовых серверов у которых указан SMTP gateway - наш новый сервер.
Вариации - поставить VmWare под что-то типа Win-NT4/2000-2003 c 6-10 ГБ виртуальным диском. При этом хорошо решаются вопросы Back-UP - просто копируется VM образ. Может при этом теряются какие-то логи (стреляться при этом может и не стоит), но система остается живой. Для этого варианта эта машина становится одноинтерфейсной, внешняя почта с внешнего файрвола перенаправляется на нее и для всех внутренних машин эта машина становится основным SMTP гейтом. Такой подход с точки зрения аварийного резервирования может оказаться наиболее удобным учитывая объемы современных дисков и одну особенность стандартных инсталляций - а куда (на какое свободное место) в пределах существующего UNIX сервера тарить бакап ? Из области фантастики это все. По производительности - полная свобода - от того что стандартный Sendmail запускается с ключиком -30м до извратов установки 2-х VmWare на разных машинах и прикручивания HeartBits или даже средствами МХ. То есть двигаться есть куда.
Соображения безопасности: в варианте VmWare - вы пробрасываете только 25 порт внутрь. Ну может еще 53. Все. Машина закрыта. Сервисов наружу - никаких вообще. Антивирусник - работает, система не Windows-образная, то есть даже теоретически стандартные Win-вирусы, которых на сегодня большинство развернуться там не могут.
Итак:
1. Устанавливаем FreeBSD. Версия та, поддержка которой есть в данный момент в полном объеме. Брать - да хоть на http://www.lafox.net. Надо устанавливать самую доступную в Интернете последнюю версию. В чем основная проблема - на серверах дистрибутивов FreeBSD не держат все необходимые пакеты годами. Во что это выливается - при попытке установить пакет через /usr/local/ports или /stand/sysinstall предлагается для начала его ручками положить в директорию дистрибутивов или он просто отсутствует в списке предлагаемых к установке. А если его найти невозможно ? Замкнутый круг. Теоретически вам на форумах расскажут куда идти и что делать, что это все доступно и т.д. но Вам надо ДЕЛАТЬ а не тратить время на разборки с проблемами не относящимися впрямую к Вашей задаче. Абсолютно тот же подход к CVS UP. Живой пример - установка GnuGK - для каждой версии пакета нужна другая версия очередной библиотеки. Это здорово - все обновляется - но Вы как конечный пользователь ничего не можете сделать - надо в конечном счете перекомпилировать ВСЮ систему !!! Поэтому и требуется самый последний доступный дистрибутив. В полном наборе. С полной коллекцией портов. Для инсталляции самой системы достаточно только первого диска ПОСЛЕДНЕЙ версии дистрибутива. Ну а если планируется работа этой системы в нормальном производственном режиме - полный дистрибутив в виде набора CD или DVD.
Для более свободного размещения принимаем примерно следующие размеры для разделов, вариации по вкусу:
Раздел |
Объем - минимальный |
Общий подход (рекомендуемое значение) |
/ |
512 МВ |
512 МБ - 1 ГБ (1 ГБ) |
Swap |
256 MB |
Объем = размеру RAM |
/tmp |
256 МВ |
256 МБ |
/usr |
1.8 GB |
60 % оставшегося свободного пространства |
/var |
1.2 GB |
40 % оставшегося свободного пространства |
ВСЕГО |
4 GB |
Не менее 9 ГБ |
Дополнительно необходимо установить KernDevelopment – в Distributions
Если его не поставили - ставим исходный 1-й CD в дисковод:
#mount /cdrom
#cd /cdrom/src
#./install.sh sys
Сразу добавляем совместимость с более старыми версиями
#cd /cdrom/compat3x
#./install.sh
#cd /cdrom/compat4x
#./install.sh
Если не поставили порты - ставим с исходного первого CD:
#cd /cdrom/ports
#./install.sh
Если очень хотим оторваться: Через /stand/sysinstall ставим /usr/ports/net/cvsup или с CD или из Интернета
Вам понадобится поставить следующие порты (технология стандартная более «правильное» - /stand/sysinstall или более развернутое - make & make install в соответствующих директориях /usr/ports.
Разница в принципе установки - через /stand/sysinstall ставятся уже собранные и откомпилированные готовые пакеты (вариант 1), make & make install - качаются соответствующие исходники, которые потом компилируются (вариант 2). Неожиданности могут ждать с нескольких сторон:
· при установке могут не ставиться вообще необходимые конфигурационные файлы (вариант 2) - есть исходники - и отвали. Там есть документация и бодайся.
· Могут теоретически отсутствовать исходники, необходимые для других программ (вариант 1)
· версии устарели и исходников просто уже не существует (вариант 2) (но мы говорим только о версии FreeBSD в данное время поддерживаемой)
· исходники просто не компилируются - ну не сложилось с этой версией (вариант 2)
Альтернативный вариант - мы имеем полный набор портов на CD. В этом случае - ставим путем подмонтирования соответствующего CD и выдачи команды pkg_add <имя порта> . По крайней мере в версии 5.4 оно ругается и сообщает что еще надо (как зависимость) доставить таким же образом для успешного добавления нужного нам <имя порта>.
Все дальнейшие ссылки типа misc/<имя порта> при наличии коллекции портов можно безболезненно читать по тексту как pkg_add <имя порта>. Или через механизм /stand/sysinstall - <имя порта>. Или в полном выражении /usr/ports/<раздел>/<имя порта>
3. Добавляем
1 misc/mc - МС - это обязательно
2 editors/joe - текстовый редактор - я привык к этому - CTRL+K - H - это HELP
4. Компилируем Kernel. Основная задача - добавить Firewall и сделать систему более компактной.
- Копируем /usr/src/sys/i386/conf/GENERIC в /usr/src/sys/i386/conf/TEST
- После настройки всей системы - установки сервера - добавляем options IPFIREWALL и конфигурируем защиту
- Убираем ненужное (USB, EISA и т.д.)
- Стандартная компиляция
- проверка файла /var/log/messages. Распечатать или просмотреть последнюю часть файла - последняя полученная перезагрузка. Сравнить с тем, что в конфигурации Kernel, выбросить лишнее.
- Перезагрузка (в случаях ошибок - проверка где и исправления)
5. устанавливаем McAfee. Я работаю с McAfee. Никаких проблем работать с другим антивирусом - в соответствующем файле MailScanner - прописывается все что угодно.
ставим сам пакет security/vscan
6. устанавливаем Webmin - www.webmin.com
· Распаковываем архив
· Переносим все под /var - директория будет потом использоваться
· Запускаем ./setup.sh
· Порт меняем на что-то кривое - всем известен порт 10000
7. устанавливаем MySQL 4.0 через /stand/sysinstall - в противном случае не поставит соответствующий фай лик в /usr/local/etc/rc.d и запускаем через /usr/local/bin/mysqld_safe --user=root, внимательно читаем начало файла mysqld_safe и делаем то что там написано (rc.conf). Для начала - проверяем - он может и сам после перезагрузки запускаться. Потом надо будет немного повоевать с правами доступа, но это уже потом, после того как получим полностью работающую систему. Пока пароль на root не ставим. Слегка боремся с правами на директории /var/db/mysql.
8. ставим php через lang/php4 - потом будет необходимость доконфигурирования модулей для Апача. Он сам Апач и установит.
9. ставим mail/pyzor
10. ставим mail/razor
11. ставим mail/dcc-dccd
12. ставим devel/autoconf
13. ставим devel/php-pcre
14. ставим databases/php-mysql
15. ставим graphics/php4-gd.
16. копируем /usr/local/etc/php.ini-recommended в php.ini
17. Через Webmin конфигурируем DNS – как slave для основного сервера
18. Конфигурируем Sendmail – берем старую конфигурацию и подставляем ее для новой машины (тоесть просто копируем большую часть файлов в /etc/mail и может быть слегка корректируем в части имени машины на которой мы все это ставим), проверяем работоспособность предварительно закрыв 25 порт на старой машине. Полностью запускаем почтовую систему - она должна на этом этапе работать уже в режиме «основная» и рулить всю почту как это делала старая машина. Через нее должна ходить нормально вся почта во внешний мир. Изменений в дальнейшем особых не предвидится.
19. через /stand/sysinstall ставим mail/Mailscanner-4.XX.X (какая там версия - не особенно принципиально) на данном этапе - потом все равно полностью переставлять
20. Создаем таблицы MySQL -
Проверяем права доступа к директории /var/db/mysql для возможности создания баз
chmod 775 /var/lib/mysql
Создаем базу MailScanner (файл в корневой директории дистрибутива MailScanner)
/usr/bin/mysql --user=root < create.sql
Ставим разрешения для работы администратора
/usr/bin/mysql --password=MYSQL_ROOT_PASSWORD
mysql>
GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'MAILWATCH_ADMIN_PASSWORD’;
exit
Должно выдать:
(Query OK, 0 rows affected)
21. ставим databases/p5-DBD-mysql
22. ставим mail/p5-Mail-SpamAssassin
23. в /usr/local/etc/apache/httpd.conf ищем строчку “/usr/local/www” и меняем для DocumentRoot на “/var/www/html” - это требуется для MailWatch
24. рисуем в /var/www/html файлик ind.php с содержимым <? phpinfo() ?> и смотрим его через эксплорер. Должно работать. PHP должно показать информацию о системе.
25. ищем в Google mailwatch for mailscanner, скачиваем, читаем INSTALL и ставим
· создаем таблицы SQL (написано в INSTALL)
· внимательно читаем INSTALL как создается админ в mailwatch и не забываем что пароль вводится с указателем MD5
mysql>
INSERT INTO users VALUES ('MAILWATCH_WEB_LOGIN',md5('MAILWATCH_WEB_PASSWORD '),’MAILWATCH_WEB_FULL_NAME’,'A',0);
exit
Должно выдать:
(Query OK, 1 row affected)
· переписываем всю директорию mailscanner из инсталляции MailWatch в /var/www/html
· копируем conf.php.example в conf.php и правим строки примерно 43 - 50 в части /usr/local
Ищем
define(DB_USER, 'root');
define(DB_PASS, '');
Меняем на
define(DB_USER, 'mailwatch');
define(DB_PASS, 'MAILWATCH_ADMIN_PASSWORD');
Ищем
define(QUARANTINE_USE_FLAG, false);
Меняем на
define(QUARANTINE_USE_FLAG, true);
· проверяем наличие необходимых строк для php.ini как это описано в INSTALL
· делаем корректировку /var/www/html/mailscanner/geoip_update.php и меняем:
LOAD DATA LOCAL INFILE на LOAD DATA INFILE
Создаем директории и меняем права доступа
mkdir /var/www/html/mailscanner/images/cache
mkdir /var/www/html/mailscanner/temp
chown -R root:apache /var/www/html/mailscanner
chmod g+w /var/www/html/mailscanner/images/cache
chmod g+w /var/www/html/mailscanner/temp
В директории /usr/local/etc/MailScanner меняем имена всех файлов sample на нормальные (без sample)
Создаем юзера tech для возможности удаленного входа + соответствующие права для SU
В принципе на этом этапе система имеет начальный набор того, что нам необходимо. Что делаем дальше - удобно работать с терминальным окном (типа ZOK) - в нем удобно делать ctrl-c - ctrl-v из данной статьи. Меньше работы - меньше ошибок.
Копируем MailWatch.pm и SQLBlackWhiteList.pm
cp MailWatch.pm SQLBlackWhiteList.pm /usr/lib/MailScanner/MailScanner/CustomFunctions
chown root:root /usr/lib/MailScanner/MailScanner/CustomFunctions/MailWatch.pm /usr/lib/MailScanner/MailScanner/CustomFunctions/SQLBlackWhiteList.pm
Корректируем db_clean.php
/tools/db_clean.php
Ищем
#!/usr/bin/php -qn
Меняем на
#!/usr/bin/php -q
Копируем mailq.php и другие скрипты и устанавливаем права доступа
cp mailq.php /usr/local/bin
mv tools/db_clean.php /usr/local/bin
mv tools/quarantine_maint.php /usr/local/bin
mv tools/quarantine_report.php /usr/local/bin
mv tools/sendmail_relay.php /usr/sbin
chown root:root /usr/local/bin/mailq.php
chown root:root /usr/local/bin/db_clean.php
chown root:root /usr/local/bin/quarantine_maint.php
chown root:root /usr/local/bin/quarantine_report.php
chown root:root /usr/sbin/sendmail_relay.php
Устанавливаем cron для работы mailq.php
/etc/cron.d/mailwatch
Добавляем
MAILTO=admin
SHELL=/bin/sh
* * * * * root /usr/local/bin/mailq.php
0 0 * * * root /usr/local/bin/quarantine_maint.php --clean
0 0 * * * root /usr/local/bin/quarantine_report.php
0 0 * * * root /usr/local/bin/db_clean.php
Устанавливаем запись лога MailScanner в MailWatch
/usr/local/etc/MailScanner/MailScanner.conf
Устанавливаем переменные MailScanner (если еще не установили)
Always Looked Up Last = &MailWatchLogging
Detailed Spam Report = yes
Include Scores In SpamAssassin Report = yes
Quarantine Whole Message = yes
Quarantine Whole Message As Queue Files = no
Quarantine User = root
Quarantine Group = apache
Quarantine Permissions = 0660
Quarantine Dir = /var/spool/MailScanner/quarantine
Is Definitely Not Spam = &SQLWhitelist
Is Definitely Spam = &SQLBlacklist
Создаем директьрии для Байеса, доступные для Апача
mkdir /usr/local/etc/MailScanner/bayes
chown root:apache /usr/local/etc/MailScanner/bayes
chmod g+ws /usr/local/etc/MailScanner/bayes
Права доступа к карантину
chown root:apache /var/spool/MailScanner/quarantine
chmod g+rwx /var/spool/MailScanner/quarantine
Обновляем MailScanner параметры для spamassassin для использования Байеса
Ищем
#bayes_path /usr/local/etc/MailScanner/bayes/bayes
Меняем на
bayes_path /usr/local/etc/MailScanner/bayes/bayes
Проверяем /etc/cron.daily/clean.quarantine отключено
/etc/cron.daily/clean.quarantine
Удостоверяемся что
$disabled = 1;
Отключаем php safe mode для php скриптов
/etc/httpd/conf/httpd.conf
Добавляем
<Directory /var/www/html/mailscanner/>
php_admin_flag safe_mode 0
</Directory>
Перестартуем Апач
30. Разрешения для файла bayes.mutex
chmod 660 /etc/MailScanner/bayes/bayes.mutex
Далее идут разъяснения по технике работы Sendmail в данной системе.
Существующая стандартная система основанная на Sendmail обычно слушает 25 порт и сообщения, приходящие на этот порт укладывает в директорию /var/spool/mqueue. В нашем случае мы запускаем два процесса и назначаем им две различных директории для работы - для приемника входящей почты из Интернет - процесс, работающий с директорией /var/spool/mqueue.in и для доставщика почты после серверной обработки - /var/spool/mqueue
Создаем директории и устанавливаем им необходимые параметры доступа:
# cd /var/spool
# ls -ld mqueue
drwxr-x--- 2 root bin 62976 Oct 23 16:18 mqueue
# mkdir mqueue.in
# chown root mqueue.in
# chgrp bin mqueue.in
# chmod u=rwx,g=rx,o-rwx mqueue.in
# ls -ld mqueue mqueue.in
drwxr-x--- 2 root bin 62976 Oct 23 16:18 mqueue
drwxr-x--- 2 root bin 41472 Oct 23 16:18 mqueue.in
Группа может оказаться и daemon
Стартовый скрипт меняется (это теория):
Было:
sendmail -bd -q15m
Необходимо:
sendmail -bd -OPrivacyOptions=noetrn -ODeliveryMode=queueonly -OQueueDirectory=/var/spool/mqueue.in
sendmail -q5m
Окончательный вид скрипта (это практика) /etc/rc.d/sendmail - порезали грубо, но работает
#!/bin/sh
#
# $NetBSD: sendmail,v 1.14 2002/02/12 01:26:36 lukem Exp $
# $FreeBSD: src/etc/rc.d/sendmail,v 1.7 2002/10/12 10:31:31 schweikh Exp $
# кривовато смотрится – но работает
# PROVIDE: mail
# REQUIRE: LOGIN
# KEYWORD: FreeBSD NetBSD
# we make mail start late, so that things like .forward's are not
# processed until the system is fully operational
# XXX - Get together with sendmail mantainer to figure out how to
# better handle SENDMAIL_ENABLE and 3rd party MTAs.
#
. /etc/rc.subr
name="sendmail"
rcvar=`set_rcvar`
required_files="/etc/mail/${name}.cf"
case ${OSTYPE} in
FreeBSD)
# command=${sendmail_program:-/usr/sbin/sendmail}
# pidfile=${sendmail_pidfile:-/var/run/sendmail.pid}
/usr/sbin/sendmail -bd -OPrivacyOptions=noetrn -ODeliveryMode=queueonly -OQueueDirectory=/var/spool/mqueue.in
/usr/sbin/sendmail -q5m
esac
11. конфигурируем DNS для правильной работы по 127.0.0.1 Проверяем через nslookup
12. стартуем /usr/local/etc/mailscanner.sh и проверяем maillog на предмет ошибок
13. для McAfee проверяем наличие /usr/ports/ftp/wget
14. постоянно проверяем Maillog на предмет ошибок (не читаются файлы, директории и т.д.)
Настраиваем FreeBSD
Типичный ps –ax пока еще не оптимизированный - не закрыты ненужные сервисы/процессы
PID TT STAT TIME COMMAND
0 ?? DLs 0:00.34 (swapper)
1 ?? ILs 0:01.28 /sbin/init --
2 ?? DL 0:10.75 (g_event)
3 ?? DL 0:19.60 (g_up)
4 ?? DL 0:23.43 (g_down)
5 ?? DL 0:00.00 (taskqueue)
6 ?? DL 0:14.14 (pagedaemon)
7 ?? DL 0:00.92 (vmdaemon)
8 ?? DL 2:08.74 (pagezero)
9 ?? DL 0:18.87 (bufdaemon)
10 ?? DL 0:00.00 (ktrace)
11 ?? RL 1095:51.19 (idle: cpu0)
13 ?? WL 0:04.60 (irq1: atkbd0)
17 ?? WL 0:00.00 (irq6: fdc0)
23 ?? WL 0:03.62 (irq12: xl1)
25 ?? WL 0:00.00 (irq14: ata0)
26 ?? WL 0:14.90 (irq15: xl0 ata1++)
27 ?? RL 6:28.39 (swi8: tty:sio clock)
29 ?? WL 0:08.84 (swi1: net)
30 ?? DL 0:17.69 (random)
34 ?? WL 0:12.29 (swi3: cambio)
35 ?? WL 0:00.00 (swi7: task queue)
36 ?? DL 0:00.02 (usb0)
37 ?? DL 0:00.00 (usbtask)
39 ?? DL 1:10.36 (syncer)
40 ?? DL 0:01.13 (vnlru)
41 ?? IL 0:00.00 (nfsiod 0)
42 ?? IL 0:00.00 (nfsiod 1)
43 ?? IL 0:00.00 (nfsiod 2)
44 ?? IL 0:00.00 (nfsiod 3)
228 ?? Ss 0:01.32 /usr/sbin/syslogd -s
327 ?? Ss 0:00.40 /usr/sbin/usbd
397 ?? Is 0:00.94 /usr/sbin/cron
42325 ?? S 0:10.25 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
42351 ?? S 0:09.89 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
42370 ?? S 0:09.77 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
42396 ?? S 0:11.42 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
43130 ?? S 0:06.22 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
55648 ?? Ss 0:07.66 /usr/bin/perl /var/a_webmin/miniserv.pl /etc/webmin/m
66554 ?? Ss 0:16.01 /usr/local/sbin/named -c /etc/namedb/named.conf
69549 ?? Is 0:00.17 /usr/bin/perl -I/usr/local/lib/MailScanner /usr/local
92151 ?? Ss 0:04.55 sendmail: accepting connections (sendmail)
92153 ?? Is 0:00.53 sendmail: Queue runner@00:05:00 for /var/spool/mqueue
431 v0 IWs+ 0:00.00 /usr/libexec/getty Pc ttyv0
67264 v1 IWs 0:00.00 login [pam] (login)
67265 v1 IW 0:00.00 -csh (csh)
67300 v1 S+ 0:20.55 mc
26504 v2 IWs 0:00.00 login [pam] (login)
26505 v2 IW 0:00.00 -csh (csh)
44876 v2 IW+ 0:00.00 mc
434 v3 IWs 0:00.00 login [pam] (login)
28389 v3 D 0:00.88 -csh (csh)
43184 v3 R+ 0:00.00 ps ax
43185 v3 DV+ 0:00.00 -csh (csh)
435 v4 IWs 0:00.00 login [pam] (login)
50742 v4 IW 0:00.00 -csh (csh)
96235 v4 IW+ 0:00.00 telnet 192.168.11.9
436 v5 IWs+ 0:00.00 /usr/libexec/getty Pc ttyv5
437 v6 IWs+ 0:00.00 /usr/libexec/getty Pc ttyv6
438 v7 IWs+ 0:00.00 /usr/libexec/getty Pc ttyv7
Примерный Mailllog
Aug 26 08:55:43 gw84 sendmail[43729]: i7Q8thMJ043729: from=<TShumygora@umc.com.ua>, size=6671, class=0, nrcpts=1, msgid=<OFE86F9FAD.0E53983D-ONC2256EFC.00206F3E-C2256EFC.00209EFA@umc.com.ua>, bodytype=8BITMIME, proto=ESMTP, daemon=MTA, relay=n2.umc.com.ua [80.255.64.69]
Aug 26 08:55:44 gw84 MailScanner[43196]: New Batch: Scanning 1 messages, 7221 bytes
Aug 26 08:55:44 gw84 MailScanner[43196]: Spam Checks: Starting
Aug 26 08:55:50 gw84 MailScanner[43196]: Virus and Content Scanning: Starting
Aug 26 08:55:53 gw84 MailScanner[43196]: Filename Checks: Allowing msg-43196-2.txt
Aug 26 08:55:53 gw84 MailScanner[43196]: Filename Checks: Allowing msg-43196-3.html (no rule matched)
Aug 26 08:55:53 gw84 MailScanner[43196]: Uninfected: Delivered 1 messages
Aug 26 08:55:56 gw84 sendmail[43737]: i7Q8thMJ043729: to=gala@ln-kie01.rabbit.com.gr, delay=00:00:13, xdelay=00:00:03, mailer=esmtp, pri=126671, relay=ln-kie01.rabbit.com.gr. [192.168.11.42], dsn=2.0.0, stat=Sent (Message accepted for delivery)
Или
Sep 2 01:09:56 gw84 sendmail[4122]: i81M9qTh004122: from=<>, size=235823, class=0, nrcpts=1, msgid=<200409012208.i81LOqv03306@mogila.iatp.kiev.ua>, proto=ESMTP, daemon=MTA, relay=mogila.iatp.kiev.ua [195.230.130.2]
Sep 2 01:09:57 gw84 MailScanner[3825]: New Batch: Scanning 1 messages, 236291 bytes
Sep 2 01:09:57 gw84 MailScanner[3825]: Spam Checks: Starting
Sep 2 01:10:03 gw84 MailScanner[3825]: Virus and Content Scanning: Starting
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing msg-3825-5.txt
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing msg-3825-6.msg (no rule matched)
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing msg-3825-7.txt
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing 1.3.6immunology-f.doc (no rule matched)
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing 1.3.5Tabl-f.doc (no rule matched)
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing 1.3.5cytogenetics-f.doc (no rule matched)
Sep 2 01:10:06 gw84 MailScanner[3825]: Filename Checks: Allowing 1,3,6Tabl-imm-f.doc (no rule matched)
Sep 2 01:10:06 gw84 MailScanner[3825]: Filetype Checks: Allowing msg-3825-6.msg
Sep 2 01:10:06 gw84 MailScanner[3825]: Filetype Checks: Allowing msg-3825-5.txt
Sep 2 01:10:06 gw84 MailScanner[3825]: Filetype Checks: Allowing msg-3825-7.txt
Sep 2 01:10:06 gw84 MailScanner[3825]: Content Checks: Need to convert HTML to plain text in 1 messages
Sep 2 01:10:06 gw84 MailScanner[3825]: Uninfected: Delivered 1 messages
Sep 2 01:10:11 gw84 sendmail[4134]: i81M9qTh004122: to=imm01@rigk-ras.rabbit.com.gr,imm@rigk-ras.rabbit.com.gr, delay=00:00:19, xdelay=00:00:05, mailer=esmtp, pri=355823, relay=rigk-ras.rabbit.com.gr. [192.168.13.76], dsn=2.0.0, stat=Sent (Message accepted for delivery)
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 212.94.185.81 UGS 0 60230 xl0
127.0.0.1 127.0.0.1 UH 0 8416 lo0
192.168.11 link#2 UC 0 0 xl1
192.168.11.9 00:04:76:15:d5:68 UHLW 2 17982 xl1 1120
192.168.11.42 00:0b:cd:cf:c9:6a UHLW 0 1051 xl1 1061
192.168.11.43 00:60:97:93:f8:fa UHLW 0 545 xl1 1134
192.168.11.58 00:50:8b:a5:8f:98 UHLW 0 13210 xl1 1153
192.168.12 192.168.11.9 UGS 0 77 xl1
192.168.13 192.168.11.9 UGS 0 807 xl1
212.94.185.80/28 link#1 UC 0 0 xl0
212.94.185.81 00:02:b9:a5:c2:e4 UHLW 1 0 xl0 1194
212.94.185.84 00:50:04:ed:43:3b UHLW 0 31 lo0
Для общего развития можно поставить MailScanner модуль для Webmin, но пользоваться осторожно – не все делает корректно.
Дальше.
/etc/periodic/daily/330.news копируем в 340.mcafee Это сам запуск скрипта скачки апдейтов.
#!/bin/sh
#
# $FreeBSD: src/etc/periodic/daily/330.news,v 1.4 2000/09/14 17:19:10 brian Exp $
#
# Expire news articles
# (This is present only for backwards compatibility, usually the news
# system handles this on its own).
# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
case "$mcafee_update" in
[Yy][Ee][Ss])
if [ ! -f /usr/local/uvscan/uvscan ]
then
echo '$mcafee_update is set but /usr/local/uvscan/uvscan' \
"doesn't exist"
rc=2
else
echo ""
echo "Running McAfee DAT update:"
/usr/local/libexec/MailScanner/mcafee-autoupdate -v && rc=0 || rc=3
fi;;
*) rc=0;;
esac
exit $rc
Если версия /usr/local/libexec/MailScanner/mcafee-autoupdate - не v-1.52, то эту програмулину берем из треда (трепа) или ищем версии повыше в последних дистрибутивах MailScanner - там она исправленная - и заменяем существующую (ту которая ниже 1.52). По ходу дела - избавляемся от статуса .sample
Копируем файл /usr/local/libexec/MailScanner/mcafee-wrapper.sample в /usr/local/libexec/MailScanner/mcafee-wrapper
Создаем соответствующую запись в /etc/defaults/periodic.conf
# 340.mcafee
mcafee_update="YES" # Rum McAfee DAT update
проверяем
>sh 340.mcafee
IPFW
Берем стандартный набор правил CLIENT, слегка корректируем для внутренних SMTP серверов, адресов и интерфейсов.
Запрещаем все кроме 25 и 53 порта на внешнем интерфейсе. На внутреннем - по вкусу.
Запускаем NTPD, штука кривовато настраивается, но работает.
Увеличиваем количество логов в /etc/newsyslog/conf
/messages
При первоначальном запуске проверяем - все ли sendmail убили. Потом ручками пускаем /etc/rc.d/sendmail (исправленный, ясное дело)
Должны получить что-то в духе:
5218 ?? Ss 0:00.01 sendmail: accepting connections (sendmail)
5220 ?? Ss 0:00.01 sendmail: Queue runner@00:05:00 for /var/spool/mqueue (sendmail)
Создаем директории:
/var/spool/MailScanner/incoming
/var/spool/MailScanner/quarantine
/var/spool/MailScanner/spamassassin (а может это и не пригодится)
Корректировки:
/usr/local/etc/ MailScanner/ MailScanner.conf
56 строка - имя домена
63 - имя конторы
70 - вэбсайт
415 - Virus Scanners = mcafee
431 - Deliver Disinfected Files = yes
770 - Quarantine Whole Message = yes
775 - Quarantine Whole Messages As Queue Files = yes
1318 - Use SpamAssassin = yes
1324 - Max SpamAssassin Size = 90000
1388 - Rebuild Bayes Every = 86400
1501? - убираем ссылку на bounce.rules - потом будем разбираться - где искать примеры.
1584 - SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin
1738 - Always Looked Up Last = &MailWatchLogging
Копируем из дистрибутива MailWatch файлик MailWatch.pm в директорию /usr/local/lib/MailScanner/MailScanner
Редактируем MailWatch.pm
Ищем
my($db_user) = "root";
my($db_pass) = "";
Меняем на
my($db_user) = "mailwatch";
my($db_pass) = "MAILWATCH_ADMIN_PASSWORD";
Повторяем для SQLBlackWhiteList.pm
Редактируем MailWatch.pm
Ищем
MailScanner::Log::InfoLog("$$message{id}: Logged to MailWatch SQL");
Меняем на
MailScanner::Log::DebugLog("$$message{id}: Logged to MailWatch SQL");
Ищем
MailScanner::Log::InfoLog("Logging message $msg{id} to SQL");
Меняем на
MailScanner::Log::DebugLog("Logging message $msg{id} to SQL");
Создаем директорию /etc/mail/spamassassin
Рисуем там файлик
local.cf
=======
Rewrite_subject 1
Trusted_networks 192.168.11./24 127/8 - это наши сети
Subject_tag ***SPAM***
=======
Запись в MySQL
/usr/local/lib/MailScanner/MailScanner/CustomConfig - стр 351
Было
# UNCOMMENT THIS LINE: use DBI;
Надо
# UNCOMMENT THIS LINE:
use DBI;
Ищем (на www.mailscanner.info или на Sourceforge.net) WebMin модуль для Mailscanner. Ставим.
Теперь сообщения о событиях:
В директории /usr/local/share/MailScanner/reports/en/ все что там находится с припиской sample меняем на без приписки
Чистим полностью в ноль /var/log/maillog Нас он сейчас вообще не интересует и перегружаем машину. Теперь внимательно на него смотрим и исправляем то что забыли.
Правила Антисппам.
Предупреждение - это можно и делать и не делать. Но если Вы это сделали - потом надо будет долго разбираться с SA-LINT - хотя бы и их Веб-интерфейса. Это проверка правильности набора правил. Тепоретически это добавит новые крутые правила ижентификации СПАМа, но может и разрушить всю систему.
Лезем FTP на McAfee и в разделе Spam ищем файлик rules.zip - меняем им правила в SpamAssassin.
(Эту часть надо делать осторожно. Начиная с того, что копировать надо не как Binary).
Тонкая настройка
Если вышеуказанное сделано, система должна быть работоспособной. Для начала пускай поработает несколько дней. Будем считать правильным подход «лучшее-враг хорошего» считаем систему в стадии Production. Пройдет эйфория от установки системы (у системного администратора), компьютер на котором установлена система немного поработает - а может там что-то выгорит, публика попривыкнет получать меньше СПАМа. Примерно через неделю можно пробовать корректировать коэффициенты идентификации СПАМа для наиболее любимых спаммеров. Политику можно избрать следующую: а) глобальное обрезание прав отправки на нас почты и б) тонкая настройка. Что еще надо отметить в тонкой настройке - система собственно-то сама учится. Она наполняет байесовскую базу. После набора примерно 650 СПАМ и 400 ХАМ - работает ну очень пристойно. Как пример - результат по базе:
Number of Spam Messages: 693 - это самообученного СПАМа - число писем
Number of Ham Messages: 478 - это самообученного НЕ СПАМа - число писем
Number of Tokens: 78,131 - это внесенных последовательностей (элементов) по которым идентифицируется СПАМ - НН СПАМ
Риторический вопрос - зачем нам открывать возможность отправки почты на нас из Малазии если мы оттуда по роду нашей деятельности ничего не ждем, но получаем регулярно. Закрыть. Вехними номерами правил в Firewall. Далее примеры будут даны на основе нормально работающего Mailscanner/Mailwatch.
Типичный Header:
Return-Path: <Ѓg>
Received: from bzq-218-7-58.cablep.bezeqint.net (bzq-218-7-58.cablep.bezeqint.net [81.218.7.58])
by gw84.rabbit.com.gr (8.12.10/8.12.10) with ESMTP id j3460DmT073342
for <malu@rabbit.com.gr>; Mon, 4 Apr 2005 09:00:47 +0300 (EEST)
(envelope-from planirovanie_i_ypravlenie@pormexico.com)
Message-ID: <110101c538e4$c0ffa4b7$ddd3eb0f@pormexico.com>
From: Планирование _ССП <planirovanie_i_ypravlenie@pormexico.com>
To: Malu <malu@rabbit.com.gr>
Subject: =?windows-1251?B?zuHz9+Xt6OU6INPv8ODi6+Xt9+Xx6ujpIPP35fI6IM725e3q4CD99PTl?=
=?windows-1251?B?6vLo4u3u4vLoIOH+5Obl8u3u4+4g7+vg7ejw7uLg7ej/Lg==?=
Date: Mon, 04 Apr 2005 03:02:57 -0400
MIME-Version: 1.0
Content-Type: text/html;
charset=windows-1251
Content-Transfer-Encoding: quoted-printable
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
X-AntiVirus: checked by AntiVir MailGate (version: 2.0.1.10; AVE: 6.20.0.1; VDF: 6.20.0.46; host: bzq-218-7-58.cablep.bezeqint.net)
Что мы видим - отправлено с bzq-218-7-58.cablep.bezeqint.net (bzq-218-7-58.cablep.bezeqint.net [81.218.7.58]) но подстановка имени Планирование _ССП planirovanie_i_ypravlenie@pormexico.com тесть явно СПАМ. Если подобного рода отправитель очень активен - хорошо помогает закрытие Firewall в Unix 25 порта с сетки класса С (маска /24 или 255.255.255.0). Можно пробовать делать то же самое для большего региона (сетки).
Б) теперь посмотрим коэффициенты СПАМ-идентификации.
4.07 |
BAYES_99 |
Bayesian spam probability is 99 to 100% |
0.63 |
FORGED_OUTLOOK_HTML |
Outlook can't send HTML message only |
0.08 |
FROM_ILLEGAL_CHARS |
From contains too many raw illegal characters |
1.23 |
HTML_20_30 |
Message is 20% to 30% HTML |
0.14 |
HTML_FONT_BIG |
HTML tag for a big font size |
0.18 |
MIME_HTML_ONLY |
Message only has text/html MIME parts |
3.81 |
RCVD_IN_DSBL |
Received via a relay in list.dsbl.org |
0.88 |
RCVD_IN_NJABL_DUL |
NJABL: dialup sender did non-local SMTP |
1.99 |
RCVD_IN_SORBS_DUL |
SORBS: sent directly from dynamic IP address |
3.08 |
RCVD_IN_XBL |
Received via a relay in Spamhaus XBL |
Первая колонка - интересующие нас коэффициенты вклада элементов идентифицирующих СПАМ в обшей сумме элементов всего почтового сообщения. Если сумма больше 5 - все сообщение - СПАМ. Что делать если коэффициент явно мал для любимого корреспондента - выход один - увеличивать.
Идем в /usr/local/share/spamassassin и там видим все коэффициенты в виде описаний:
Для профилактики читаем их содержимое и даже можем позволить себе раскомментировать строки. Иам по тексту ясно о чем идет речь - конкретно там и описываются те последовательноси, встречающиеся в письмаю, которые и есть указателями на СПАМ.
10_misc.cf
20_anti_ratware.cf
20_body_tests.cf
20_compensate.cf
20_dnsbl_tests.cf
20_drugs.cf
20_fake_helo_tests.cf
20_head_tests.cf
20_html_tests.cf
20_meta_tests.cf
20_phrases.cf
20_porn.cf
20_ratware.cf
20_uri_tests.cf
23_bayes.cf
25_body_tests_es.cf
25_body_tests_pl.cf
25_hashcash.cf
25_head_tests_es.cf
25_head_tests_pl.cf
25_spf.cf
25_uribl.cf
30_text_de.cf
30_text_es.cf
30_text_fr.cf
30_text_it.cf
30_text_nl.cf
30_text_pl.cf
30_text_sk.cf
50_scores.cf
60_whitelist.cf
И файл привязки коэффициента спамуозности к индексу:
50_scores.cf
(часть файла - полный размер - больше 800 строк)
score SENT_IN_COMPLIANCE 1.520 1.786 1.850 2.000
score SERIOUS_ONLY 0 0 1.664 1.748
score SOMETHING_FOR_ADULTS 1.433 1.513 1.614 1.606
score SOME_BREAKTHROUGH 0.232 1.921 0.907 1.610
score SORTED_RECIPS 0.879 1.155 1.759 0.887
score START_NOW_CAPS 1.280 1.499 1.124 0.857
score STOCK_ALERT 2.362 1.782 2.378 2.385
score STOCK_PICK 0.106 0.150 0.041 1.470
score STRONG_BUY 2.880 3.384 3.018 3.117
Самое простое - вручную откорректировать последний в строчке коэффициент и перезапустить Mailscanner.
Проверяем - не работает. Не пишет в SQL. Что не работает - ошибки обращения (по тексту программы) к базе данных. Все правильно. И не будет. С http://mailscanner.info качаем версию не ниже 4.46. А теперь в руки напильник и бубен. Ставим все это под /opt/mailscanner и переносим в директрию, где ранее стояла старая версия. Что надо править - по тексту заменять /opt на /usr/local
Смортрим внимательно на /var/log/maillog - устраняем мелкие ошибки.
Точно работает связка (теперь говорим о версиях)
Mailscanner - 4.47.1
MailWatch - 1.0.2
MySQL - 4.0.24
Итого - вся система в конечном счете на DVD. Заняла - примерно 900 МБ. Конфигурация для разработки взята с учетом 8 ГБ дискового пространства и 64 МБ Swap.
Для дискового варианта с DVD увеличиваем SWAP FreeBSD 5.X уже в работающей системе как файл:
Драйвер md(4) уже есть в ядре.
Создаем swapfile (/usr/swap0)- - создаем блоками по 1024К (1 мег), всего - 64 блока (count=64), то есть общее - 64 мегабайта (это пример, надо как минимум - 256 или больше)
# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
Разрешения
# chmod 0600 /usr/swap0
Корректируем /etc/rc.conf
swapfile="/usr/swap0"
Или перегрудаем машину или (альтернатива - без перегрузки) выдаем команду
# mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0
Теперь по поводу аварийного копирования и восстановления. Считаем, что фактически копировать в пределах FreeBSD у нас некуда. Нет места. Теоретически это возможно, но практически - этим надо заниматься как минимум раз в две недели, для того чтобы понимать сам процесс и быть готовым на случай действительной аварии. Поэтому, после того как система полностью сконфигурирована и работает и она поставлена под VmWare - копируем полученный образ системы на DVD. В полном комплекте после описанной выше установки система заняла: VMware virtual disk file FreeBSD.vmdk 815 MB. То есть вполне реальный объем для заливки на DVD или хранении на файл-сервере.
Все. Иссяк. Комментарии принимаются. Желательно дополнить сей труд замечаниями как и что исправить. Сори за ошибки - Клава глючная.
iasb@yahoo.com