Skip to content

Построение почтовой системы на базе FreeBSD+sendmail+clamav+spamassassin

Построение почтовой системы на базе FreeBSD+sendmail+clamav+spamassassin published on Комментариев к записи Построение почтовой системы на базе FreeBSD+sendmail+clamav+spamassassin нет

Построение почтовой системы на базе FreeBSD+sendmail+clamav+spamassassin


В этой статье будет формально описана работа sendmail и произведен сравнительный анализ популярных MTA sendmail, postfix, exim, после чего рассмотрим процесс построения почтовой системы на базе FreeBSD+sendmail с включением в связку программы защиты от вредоносного кода с помощью clamav и программы защиты от спама spamassassin.

На сегодняшний день наиболее надежными и производительными системами для развертывания серверов являются Unix-подобные системы FreeBSD и Linux. Они позволяют быстро готовить стабильные сетевые решения любого уровня сложности для любых требований и задач.В качестве платформы для мощного почтового сервера может быть выбрана система FreeBSD, Debian или Ubuntu с входящими в них по умолчанию MTA sendmail, exim и postfix соответственно.

Sendmail является одной из старейших и наиболее мощных в плане возможностей конфигурирования MTA, но более сложен и медлителен по отношению к другим рассмотренным агентам передачи почты.

Exim претендует на мощь sendmail, но имеет более простую конфигурацию с меньшими функциональными возможностями и с меньшими проблемами в плане безопасности, и может легко применяться в системах, охватывающих небольшие объемы почты и имеющих типичную структуру.

MTA Postfix является хорошей альтернативой sendmail и exim. Его основными преимуществами являются скорость, безопасность и легкость администрирования. Произвести миграцию из sendmail в postfix можно быстро и без потери работающих управляющих сценариев.

До сих пор, однако, одним из основных средств рассылки почты в Internet является программа sendmail. Она обеспечивает работу модульной системы отправки, которая предназначена для получения и отправки корреспонденции, а также управления программами подготовки и просмотра почтовых сообщений. Sendmail позволяет организовать почтовую службу локальной сети и обмениваться почтой с другими серверами почтовых служб через специальные шлюзы. Sendmail может быть сконфигурирована для работы с различными почтовыми протоколами. Обычно это протоколы UUCP (Unix-Unix-CoPy) и SMTP (Simple Mail Transfer Protocol). Sendmail работает по принципу обычной почтовой службы, которая принимает и отправляет (или пересылает) почтовые сообщения. Sendmail может распознавать два типа почтовых адресов:

  • почтовые адреса SMTP;
  • почтовые адреса UUCP.

Первые – это обычные адреса Internet, которые фактически являются стандартом. Именно этот адрес обычно указывается в качестве адреса для связи через электронную почту. Вторые – имеют корни от протокола UUCP, который на начальном этапе использовался при копировании файлов в UNIX.

Sendmail может работать, обеспечивая следующие особенности:

  • списки адресов-синонимов;
  • списки адресов рассылки пользователя;
  • автоматическую рассылку почты через шлюзы;
  • очереди сообщений для повторной рассылки почты в случае отказов при рассылке;
  • работу в качестве SMTP-сервера;
  • доступ к адресам машин через сервер доменных имен BIND;
  • доступ к внешним серверам имен.

Общее описание работы Sendmail

Sendmail отправляет почту в два этапа – почтовые сообщения собираются в очередь, а на втором этапе они непосредственно отправляются.

Сообщение состоит из следующих основных частей: конверта, заголовка и тела сообщения.

Конверт состоит из адреса отправителя, адреса получателя и информации рассылки, которая используется программами подготовки, рассылки и получения почты. Конверт остается невидимым для отправителя и получателя почтового сообщения.

Заголовок состоит из стандартных текстовых строк, которые содержат адреса, информацию о рассылке и данные. Заголовок может быть частью подготовленного пользователем текстового файла, а может быть подготовлен и добавлен к телу сообщения программой подготовки почты. Данные из заголовка могут быть использованы для оформления конверта сообщения. Тело сообщения завершает описываемый триптих. Первая пустая строка в файле почтового сообщения отделяет заголовок от тела. Все, следующее за этой строкой, называется телом сообщения и передается без изменений.

Sendmail может быть вызвана:

  • программой подготовки сообщений для отправки уже готовых сообщений;
  • программой получения почты для передачи полученной почты;
  • собственно пользователем для отправки файла или сообщения;
  • почтовым процессом, в качестве которого выступает сама sendmail.

После того как почта собрана, начинается ее рассылка. При этом необходимо выполнить ряд дополнительных действий:

  • все адреса (и получателя, и отправителя) преобразуются в вид, приемлемый для получателя почты;
  • при необходимости в сообщения добавляются строки, дающие возможность получателю ответить на принятое сообщение (как то: FROM:);
  • почта передается на вход программе почтовой рассылки.

Sendmail может получать почтовые сообщения из трех источников:

  • из командной строки или со стандартного ввода;
  • посредством SMTP-протокола;
  • из очереди почтовых сообщений.

При получении сообщений из командной строки или стандартного ввода, sendmail вызывается пользователем с определением конечного адреса доставки. При этом необходимо пройти следующие рабочие этапы: определение адреса отправителя, выборка адреса получателя и преобразование обоих адресов в соответствии с файлом конфигурации. Затем определение способа доставки сообщения, размещение заголовка в оперативной памяти для последующих изменений, помещение тела сообщения в отдельный файл для отправки без изменений.

Работая по протоколу SMTP, sendmail является как программой-клиентом, так и сервером одновременно. Протокол определен в RFC-821 и является базовым при обмене почтовыми сообщениями через Internet. В этом случае sendmail запускается как демон, который «прослушивает», как правило, 25 порт TCP и в случае получения сообщения устанавливает соединение с удаленным клиентом SMTP. Обычно таким же клиентом является другая программа sendmail.

Подготовка почты на всех машинах, локальных и удаленных, использует протокол SMTP. Для этого sendmail организует межпроцессорный обмен через открытый канал (pipe).При получении сообщений из очереди используются временные файлы очередей. Эти очереди используются для хранения тех сообщений, которые еще не были разосланы. Сохранность сообщений обеспечивается их хранением в двух файлах. В одном хранится тело сообщения, а в другом – конверт с заголовком. Сначала sendmail просматривает очереди через некоторые, определенные администратором, интервалы времени на предмет наличия неотправленных сообщений.

Как только одним из описанных выше способов sendmail получила сообщение, делается попытка отправить его по адресу. Для этого sendmail использует три параметра: программу рассылки, хост сети и собственно получателя. Эта процедура производится по правилам, которые содержатся в файле конфигурации MTA. Sendmail сохраняет одну копию тела сообщения во временном файле, а заголовок загружает в оперативную память. Для каждого сообщения программа доставки (рассылки) сообщений вызывается отдельно. Если сообщение должно быть доставлено на разные машины, то для каждой из машин также вызывается своя программа доставки. Некоторые программы могут обслуживать сразу несколько абонентов одной машины; если это невозможно, то для каждого абонента вызывается также своя программа доставки. Рассматривают два типа рассылки: на удаленную машину и местную рассылку.

При посылке почты на удаленную машину sendmail открывает канал (pipe) и запускает программу рассылки, командная строка которой находится в файле конфигурации. Sendmail записывает заголовок и тело сообщения в канал. Если программа рассылки не использует протокол SMTP, то адрес получателя передается тоже через канал. Если используется SMTP, то открывается двунаправленный канал для интерактивного взаимодействия с удаленным сервером SMTP. Если в качестве транспортного протокола используется TCP, то sendmail не запускает внешнюю программу рассылки, а сама инициирует TCP-соединение с удаленным сервером SMTP.

В случае доставки почты локально, sendmail определяет, что адреса доставки местные, происходит обращение к файлу адресных синонимов и производится преобразование адресов. Файл адресных синонимов можно использовать для перенаправления почты в файлы или для обработки местными программами. Пользователь может иметь и свой файл адресных синонимов для управления рассылкой персональной почты. После преобразования адресов почта отправляется программе местной пересылки, и чаще всего это rmail Важным моментом при работе sendmail является метод определения типа адресов. При использовании стандартного файла конфигурации применяются следующие правила: почта рассылается в соответствии с форматом адреса получателя, адреса при этом бывают местные, UUCP и SMTP.

Подводя итог особенностям работы sendmail, следует особо отметить тот факт, что почта реально рассылается двумя принципиально разными способами. При использовании протокола UUCP почта рассылается по такому принципу, когда сообщения передаются от машины к машине по указанному в адресе пути. Следует понимать, что если почта ушла с машины отправителя, то это не факт, что она поступит туда, куда направлялась.

Анализ типа адресов в программе sendmail – это очень важный процесс, так как по типу адреса получателя sendmail определяет, каким способом сообщение будет послано. Вызов программы доставки совмещен с правилами преобразования адресов отправителя и получателя. Если только система решит, что дальнейшее преобразование адреса нецелесообразно, то сразу будет вызвана программа доставки сообщения. Наибольшее число сообщений об ошибках при рассылке сообщений связано как раз с определением адреса получателя. В этом процессе принимают участие два сетевых сервиса – система рассылки почтовых сообщений и BIND.

 Построение рабочей конфигурации почтовой системы sendmail

Установим и настроим рабочий сервис sendmail на машине с установленной системой FreeBSD.

Часть 2: Подготовка системы FreeBSD в качестве Web-сервера на базе технологии LAMP», поэтому, принимая ее за основу, начнем построение самой связки sendmail+clamav+spamassassin.

Если следовать предыдущей статье, то собственно всего, о чем в ней говорилось, для построения серверной системы на базе sendmail в системе не должно быть (а именно это и задумывалось – установить только необходимое в самом начале), поэтому недостающие детали требуют установки. Установим sendmail через систему портов, для этого перейдем в каталог /usr/ports/mail/sendmail и там выполним команды от лица пользователя root:

	# make install clean

после чего в каталоге /etc/mail появятся файлы freebsd.mc, local-host-names и другие необходимые файлы. Выполним команду, находясь в каталоге /etc/mail:

	#  m4 my.mc > sendmail.cf; makemap hash /etc/mail/access.db < /etc/mail/access.

Эти две команды создадут рабочий файл из предварительно собранного my.mc и создадут базу данных, которая будет разрешать передачу почты через наш хост. Вот примеры этих файлов (имя my.mc может быть произвольным):

my.mc:

#############################################################################
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`My personal cf')dnl
OSTYPE(`freebsd6')dnl
FEATURE(use_cw_file)dnl
FEATURE(`access_db',`hash -T<TMPF> /etc/mail/access.db')dnl
INPUT_MAIL_FILTER(`clamav-milter',`S=local:/var/run/clamav/clmilter.sock,
	 F=,T=S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`spamassassin',`S=local:/var/run/spamass-milter.sock,
	 F=,T=C:15m;S:4m;R:4m;E:10m')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`nouucp',`reject')dnl
FEATURE(`delay_checks')dnl
FEATURE(`relay_hosts_only')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
dnl# dbase of spammers
dnl#FEATURE(`dnsbl', `relays.ordb.org', `Spam bloked - see http://ordb.org/')dnl
dnl#FEATURE(`dnsbl',`bl.spamcop.net', `Spam blocked - see
	 http://spamcop.net/bl.shtml?$&{client_addr}')dnl
dnl#FEATURE(`dnsbl',`ex.dnsbl.org', `Spam bloked - see http://www.dnsbl.org/')dnl
MAILER(smtp)dnl
MAILER(local)dnl

и access:

# $FreeBSD: src/etc/mail/access.sample,v 1.3 2000/11/02 23:40:40 dirk Exp $
#
# Mail relay access control list.  Default is to reject mail unless the
# destination is local, or listed in /etc/mail/local-host-names
#
cyberspammer.com		550 We don't accept mail from spammers
FREE.STEALTH.MAILER@		550 We don't accept mail from spammers
another.source.of.spam		REJECT
#okay.cyberspammer.com		OK
#128.32				RELAY
10.0.16.114			RELAY
######################################################################

Скажу сразу, что в первый уже включена поддержка и антивируса clamav, и антиспамовой программы spamassassin. Во второй я включил ip-адрес своего хоста для возможности тестовой оценки передачи почты. Полное описание структуры и синтаксиса файла my.mc выходит за рамки данной статьи, но ключевые строки для поддержки clamav и spamassassin найти в нем не трудно. В файл /etc/hosts надо добавить (в случае использования виртуальной машины, как у меня, и отсутствия DNS) записи о хостах, а в файл /etc/mail/local-host-names – записи о хостах, для которых будет обрабатываться почта.

Затем необходимо в файле /etc/rc.conf включить саму sendmail записью

	sendmail_enable=”YES”

После этого, перезапустив компьютер, вы получите запущенный и готовый к работе демон sendmail с предварительно включенной в него подготовкой для ClamAV и Spamassassin. Проверить это можно, выполнив в консоли команду # pstree | grep sendmail (предварительно установив программу pstree любым описанным мной способом!). О наличии рабочих процессов свидетельствуют записи:

| |--= 00399 smmsp sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue
| |--= 00511 root sendmail: accepting connections (sendmail)

Выводы

Описан процесс настройки и ввода в эксплуатацию MTA sendmail с подготовкой к подключению к нему антивирусного фильтра clamav и программы борьбы со спамом spamassassin. Приведены все описываемые рабочие конфигурационные файлы, описаны способы их установки и настройки. Все особо важные шаги сопровождаются работоспособными листингами и снимками рабочего экрана, подтверждающими излагаемый текст и поясняющими его содержание.

.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Primary Sidebar