Документация по ОС FreeBSD Среда, 08.05.2024, 07:37
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Mail

Создаем почтовую систему среднего и малого офиса на основе FreeBSD Postfix+dr.web+popa3d+pflogsumm [2005] Часть 2
Берем фильтр drweb для postfix

# /usr/local/bin/wget ftp://ftp.drweb.ru/pub/unix/drweb-postfix-4.29.10-freebsd4.tar.gz
В обязательном порядке читаем документацию поставляемую вместе с фильтром. После распаковки получаем две директории etc и opt. Содержимое директории etc копируем в /etc/drweb/ а файлы из opt соответственно кладем в /opt/drweb/.

Создаем директорию в которую фильтр будет складывать письма приготовленные для проверки.

# mkdir /var/spool/drweb
Настраиваем права доступа так чтобы работать с этой директорией мог только единственный пользователь группы drweb. Аналогичным способом расставляем нужные права на остальные интересные для нас директории.

# chmod 770 /var/spool/drweb
# chown drweb:drweb /var/spool/drweb
# chown -R drweb:drweb /opt/drweb/
# chown -R drweb:drweb /var/drweb/
# chown -R drweb:drweb /etc/drweb/
Теперь нужно указать postfix что каждое входящее письмо должно проходить через антивирусный фильтр по имени dummy. В файле /etc/postfix/master.cf ищем строку:

smtp inet n - n - - smtpd

И заменяем ее на вот это:

smtp inet n - n - - smtpd -o content_filter=filter:dummy

Затем в конец этого же файла добавляем описание нашего фильтра:

filter unix - n n - - pipe flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ${sender} -- ${recipient}

В файле /etc/drweb/drweb_postfix.conf найти такие строки и вписать в них нужные значения.

AdminMail = root@test.ru
# почтовый адрес администратора

FilterMail = drweb@test.ru
# почтовый адрес которым будет подписывать письма демон drweb

Перезапускаем postfix c помощью команды restart. Если ошибок на консоли и в файле /var/log/maillog не появилось значит все идет как надо. Итак почтовая система запустилась, но нам нужно проверить как работает антивирус. Специально для таких целей вместе с drweb поставляется тестовый файл опознаваемый многими антивирусными программи как вирус. В нем описан так называемый EICAR вирус. Подробнее об этом иммитаторе вируса читайте в документации поставляемой вместе с drweb. А точнее в файле /opt/drweb/doc/readme.eicar. Теперь с помошью любого текстового редактора создаем файл test.com содержащий EICAR вирус и записываем в него вот такую строку.

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Сохраняем полученый файл. С помощью любой почтовой программы пишем себе письмо прикрепив к нему только что созданный файл test.com. Отправив письмо, получим ответ с уведомлением о том что мы пытались отправить себе вирус. В письме должны быть строки подобные нижеследующим:

======================
DrWeb scanning report:
======================
127.0.0.1 [19926] /var/spool/drweb//drweb.tmp_X19925 - archive MAIL
127.0.0.1 [19926] >/var/spool/drweb//drweb.tmp_X19925/eicar.com infected with EICAR Test File (NOT a Virus!)
========
Summary:
========
known virus is found : 1

Итак антивирусная система работает как положено.
 
К сожалению вирусописатели не сидят сложа руки. Каждый месяц появляется несколько десятков новых вирусов. Для того чтобы наша система могла ловить новейщие вирусы, нужно настроить автоматическое обновление антивирусных баз. Выполнение этой важной задачи возложим на /opt/drweb/update.pl который будет самостоятельно скачивать новые базы.

После получения всех обновленнных баз вышеназванный скрипт будет перезапускать демона drweb. Это делается для того что бы демон мог загрузить полученны только что базы. Настраиваем crontab пользователя drweb так что бы с помощью вышеописанного скрипта обновление антивирусных баз происходило через каждые 3 часа.
# crontab -e -u drweb
00 0-24/10 * * * /opt/drweb/update/update.pl
Приближаясь в финишу необходимо исправить еще несколько ошибок программистов создававших скрипты для drweb. После перезагрузки FreeBSD запускает на выполнение все скрипты находящиеся в /usr/local/etc/rc.d/

Во время инсталляции drweb автоматически создал скрипт, который будет выполнять запуск демона drweb после перезагрузки системы. Так же у нас появится возможность управлять работой демона с помощью команд stop, reload, start, restart. Рассмотрим каждую из этих команд подробнее.

  • start - запускает процесс drwebd.
  • stop - останавливает текущий процесс drwebd.
  • restart - останавливает выполняющийся процесс drwebd и запускает новый
  • reload - отправляет процессу drwebd сигнал HUP, заставляя его перечитать конфигурационные файлы, а затем продолжить работу
Вся проблема в том что создался этот файл не с тем именем которое нам необходимо. Для FreeBSD он должен называться drweb.sh а не drweb. Исправляем это недоразумение
# mv /usr/local/etc/rc.d/drweb /usr/local/etc/rc.d/drweb.sh
Во вторых в операционной системе FreeBSD до версии 4.6 после перезагрузки файл drweb.sh будет выполнен без единого параметра командной строки. Для правильного выполнения последовательсти запуска демона drweb этот файл нужно выполнить с параметром start. Сейчас мы это исправим. Открываем файл для редактирования и ищем строку:

echo "Usage: $0 {start|stop|restart|reload}"

После нее добавляем вот такую строку:

/usr/local/etc/rc.d/drweb.sh start

Таким образом мы своего добились. Скрипт drweb.sh не получив параметров из командной строки рекурсивно выполнит сам себя с параметром start.

В качестве теста перезагружаем систему с помошью команды reboot для того чтобы убедиться что демоны postfix и drweb будут запущены автоматически.
Теперь займемся настройкой скритпа pflogsumm. Давайте посмотрим какие данные сможет предложить нам pflogsumm:

  • Количество принятых , доставленных, перенаправленых, отложеных, вовзращенных отправителю или отброщеных сообщений .
  • Общий размер принятых и отправленых сообщений.
  • Список хостов и доменов занимавшихся отправкой и получением почты.
  • Список адресов пользователей учавствовавших в обмене сообщениями.
  • Статистика по количчеству входящих и исходящих smtp соединений .
  • Минимальная, средняя, наибольшая продолжительность smtp соединений с каждым хосто или доменом.
  • Характеристики ежедневного или почасового траффика создаваем ого почтой.
  • Данные о количестве сообщений с разбивкой по доменам и хостам.
  • Сведения о предупреждениях, фатальных ошибках или панических состояниях почтовой системы.
  • Данные о прочих информационных сообщения записаных в протокол демоном smtp.
  • Состояние почтовой очереди.
Англоязычную версию pflogsumm можно взять на сайте автора . Но все же мне кажется что гораздо приятнее читать отчеты на родном языке. Поэтому я предпочитаю использовать версию переведенную мною лично на русский язык. Скачать модифицированную версию скрипта можно http://www.onix.opennet.ru/files/. Создаем директорию для размещения скрипта и прочих файлов.

# mkdir /usr/local/pflogsumm
Теперь кладем туда русский pflogsumm. Переименовываем его для краткости в pflogsumm.pl. Устанавливаем файлу владельца, группу и право на выполнение.
# chmod 100 /usr/local/pflogsumm/pflogsumm.pl

# chown root:wheel /usr/local/pflogsumm/pflogsumm.pl
Для выполнения pflogsumm желательно иметь Perl версии не ниже 5.004. Стабильная работа с более ранними версиями интерпретатора Perl не гарантируется. Узнать версию Perl установленного в системе можно с помощью комманды perl -v.

Запустив модуль pflogsumm на выполнение, Вы скорее всего получите ошибки подобные этим:
# ./pflogsumm.pl
Can't locate Date/Calc.pm in @INC (@INC contains: /usr/libdata/perl/5.00503/mach /usr/libdata/perl/5.00503 /usr/local/lib/perl5/site_perl/5.005/i386-freebsd /usr/local/lib/perl5/site_perl/5.005 .) at ./pflogsumm.pl line 213. BEGIN failed--compilation aborted at ./pflogsumm.pl line 213.
Это означает, что у Вас отсутствует модуль Perl по имени Date-Calc написанный Steffen Beyer. Он состоит из библиотеки языка С и модуля perl, который использует эту библиотеку. Нам этот модуль необходим для работы с датами Грегорианского календаря. Стандарт календаря описывается документами ISO/R 2015-1971, DIN 1355 и ISO 8601. На данный момент календарь такого типа используется во всех Европейских странах. В свою очередь для работы модуля Date-Calc нам потребуется модуль Bit-Vector. Берем самую последнюю версию, вышеописанных пакетов на сайте автора http://www.engelschall.com/~sb/download/. В случае если это сделать не удастся скачайте те же пакеты из центрального хранилища CPAN (Comprehensive Perl Archive Network). На момент написания статьи были актуальны версии Date-Calc-5.3 и Bit-Vector-6.3. Кладем оба пакета во временную директорию, например в /tmp. А затем начинаем распаковывать и устанавливать:
# tar zxvf Bit-Vector-6.3.tar.gz
# cd Bit-Vector-6.3
# perl Makefile.PL
# make
# make test
# make install
Если с Bit-Vector все прошло удачно, выполяем аналогичные действия для пакета Date-Calc. По окончанию установки снова запускаем pflogsumm.pl. Если на экране не появилось ни одной ошибки значит все требуемые модули находятся на месте и готовы к использованию.

Технология работы pflogsumm довольно проста. Пользователь передает на стандартный ввод скрипта файлы протокола почтовой системы. А результаты получает из стандартного вывода. Мне кажется что статистика должна собираться за прошедшую неделю, предыдущий и текущий день. Для выполнения этих задач мы напишем три вспомогательных скрипта. После их выполнения сформированные файлы должны записываться в директорию /usr/local/apache/htdocs/traffic/. С помощью web сервера apache работающего на этой же машине файлы из этой директории будут доступны начальству для просмотра с помошью любого web браузера. В дополнение к этому хотелось что бы недельная и ежедневная статистика приходила по почте администратору.

Для систем FreeBSD характерно хранение протокола почтовой системы длиной в одну неделю. В некоторых диалектах Linux принято хранить протоколы длиной в один месяц. Как и во многих других Unix подобных системах с помощью демона cron каждую ночь запускается задача ротации файлов протоколов. В результате работы этой задачи файл /var/log/maillog упаковывается с помощью программы gunzip и записывается вместо файла /var/log/maillog.0.gz. В других системах вместо gunzip используется bzip, но основной принцип это не меняет. Старое содержимое файла /var/log/maillog.0.gz записывается в файл /var/log/maillog.1.gz. Таким образом все файлы по цепочке смещаются вниз на один день. И только содержимое файла /var/log/maillog.6.gz никуда не копируется, а просто перезаписывается файлом /var/log/maillog.5.gz. Обдумав все вышесказанное приходим к выводу что недельный и ежедневный скрипты подсчета статистики должны запускаться после того как задача ротации логов успешно завершится. Во избежание всяких казусов уточните время запуска и завершения задачи ротации протоколов для вашей системы.

Ниже приводится содержимое файла /usr/local/pflogsumm/weekly.sh создающего недельную статистику.

#!/bin/sh
# Собираем полный недельный протокол в файл weekly.maillog
# такой подход облегчает обработку файла. Но в тоже время
# стоит убедиться что в системе хватит места для этого файла.

zcat /var/log/maillog.0.gz > /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.1.gz >> /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.2.gz >> /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.3.gz >> /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.4.gz >> /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.5.gz >> /usr/local/pflogsumm/weekly.maillog
zcat /var/log/maillog.6.gz >> /usr/local/pflogsumm/weekly.maillog

# Записываем в файл weekly.name полный путь к результирующему файлу
echo "/usr/local/apache/htdocs/traffic/" > /usr/local/pflogsumm/weekly.name
date -v-7d "+%d%b%Y-" >> /usr/local/pflogsumm/weekly.name
date -v-1d "+%d%b%Y" >> /usr/local/pflogsumm/weekly.name

# Запускаем расчеты и перенаправляем стандартный вывод
# в результирующий файл
/usr/local/pflogsumm/pflogsumm.pl /usr/local/pflogsumm/weekly.maillog --smtpd_stats --mailq --problems_first --rej_add_from --verbose_msg_detail --iso_date_time > `tr -d "\n" < /usr/local/pflogsumm/weekly.name`

# Отправляем копию файла почтой администратору
cat `tr -d "\n" < /usr/local/pflogsumm/weekly.name` | mail -s `date -v-7d "+%d%b%Y-"``date -v-1d "+%d%b%Y"`

# Убираем за собой мусор
rm /usr/local/pflogsumm/weekly.maillog
rm /usr/local/pflogsumm/weekly.name

Закончив с еженедельным скриптом перейдем к ежедневному собирающему данные за вчерашний день /usr/local/pflogsumm/daily.sh. Комментировать в нем нечего потому что это всего лишь упрощенная версия еженедельного расчета.

#!/bin/sh
zcat /var/log/maillog.0.gz > /usr/local/pflogsumm/daily.maillog

echo "/usr/local/apache/htdocs/traffic/" > /usr/local/pflogsumm/daily.name
date -v-1d "+%d%b%Y" >> /usr/local/pflogsumm/daily.name

/usr/local/pflogsumm/pflogsumm.pl -d yesterday /usr/local/pflogsumm/daily.maillog --mailq --problems_first --rej_add_from --verbose_msg_detail --iso_date_time > `tr -d "\n" < /usr/local/pflogsumm/daily.name`
date -v-1d "+%d%b%Y" > /usr/local/pflogsumm/tmp.date

cat `tr -d "\n" < /usr/local/pflogsumm/daily.name` | mail -s `date -v-1d "+%d%b%Y"` tigrisha@test.ru

rm /usr/local/pflogsumm/daily.name
rm /usr/local/pflogsumm/tmp.date
rm /usr/local/pflogsumm/daily.maillog

Последней и самой простой версией скрипта является задача запускающаяся ежечасно для сбора данных об активности на текуший день /usr/local/pflogsumm/hourly.sh

#!/bin/sh
echo "/usr/local/apache/htdocs/traffic/" > /usr/local/pflogsumm/tmp.name
date "+%d%b%Y" >> /usr/local/pflogsumm/tmp.name
/usr/local/pflogsumm/pflogsumm.pl -d today /var/log/maillog --mailq --problems_first --rej_add_from --verbose_msg_detail --iso_date_time > `tr -d "\n" < /usr/local/pflogsumm/tmp.name`
rm /usr/local/pflogsumm/tmp.name

Для моей системы оптимально было установить время выполнения всех трех скриптов таким образом.

# crontab -e -u root
0 1 * * 1 /usr/local/pflogsum/weekly.sh

0 2 * * * /usr/local/pflogsum/daily.sh

20 * * * * /usr/local/pflogsum/hourly.sh

К сожалению пользователи других систем скорее всего столкнутся с проблемами при использовании первых двух скриптов. Это может произойти из-за того что внутри наших скриптов мы используем команду date c ключем -v. Не все операционные системы поддерживают такую опцию и возможно Вам прийдется править скрипты.

Выполнив все вышеописаное вы должны стать счастливым обладателем собственного почтового сервера.


Источник: http://onix.opennet.ru/content/view/22/26/1/10/
Категория: Mail | Добавил: oleg (26.02.2008) | Автор: Бешков Андрей
Просмотров: 1777 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024