Вход:  Пароль:  
FreeSource: AltLinux/Документация/PostfixCyrusImap ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Интернет часть?

Настройка почтовой системы Postfix SASL Cyrus-imap Amavisd-new Spamassassin Clamav sqlgrey IMP


Автор: Морсов Алексей (swi@altlinux.org), 13 Февраля 2006г.


UPD: 22 июля 2005г.
UPD: 27 октября 2005г.
UPD: 28 октября 2005г.

UPD: 13 феврался 2006г.


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


Примечание:


Данный документ описывает установку и настройку почтовой системы на базе дистрибутива ALT Linux Master 2.4 и предполагает наличие у вас необходимых навыков по работе в Linux.


Все настройки взяты с реально работающего mail-сервера.
В настройке всей этой машинерии мне очень помогли советы членов community@ ALT Linux и вот это HOW-TO.

Содержание

Установка необходимых пакетов
Настройка Postfix
Настройка Cyrus-Imap
Настройка SASL и подготовка cyradm
Управление пользователями
Настройка Amavisd-New, Clamav, SpammAssassin и MySQL
Запуск и проверка
Настройка IMP

Установка необходимых пакетов


И так. Для почтовой системы нам понадобится установить (если они еще не установлены) следующие пакеты в систему:



Внимание: версии пакетов у вас могут отличаться. Так в частности postfix входящий в состав ALT Master 2.4 не поддерживает sasl, поэтому я лично брал postfix-2.1.5-alt0.1.src.rpm от сюда http://lakostis.elektrostal.ru/RPMS/ALM2.4/SRPMS/ (спасибо Konstantin A. Lepikhov).
Уже после написания статьи в бэкпорты к Мастеру (и в самом сизифе) весь postfix был разбит на основной и кучу отдельных модулей. Если у вас что-то из описанного здесь не заводится, проверь установлен ли соответствующий модуль для postfix. Так например для SASL авторизации должен быть установлен пакет postfix-tls. (по замечанию Vladimir V. Kamarzin).



Примечание: sqlgrey не входит в поставку ALT Linux Master 2.4, но он есть в «Сизиф» и кажется в Backports.


Так же необходимо проконтролировать, что My SQL?-server установлен и запущен.


Для web-интерфейса будем использовать IMP. Для этого понадобятся пакеты:



Содержание


Настройка Postfix


Мы будем настраивать Postfix как сервер smtp с поддержкой авторизации через SASL. Всю почту, которую Postfix будет принимать, он будет отдавать Cyrus-imap по протоколу lmtp. Прежде чем попасть к Cyrus-imap почта будет проходить проверку антивирусами и спамофильтром. При приеме сообщений, Postfix будет проверять их (начиная с этапа HELO/EHLO соединения) с помощью greylisting-технологии, по некоторым online blacklist сервисам и по собственному blacklist, который будет находиться в My SQL? базе. Все пользователи почтовой системы будут виртуальными (т.е. не будут иметь соответствующих unix accounts), за исключением служебных пользователей, типа webmaster, postmaster и т.д.


И так. Сначала нам нужно объявить Postfix внешним сервисом (так как по умолчанию он доставляет только локальную почту):


#control postfix server

Теперь отредактируем файл /etc/postfix/master.cf. Фактически включим нужные нам сервисы и фильтры:


# ==========================================================================
# service type private unpriv chroot wakeup maxproc command args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n – – – – smtpd
smtp-amavis unix – – n – 2 lmtp
  • o smtp_data_done_timeout=1200

127.0.0.1:10025 inet n – n – – smtpd

  • o content_filter=
  • o local_recipient_maps=
  • o relay_recipient_maps=
  • o smtpd_restriction_classes=
  • o smtpd_client_restrictions=
  • o smtpd_helo_restrictions=
  • o smtpd_sender_restrictions=
  • o smtpd_recipient_restrictions=permit_mynetworks,reject
  • o mynetworks=127.0.0.0/8
  • o strict_rfc821_envelopes=yes
  • o smtpd_error_sleep_time=0
  • o smtpd_soft_error_limit=1001
  • o smtpd_hard_error_limit=1000
#smtps inet n – – – – smtpd
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#submission inet n – – – – smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
#628 inet n – – – – qmqpd
pickup fifo n – – 60 1 pickup
cleanup unix n – – – 0 cleanup
qmgr fifo n – – 300 1 qmgr
#qmgr fifo n – – 300 1 nqmgr
#tlsmgr fifo – – – 300 1 tlsmgr
rewrite unix – – – – – trivial-rewrite
bounce unix – – – – 0 bounce
defer unix – – – – 0 bounce
flush unix n – – 1000? 0 flush
proxymap unix – – n – – proxymap
smtp unix – – – – – smtp
relay unix – – – – – smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n – – – – showq
error unix – – – – – error
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – – – – lmtp
verify unix – – – – 1 verify
#
# Interfaces to non-Postfix software. Be sure to examine the manual

Теперь отредактируем файл /etc/postfix/main.cf. Я создал main.cf с нуля, чтобы вписать туда только нужное мне.
Прежде всего настроим наш хост (подробности см. в BASIC_CONFIGURATION_README):


# Local setting of host
###
myhostname = mail.ricom.ru
mydomain = ricom.ru

myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $mydomain

unknown_local_recipient_reject_code = 550


mynetworks = $config_directory/mynetworks

Файл mynetworks содержит список ваших доверенных сетей, например:


127.0.0.1/32
192.168.130.0/24

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


# Aliases and relay

alias_maps = hash:/etc/postfix/aliases

# Mail trasport
##
mailbox_transport = lmtp:unix:/public/lmtp


local_recipient_maps = hash:/etc/postfix/local_users
virtual_alias_maps = hash:/etc/postfix/virtual

Теперь настроим SASL аутентификацию для smtp-соединений:


# SASL configuration
##
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

И пропишем правила доступа для smtp-соединений. Сначала попросим «представиться» и корректно формировать заголовки письма. Описания остальных правил (и для чего они именно нужны) можно (и нужно) посмотреть в SMTPD_ACCESS_README.


# rejecting controls goes here
##
maps_rbl_domains = dul.ru
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:2501

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname
smtpd_sender_restrictions = permit_mynetworks,

permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_unverified_sender,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
check_sender_access mysql:/etc/postfix/sender_access.cf

smtpd_client_restrictions = permit_mynetworks,

permit_sasl_authenticated,
reject_rbl_client relays.ordb.org,
reject_rbl_client opm.blitzed.org,
reject_maps_rbl,
reject_unauth_destination,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
check_client_access mysql:/etc/postfix/sender_access.cf

smtpd_data_restrictions = reject_unauth_pipelining


content_filter = smtp-amavis:[127.0.0.1]:10024


smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

Примечание: check_policy_service – это механизм проверки, на котором и задействован sqlgrey (в нашем случае). Данный вид сервиса реализован в Postfix версии 2.1 и старше.
check_sender_access – используется для ведения нашего blacklist-а.
У меня он (/etc/postfix/sender_access.cf) выглядит так:

user=***
password=***
dbname=postfix
table=sender_access
select_field=action
where_field=sender
hosts=127.0.0.1

user и password – это имя пользователя и его пароль в базе My SQL? имеющего доступ к указанной таблице/базе.
content_filter – собственно заставляет письмо уходить не сразу в ящик пользователя, а уходит на растерзание amivisd-new, который проверяет его сам, а так же с помощью clamav (на вирусы) и spamassassin (спамофильтр), только после чего возвращает письмо обратно Postfix и оно наконец попадает в ящик пользователя.
Так... Поскольку мы используем SASL авторизацию для smtp – нужно указать где ее (и как) брать. Для этого найдем файл /usr/lib/sasl2/smtpd.conf (если такого файла нет, просто создайте его там) и пропишем в нем следующее:


pwcheck_method: auxprop

А теперь перейдем к Cyrus-Imap.


Содержание


Настройка Cyrus-Imap


Ну что же, с postfix пока закончим. Приступим теперь к настройке собственно Cyrus-Imap – нашего pop3 и imap демона :) Выбор именно Cyrus-а был основан на трех простых вещах:


  1. Он поставился из коробки ALT Linux Master 2.4 по умолчанию :)
  2. Он имеет более мощные возможности в принципе (хотя я думаю что я использую его дай бог на 10%
  3. Он не так уж сложен в настройке (по крайней мере в настройке как простого pop3/imap)

Это мое субъективное мнение.
И так приступим. Для начала отредактируем файл /etc/cyrus.conf:


# standard standalone server implementation

START {

# do not delete this entry!
recover cmd="ctl_cyrusdb -r"

# this is only necessary if using idled for IMAP IDLE
# idled cmd="idled"

}


# UNIX sockets start with a slash and are put into /var/lib/imap/socket
SERVICES {

# add or remove based on preferences
imap cmd="imapd" listen="imap" prefork=5
# imaps cmd="imapd -s" listen="imaps" prefork=1
pop3 cmd="pop3d" listen="pop3" prefork=3
# pop3s cmd="pop3d -s" listen="pop3s" prefork=1
# sieve cmd="timsieved" listen="sieve" prefork=0
# smmapd cmd="smmapd" listen="/var/lib/imap/socket/smmapd" prefork=1

# these are only necessary if receiving/exporting usenet via NNTP
# nntp cmd="nntpd" listen="nntp" prefork=3
# nntps cmd="nntpd -s" listen="nntps" prefork=1

# at least one LMTP is required for delivery
# lmtp cmd="lmtpd" listen="lmtp" prefork=0
lmtpunix cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=1

# this is only necessary if using notifications
# notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1

}


EVENTS {

# this is required
checkpoint cmd="ctl_cyrusdb -c" period=30

# this is only necessary if using duplicate delivery suppression,
# Sieve or NNTP
delprune cmd="cyr_expire -E 3" at=0400

# this is only necessary if caching TLS sessions
tlsprune cmd="tls_prune" at=0400
}

Внимание: Обратите внимание на строку с lmtpunix. Путь, указанный в ней, должен совпадать с путем, указанным в /etc/postfix/main.cf с учетом того, что Postfix завернут в chroot-jail (в данном случае в директорию /var/spool/postfix).


Теперь внесем небольшие изменения в файл /etc/imapd.conf:


admins: cyrus
sasl_pwcheck_method: auxprop
sasldb_path: /etc/sasl2/sasldb2
partition-default: /var/maildir
sendmail: /usr/sbin/sendmail
servername: mail.ricom.ru

partition-default указывает на тот каталог, где будет храниться ваша почта. У меня это /var/maildir – которая суть отдельный раздел с файловой системой Reiser FS? (так как почта в Cyrus-Imap хранится в формате Maildir, то мне показалось это оптимальным вариантом).
ВНИМАНИЕ: – пользователь cyrus должен иметь права на чтение и запись в этот каталог!
Все. Остальное там можно оставить как есть. Есть там еще параметры для автосоздания ящиков в cyrus при первом обращении к нему, но я это не использовал по одной простой причине, которую я объясню ниже, в разделе Управление пользователями.


Содержание


Настройка SASL и подготовка cyradm


Теперь проведен настройку SASL библиотеки и подготовим cyradm к работе. Тут все просто. Редактируем файл /etc/sasl2/saslpasswd.conf:


pwcheck_method: sasldb

Собственно с SASL на этом все. Вот если бы мы делали через mysql.... Но это совсем другая история :) И довольно хорошо описанная в этом вот HOW-TO.
Теперь перейдём к подготовке cyramd. Cyramd – это интерфейс к базе Cyrus-Imap. Через него можно управлять ящиками пользователей (создавать, удалять, устанавливать права, создавать папки и т.д.). Собственно, единственное что нам понадобится, это завести в базу SASL пользователя cyrus, которого мы указали в качестве Cyrus администратор в /etc/imapd.conf. Если вы указали там другого, соответственно нужно добавить в базу SASL вместо cyrus. Использовать root для этого не рекомендуется.


# saslpasswd2 -c cyrus

И укажите пароль когда вас попросят. А теперь внесите пользователей cyrus и postfix в группу sasl, чтобы они могли читать базу SASL.
Однако, как мы помним, Postfix запущен в chroot-jail, т.е. он будет искать базу SASL /etc/sasl2/sasldb2 но не увидит ее. Поэтому надо ее скопировать к нему в chroot. Идем в /var/spool/postfix/etc/ создаем там директорию sasl2. И главное, убедимся что у файла /etc/sasl2/sasldb2 правильные права (группа sasl должна уметь его читать):


$ ls -ld /etc/sasl2/sasldb2
-rw-r
1 root sasl 12288 Фев 24 17:47 /etc/sasl2/sasldb2 $$

Содержание


Управление пользователями


Поскольку все наши пользователи виртуальные, и сведения о них находятся в файлах типа hash (см. файл /etc/postfix/main.cf, то нам нужно добавлять и удалять их от туда, не забывая при этом добавлять или удалять их из базы SASL. Это можно делать руками, но я написал небольшой скрипт, который автоматически выполняет эти действия и заводит ящики в Cyrus-Imap для этих пользователей.
Возможно это не самый гибкий подход, но для небольшой конторы он себя вполне оправдывает как наиболее простой в настройке. В будущем, при желании можно отказаться от hash и перейти к использованию в качестве базы данных пользователей My SQL?, Postgre SQL? или даже LDAP :)


Внимание: Мой скрипт читает файлы имен пользователей и их алиасов по жестким регулярным выражениям, попутно сортирую их по алфавиту. Так что если у вас уже есть эти файлы (см. /etc/postfix/main.cf) то лучше просто удалите их (или переименуйте) – он сам создаст их.


Его можно взять ((http://mail.ricom.ru/alt/ тут). Только имейте ввиду, что пароль для пользователя cyrus там прописан в чистом виде. Соответственно права на этот файл должны быть даны только root.
И так, используем скрипт mailmgr для добавления пользователя.


# mailmgr --add morsov

Скрипт создаст ящик в Cyrus-Imap, даст пользователю cyrus права на его удаление, добавит пользователя в базу SASL (попросит ввести пароль), добавит имя пользователя в файл пользователей почтовой системы. После этого скрипт запросит алиас для пользователя. Если вы не хотите давать алиас, просто нажмите ENTER. Скрипт не умеет добавлять алиасы отдельно от имен пользователей, соответственно, если вы захотите добавить алиас в будущем, просто отредактируйте соответствующий файл.
Справку по использованию скрипта mailmgr можно получить командой


# mailmgr --help

Содержание


Настройка Amavisd-New, Clamav, Spamm Assassin? и My SQL?


Собственно настраивать тут особо нечего. Как говорилось «Всё уже украдено до нас» :) Спасибо создателям Amavisd-new и команде ALT Linux. Но все же, сначала в файле /etc/amavis/amavisd.conf найдите и исправьте следующие строки:


$virus_admin = «virusalert\@$mydomain»;
$virus_quarantine_to = 'virus-quarantine';
$spam_quarantine_to = 'spam-quarantine';

это приведет к тому, что все письма опознанные как спам и вирусы, будут складываться в каталог карантина ( он указан тут же в переменной $QUARANTINEDIR). Мне кажется это наилучший способ. Сразу удалять такие письма не хорошо, потому что и Spam Assassin и Clamav могут ошибиться и вы потеряете нужную почту.


Обновление от 21.04.2005
Когда мне надоело забивать адреса хостов спамеров свалившихся в карантин ручками, я написал небольшой скриптик (заодно на Python потренировался) который разгребает заголовки всех писем в этой директории и закидывает их в My SQL?-евский блеклист, который использует Postfix :) Желающие могут им воспользоваться. Лежит здесь, называется autospambann (там лежит rpm для ALT Master 2.4 и src.rpm). Скрипт записывает в лог все заголовки письма которое он внес в blacklist и удалил. Но на ваш страх и риск – письма удаляются после обработки. Хотя можете поправить в скриптике – там прозрачно.


Так же я бы поправил значения уровней для Spam Assassin-а так чтобы он всегда маркировал письма:


$sa_tag_level_deflt = -999;
$sa_tag2_level_deflt = 6.0;
$sa_kill_level_deflt = $sa_tag2_level_deflt;

И еще, если вам необходимо посылать/получать по почте письма с файлами типа. EXE (например самораспаковывающиеся архивы или дистрибутивы), то найдите и законментируйте секцию, начинающуюся строкой $banned_filename_re = new_RE(


Ну и теперь настроим My SQL? – наш собственный blacklist. Для этого сначала подправим файл /var/lib/mysql/my.cnf:


[mysqld]
chroot=/var/lib/mysql
datadir=/db
bdb-logdir=/log
log=/log/queries
pid-file=/mysqld.pid
skip-locking
#skip-networking
bind-address=127.0.0.1
port=3306
socket=/mysql.sock
tmpdir=/tmp
user=mysql

Для начала создадим нужную базу:

# mysql

Теперь сделайте таблицу нужную для Postfix. Возьмите файл postfix.sql от http://mail.ricom.ru/alt/? и просто подгрузите его командой

# mysql -D postfix <postfix.sql

А теперь дадим пользователю postfix права на операции с этой базой:


# mysql

В принципе Postfix-у нужно только доступ на чтение, но поскольку My SQL? у нас работает только на локальном интерфейсе, то можно и дать все права. А уж если вы собираетесь использовать autospambann – то права на INSERT тоже должны быть.


Ну вот, теперь все вроде бы настроено и прописано. Осталось все это запустить и проверить.


Содержание


Запуск и проверка


И так, чтобы вся эта машинерия работала, нужно всех их перезапускать. И так:


# service amavisd start
# service mysqld start
# service sqlgrey start
# service cyrus-imapd start
# service postfix start

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


# chkconfig --list |grep :on

Должны быть видны следующие записи:


cyrus-imapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:off 3:on 4:on 5:on 6:off
clamd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
amavisd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sqlgrey 0:off 1:off 2:on 3:on 4:on 5:on 6:off

clamd стартуется из под amavid. Если у вас какого-то из процессов не хватает, сделайте для него:


# chkconfig --level 345 <имя процесса> on

Все. Все красиво, все хорошо. Осталось только прикрутить Web-интерфейс ко всему этому хозяйству.


Содержание


Настройка IMP


IMP ставится в директорию к Apache /var/www/html/addon-modules/horde/imp/. Сам IMP реализован под Horde. После установки доступ к директориям horde/ и horde/imp/ дан только для локального хоста. Откроем дуступ к этим папкам извне. Для этого найдем в этих директориях файлы .htaccess (или создайте их с правами 640 и владельцами root.apache) и пропишите в них следующее:


Deny from all
Allow from all

После этого, отредактируем файл /etc/httpd/conf/httpd.conf, в самом конце которого должны быть строчки


Include conf/addon-modules/horde.conf
Include conf/addon-modules/imp.conf

Теперь убедимся, что в файле /etc/httpd/conf/addon-modules.d/horde.conf есть такие строки:


<Directory /var/www/html/addon-modules/horde>
Options Indexes Follow Sym Links?
Allow Override? Auth Config? Limit

и в файле /etc/httpd/conf/addon-modules.d/imp.conf такие:


<Directory «/var/www/html/addon-modules/horde/imp»>
Allow Override? Auth Config? Limit

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


# service httpd restart

и убедимся что он у нас стартует при загрузке


# chkconfig --list|grep httpd
httpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

Теперь осталось только настроить сам IMP. Сначала в файле horde/config/registry.php раскоментируйте строки


$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';

а в блоке начинающемся с $this->applications['imp'] = array( исправте строку


'status' => 'active'

Теперь в файле horde/imp/config/servers.php отредактируйте второй описанный сервер


$servers['cyrus'] = array(
'name' => 'Ricom Cyrus IMAP Server',
'server' => 'mail.ricom.ru',
'protocol' => 'imap/notls',
'port' => 143,
'folders' => ,
'namespace' => 'INBOX.',
'maildomain' => 'ricom.ru',
'realm' => 'ricom.ru',
'preferred' =>
);

Ну вот и все. :) Проверяем, тестируем, наслаждаемся :)

Ссылки


Gentoo wiki
http://cyrus.org.ru/altnamespace.html#altnameconfig
Результаты тестирования
http://small.dropbear.id.au/myscripts/postfixmysql.html


Не понятно многое...


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]