Для начала - 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
Сразу добавляем совместимость с более старыми версиями
Замечание: вместо cvsup.FreeBSD.org - поставить локальное (для данного
региона) FTP для FreeBSD - его можно увидеть в /stand/sysinstall в
разделе исходников для установки, например: ftp.ua.freebsd.org
В принципе вы можете здесь обновлять все порты, систему, если вам это
необходимо, можно и необходимую часть.
После такой процедуры ваши порты станут более свежими, то есть по
крайней мере будут обновлены ссылки на версии и добавлены файлы патчей,
по крайней мере так должно быть. Из них вам понадобится поставить
следующие порты (технология стандартная более "правильное" -
/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 (только так !)
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
# 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
Для общего развития можно поставить 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 - эту програмулину
берем из треда (трепа) - там она исправленная - и заменяем существующую.
Вот:
#!/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.
# 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
693 Прочтений • [Настройка почтового сервера с фильтрацией вирусов через McAfee под FreeBSD (mail filter scanner virus ipfw sendmail)] [08.05.2012] [Комментариев: 0]