Авторизация

Вы можете войти через одну из учетных записей:

ИЛИ



Напомнить пароль
Регистрация

РуководствоПостроение почтовой системы на базе Ubuntu Linux+postfix

Описание: В этой статье будет рассмотрен процесс построения почтовой системы на базе Ubuntu Linux+postfix с подключением связки из программ по защите от вредоносного кода и нежелательной почты: clamav и spamassassin.
В следующих частях цикла мы расскажем о построении подобной платформы на базе Debian GNU/Linux с подключением аналогичных средств защиты, что даст возможность оценить многоликость методов и форм построения почтовых служб и технических путей их реализации в имеющемся многообразии свободных операционных систем.

Установка и настройка 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


Проверяем (лучше всего при помощи файла 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. Более подробно почитать о нем можно здесь: 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


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

источник
  • 0
  • Diesel
  • 20 июля 2010, 14:46
  • add twitter 

Комментарии (2) Вконтакте (1) facebook (0)

Комментарии (2)

rss свернуть / развернуть
  • avatar
  • BUM
  • 20 июля 2010, 15:05
  • #
  • 0
Почему люди так гонятся за постфиксом?… да он прост в настройке но какбы грамотно настроенный exim гораздо лучше чем постфикс (хотябы быстродействием, при большой очереди писем).
Так же статья не полная… принимать и отправлять почту будем, а отдавать пользователям ненадо? :) де описание настройки courier/dovecot?
Кстати уже пол года собираюсь почтовик пересадить dovecot, но все времени не хватает :)
свернуть ветку
Я когда первый раз столкнулся с пару сотней тыш писем в день, причём почти каждое письмо 200-1000 кб и проталкивать надо чем быстрее, адреса по всему миру, и мощностей на железках почти не осталось, как-то инстинктивно побоялся ставить и postfix и exim. И хоть все говорят, что он «умер», но я поставил sendmail. И он очень хорошо работал. Не знаю, не делал бенчмарков, но поступил бы также (железо — виртуалка 1 GHz, 1 Gb RAM, потом 1,5 Gb RAM, так как стоял mailman).
свернуть ветку

Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.