linux007 (linux007) wrote,
linux007
linux007

Установка почтового сервера

Для установки почтового сервера я воспользовался статьёй из сети

Настраиваем почтовый сервер на Debian

28 Фев 2007
Автор : Александр Кузьмицкий

E-mailЭлектронная почта зародилась еще тогда, когда не было Интернета, и сразу же вошла в жизнь людей как неотъемлемый атрибут современности. Сейчас послать письмо по e-mail сможет любой школьник, однако далеко не любой сможет настроить всю сложную систему, которая лежит в основе процесса отправки/получения сообщений. Обычному человеку или начинающему системному администратору может показаться, что электронная почта - это некий нерушимый монолит, одна или две программы принимающие и отправляющие сообщения. В самых простейших случаях так и есть, однако та почта, с которой большинство из нас сталкивается каждый день, является чем-то большим.

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

Ситуация во многом осложняется тем, что практически всегда человек хочет получить все и сразу, однако спустя неделю поиска документации и руководств, десятка проб и ошибок, все приходит к одному: чтению технической документации с сайта разработчика почтового сервера и настройке всех звеньев по-отдельности. Мы хотим несколько облегчить вам задачу, приведя пример настройки почтовой системы на базе операционной системы Debian Etch со следующим набором приложений: Postfix, saslauthd, sasldb2, cyrus-imap, amavisd-new, spamassasin, clamav. Вкратце поясним чем занимается каждое приложение:

  • Postfix-SMTP - сервер, открывающий 25 порт и служащий для приема и пересылки почты;
  • Saslauthd - сервис, занимающийся авторизацией пользователей;
  • Saslbd2 - база данных, в которой хранятся учетные записи пользователей;
  • Cyrus-imap - IMAP, POP3, NNTP сервер, который будет получать почту от postfix, раскладывать ее по нужным папкам и предоставлять к ней доступ пользователю;
  • Amavisd-new – антивирус-посредник между почтовым сервером и антиспамами или антивирусами;
  • Spamassasin - мощный антиспам;
  • Clamav - антивирус;

Этого всего достаточно для того, чтобы построить надежный защищенный почтовый сервер. Оговоримся, что для полного понимания дальнейших действий нужен некий опыт работы в операционных системах Linux, и будет вообще замечательно, если этот опыт был основан на изучении Debian/Ubuntu/MEPIS.

Установка

Приступим к установке. Операционная система Debian была выбрана не случайно. За многие годы она показала себя одной из наиболее надежных и стабильных. К тому же версия Etch, которую мы будем устанавливать, содержит все необходимое нам ПО и оно ещё ни морально ни технически не успело устареть.

Предположим, что у вас уже имеется дистрибутив на CD/DVD дисках. В случае установки по сети сама процедура инсталляции может несколько отличаться. Вставили компакт-диск, выставили загрузку с CD.

К слову, в Debian Etch существует графический инсталлятор, который на момент написания статьи находился в стадии RC2, однако для ускорения самого процесса установки мы им пользоваться не будем. Для экстремаллов и "true-сисадминов" подскажем, что вырианты установки находятся в меню по нажатию клавиши F3.

Выбираем язык и нажимаем [Enter].

Выбираем страну.

Выбираем раскладку. Здесь кому как-удобнее. Если планируется печатать русскими символами - ставьте русскую, но мы бы порекомендовали здесь ничего не менять. На следующем экране вам потребуется ввести IP-адрес компьютера. Если у вас настроен DHCP, система получит адрес автоматически.

Дальше вам понадобится ввести имя  и домен вашего будущего сервера.

Подготавливаем жесткий диск для установки системы. Параметры разделов-самостоятельное решение каждого.

Мы вручную разбили жесткий на два раздела.

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

При выборе необходимых вариантов системы не следует пользоваться принципом "пускай будет". Все необходимое ПО мы установим без помощи мастера.

Инсталлятор задаст ещё несколько вопросов, с ответами на которые вы справитесь без особого труда.

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

Наружные работы

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

apt-get install ssh

После этого подключаемся любым ssh-клиентом на 22 порт нашего серера, вводим имя и пароль администратора. Также рекомендуем установить Midnight Commander для упрощения работы с файлами и редактирования конфигурационных файлов.

apt-get install mc

Добавим остальные установочные диски в список доступных источников пакетов командой.

apt-cdrom

Выполняем эту команду для каждого диска. При желании можно воспользоваться сетевыми источниками пакетов и security updates с сайта Debian.

Для этого снова открываем и добавляем в него следующие строки

mcedit /etc/apt/sources.list:
deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

Далее обновим список пакетов и саму систему.

apt-get update
apt-get upgrade

На этом все подготовительные мероприятия считаем законченными.

Postfix

Установим нужные для работы почтового сервера пакеты.

apt-get install postfix libsasl2 libsasl2-modules sasl2-bin cyrus-imapd-2.2 cyrus-pop3d-2.2 cyrus-admin-2.2

Во время первоначальной настройки postfix укажите конфигурацию для Интернет-сайта (Internet Site). На вопрос об имени почтового сервера-оставьте вариант по-умолчанию или укажите свой. В нашем случае это было mailserver.test.ru

Настроим сервер авторизации saslauthd на использование базы данных паролей sasldb2. Для этого отредактируем файл /etc/default/saslauthd:

mcedit /etc/default/saslauthd:
START=yes
MECHANISMS="sasldb"

Запустим сервис командой:

/etc/init.d/saslauthd start

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

mailserver:~# saslpasswd2 test
Password:
Again (for verification):
mailserver:~# sasldblistusers2
test@mailserver: userPassword
mailserver:~# testsaslauthd -u test -p test

Если в результате этих манипуляций вы получили сообщение "0: OK "Success.", значит все в порядке и можно продолжать. Если же авторизация не прошла - смотрите файл /var/log/auth.log и повторяйте, повторяйте и ещё раз повторяйте все шаги, пока не получится нужный результат.

У почтового сервера postfix есть одна особенность - после запуска он работает в chroot окружении, которое находится в папке var/spool/postfix/.

mailserver:~# ls -al /var/spool/postfix/
total 76
drwxr-xr-x 19 root    root     4096 Feb 12 16:27 .
drwxr-xr-x  8 root    root     4096 Feb 12 16:26 ..
drwx------  2 postfix root     4096 Feb 12 16:27 active
drwx------  2 postfix root     4096 Feb 12 16:27 bounce
drwx------  2 postfix root s    4096 Feb 12 16:27 corrupt
drwx------  2 postfix root     4096 Feb 12 16:27 defer
drwx------  2 postfix root     4096 Feb 12 16:27 deferred
drwxr-xr-x  2 root    root     4096 Feb 12 16:27 etc
drwx------  2 postfix root     4096 Feb 12 16:27 flush
drwx------  2 postfix root     4096 Feb 12 16:27 hold
drwx------  2 postfix root     4096 Feb 12 16:27 incoming
drwxr-xr-x  2 root    root     4096 Feb 12 16:27 lib
drwx-wx--T  2 postfix postdrop 4096 Feb 12 16:27 maildrop
drwxr-xr-x  2 postfix root     4096 Feb 12 16:27 pid
drwx------  2 postfix root     4096 Feb 12 16:27 private
drwx--s---  2 postfix postdrop 4096 Feb 12 16:27 public
drwx------  2 postfix root     4096 Feb 12 16:27 saved
drwx------  2 postfix root     4096 Feb 12 16:27 trace
drwxr-xr-x  3 root    root     4096 Feb 12 16:25 usr

Это сделано из соображений безопасности, однако несколько усложняет сам процесс настройки. Так как postfix общается с остальными приложениями в большинстве случаев посредством socket'ов, и выше своего chroot окружения выбраться не может, то эти сокеты приходится переносить в доступную postfix-папку.

Учитывая то, что для авторизации пользователей postfix будет использоваться демон saslauthd, нам нужно перенести его socket в рабочую директорию нашего сервера /var/spool/postfix/. Самый простой способ сделать это заключается в монтировании в нужную папку директории с уже созданным сокетом демона saslauthd.

Делается это редактированием файла /etc/fstab.

mcedit /etc/fstab:
/var/run/saslauthd    /var/spool/postfix/var/run/saslauthd    none      rw,bind    0 0

Не забудьте поставить [Enter] после последней строки. Также нужно не забыть создать папку, куда мы смонтируем сокет демона авторизации.

mkdir -p /var/spool/postfix/var/run/saslauthd
mount /var/run/saslauthd

Сейчас сконфигурируем postfix для использования sasl авторизации.

mcedit /etc/postfix/main.cf:
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_authenticated_header = yes
smtpd_sasl_application_name = smtpd

Существует и упрощенный вариант редактирования этого файла командой postconf –e "smtpd_sasl_auth_enable = yes" и т.д.Сейчас мы запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Перезапустим наш postfix сервер и внимательно просмотрим следующие файлы на предмет ошибок:

  • /var/log/mail.err
  • /var/log/mail.info
  • /var/log/mail.warn
  • /var/log/mail.log.

/etc/init.d/postfix restart
tail /var/log/mail.err
tail /var/log/mail.info
tail /var/log/mail.warn
tail /var/log/mail.log

Если все чисто, сухо и гладко - обратимся к утитиле telnet, для того, чтобы подключиться к нашему серверу.

mailserver:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.test.ru ESMTP Postfix (Debian/GNU)
EHLO drivermania.ru
250-mailserver.test.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME250 DSNQUIT
Connection closed by foreign host.

Если у вас нечто похожее - продолжаем, если же подключение не удалось - проверяем где вы вставили лишний пробел или нечаянно удалили символ.

Для того, чтобы "подружить" saslauthd и postfix необходимо выполнить следующее:

adduser postfix sasl

Оговоримся, что мы не будем вытанцовывать с бубном для настройки шифрования. Если кому-то это будет интересно, то найти необходимую информацию не составит большого труда и экспериментировать на уже работающей базе будет проще. Сейчас же продолжим наше руководство и расскажем как предоставить IMAP4/POP3 доступ к почтовому ящику.

Cyrus-imapd

Cyrus - это мощный набор POP3/NNTP/IMAP и некоторых других демонов для создания полноценных сервисов работы с электронной почтой. Официальный сайт проекта находится здесь: http://cyrusimap.web.cmu.edu/. В нашем случае cyrus будет заниматься получением почты от postfix, раскладыванием ее по папкам и предоставлению к ней доступа пользователям. Отредактируем файл /etc/imapd.conf.

mcedit /etc/imapd.conf :
admins: cyrus
allowplaintext: yes
sasl_mech_list: PLAIN
sasl_pwcheck_method: saslauthd auxprop
sasl_auxprop_plugin: sasldb

Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:

mcedit /etc/fstab :
/var/run/cyrus  /var/spool/postfix/var/run/cyrus        none    rw,bind 0 0

Не забываем создать папки для cyrus.

mkdir -p /var/spool/postfix/var/run/saslauthd
mkdir -p /var/spool/postfix/var/run/cyrus
mount /var/spool/postfix/var/run/saslauthd
mount /var/spool/postfix/var/run/cyrus

И выполнить команду:

mount /var/run/cyrus

Сейчас предоставим возможность cyrus забирать почту у postfix. Отредактируем файл /etc/postfix/main.cf:

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

Добавим почтовый сервер в группу lmtp:

addgroup lmtpadduser postfix lmtp

И выполним следующее:

dpkg-statoverride --remove /var/run/cyrus/socket
dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket

Добавим еще одну опцию:

local_recipient_maps =

В случае с pam-авторизацией по логинам и паролям системных пользователей все cработало бы без проблем. Но когда имена и пароли хранятся в формате, отличном от системного, необходимо указать данную опцию. Она означает "принимать письма для любого адресата". Это, конечно, не лучший выход, однако лучшего пока найти не удалось.Добавим пользователя cyrus в нашу базу учетных записей:

saslpasswd2 -c cyrus

Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:

/etc/init.d/postfix start
/etc/init.d/cyrus2.2 restart
/etc/init.d/saslauthd restart

Если вы без ошибок сделаете все, что было описано выше, то теоретически к этому моменту уже можете принимать и отправлять письма, создавать и удалять папки на IMAP-сервере, устанавливать квоты и права доступа на папки средствами утилиты cyradm.К примеру, можно создать скрипт, который будет создавать пользователю папки Sent, Trash, Drafts, Spam средствами утилиты cyradm.Так как все дальнейшие действия по настройке в целях тестирования потребуют отсылать и принимать почту, приведем краткую инструкцию по созданию почтовых аккаунтов:

saslpasswd2 –c <имя пользователя>
cyradm –user cyrus localhost
localhost>cm user.<имя пользователя>
localhost>cm user.<имя пользователя>.INBOX
localhost>cm user.<имя пользователя>.Sent
localhost>cm user.<имя пользователя>.Draft
localhost>cm user.<имя пользователя>.Trash

При желании, можно задать квоты на количество места в папках и другие параметры, с которыми можно познакомиться набрав "?" или "help" в утилите cyradm.В настоящий момент мы имеем следующую связку:

Собственно, я сначала попробовал на пустом сервере, потом на боевом - вроде всё получилось. Пару моментов только: библитека libsasl2 сейчас заменена на libsasl2-2. И всё заработало.