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

Часть 3.1. Построение почтовой системы на базе UbuntuLinux+postfix

Comments

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

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

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

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

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

Установка и настройка ClamSMTP

Для начала мы установим ClamSMTP – вирусный фильтр smtp.

Пару слов о предлагаемом решении – ClamSMTP, кроме собственно smtp-фильтра, может работать в режиме smtp-прокси, причем прозрачно, и фильтровать весь почтовый трафик локальной сети. Демон “слушает” порт 10026.

Установим его при помощи команды:

aptitude install clamav-daemon clamav

Внесем изменения в main.cf:

content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings

Внесем изменения в master.cf (не путайте с main.cf):

# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Теперь добавим служебных пользователей:

sudo adduser clamsmtp clamav

Делаем рестарт:

sudo /etc/init.d/postfix restart
sudo /etc/init.d/clamsmtp restart
sudo /etc/init.d/clamav-daemon restart

Проверяем (лучше всего при помощи файла http://eicar.org/download/eicar_com.zip).

В /var/log/mail.log должно быть (после отправки сообщения с вирусом) примерно следующее:

localhost clamsmtpd: 100004: from=  info@domain1.com , to=  info@domain1.com ,
	 status=VIRUS:Eicar-Test-Signature

Возможен вариант простого копирования и вставки этого кода в ваш файл для более скорого получения работоспособной системы. Теперь добавим к тому, что было сделано ранее, Spamassassin (http://spamassassin.apache.org) и amavis-new (http://www.ijs.si/software/amavisd/).

Установка и настройка Spamassassin и Amavis-new

Напомню, что целью этой работы является полноценная почтовая система на несколько сотен (до тысячи) пользователей, не имеющая системных учетных записей, но имеющая антивирусную и антиспамовую защиту. Теперь добавим ко всему этому spamassassin.

Немного изменим имеющуюся у нас конфигурацию. Удалим программу clamsmtp и установим его замену, более эффективную и поддерживающую одновременно две возможности – антивирус и антиспам – Amavis-new. Более подробно почитать о нем можно здесь: http://www.ijs.si/software/amavisd/.

Это оболочка (wrapper), которая может поддерживать несколько контентных фильтров для определения спама и вирусов и служит посредником между MTA и собственно самими фильтрами.

Удаляем имеющееся clamsmtp:

# aptitude remove clamsmtp.

Затем (при активизированных репозитариях Multiverse Universe) устанавливаем:

#aptitude install amavis-new spamassassin clamav-daemon

Кроме того, для лучшего детектирования спама устанавливаем пакеты:

# aptitude install libnet-dns-perl libmail-spf-query-perl pyzor razor

и некоторые утилиты для компрессии-декомпрессии:

# aptitude install arj bzip2 cabextract cpio file gzip lha nomarch pax rar 
	unrar unzip unzoo zip zoo

необходимые для проверки сжатых файлов (вложений в почтовые сообщения).

Приступаем к конфигурированию.

Поведение clamav полностью описывает конфигурационный файл /etc/clamav.

Добавим пользователя clamav в группу amavis и наоборот – пользователя amavis в группу clamav:

# adduser clamav amavis
# adduser amavis clamav

для доступа к сканированию файлов.

Теперь такая особенность. Spamassassin автоматически определяет свои вспомогательные компоненты, установленные ранее, и не требует их дополнительного конфигурирования в данном случае. В частности, это касается dcc-client, pyzor и razor.

Конечно, полный тюнинг Spamassassin далеко выходит за пределы этой статьи, но вы можете сами об этом прочесть на домашней странице Spamassassin.

А нам надо всего-то установить в единичку параметр ENABLED=1 в /etc/default/spamassassin для его активизации.

Теперь запустим сервис:

# /etc/init.d/spamassassin start

Далее переходим к amavis.

В его конфигурационном файле /etc/amavis/conf.d/15-content_filter_mode надо активизировать spam и antitvirus detection:

use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
# Default antivirus checking mode
# Uncomment the two lines below to enable it

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

# Default SPAM checking mode
# Uncomment the two lines below to enable it

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

# insure a defined return

Потом проверьте и измените концовку этой строки:

$final_spam_destiny = D_DISCARD; в файле /etc/amavis/conf.d/20_debian_defaults

# /etc/init.d/amavis restart

Теперь надо интегрировать эту службу в postfix, чтобы они совместно работали. Внесите изменения в файл /etc/postfix/main.cf:

content_filter = smtp-amavis:[127.0.0.1]:10024

Теперь в /etc/postfix/master.cf (не путайте с main.cf) добавляем:

smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Также добавьте две линии ниже строки со словом pickup:

-o content_filter=
-o receive_override_options=no_header_body_checks

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

И во избежание путаницы со старыми добавлениями в файлы postfix , которые были сделаны при настройке smtpclam, я привожу свой рабочий конфигурационный файл:

# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
# Do not forget to execute "postfix reload" after editing this file.
==============================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
==============================================================
smtp inet n - - - - smtpd
#submission inet n - - - - smtpd
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - - - - smtpd
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - - - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
===============================================================
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
# See the Postfix UUCP_README file for configuration details.
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
# Other external delivery methods.
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop}
		 ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
# AV scan filter (used by content_filter)
#scan unix - - n - 16 smtp
# -o smtp_send_xforward_command=yes
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
# -o mynetworks_style=host
# -o smtpd_authorized_xforward_hosts=127.0.0.0/8

Можете просто скопировать и вставить в свои файлы эти строки.

Перезагружаем postfix:

# /etc/init.d/postfix reload

Тестируем:

telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
^]

Во избежание ошибок в логах по поводу крэша фильтров контента и неработоспособности системы в целом, измените права доступа следующим образом:

#chmod -R 775 /var/lib/amavis/tmp

Система настроена и полностью функциональна.

Выводы

В цикле статей приведено краткое сравнение MTA sendmail, exim и postfix. Показаны их сильные и слабые стороны применительно к использованию в качестве серверных почтовых платформ.

Досконально рассмотрен процесс построения почтовой системы на базе Ubuntu Linux и MTA postfix. Рассмотрены два варианта применения API для антивирусной и антиспамовой программ – clamsmtp и amavis-new.

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


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


Комментарии

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

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