Ключевые слова:mail, filter, scanner, virus, ipfw, sendmail, (найти похожие документы)
From: iasb <iasb@yahoo.com.>
Newsgroups: email
Date: Mon, 2 Sep 2005 18:21:07 +0000 (UTC)
Subject: Настройка почтового сервера с фильтрацией вирусов через McAfee под FreeBSD
FreeBSD 5.3, Mailscanner-Mailwatch-Spamassassin-Mysql-McAfee-Sensmail
Устанавливаем mailScanner
Для начала - FreeBSD Handbook. Эта статья - разъяснения к общему порядку
действий. Она не исключает необходимости внимательного чтения FreeBSD
Handbook.
Политика следующая - установка новой машины для обработки только входящей почты.
"старая" почтовая машина остается без изменений и ставится в глухой
резерв. Устанавливается 2-й МХ на адрес новой машины. Внутренний и
внешний интерфейсы старой машины закрываются по 25 порту Firewal.
Вариации - поставить VmWare под что-то типа Win-NT4/2000-2003 c 6-10 ГБ
виртуальным диском. При этом хорошо решаются вопросы Back-UP - просто
копируется VM образ. Может при этом теряются какие-то логи (стреляться
при этом может и не стоит), но система остается живой. Для этого
варианта эта машина становится одноинтерфейсной, внешняя почта с
внешнего файрвола перенаправляется на нее и для всех внутренних машин
эта машина становится основным SMTP гейтом.
1. Устанавливаем FreeBSD 5.2.1 (или более позднюю, что для нашего случая
- не столь существенно)
Для более свободного размещения принимаем примерно следующие размеры для
разделов, вариации по вкусу:
Раздел Объем - минимальный Общий подход (рекомендуемое значение)
/ 512 МВ 512 МБ - 1 ГБ (1 ГБ)
Swap 256 MB Объем = размеру RAM + 128-256 МБ
/tmp 512 МВ 512 МБ - 1 ГБ (1 ГБ)
/usr 1 GB 50 % оставшегося свободного пространства
/var 1 GB 50 % оставшегося свободного пространства
ВСЕГО 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 /cdrom/ports
#./install.sh
Если есть очень горячее желание - можно обновить дерево портов, но можно
без этого обойтись.
Через /stand/sysinstall ставим /usr/ports/net/cvsup или с CD или из
Интернета
2. Обновляем порты
Для начала обновим дерево портов:
Далее в любом каталоге создаем для большего удобства два файлика. Один
со списком обновляемых портов, другой со скриптом запуска.
cd /home/user
mkdir cvsup
cd cvsup
vi cvsup.ports
# =====начало файла cvsup.ports=========
*default host=ftp.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default tag=.
*default delete use-rel-suffix compress
Ports-databases
ports-mail
ports-net
ports-security
ports-sysutils
# =====конец файла cvsup.ports==========
Замечание: вместо cvsup.FreeBSD.org - поставить локальное (для данного
региона) FTP для FreeBSD - его можно увидеть в /stand/sysinstall в
разделе исходников для установки, например: ftp.ua.freebsd.org
В принципе вы можете здесь обновлять все порты, систему, если вам это
необходимо, можно и необходимую часть.
vi cvsup.sh
# =======начало файла cvsup.sh==========
#!/bin/sh
/usr/local/bin/cvsup -g -L 2 cvsup.ports
# =======конец файла cvsup.sh===========
Запускаем
chmod +x cvsup.sh
./cvsup.sh
После такой процедуры ваши порты станут более свежими, то есть по
крайней мере будут обновлены ссылки на версии и добавлены файлы патчей,
по крайней мере так должно быть. Из них вам понадобится поставить
следующие порты (технология стандартная более "правильное" -
/stand/sysinstall или более развернутое - make & make install в
соответствующих директориях /usr/ports
Разница в принципе установки - через /stand/sysinstall ставятся уже
собранные и откомпилированные готовые пакеты (вариант 1), make & make
install - качаются соответствующие исходники, которые потом
компилируются (вариант 2). Неожиданности могут ждать с нескольких
сторон:
- при установке могут не ставиться вообще необходимые конфигурационные
файлы (вариант 2) - есть исходники - и отвали. Там есть документация и
бодайся.
- отсутствуют исходники, необходимые для других программ (вариант 1)
- версии устарели и исходников просто уже не существует (вариант 2)
- исходники просто не компилируются - ну не сложилось с этой версией (вариант 2)
3. Добавляем
/usr/ports/misc/mc - МС - это обязательно
/usr/ports/editors/joe - текстовый редактор - я привык к этому - CTRL+K - H - это HELP
4. Компилируем Kernel.
- Копируем /usr/src/sys/i386/conf/GENERIC в /usr/src/sys/i386/conf/TEST
- Добавляем options IPFIREWALL
- Убираем ненужное (USB, EISA и т.д.)
- Стандартная компиляция
- Проверка файла /var/log/messages. Распечатать или просмотреть
последнюю часть файла - последняя полученная перезагрузка. Сравнить с
тем, что в конфигурации Kernel, выбросить лишнее.
- Перезагрузка (в случаях ошибок - проверка где и исправления)
5. Устанавливаем McAfee
ставим сам пакет /usr/ports/security/vscan
5a. смотрим в конце этого документа версии всего что мы будем ставить по версиям.
Устанавливаем apache - нам нужны исходники
Качаем последний с http://www.apache.ru
6. Устанавливаем Webmin - http://www.webmin.com
- Распаковываем архив
- Переносим все под /var - директория будет потом использоваться
- Запускаем ./setup.sh
- Порт меняем на что-то кривое - всем известен порт 10000
7. Устанавливаем MySQL 4.1 через /stand/sysinstall - в противном случае
не поставит соответствующий фай лик в /usr/local/etc/rc.d и запускаем
через /usr/local/bin/mysqld_safe --user=root, внимательно читаем начало
файла mysqld_safe и делаем то что там написано (rc.conf). Для начала -
проверяем - он может и сам после перезагрузки запускаться.
8. Ставим php через /usr/ports/lang/php4 - потом будет необходимость
доконфигурирования модулей для апача. Он сам Апач и установит.
9. Ставим /usr/ports/devel/php-pcre
10. Ставим /usr/ports/lang/php4-extensions и там указать sessions
11. Ставим /usr/ports/databases/php-mysql
12. Ставим /usr/ports/graphics/php4-gd. Ну и долгая процедура.
13. Копируем /usr/local/etc/php.ini-recommended в /usr/local/lib/php.ini
14. Через Webmin конфигурируем DNS - как slave для основного сервера
15. Конфигурируем Sendmail - берем старую конфигурацию и подставляем ее
для новой машины (тоесть просто копируем большую часть файлов в
/etc/mail и может быть слегка корректируем в части имени машины на
которой мы все это ставим), проверяем работоспособность предварительно
закрыв 25 порт на старой машине. Полностью запускаем почтовую систему -
она должна на этом этапе работать уже в режиме "основная" и рулить всю
почту как это делала старая машина. Изменений в дальнейшем особых не
предвидится.
16. Через /stand/sysinstall ставим /mail/Mailscanner-4.33.3 (только так !)
17. Ставим perl -MCPAN -e 'install DBD::mysql'
18. Ставим /stand/sysinstall/mail/p5-Mail-SpamAssassin-2.64
19. В /usr/local/etc/apache/httpd.conf ищем строчку local/www и меняем
DocumentRoot на “/var/www/html” - это требуется для
MailWatch
20. Рисуем в /var/www/html файлик ind.php с содержимым <? phpinfo() ?> и
смотрим его через эксплорер. Должно работать. PHP должно показать
информацию о системе.
21. Ищем в Google mailwatch for mailscanner-1.0.2 скачиваем, читаем
INSTALL и ставим
- создаем таблицы SQL (написано в INSTALL)
- переписываем всю директорию mailscanner в /var/www/html
- копируем conf.php.example в conf.php и правим строки примерно 43 - 50 в части local
- проверяем наличие необходимых строк для php.ini как это описано в INSTALL
- в директории /usr/local/etc/MailScanner меняем имена всех файлов sample на нормальные
- создаем юзера FreeBSD - tech для удаленного доступа
- как сказано в mailscanner/INSTALL создаем административного
пользователя, дополнительно в команду, указанную в INSTALL добавив в
конце одно поле
То есть вместо
mysql> INSERT INTO users VALUES ('<username'>,md5('<password>'),'<name>','A');
делаем
mysql> INSERT INTO users VALUES ('<username'>,md5('<password>'),'<name>','A', '');
В принципе на этом этапе система имеет начальный набор того, что нам необходимо
Далее идут разъяснения по технике работы 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
Стартовый скрипт меняется:
Было:
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
1. Конфигурируем DNS для правильной работы по 127.0.0.1
2. Стартуем /usr/local/etc/mailscanner и проверяем maillog на предмет ошибок
3. Для McAfee добавляем /usr/ports/ftp/wget
4. Постоянно проверяем 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=<Tora@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: [email protected],
delay=00:00:13, xdelay=00:00:03, mailer=esmtp, pri=126671, relay=ln-kie01.rabbit.km.ua.
[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: [email protected],[email protected],
delay=00:00:19, xdelay=00:00:05, mailer=esmtp, pri=355823, relay=rigk-ras.rabbit.km.ua. [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 193.194.386.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 - эту програмулину
берем из треда (трепа) - там она исправленная - и заменяем существующую.
Вот:
#!/bin/sh -e
#
# Update the McAfee data files.
#
# $Cambridge: hermes/conf/build/bin/uvscan-update,v 1.52 2004/08/18 19:12:02 fanf2 Exp $
# $PREFIX is the directory where the uvscan binary is (NOT a symlink to
# the binary), which is where it looks for its dat files. You may run
# uvscan via a symlink to this place (e.g. from /usr/local/bin/uvscan)
# and it will still look for the dat files here. If uvscan's library
# dependencies can be found in a standard place (e.g. /usr/local/lib)
# then you don't need a wrapper script to set LD_LIBRARY_PATH before
# running it.
#
# The dat files are installed in a subdirectory of $DATDIR named
# according to their version number, with symlinks from $PREFIX into
# the subdirectory via a current link. The current link is updated
# without locking on the assumption that this is sufficiently unlikely
# to cause a problem.
# defaults
OPTS=""
PREFIX=/usr/local/uvscan
FTPDIR=http://download.nai.com/products/datfiles/4.x/nai
RETRIES=1
INTERVAL=300
# handle the command line
usage () {
echo "usage: $0 [-dfrtv] [-Rnnn] [-Innn] [proxy] [prefix]"
echo " -d delete old files"
echo " -e get extra.dat"
echo " -f force update"
echo " -r show README"
echo " -t timestamp output"
echo " -v verbose"
echo " -R number of retries"
echo " -I retry interval"
echo " proxy URL of FTP/HTTP proxy server"
echo " prefix uvscan installation directory"
exit 1
}
case $# in
[012345])
: ok
;;
*) usage
;;
esac
for arg in "$@"
do
case $arg in
-I*) INTERVAL=${arg#-I}
;;
-R*) RETRIES=${arg#-R}
;;
-*) OPTS=$arg
;;
/*) PREFIX=$arg
;;
http:) ftp_proxy=$arg
http_proxy=$arg
export ftp_proxy
export http_proxy
;;
*) usage
;;
esac
done
case $OPTS in
*[!-dfrtv]*)
usage
esac
option () {
case $OPTS in
-*$1*) eval $2=yes
;;
*) eval $2=no
;;
esac
}
option d DELETE
option e EXTRA
option f FORCE
option r README
option t TIME
option v VERBOSE
case $FORCE in
yes) VERBOSE=yes
esac
VERBOSE=yes
RETRIES=2
INTERVAL=300
# look for binaries and libraris in plausible places
PATH=$PREFIX:/usr/local/bin:/usr/bin:/bin
# this is only necessary for broken setups
LD_LIBRARY_PATH=$PREFIX
export PATH LD_LIBRARY_PATH
# where this script finds things
DATDIR=$PREFIX/datfiles
DATFILES="clean.dat extra.dat internet.dat names.dat scan.dat"
LINKNAME=current
LINKREL=datfiles/$LINKNAME
# wrapper functions for echo etc.
timestamp () {
case $TIME in
yes) date "+%Y-%m-%d %H:%M:%S "
esac
}
say () {
case $VERBOSE in
yes) echo "`timestamp`$*"
esac
}
run () {
say "> $*"
"$@"
}
testeval () {
# ugly workaround
say "> $*"
set +e
eval "$*"
ret=$?
set -e
return $ret
}
is () {
test "$@" 2>/dev/null
}
say Starting $0
say DELETE=$DELETE
say FORCE=$FORCE
say README=$README
say TIME=$TIME
say VERBOSE=$VERBOSE
say RETRIES=$RETRIES
say INTERVAL=$INTERVAL
say PROXY=$ftp_proxy
say PREFIX=$PREFIX
# check directory setup is correct
for link in $LINKREL $DATFILES
do
if ! is -h $PREFIX/$link
then
say $PREFIX/$link is not set up
INIT=yes
fi
done
if ! is -d $DATDIR
then
say $DATDIR is not set up
INIT=yes
fi
case $INIT in
yes)
VERBOSE=yes
say Doing initial setup of $0
run mkdir -p $DATDIR
esac
run cd $DATDIR
getver () {
match="[0-9][0-9][0-9][0-9]"
err="version.err"
cmd="$1" out="$2" txt="$3"
if testeval "$cmd 2>$err 1>&2"
then
VER=`cat $out | sed "/^$txt\($match\).*$/!d;s//\1/;q"`
case $VER in
$match) run rm -f $out $err
return
esac
fi
cat $err
VER=UNKNOWN
run rm -f $out $err
}
# work out latest dat version
try=$RETRIES
while :
do getver "wget --tries=$try --waitretry=$INTERVAL --passive-ftp $FTPDIR/update.ini" update.ini "DATVersion="
VERSION=$VER
case $VERSION in
UNKNOWN)
if ! try=`expr $try - 1`
then break
fi
say Problem with McAfee datfile update from $FTPDIR
say Sleeping for $INTERVAL seconds before retrying
sleep $INTERVAL
;;
*) break
;;
esac
done
# work out installed dat version
getver "uvscan --version" version.err "Virus data file v"
PREVIOUS=$VER
case $FORCE in
yes) say Forced update from $PREVIOUS
PREVIOUS=0000
;;
*) if is $VERSION -eq $PREVIOUS
then say Already have $VERSION
run exit 0
fi
esac
VERBOSE=yes
say Installed dat file is $PREVIOUS
say Latest dat file is $VERSION
if is $VERSION = UNKNOWN
then say Problem with McAfee datfile update from $FTPDIR
run exit 1
elif is $VERSION -lt $PREVIOUS
then say Remote version $VERSION older than installed version $PREVIOUS
run exit 1
elif is -d $VERSION
then say Cleaning away $VERSION directory
run rm -rf $VERSION
fi
retry () {
echo "$OUT"
say Fetch or test failed -- removing bad McAfee data files
run cd $DATDIR
run rm -rf $VERSION
if ! try=`expr $try - 1`
then say Giving up
run exit 1
fi
say Sleeping for $INTERVAL seconds before retrying
sleep $INTERVAL
continue
}
try=$RETRIES
while :
do
# fetch and extract dat files
TARFILE=dat-$VERSION.tar
run mkdir $VERSION
run cd $VERSION
run chmod 700 .
if ! run wget --tries=$try --waitretry=$INTERVAL --passive-ftp --progress=dot:mega $FTPDIR/$TARFILE
then retry
fi
run tar xvf $TARFILE
run chmod 644 *
run chmod 755 .
# verify the contents
CMD="uvscan --version --dat ."
say "> $CMD"
if ! OUT=`$CMD 2>&1`
then retry
else break
fi
done
echo "$OUT"
say Update OK
# show information on this update?
case $README in
yes) run sed 's/[[:cntrl:]]//g
1,/^====================/d
/^====================/,/^NEW VIRUSES DETECTED/d
/^UNDERSTANDING VIRUS NAMES/,$d
s/^/# /;/@MM/s/$/ <--/' readme.txt
esac
# remove some crap
run rm -f *.diz *.exe *.ini *.lst *.tar *.txt
# do remaining part of initial setup
case $INIT in
yes) for file in $DATFILES
do
run rm -f $PREFIX/$file
run ln -s $LINKREL/$file $PREFIX/$file
done
esac
# update the current version link
run cd $DATDIR
run ln -s $VERSION $VERSION/$LINKNAME
run mv $VERSION/$LINKNAME .
# maybe delete old dat files
case $DELETE in
yes) run cd $DATDIR
run rm -rf $PREVIOUS
esac
say Completed OK
run exit 0
# done
Создаем соответствующую запись в /etc/periodic.conf
# 340.mcafee
mcafee_update="YES" # Rum McAfee DAT update
проверяем
sh 340.mcafee
IPFW
Берем стандартный набор правил CLIENT, слегка корректируем для
внутренних SMTP серверов, адресов и интерфейсов.
Запрещаем все кроме 25 и 53 порта на внешнем интерфейсе. На внутреннем -
по вкусу.
Запускаем NTPD, штука кривовато настраивается, но работает.
Увеличиваем количество логов в /etc/newsyslog/conf
/mail
/messages
При первоначальном запуске проверяем - все ли sendmail убили. Потом
ручками пускаем /etc/rc.d/sendmail (исправленный, ясное дело)
Читаем ссылку из MailScanner по поводу MySQL (Гугл: mailscanner mysql)
Устанавливаем все что необходимо - будем писать лог в MySQL.
Лезем FTP на McAfee и в разделе Spam ищем файлик rules.zip - меняем им правила в SpamAssassin.
(Эту часть надо делать осторожно. Начиная с того, что копировать надо не как Binary).
Версии
FreeBSD 5.3 -RELEASE
PHP 4.3.9
MySQL 4.1.5
Замечание: вместо cvsup.FreeBSD.org - поставить локальное (для данного
региона) FTP для FreeBSD - его можно увидеть в /stand/sysinstall в
разделе исходников для установки, например: ftp.ua.freebsd.org
Собственно, а какое реальное преимущество дает сабж по сравнению с тем же drweb/clamav ? например? Ну кроме альтернативы, ессно.
THIS IS AN EVALUATION COPY OF THIS SOFTWARE.
You may use this software for only thirty (30)
days, after which period you must either buy
the software from Network Associates, Inc. or
stop using it and remove it from your computer.
Не особо вдохновляет. Преимуществ у DrWeb-а гораздо больше (мое IMXO), clamav к тому же вообще бесплатный
первый коммент - если опыта нет - то там будет затык. Долго буудешь разбираться почему не хочет качать CVS
второй коммент - В принципе - до лампочки - DrWEB или Clamav - суть в другом - как не для гуру поставить связку Mailscanner-mailwatch-mysql-spamassassin + антивирус.
интересует почему не отрабатывает белый список как правильно заносить туда данный если белый список хранится в БД. Работает если IP добавляешь + точно имя + домен .. а если с from: *@gmail в поле to: *@domen.ru
и не добавляется не в черный список не в белый помогите или дайте ссылочку
Спасибо!