В началоСетевые сервисы → Установка почтовой системы
Gentoo-doc HOME Пред.: Подробная настройка iptablesВ началоУровень выше: Сетевые сервисыСлед.: Настройка vsftpd

4. Установка почтовой системы

Установка почтовой системы на Gentoo linux для небольшой конторы

Используется postfix + cyrus-imap, авторизация пользователей через cyrus-sasl без прикручивания какой-либо БД (подходит для контор с несколькими десятками почтовых ящиков — хранить что-либо в mysql или postgress в данном случае нет смысла). Пользователи хранятся в базе sasldb, поэтому нет нужды заводить в системе реальных пользователей.

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

Предпочитаю использовать для /var reiserfs, но это сугубо личные предпочтения.

emerge -pv cyrus-sasl

[ebuild   N   ] dev-libs/cyrus-sasl-2.1.20  -authdaemond +berkdb -debug +gdbm +java -kerberos -ldap +mysql  +pam -postgres +ssl -static 0 kB

На всякий случай проверяем флаги — все ОК

emerge cyrus-sasl

Этот пакет поставили, едем дальше

emerge -pv postfix

These are the packages that I would merge, in order:

 Calculating dependencies ...done!

[ebuild   N   ] mail-mta/postfix-2.1.5-r1  +ipv6 -ldap -mailwrapper -mbox +mysql +pam -postgres -sasl*(-selinux) +ssl -vda 0 kB

Здесь нам может пригодиться флаг sasl, хотя в моем случае пока нет нужды авторизоваться на smtp, возможно в дальнейшем здесь будет описана авторизация через cyrus-sasl на smtp — вообщем выставляйте флаги по вкусу кому что надо

USE="sasl" emerge postfix

Постфикс собрался

emerge -pv cyrus-imapd

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   N   ] net-mail/cyrus-imapd-2.2.10  -afs -drac -idled -kerberos +pam -snmp +ssl +tcpd 0 kB

После проверки и установки нужных нам флагов пересобираем openssl и imap-сервер

emerge cyrus-imapd

Программа для администрирования имаповских ящиков

emerge cyrus-imap-admin

После того как все нужные нам пакеты поставлены, можно приступать к настройке

сначала cyrus-sasl

passwd cyrus

pwconv

chown -R cyrus:mail /etc/sasl2 — доступ cyrus к базе /etc/sasl2/sasldb2

saslpasswd2 cyrus — заводим в sasldb2

sasldblistusers2 — для проверки

4.1. Разбираемся с postfix

Cодержимое /etc/postfix/main.cf, ниже приведена примерная конфигурация почтового сервера подключенного напрямую к инету (не через relayhost), естественно для этого случая должна быть MX-запись в ДНС. Подчеркиваю, что умышленно опускаю многие параметры в main.cf, чтобы не раздувать описание. Добавьте все остальное руководствуясь документацией postfix.

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/lib/postfix

mail_owner = postfix

myhostname = mail.domain.tld

mydomain = mail.domain.tld

myorigin = $mydomain

inet_interfaces = all

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

local_recipient_maps =

unknown_local_recipient_reject_code = 550

mynetworks_style = subnet

mynetworks = 192.168.1.0/24, 127.0.0.0/8

relay_domains = $mydestination

НА ЭТУ СТРОЧКУ ОБРАТИТЕ ВНИМАНИЕ!!!

mailbox_transport = lmtp:unix:/var/imap/socket/lmtp

Если надо подключить procmail то вместо нее пишем

mailbox_transport = procmail

Когда добавили все, что нужно в main.cf, идем в /etc/postfix/master.cf

Ищем такую строку

 # Also specify in main.cf: cyrus_destination_recipient_limit=1

cyrus     unix  -       n       n       —       —       pipe

 user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

 

И заменяем путь на

 # Also specify in main.cf: cyrus_destination_recipient_limit=1

cyrus     unix  -       n       n       —       —       pipe

 user=cyrus argv=/cyrus/deliver -e -r ${sender} -m ${extension} ${user}

При использовании procmail, добавляем

procmail unix  -       n      n       —        -       pipe

 flags=R user=cyrus argv=/usr/bin/procmail -p /etc/procmailrc  USER=${user}

Где файл /etc/procmailrc :

DELIVERMAIL=/usr/lib/cyrus/deliver

LOGFILE=/var/log/procmaillog

IMAP="$DELIVERMAIL -e -a $USER -m user.$USER"

(если надо подключить spamassassin)

:0fw : spamassassin.lock

* < 90000

| /usr/bin/spamassassin

и далее обязательно

:0

| $IMAP

:0w

{

EXITCODE=$?

HOST

}  

Все, с постфиксом разобрались, теперь cyrus-imapd

Редактируем /etc/cyrus.conf

# $Header: /var/cvsroot/gentoo-x86/net-mail/cyrus-imapd/files/cyrus.conf,v 1.4 2004/07/18 04:02:23 dragonheart  Exp $

# Standard standalone server configuration.

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/imap/socket.

SERVICES {

  # Add or remove based on preferences.

  imap                cmd="imapd" listen="imap2" prefork=0

  pop3                cmd="pop3d" listen="pop-3" prefork=0

   # Don't forget to generate the needed keys for SSL or TLS

  # (see doc/html/install-configure.html).

  imaps                cmd="imapd -s" listen="imaps" prefork=0

  pop3s                cmd="pop3d -s" listen="pop3s" prefork=0

  sieve                cmd="timsieved" listen="sieve" prefork=0

  # at least one LMTP is required for delivery

  #lmtp                cmd="lmtpd" listen="lmtp" prefork=0

   ##ОБРАТИТЕ ВНИМАНИЕ НА ЭТУ СТРОКУ

  lmtpunix        cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0

     # this is only necessary if using notifications

  #notify        cmd="notifyd" listen="/var/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.

  delprune        cmd="ctl_deliver -E 3" period=1440

  # This is only necessary if caching TLS sessions.

  tlsprune        cmd="tls_prune" period=1440

}

Вот так делаем сертификаты

openssl req -new -nodes -out req.pem -keyout key.pem  

openssl rsa -in key.pem -out new.key.pem

openssl x509 -in req.pem -out ca-cert -req \

-signkey new.key.pem -days 999

cp new.key.pem /etc/ssl/cyrus/server.pem

rm new.key.pem

cat ca-cert >> /etc/ssl/cyrus/server.pem

chown cyrus:mail /etc/ssl/cyrus/server.pem

chmod 600 /etc/ssl/cyrus/server.pem # Your key should be protected

Проверяем все-ли директории созданы

/var/imap

cd /var

mkdir imap

chown cyrus:mail imap

chmod 750 imap

/var/spool/imap

cd /var/spool

mkdir imap

chown cyrus:mail imap

chmod 750 imap

/usr/sieve

cd /usr

mkdir sieve

chown cyrus:mail sieve

chmod 750 sieve

Далее редактируем /etc/imapd.conf

configdirectory:        /var/imap

partition-default:        /var/spool/imap

auto_transition:        yes

tls_ca_path:           /etc/ssl/cyrus

tls_cert_file:                /etc/ssl/cyrus/server.pem

tls_key_file:                /etc/ssl/cyrus/server.pem

admins:                        cyrus

hashimapspool:                yes

allowanonymouslogin:        no

allowplaintext:                yes

sasl_pwcheck_method:        auxprop

sasl_auxprop_plugin:        sasldb

sasldb_path:                /etc/sasl2/sasldb2

sasl_mech_list:                LOGIN PLAIN

Авторизация через базу sasldb, механизмы авторизации LOGIN,PLAIN Если мы будем использовать обычные открытые пароли, без шифрования (например внутри организации) то изменим в /etc/imapd.conf

allowanonymouslogin: yes

вроде бы с настройкой cyrus покончено

Теперь займемся почтовыми ящиками юзеров, для этого используем программу cyradm

/etc/init.d/cyrus start

cyradm -user cyrus -server localhost

localhost> cm user.testuser

localhost> help — выводит все команды для руления юзерскими ящиками

localhost> exit

Не забудьте забить в sasldb2 нового юзера:

saslpasswd2 testuser

Поднимаем сервисы

/etc/init.d/postfix start

/etc/init.d/cyrus start

Настраиваем почтового клиента (проверено с thunderbird 1.0 и с KMail 1.7.1, с Outlook Express тоже не должно быть проблем).

Пробуем отправить письмо, если что-то не работает — смотрим логи, прежде всего проверьте права на доступ в /var/imap/socket/lmtp для пользователей postfix и cyrus, чаще всего проблемы связаны именно с этим. Также проверьте права на доступ к /etc/sasl2/sasldb2 для пользователя cyrus, который должен быть в группе mail.

Желательно поставить антивирус например clamav используем для этого связку clamav + clamsmtp хотя возможны и другие варианты например amavisd-new. Установка прекрасно описана здесь http://www.nixp.ru/articles/clamav_postfix, необходимо руководствоваться ей,естественно с адаптацией под реалии Gentoo

emerge clamav

ACCEPT_KEYWORDS="~x86" emerge clamsmtp (пока замаскирован в портаджах)

Затем в файле /etc/conf.d/clamd START_CLAMD = yes (для версии старше 0.85 уже не актуально — все настройки только в clamd.conf и clamsmtpd.conf)

Редактируем файлы /etc/clamd.conf и /etc/clamsmtpd.conf в соответствии с рекомендациями приведенными выше по ссылке Обратите внимание на параметры LocalSocket: /var/run/clamav/clamd.sock в /etc/clamav.conf и ClamAddress: /var/run/clamav/clamd.sock в /etc/clamsmtpd.conf — путь и имя файла должен одинаковым для обоих конфигов

В файл main.cf необходимо добавить две строчки:

content_filter = scan:127.0.0.1:10025

receive_override_options = no_address_mappings

Первая говорит postfix'у о том, что необходимо пересылать всю почту через сервис (фильтр) 'scan' на 10025-ый порт, который, как раз, открыт clamsmtpd. Вторая строчка говорит о том, чтобы postfix не делал никаких манипуляций с адресами до того, как они дойдут до content_filter. Так что получается, что фильтр работает с реальными почтовыми адресами, а не с результатами перевода в виртуальные псевдонимы, маскарадингом и т.п.

В файл master.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:10026 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

Примечание: вокруг знака '=' пробелы не ставить. Значение 127.0.0.1:10026 открывает 10026-порт для возвращения почты обратно от clamsmtpd.

rc-update add clamd default

rc-update add clamsmtpd default

/etc/init.d/postfix reload

все — антивирус должен проверять всю почту проходящую через Ваш почтовик

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

PS. Некоторая путаница возникает с переадресацией почты — самый простой вариант использование файла aliases — но до его использования в отличие от sendmail, ящик который должен быть переадресован должен быть все-таки создан в системе через cyradm -user cyrus -auth login -server localhost команда cm и не забыть что etc/postfix/main.cf

alias_maps = hash:/usr/local/etc/postfix/aliases

alias_database = hash:/usr/local/etc/postfix/aliases

Пред.: Подробная настройка iptablesВ началоУровень выше: Сетевые сервисыСлед.: Настройка vsftpd
В началоСетевые сервисы → Установка почтовой системы