Итак, нам нужен почтовый сервер и сделаем его на уже названных Postfix и Dovecot. Почему они:

  • Хорошо мне известны в плане настройки
  • Присутствуют в хранилищах
  • Отлично себя зарекомендовали за …дцать лет

Установка и настройка Postfix

Для начала, мы установим Postfix в самой простой вариации. То есть без шифрования и так далее, просто база. Порт SMTP, разумеется, 25.

1
yum -y install postfix

Теперь конфигурируем сервер

1
mcedit /etc/postfix/main.cf

и изменим/добавим следущее:

  • строка 75: раскоментируем и укажем имя хоста
1
myhostname = wikiadmin.net
  • на строке 83: опять раскоментируем и укажем имя домена (хост не обязательно должен совпадать с доменом. Для сайта wikiadmin.net почта может хостится на mail.wikiadmin.net, например)
1
mydomain = wikiadmin.net
  • раскомментируем строку 99
1
myorigin = $mydomain
  • строка 116, меняем
1
inet_interfaces = all
  • строка 164, добавим
1
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
  • на строке 264 раскомментируем и добавим ваши сети (для хождения почты без авторизации, если сеть известна)
1
mynetworks = 127.0.0.0/8, 10.0.0.0/24
  • на строке 419 укажем Maildir. Мне нравится то, что почта хранится в виде файлов в домашней директории пользователя: легко найти, перенести, обработать (архивация, проверка антивиром) и так далее. В общем, дело привычки.
1
home_mailbox = Maildir/
  • строка 574, добавляем

smtpd_banner = $myhostname ESMTP

  • и теперь добавим в конец конфигурации ограничение на письмо (10М), на ящик (1G) и авторизацию через Dovecot
1
2
3
4
5
6
7
8
message_size_limit = 10485760
mailbox_size_limit = 1073741824
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
  • Теперь перезагрузка сервиса и включение в автозапуск
1
2
systemctl restart postfix
systemctl enable postfix

Настройка Dovecot как POP/IMAP сервер.

Итак, настраиваем и доступ к почте с помощью Dovecot. Порт (TCP) для POP 110, для IMAP 143

  • Установка
1
yum -y install dovecot

Редактируем конфигурацию. Начнём с основного файла dovecot.conf

1
vi /etc/dovecot/dovecot.conf
  • раскомментируем 24 строчку, тем самым указав включить поддержку POP и IMAP
1
protocols = imap pop3 lmtp
  • Если не используете IPv6, раскомментируем и эту строчку
1
listen = *

Теперь исправим файл /etc/dovecot/conf.d/10-auth.conf. На 10 строке раскомментируем и исправим

1
disable_plaintext_auth = no

Укажем способы аутентификации

1
auth_mechanisms = plain login

Теперь в файле 10-mail.conf

1
mcedit /etc/dovecot/conf.d/10-mail.conf

на 30 строке снова снимем комментарий и укажем где почта пользователей (выше в Postfix мы определили, что она будет в домешней директории пользователей)

1
mail_location = maildir:~/Maildir

Теперь редактируем файл, который подскажет Dovecot, с правами какого пользователя работать

1
mcedit /etc/dovecot/conf.d/10-master.conf

на строках 96-98 подправим до такого состояния:

1
2
3
4
5
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}

и, пока мы не дошли до SSL, отключим это как таковое, отредактировав файл /etc/dovecot/conf.d/10-ssl.conf на строке 8

1
ssl = no

Стартуем этот сервер почты и добавляем в автозапуск

1
2
systemctl start dovecot
systemctl enable dovecot

Всё готово, теперь можно подключать клиент. Базовый вариант почты работает. Без антиспама и так далее, но она есть….

Конфигурируем SSL-работу

Для чего это нужно: безопасность от перехвата данных. К тому же будут доступны дополнительные порты, что тоже неплохо, я уже встречал места, где 25, 110 и 143 порты были заблокированы провайдером. (Меня это не сильно задело, так как использую часто OpenVPN, а вот пользователей озадачило.) Для сведенья по TCP портам: SMTPS будет доступен на 465, POPS на 995, а IMAPS на 993.

Первый шаг: настраиваем SSL. Об этом можно прочитать на страницах этого сайта, да и в сети Интернет полно подобных инструкций.

Предположим, что сертификаты есть и теперь укажем их в /etc/postfix/main.cf, добавив в конце:

1
2
3
4
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/wikiadmin.crt
smtpd_tls_key_file = /etc/pki/tls/certs/wikiadmin.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

Разумеется, wikiadmin.crt и wikiadmin.key - ваши сертификаты.

Теперь редактируем /etc/postfix/master.cf, раскомментировав строки 26-28

1
2
3
smtps       inet   n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes

Теперь редактируем /etc/dovecot/conf.d/10-ssl.conf, где на строке 8 мы убирали поддержку SSL. Теперь возвращаем.

1
ssl = yes

На строке 14-15 указываем уже упомянутые ранее сертификаты

1
2
ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/certs/server.key

Теперь перегружаем postfix и dovecot

1
2
systemctl restart postfix
systemctl restart dovecot

Добавляем виртуальные, дополнительные домены. (Set Virtual Domain)

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

Итак, вводные данные: * основной домен wikiadmin.net * дополнительный домен dpld.ru * в обоих случаях есть почта admin@домен, то есть admin@wikiadmin.net и admin@dpld.ru. * пользователей оставим такими: для admin@wikiadmin.net будет пользователь admin, а для admin@dpld.ru будет пользователь admin.dpld

В файле /etc/postfix/main.cf в конце мы добавим строки:

1
2
virtual_alias_domains = dpld.ru
virtual_alias_maps = hash:/etc/postfix/virtual

Здесь мы указали дополнительный домен и где нам искать соответствие почты и пользователя. Теперь отредактирум файл /etc/postfix/virtual, где добавим это самое соответствие.

1
admin@dpld.ru admin.dpld

Правильно, мы указали hash, поэтому нам нужно будет сделать “карту”. Поэтому, после внесения изменений в virtual, пересоздадим файл virtual.db

1
postmap /etc/postfix/virtual

И применяем изменения, перезагрузив почту

1
systemctl reload postfix

Готово, проверяем на клиентах.