Настройка почтового сервера Postfix + MySQL, Dovecot

Настроим почтовый сервер (MTA) и агент доставки электронной почты (MDA) под Ubuntu Server. В качестве MTA будет работать Postfix (SMTP-сервер) с хранением списка аккаунтов пользователей в БД MySQL в качестве MDA – Dovecot (POP3/IMAP сервер).

Сравнение разных MTA: Postfix QMail Sendmail Exim.

Архитектура современных почтовых систем:

Рисунок взят тут.

Для полноценной работы почтового сервера нужна MX запись в DNS настройка bind-сервера.

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

echo "server" > /etc/hostnamehostname -F /etc/hostname

Обновим пакеты

sudo apt-get update && sudo apt-get upgrade

Установим Postfix Dovevot MySQL OpenSSL mutt mailx rcconf

sudo apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common
dovecot-imapd dovecot-pop3d postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql
sasl2-bin libpam-mysql openssl bsd-mailx mutt rcconf

В окне Postfix Configuration выбираем Internet Site для полного доменного имени (FQDN) указываем hostname + domain например server.test.ua.

Сделаем первоначальную настройку mysql

mysql_secure_installation

Добавим mysql в автозагрузку (если нету)

# проверим статусsudo rcconf --list | grep mysql# добавим в автозагрузку sudo rcconf --on mysql

Подключимся к mysql и создадим базу для пользователей и доменов

mysql -uroot -pCREATE DATABASE postfix;USE postfix;

Создадим отдельного mysql-пользователя mailer для работы с базой

GRANT SELECT INSERT UPDATE DELETE ON postfix.* TO 'mailer'@'localhost' 
IDENTIFIED BY '_password_';FLUSH PRIVILEGES;

Создадим таблицу для хранения виртульных доменов

CREATE TABLE domains (domain varchar(50) NOT NULL PRIMARY KEY (domain) );

Создаим таблицу для хранения редиректов с ящика на ящик (forwarding)

CREATE TABLE forwardings (source varchar(80) NOT NULL destination TEXT NOT NULL 
PRIMARY KEY (source) );

Создаим таблицу для хранения пользователей

CREATE TABLE users (email varchar(80) NOT NULL password varchar(20) NOT NULL 
PRIMARY KEY (email) );

Создадим таблицу для транспортировки

CREATE TABLE transport ( domain varchar(128) NOT NULL default '' 
transport varchar(128) NOT NULL default '' UNIQUE KEY domain (domain) );

Настроем postfix для работы в связке с mysql. Для этого нужно описать каждую из выше созданных таблиц.

Для виртуальных доменов

# sudo vim /etc/postfix/mysql-virtual_domains.cfuser = mailerpassword = _password_hosts = 127.0.0.1dbname = postfixquery = SELECT domain FROM domains WHERE domain='%s'

Для редиректов email → email

# sudo vim /etc/postfix/mysql-virtual_forwardings.cfuser = mailerpassword = _password_dbname = postfixquery = SELECT destination FROM forwardings WHERE source='%s'hosts = 127.0.0.1

Для почтовых ящиков

# sudo vim /etc/postfix/mysql-virtual_mailboxes.cfuser = mailerpassword = passworddbname = postfixquery = SELECT CONCAT(SUBSTRING_INDEX(email'@'-1)'/'SUBSTRING_INDEX(email'@'1)'/') 
FROM users WHERE email='%s'hosts = 127.0.0.1

Для редиректов domain → email

# sudo vim /etc/postfix/mysql-virtual_email2email.cfuser = mailerpassword = passworddbname = postfixquery = SELECT email FROM users WHERE email='%s'hosts = 127.0.0.1

Изменем права и группу для созданных файлов

sudo chmod o= /etc/postfix/mysql-virtual_*.cfsudo chgrp postfix /etc/postfix/mysql-virtual_*.cf

Создадим системного пользователя vmail в домашнем каталоге которого будут храниться аккаунты виртульных пользователей.

sudo groupadd -g 5000 vmailsudo useradd -g vmail -u 5000 vmail -d /home/vmail -m

Конфигурации postfix разделены на два файла

  • main.cf - содержит параметры используемые при обработке почты;
  • master.cf - содержит параметры используемые при работе postfix;

Команда postconf -e позволяет добавлять настройки в файл /etc/postfix/main.cf настройки применяются сражу же без перезапуска postfix.

Для окончания настройки запустим ниже приведенные настройки в терминале. Не забудьте поменять myhostname на свой FQDN. Возможно понадобится root шел: sudo su.

postconf -e 'myhostname = server.test.ua'postconf -e 'mydestination = $myhostname localhost localhost.localdomain'postconf -e 'mynetworks = 127.0.0.0/8'postconf -e 'inet_interfaces = all'postconf -e 'message_size_limit = 256000'postconf -e 'virtual_alias_domains ='postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf 
mysql:/etc/postfix/mysql-virtual_email2email.cf'postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'postconf -e 'virtual_mailbox_base = /home/vmail'postconf -e 'virtual_uid_maps = static:5000'postconf -e 'virtual_gid_maps = static:5000'postconf -e 'smtpd_sasl_type = dovecot'postconf -e 'smtpd_sasl_path = private/auth'postconf -e 'smtpd_sasl_auth_enable = yes'postconf -e 'broken_sasl_auth_clients = yes'postconf -e 'smtpd_sasl_authenticated_header = yes'postconf -e 'smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated
reject_unauth_destination'postconf -e 'smtpd_use_tls = no'postconf -e 'smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem'postconf -e 'smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem'postconf -e 'virtual_create_maildirsize = yes'postconf -e 'virtual_maildir_extended = yes'postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps
$virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps
$relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps
$relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'postconf -e 'virtual_transport = dovecot'postconf -e 'dovecot_destination_recipient_limit = 1'

Настройка SSL доступа в postfix описана тут.

Сообщим postfix'у что мы хотим использовать dovecot для сбора почты по IMAP или POP3 для этого добавим в конец файла /etc/postfix/master.cf

# sudo vim /etc/postfix/master.cfdovecot unix - n n - - pipe  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Настроим dovecot для этого изменим содержимое файла /etc/dovecot/dovecot.conf на

# sudo vim /etc/dovecot/dovecot.conflisten = 110143protocols = imap pop3log_timestamp = "%Y-%m-%d %H:%M:%S "mail_location = maildir:/home/vmail/%d/%nssl = nodisable_plaintext_auth=nonamespace private {     separator = .    prefix = INBOX.    inbox = yes}protocol lda {    log_path = /home/vmail/dovecot-deliver.log     auth_socket_path = /var/run/dovecot/auth-master    postmaster_address = [email protected]}protocol pop3 {    pop3_uidl_format = %08Xu%08Xv     listen = *:110 }                                                                                                                                                            protocol imap {     listen = *:143}auth default {    user = root     passdb sql {         args = /etc/dovecot-sql.conf    }    userdb static {        args = uid=1002 gid=1002 home=/home/vmail/%d/%n allow_all_users=yes    }    socket listen {        master {            path = /var/run/dovecot/auth-master            mode = 0600             user = vmail        }                                                                                                                                                            client {             path = /var/spool/postfix/private/dovecot-auth             mode = 0660              user = postfix             group = postfix          }     }}

Настройка SSL доступа для dovecot описана тут.

Укажем dovecot на проверку авторизации через ранее созданную таблицу users в MySQL для этого заменим содержимое /etc/dovecot-sql.conf на

# sudo vim /etc/dovecot-sql.confdriver = mysqlconnect = host=127.0.0.1 dbname=postfix user=mailer password=_password_default_pass_scheme = CRYPTpassword_query = SELECT email as user password FROM users WHERE email='%u';

Ограничим доступ к файлу

sudo chgrp dovecot /etc/dovecot-sql.confsudo chmod o= /etc/dovecot-sql.conf

Проверим /var/log/maillog на отсутствие ошибок от dovecot.

tail -n50 /var/log/mail.log

Для суммарного анализа postfix лога есть удобная утилита pflogsumm:

sudo apt-get install pflogsummpflogsumm /var/log/mail.log | less

Создадим тестовый домен и аккаунт пользователя в этом домене.

mysql -uroot -p postfixINSERT INTO domains (domain) VALUES ('test.ua');INSERT INTO users (email password) VALUES ('[email protected]' ENCRYPT('_password_'));

Отправим тестовое сообщение новому пользователю. Для завершения набора сообщения нажмите ctrl+d.

mailx [email protected]

Способ отправки письма с консоли

echo "message" | mailx -s "subject" [email protected]

Отправка письма с атачем

uuencode file file | mailx -s "subject" [email protected]

Еще можно протестировать работу почтового сервера с помощью swaks.

Утилита uuencode находиться в пакете sharutils (ubuntu arch).

Проверим SMTP доступ

telnet localhost smtpehlo test.uamail from:rcpt to:dataHello world!.quit

Проверим POP3 доступ

telnet localhost pop3user [email protected] _password_listretr 1quit

Проверим содержимое почтового ящика proft с помощью mutt

cd /home/vmail/test.ua/proftmutt -f .

В postfix письма храняться в разных очередях которые находяться в /var/spool/postfix/. Для просмотра сообщения в читаемом виде есть утилита postcat например прочитаем письмо из очереди active

postcat /var/spool/postfix/active/2602D7D828

Список отложенных писем для отправки можно просмотреть с помощью команды postqueue.

postqueue -p

Для очищения очереди из отложенных писем воспользуемся командой

sudo postsuper -d ALL deferred

Утилита postconf с ключем -n позволяет просмотреть настройки postfix отличающиеся от дефолтных

postconf -n

Для проверки правильности настроек и прав доступа на файлы выполним следующею команду она должна вернуть пустой результат.

sudo postfix check

Укажем пользователя который является root'ом на сервере и будет получать письма с ошибками для этого редактируем /etc/aliases что бы он выглядел приблизительно так

# sudo vim /etc/aliasespostmaster: rootroot: [email protected]

Применим правки

newaliasesservice postfix restart

На сайте multirbl.valli.org можно проверить занесен ли ip сервера в черный список.

Дополнительное чтиво

Надежный безлимитный хостинг.


Оригинал статьи http://proft.me/2012/02/29/nastrojka-pochtovogo-servera-postfix-mysql-dovecot/

0 комментариев

Оставить комментарий