Новости и статьи

Среда разработки встроенных систем или дистрибутивов на основе GNU/Linux. Здесь вы можете найти новости проекта, статьи и заметки, касающиеся разработки дистрибутива Radix cross Linux.

Postfix with Cyrus

17 мая 2016 г.

Данная статья посвящена инсталляции и настройке IMAP Mail сервера на Slackware 14.1 машине с использованием Cyrus-SASL, Postfix и Cyrus IMAP. Разумеется, мы должны иметь нормально установленный дистрибутив Slackware 14.1 со всеми сетевыми утилитами включая Cyrus SASL.

tags

Здесь мы отдаем предпочтение Cyrus SASL методу аутентификации и Cyrus IMAP для удаленной авторизации в качестве альтернативы для qpopper или dovecot.

Сначала мы инсталлируем необходимые утилиты и настроим работу сервера с использованием PLAIN-text пароля. Затем покажем как сконфигурировать все утилиты для использования SSL сертификатов при шифровании почтовых сообщений.

Updating Cyrus-SASL

Для того, чтобы наш почтовый сервер мог работать с PLAIN-text паролями, нам необходимо переконфигурировать пакет Cyrus-SASL. Мы воспользуемся исходным пакетом из дистрибутива.

Поскольку оригинальные скрипты требуют некоторой доработки, мы приготовили все необходимое на нашем FTP-сервере и далее будем ссылаться на него. Оригинальную статью документации Slackware, которая оперирует другими версиями пакетов, можно найти [здесь].

Возьмем исходные пакеты:

# cd /tmp
# mkdir cyrus-sasl
# cd cyrus-sasl
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/cyrus-sasl-2.1.23-glibc217-crypt.diff.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/cyrus-sasl-2.1.23.tar.xz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/cyrus-sasl.SlackBuild
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/cyrus-sasl.bad_elif.diff.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/doinst.sh.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/rc.saslauthd.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-sasl-2.1.23/slack-desc

Воспользуемся редактором для изменения скрипта сборки пакета:

# vim cyrus-sasl.SlackBuild

И добавим следующие управления сразу после  -–disable static

 --enable-plain \
 --disable-digest \

Соберем пакет:

# sh cyrus-sasl.SlackBuild

Прежде чем инсталлировать пакет, удалим из системы существующий:

# ( cd /var/log/packages ; removepkg cyrus-sasl-2.1.23-x86_64-1 )

Теперь мы можем инсталлировать собранный нами пакет:

# installpkg /tmp/cyrus-sasl-2.1.23-x86_64-5.txz

Installing Postfix

Исходный пакет и скрипт сборки можно взять на сайте http://slackbuilds.org : postfix( 2.11.4 ). Однако здесь мы воспользуемся нашим FTP-сервером.

# cd /tmp
# mkdir postfix
# cd postfix
# wget http://postfix.cs.utah.edu/source/official/postfix-2.11.4.tar.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/README
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/doinst.sh
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/postfix.SlackBuild
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/postfix.info
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/rc.postfix
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/postfix-2.11.4/slack-desc

Чтобы postfix использовал Cyrus IMAP для удаленной авторизации вместо dovecot, отредактируем скрипт сборки:

# vim postfix.Slackbuild

заменив в нем dovecot на cyrus как показано ниже.

SASL=${SASL:-cyrus}

Перед использованием скрипта сборки нам необходимо создать пользователя с именем "postfix" и две группы "postfix", "postdrop". Кроме того, так как пакет postfix содержит утилиту sendmail, надо позаботиться о сохранении объектного файла /usr/sbin/sendmail из пакета sendmail. Разумеется, предварительно надо остановить сам sendmail сервис:

# /etc/rc.d/rc.sendmail stop
# chmod a-x /etc/rc.d/rc.sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail.sendmail

Теперь можно создать группы и пользователя postfix:

# groupadd -g 200 postfix
# useradd -u 200 -d /dev/null -s /bin/false -g postfix postfix -G mail
# groupadd -g 201 postdrop

затем собрать и инсталлировать пакет:

# sh postfix.SlackBuild
# installpkg /tmp/postfix-2.11.4-x86_64-5.txz

Testing Postfix/SASL authentication

Перед тем как продолжить инсталляцию IMAP сервера, нам надо убедиться, что Postfix работает и мы можем аутентифицироваться с помощью SASL. Сделаем предварительные настройки Postfix и некоторые основные настройки SASL.

Первым делом добавим aliases и укажем Postfix-у, чтобы он читал их из файла /etc/postfix/aliases.

Воспользуемся редактором.

# vim /etc/postfix/main.cf

найдем и отредактируем переменные alias_maps и alias_database, чтобы получилось следующее:

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

Терерь создадим пользователя, который будет выступать нашим postmaster-ом. Этот пользователь также будет иметь возможность получать и отправлять письма.

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

bash-4.2# adduser

Login name for new user []: postmaster

User ID ('UID') [ defaults to next available ]: <press ENTER>

Initial group [ users ]: 200
Additional UNIX groups:

Users can belong to additional UNIX groups on the system.
For local users using graphical desktop login managers such
as XDM/KDM, users may need to be members of additional groups
to access the full functionality of removable media devices.

* Security implications *
Please be aware that by adding users to additional groups may
potentially give access to the removable media of other users.

If you are creating a new user for remote shell access only,
users do not need to belong to any additional groups as standard,
so you may press ENTER at the next prompt.

Press ENTER to continue without adding any additional groups
Or press the UP arrow key to add/select/edit additional groups
: <press ENTER>

Home directory [ /home/postmaster ] <press ENTER>

Shell [ /bin/bash ] /bin/false
- Warning: /bin/false is not in /etc/shells (potential problem using FTP)
  Do you wish to change the shell ? (Y/n)  n

Expiry date (YYYY-MM-DD) []: <press ENTER>

New account will be created as follows:

---------------------------------------
Login name.......:  postmaster
UID..............:  [ Next available ]
Initial group....:  200
Additional groups:  [ None ]
Home directory...:  /home/postmaster
Shell............:  /bin/false
Expiry date......:  [ Never ]

This is it... if you want to bail out, hit Control-C.  Otherwise, press
ENTER to go ahead and make the account.

Creating new account...

Changing the user information for postmaster
Enter the new value, or press ENTER for the default
       Full Name []: Postfix master
       Room Number []: <press ENTER>
       Work Phone []: <press ENTER>
       Home Phone []: <press ENTER>
       Other []: <press ENTER>
Changing password for psuser
Enter the new password (minimum of 5 characters)
Please use a combination of upper and lower case letters and numbers.
New password: <enter the password for postmaster>
Re-enter new password: <enter the password for postmaster>
passwd: password changed.

Account setup complete.

bash-4.2#

Теперь мы должны отредактировать /etc/postfix/aliases согласно нашему примеру:

root  : postmaster
office: postmaster

и обновить базу данных aliases используя следующую команду:

# postalias hash:/etc/postfix/aliases

Настало время, сделать важные настройки перед тем, как мы сможем проверить работу Postfix.

# vim /etc/postfix/main.cf

myhostname = mx.yourdomain.tld
mydomain = yourdomain.tld
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8

Теперь сконфигурируем Postfix для аутентификации пользователей через SASL:

# mkdir /etc/sasl2
# cd /etc/sasl2
# touch smtpd.conf
# vim smtpd.conf 

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Для того, чтобы указать Postfix-у о необходимости аутентифицировать пользователей используя SASL, отредактируем файл /etc/postfix/main.cf добавив в него следующие строки:

smtpd_sasl_auth_enable = yes   
broken_sasl_auth_clients = yes  
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Запустим демонов и протестируем нашу конфигурацию:

# saslauthd -a shadow
# postfix start

Для начала приготовим пароль пользователя, от имени которого мы будем проверять наш Mail-сервер с удаленной машины.

Допустим наш пользователь уже аутентифицировался на Mail-сервере по SSH, тогда выполнив команду:

printf 'user\0user\0password' | mmencode

где 'user' – его имя, а 'password'– его пароль, он получит вывод похожий на следующий:

Y4R0QYxpcuHsFBRbbGjnPHIwYjB0MWrpMTk7La==

Именно этот текст мы и будем использовать для аутентификации с удаленной машины.

Зайдем с другой машины нашей сети на Mail-сервер используя telnet порт 25:

$ telnet mx.yourdomain.tld 25
Trying 192.168.0.3...
Connected to mx.yourdomain.tld.
Escape character is '^]'.
220 mx.yourdomain.tld ESMTP Postfix

Введем следующую команду для получения доступа:

AUTH PLAIN Y4R0QYxpcuHsFBRbbGjnPHIwYjB0MWrpMTk7La==

Если ранее мы все сделали правильно, сервер ответит:

235 2.7.0 Authentication successful

Теперь можно отослать тестовое письмо. Для этого введем имя отправителя:

MAIL FROM: <user@yourdomain.tld>
250 2.1.0 Ok

Имя получателя:

RCPT TO: <user@someserver.com>
250 2.1.5 Ok

Отметим начало текста:

DATA
354 End data with <CR><LF>.<CR><LF>

Напишем тестовое послание:

Hi,

This is a test mail from my server.

Завершим послание, поставив вначале строки точку, после которой сразу введем <Enter>;

.<press ENTER>
250 2.0.0 Ok: queued as 1BD35560078

Отпустим Mail-сервер:

QUIT
221 2.0.0 Bye
Connection closed by foreign host.
$

Installing Mail Delivery and Cyrus IMAP

Убедившись в работоспособности Mail-сервера, можно приступать к сборке Cyrus IMAP.

Возьмем исходный пакет:

# cd /tmp
# mkdir cyrus-imapd
# cd cyrus-imapd
# wget http://cyrusimap.org/releases/cyrus-imapd-2.5.3.tar.gz
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/README
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/README.SLACKWARE
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/cyrus-imapd.SlackBuild
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/cyrus-imapd.info
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/doinst.sh
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/imapd.conf
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/rc.cyrus-imapd
# wget ftp://ftp.radix.pro/slackware/Postfix-with-Cyrus-14.1/source/n/cyrus-imapd-2.5.3/slack-desc

Создадим пользователя "cyrus", который станет администратором почтовых ящиков на Mail-сервере:

# groupadd -g 238 cyrus
# useradd -d /var/imap -s /bin/sh -u 238 -g 238 cyrus -G mail

Соберем пакет:

# sh cyrus-imapd.SlackBuild
# installpkg /tmp/cyrus-imapd-2.5.3-x86_64-5.txz

Создадим необходимые каталоги и присвоим им соответствующие права доступа:

# mkdir -m 750 -p /var/imap /var/spool/imap /var/sieve
# chown cyrus:mail /var/imap /var/spool/imap /var/sieve

Проведем инициализацию:

# su - cyrus
# /usr/doc/cyrus-imapd-2.5.3/tools/mkimap
# exit

Далее, отредактируем файл /etc/imapd.conf добавив в него следующие строки:

sasl_mech_list: PLAIN LOGIN
allowplaintext: yes

Найдем в файле /etc/postfix/main.cf строку, где задается значение переменной mailbox_transport и раскоментируем ее так, чтобы получилось следующее:

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

Не забудем дать пользователю "cyrus" пароль:

# passwd cyrus

И создадим почтовый ящик для нашего postmaster-a:

# cyradm --user cyrus --server localhost --auth plain
localhost> cm user.postmaster
localhost> lm
localhost> quit

На данном этапе мы уже имеем работоспособный Mail-сервер с PLAIN аутентификацией.

Управлять почтовыми ящиками пользователей достаточно просто используя утилиту cyradm и работая от имени пользователя "cyrus". Так, например, если вы хотите ограничить размер почтового ящика пользователя с именем "some_user", при его создании, воспользуйтесь следующими командами:

# cyradm --user cyrus --server localhost --auth plain
localhost> cm user.some_user
setquota user.some_user 20000
localhost> lm
localhost> quit

Здесь число 20000 ограничивает объем почтового ящика двадцатью мегабайтами (20 MB).

Далее мы займемся созданием сертификатов и настройкой Postfix для использования STARTTLS.

SSL/TLS Postfix and Cyrus

Начнем с создания сертификатов. Поскольку через год нам придется вспомнить всю следующую процедуру, разберем ее подробно.

Заметим здесь, что перед началом создания сертификатов может понадобиться переименовать каталог /etc/ssl/demoCA, который содержит прошлогодние данные:

 # cd /etc/ssl
 # mv demoCA demoCA.old

Как всегда, наш ввод будем выделять жирным шрифтом. Разумеется, название организации, название подразделения, страну и адрес надо указать актуальный для вас.

# cd /etc/ssl
# misc/CA.pl -newca

CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
.++++++
...............................................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase: <здесь надо ввести приготовленный заранее пароль>
Verifying - Enter PEM pass phrase: <здесь надо повторить пароль>
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [Some-State]: Saint-Petersburg
Locality Name (eg, city) []: Saint-Petersburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Radix Pro Ltd
Organizational Unit Name (eg, section) []: Radix System
Common Name (e.g. server FQDN or YOUR name) []: imap.radix.pro
Email Address []: support@radix.pro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <вводим фразу, например, ответ на вопрос: девичья фамилия матери?>
An optional company name []: Radix Pro Ltd
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: <здесь надо ввести приготовленный заранее пароль>
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 17508654093838558911 (0xf2fb3c222e6fa6bf)
        Validity
            Not Before: May 24 15:12:41 2015 GMT
            Not After : May 23 15:12:41 2018 GMT
        Subject:
            countryName               = RU
            stateOrProvinceName       = Saint-Petersburg
            organizationName          = Radix Pro Ltd
            organizationalUnitName    = Radix System
            commonName                = imap.radix.pro
            emailAddress              = support@radix.pro
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                7E:71:37:24:F7:B2:38:FA:0F:9E:18:3D:EF:D5:1A:D6:7B:D4:14:D9
            X509v3 Authority Key Identifier: 
                keyid:7E:71:37:24:F7:B2:38:FA:0F:9E:18:3D:EF:D5:1A:D6:7B:D4:14:D9

            X509v3 Basic Constraints: 
                CA:TRUE
Certificate is to be certified until May 23 15:12:41 2018 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated
#

Теперь создадим приватный RSA ключ.

# openssl req -new -nodes -keyout mailkey.pem -out mailreq.pem -days 36500

Generating a 1024 bit RSA private key
...........................++++++
.................................................................................++++++
writing new private key to 'mailkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [Some-State]: Saint-Petersburg
Locality Name (eg, city) []: Saint-Petersburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Radix Pro Ltd
Organizational Unit Name (eg, section) []: Radix System
Common Name (e.g. server FQDN or YOUR name) []: imap.radix.pro
Email Address []: support@radix.pro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <вводим фразу, например, ответ на вопрос: девичья фамилия матери?>
An optional company name []: Radix Pro Ltd
#

Далее создадим подписанный сертификат.

# openssl ca -out mail_signed_cert.pem -infiles mailreq.pem

Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: <здесь надо ввести приготовленный заранее пароль>
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 17508654093838558912 (0xf2fb3c222e6fa6c0)
        Validity
            Not Before: May 24 15:38:49 2015 GMT
            Not After : May 23 15:38:49 2016 GMT
        Subject:
            countryName               = RU
            stateOrProvinceName       = Saint-Petersburg
            organizationName          = Radix Pro Ltd
            organizationalUnitName    = Radix System
            commonName                = imap.radix.pro
            emailAddress              = support@radix.pro
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                0A:ED:43:E2:92:3A:38:0A:3E:81:C6:59:4E:AC:4D:AC:D8:DD:A6:38
            X509v3 Authority Key Identifier: 
                keyid:7E:71:37:24:F7:B2:38:FA:0F:9E:18:3D:EF:D5:1A:D6:7B:D4:14:D9

Certificate is to be certified until May 23 15:38:49 2016 GMT (365 days)
Sign the certificate? [y/n]: y


1 out of 1 certificate requests certified, commit? [y/n] y
Write out database with 1 new entries
Data Base Updated
#

Если вместо ответа:

Write out database with 1 new entries
Data Base Updated
#

Вы получите:

failed to update database
TXT_DB error number 2
#

Очистите файл demoCA/index.txt, например, с помощью команды:

ls 2> demoCA/index.txt

И повторите процедуру создания подписанного сертификата mail_signed_cert.pem.

Теперь надо распределить сертификаты и ключи по папкам, присвоив им соответствующие аттрибуты доступа:

 # cp /etc/ssl/mailkey.pem /etc/postfix
 # cp /etc/ssl/mail_signed_cert.pem /etc/postfix
 # chown root /etc/postfix/mailkey.pem
 # chmod 400 /etc/postfix/mailkey.pem
 # cp /etc/ssl/demoCA/cacert.pem /etc/postfix

Далее надо указать Postfix-у, где искать сертификаты и ключи.

Для этого, в конец файла /etc/postfix/main.cf добавим следующие строки:

smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/mailkey.pem
smtpd_tls_cert_file = /etc/postfix/mail_signed_cert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem

Кроме того, необходимо найти в файле /etc/postfix/master.cf строку, содержащую символы 'smtps inet n - n - - smtpd' и, раскоментировать ее и три следующие строки удалив символ '#' так, чтобы получилось:

smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

На этом наша работа по настройке Mail-сервера не заканчивается и, мы должны научить IMAP демон использовать STARTTLS.

Configure IMAP to use STARTTLS

Успокаивает то, что далее нам придется вводить все меньше данных и паролей:

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

Generating a 1024 bit RSA private key
.....................................................++++++
..++++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [Some-State]: Saint-Petersburg
Locality Name (eg, city) []: Saint-Petersburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Radix Pro Ltd
Organizational Unit Name (eg, section) []: Radix System
Common Name (e.g. server FQDN or YOUR name) []: imap.radix.pro
Email Address []: support@radix.pro

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <вводим фразу, например, ответ на вопрос: девичья фамилия матери?>
An optional company name []: Radix Pro Ltd
#

Затем:

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

writing RSA key
#

И наконец:

# openssl x509 -in req.pem -out ca-cert -req -signkey new.key.pem -days 36500

Signature ok
subject=/C=RU/ST=Saint-Petersburg/L=Saint-Petersburg/O=Radix Pro Ltd/OU=Radix
 System/CN=imap.radix.pro/emailAddress=support@radix.pro
Getting Private key
#

Распределим полученные файлы по каталогам:

# cp new.key.pem /var/imap/server.pem
# rm new.key.pem
# cat ca-cert >> /var/imap/server.pem
# chown cyrus:mail /var/imap/server.pem
# chmod 600 /var/imap/server.pem

И настроим, наконец IMAP демон на работу с сертификатами, добавив в конец файла /etc/imapd.conf следующие строки:

tls_client_ca_file: /var/imap/server.pem
tls_server_cert: /var/imap/server.pem
tls_server_key: /var/imap/server.pem

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

# echo tls_client_ca_file: /var/imap/server.pem >> /etc/imapd.conf
# echo tls_server_cert: /var/imap/server.pem >> /etc/imapd.conf
# echo tls_server_key: /var/imap/server.pem >> /etc/imapd.conf

System Start Scripts

Для того, чтобы наши демоны стартовали после включения питания машины, можно добавить следующие строки в файл /etc/rc.d/rc.local.

# Starting saslauthd daemon
if [ ! -r /var/state/saslauthd/saslauthd.pid ]; then
  echo "Starting SASL authentication daemon:  /usr/sbin/saslauthd -a shadow"
  /usr/sbin/saslauthd -a shadow
fi

# Starting IMAP daemon
if [ -x /usr/libexec/cyrus/master ]; then
  echo "Starting Cyrus IMAP daemon:  /usr/libexec/cyrus/master"
  /etc/rc.d/rc.cyrus-imapd start
fi

# Starting POSTFIX daemon
/etc/rc.d/rc.postfix start

Но, поскольку запуск и остановка демона saslauthd уже предусмотрена в скриптах /etc/rc.d/rc.M и /etc/rc.d/rc.6, соответственно, мы можем отредактировать системные скрипты следующим образом.

Файл /etc/rc.d/rc.M :
# Start the SASL authentication server.  This provides SASL
# authentication services for sendmail:
if [ -x /etc/rc.d/rc.saslauthd ]; then
  . /etc/rc.d/rc.saslauthd start
fi

# Starting IMAP daemon
if [ -x /etc/rc.d/rc.cyrus-imapd ]; then
  . /etc/rc.d/rc.cyrus-imapd start
fi

# Starting POSTFIX daemon
if [ -x /etc/rc.d/rc.postfix ]; then
  . /etc/rc.d/rc.postfix start
fi

# Start the sendmail daemon:
if [ -x /etc/rc.d/rc.sendmail ]; then
  . /etc/rc.d/rc.sendmail start
fi
Файл /etc/rc.d/rc.6 :
# Shut down the SSH server:
if [ -x /etc/rc.d/rc.sshd ]; then
  /etc/rc.d/rc.sshd stop
fi

# Shut down the POSTFIX daemon
if [ -x /etc/rc.d/rc.postfix ]; then
  /etc/rc.d/rc.postfix stop
fi

# Shut down the IMAP daemon
if [ -x /etc/rc.d/rc.cyrus-imapd ]; then
  /etc/rc.d/rc.cyrus-imapd stop
fi

# Shut down the SASL authentication daemon:
if [ -x /etc/rc.d/rc.saslauthd ]; then
  /etc/rc.d/rc.saslauthd stop
fi

Здесь строки, выделенные жирным шрифтом, добавлены нами.

Разумеется для правильной работы скриптов, нам необходимо правильно определить аттрибуты файлов:

# chmod a-x /etc/rc.d/rc.sendmail
# chmod a+x /etc/rc.d/rc.saslauthd
# chmod a+x /etc/rc.d/rc.cyrus-imapd
# chmod a+x /etc/rc.d/rc.postfix

Bibliography

  1. Postfix The Definitive Guide, Kyle D. Dent, O'Reilly
  2. Managing IMAP, Dianna Mullet & Kevin Mullet, O'Reilly
  3. Official Postfix Documentation: Postfix
  4. Slackware Documentation: Postfix with Cyrus.