Почтовые системы в Linux и FreeBSD: sendmail, postfix, exim

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

Comments

Серия контента:

Этот контент является частью # из серии # статей: Почтовые системы в Linux и FreeBSD: sendmail, postfix, exim

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Почтовые системы в Linux и FreeBSD: sendmail, postfix, exim

Следите за выходом новых статей этой серии.

Установка и подключение clamav

На этом этапе необходимо установить и подключить антивирусную программу clamav. Установим ее через систему портов. Переходим в каталог /usr/ports/security/clamav и, находясь там, выполняем команды от лица пользователя root:

# make install clean

На этапе выполнения команды make отметить «галочкой» поддержку milter – это интерфейс для связи sendmail и clamav (рисунок 1). После компиляции и установки программы (рисунки 2 и 3) необходимо в файле /etc/rc.conf включить ее активизацию строками:

Рисунок 1.
Рисунок 1.
Рисунок 1.
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_milter_enable="YES"
Рисунок 2.
Рисунок 2.
Рисунок 2.
Рисунок 3.
Рисунок 3.
Рисунок 3.

Напомню, что изначально поддержка clamav была включена в конфигурационный файл my.mc, из которого потом был создан рабочий файл sendmail.cf.

Затем следует отредактировать конфигурационный файл /usr/local/etc/clamd.conf и включить там поддержку того, что вы считаете необходимым – например, проверку архивов различных типов.

Теперь обратите внимание на несколько нюансов! Выполните в консоли команду

# /usr/local/bin/freshclam

– это обновит антивирусные базы (рисунок 4) и при перезагрузке исключит ошибку о невозможности инициализации антивирусных баз. Затем запустите вручную демон clamav командой /usr/local/etc/rc.d/clamav-milter.sh start. Правильный старт демона должен сопровождаться появлением файла /var/run/clamav/clmilter.sock. Если будет сообщение о сбое при запуске, следует сменить владельца файла /var/log/clamd.lod на root!

Рисунок 4.
Рисунок 4.
Рисунок 4.

Теперь смело перезагружаемся и видим в процессах то, что видно у меня на рисунке 5 – это свидетельствует о нормальной работе всего установленного программного обеспечения.

Рисунок 5.
Рисунок 5.
Рисунок 5.

Установка и подключение spamassassin

Рассмотрим установку и настройку программы spamassassin и ее подключение к MTA sendmail. В общем виде spamassassin – это фильтр программы procmail. Работает он очень эффективно. В своей работе он использует систему баллов для определения степени «некачественности» почтового сообщения и корреляции его со спамом. Когда сообщение превышает определенный порог, установленный в конфигурационном файле программы, программа помечает (и/или перемещает его в определенную папку) его заголовок. Потом к помеченному сообщению можно применять требуемые фильтры.

Установим для разнообразия spamassassin через систему пакетов установочных дисков. Через sysinstall переходим в меню установки пакетов, там выбираем p5-Mail-SpamAssassin-3.0.4 и spamass-milter-0.3.0 (интерфейс для связи с sendmail). После установки необходимо активизировать поддержку spamassassin в /etc/rc.conf путем добавления строк:

spamd_enable=”YES”
spamass_milter_enable=”YES”

Напомню, что поддержку spamassassin в sendmail мы уже включили в файле my.mc.

Все основные настройки spamassassin находятся в файле /usr/local/etc/mail/spamassassin/local.cf, а мой файл выглядит следующим образом:

# These values can be overridden by editing ~/.spamassassin/user_prefs.cf 
# (see spamassassin(1) for details)

# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.

#required_hits 5
#report_safe 0
#rewrite_header Subject [SPAM]

trusted_networks 10.0.16/24            # all in 192.168.*.* and 127.*.*.*
#trusted_networks 127.                       # all in 127.*.*.*

# address whitelist
whitelist_from *@mydomen.home
#whitelist_from *@cpstc.com
#whitelist_from *@cpstc.ru
whitelist_from localhost

# address blacklist
#blacklist_from
blacklist_to	*@sai.msk.ru
blacklist_to	*@sai.spb.ru

# rewrite subject
#rewrite_subject 1
#subject_tag             ***SPAM***_HITS***

required_hits           5.0
report_safe             0
#use_terse_report        0
use_bayes               1
#auto_learn              1
skip_rbl_checks         0
use_razor2              0
#use_dcc                 0
use_pyzor               0
#always_add_report		1

use_auto_whitelist		1
auto_whitelist_path		/etc/mail/spamassassin/auto_whitelist
bayes_path				/etc/mail/spamassassin/bayes

#ok_languages            ru en
ok_locales              ru en
report_charset			windows-1251
#lang					ru

#user_scores_dsn			DBI:mysql:spamassassin:192.168.0.2
#user_scores_sql_username	trinity
#user_scores_sql_password	''
#score NAME_OF_TEST 3.0
#score MIME_HTML_ONLY			2.0
#score HTML_MESSAGE				1.0
#score HTML_FONTCOLOR_RED		2.0
score FROM_ILLEGAL_CHARS		1.5
score HEAD_ILLEGAL_CHARS		1.5
score SUBJ_ILLEGAL_CHARS		1.5

Эта конфигурация имеет, в общем, самый простой вид, но тем не менее она работает, в чем вы можете убедиться, посмотрев на процессы на рисунке 6. Полное описание всех возможных опций и способов работы spamassassin выходит за рамки данной статьи. На эту тему написаны огромные и полезные книги.

Рисунок 6.
Рисунок 6.
Рисунок 6.

Теперь проверим работу всего нашего хозяйства. Давайте с этого же сервера пошлем почтовое отправление хотя бы самому себе, т. е. root. Результат показан на рисунке 7, где четко видно, что письмо было проверено и антивирусом clamav, и программой spamassassin, о чем были сделаны соответствующие записи в заголовках.

Рисунок 7.
Рисунок 7.
Рисунок 7.

Теперь осталось защитить систему хотя бы брандмауэром на основе ipfw.

В своей предыдущей статье «ArchLinux, Fedora, ASPLInux, Mandriva, Debian, Ubuntu, FreeBSD – подготовка систем в качестве Web-сервера на базе технологии LAMP. Часть 2: Подготовка системы FreeBSD в качестве Web-сервера на базе технологии LAMP» я описывал установку и настройку брандмауэра на основе пакетного фильтра IPFILTER. Теперь мне кажется уместным внести некоторое разнообразие в настройки системы учитывая тот факт, что ipfw до сих пор еще очень распространен в BSD-системах.

Собственно, ipfirewall (ipfw) – это межсетевой экран, который встроен во FreeBSD начиная с версии 2.0. С его помощью можно считать трафик по любым определенным правилам, основывающимся на информации заголовков пакетов протоколов TCP/IP, обрабатывать пакеты внешними программами, скрывать за одним компьютером всю сеть и решать многие другие задачи.

Данный пакетный фильтр используется во многих операционных системах, основанных на FreeBSD. Имеются и видоизмененные версии, перенесенные на другие системы, такие как Wipfw для Windows 2000, Windows XP и Windows Server 2003.

ipfw – это название пользовательской утилиты (вызываемой из консоли), предназначенной для управления системой ipfw. С её помощью становится возможным создание и изменение правил, которые управляют фильтрацией и перенаправлением пакетов. В рамках данной статьи перенаправление пакетов рассматриваться не будет, поэтому эта тема будет опущена.

ipfw может быть подгружен как модуль, а может быть жестко встроен в ядро.

Ipfirewall состоит из следующих частей:

  • обработчик правил (включен в ядро) с системой учета пакетов;
  • механизм учета логов;
  • механизм перенаправления пакетов;
  • ipstealth (механизм редактирования TTL-полей с защитой от traceroute);
  • механизмы управления QoS;
  • механизмы управления множественными правилами;
  • механизмы управления пропускной способностью сети;
  • система анти-спуффинга, основанная на таблице маршрутов;
  • пакетные счетчики;
  • NAT, PAT и LSNAT (включенные с 7 версии);
  • ограниченная поддержка IPv6;

Настроенный брандмауэр представляет собой упорядоченный список правил с номерами из диапазона 1-65535. Каждый пакет приходит с различных уровней стека протоколов и, проходя через брандмауэр, в порядке очереди сравнивается с критерием каждого правила в имеющемся списке. При наличии совпадения выполняется действие, описанное соответствующим правилом.

ipfw почти всегда имеет правило по умолчанию (за номером 65535), которое не может быть подвергнуто изменению. Оно применяется ко всем пакетам. В зависимости от конфигурации ядра это правило может выполнять действия запрета или разрешения, а все остальные правила могут редактироваться суперпользователем.

Обычно наиболее распространенные действия, применяемые к пакетам, имеют вид:

  • allow (accept, permit) разрешает прохождение пакета. После этого действия другие правила не игнорируются.
  • deny (drop) запрещает прохождение пакета. Пакет прекращает движение по списку правил и система полностью его игнорирует.
  • unreach – пакет запрещается. В отличие от deny, источнику отправляется сообщение об ошибке. При этом используется протокол ICMP.
  • reject – пакет запрещается. Отправителю посылается сообщение о невозможности нахождения требуемого узла.
  • skipto – переход к правилу с заданным номером, игнорируя все промежуточные.
  • fwd (forward) – пакет при этом перенаправляется. Используется для организации «transparent-proxy» в локальной сети.
  • divert – пакет передается на анализ пользовательскому приложению, которое может изменить пакет, проигнорировать его или вернуть обратно в сетевой фильтр.
  • tee – используется по аналогии с divert, но при этом анализируется копия пакета. Как правило, используется при подсчете трафика.
  • pipe и queue – пакет проходит через определенный канал или очередь, известные под названием «dummynet». Как правило, используется для ограничения пропускной способности интерфейса или внесения задержек на прохождение пакетов.

Система фильтрации пакетов ipfw поставляется вместе с системой FreeBSD и уже готова к работе после ее установки. Набор правил для ipfw, защищающий систему и дающий ей возможность работать (имеется в виду разрешающий доступ к DNS, NTP и исходящие TCP-соединения из числа уже установленных), на мой взгляд, должен выглядеть так:

	# set these to your network and netmask and ip
	net="192.168.0.0"
	mask="255.255.255.0"
	ip="192.168.0.1"

	setup_loopback

	# Allow any traffic to or from my own net.
	${fwcmd} add pass all from ${ip} to ${net}:${mask}
	${fwcmd} add pass all from ${net}:${mask} to ${ip}

	# Allow TCP through if setup succeeded
	${fwcmd} add pass tcp from any to any established

	# Allow IP fragments to pass through
	${fwcmd} add pass all from any to any frag

	# Allow setup of incoming email
	#${fwcmd} add pass tcp from any to ${ip} 25 setup
	
	# Allow setup of incoming http
	${fwcmd} add pass tcp from any to ${ip} 80 setup

	# Allow setup of outgoing TCP connections only
	${fwcmd} add pass tcp from ${ip} to any setup

	# Disallow setup of all other TCP connections
	${fwcmd} add deny tcp from any to any setup

	# Allow DNS queries out in the world
	${fwcmd} add pass udp from ${ip} to any 53 keep-state

	# Allow NTP queries out in the world
	${fwcmd} add pass udp from ${ip} to any 123 keep-state

	# Everything else is denied by default, unless the
	# IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel
	# config file.

Остается только подставить свои значения для ip-адреса, сети и ее маски.

Выводы

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


Ресурсы для скачивания


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=493538
ArticleTitle=Почтовые системы в Linux и FreeBSD: sendmail, postfix, exim: Часть 2.1. Построение почтовой системы на базе FreeBSD+sendmail+clamav+spamassassin
publish-date=06012010