FreeBSD

FreeBSD: Установка Postfix + Dovecot

В данной статье мы установим и настроим связку Postfix + Dovecot + Postfixadmin. Пользователи будут храниться в MySQL, авторизация пользователей для отправки почты будет осуществляться через Dovecot.

Установка Postfix + Dovecot

Идем в порты

mx# cd /usr/ports/mail/postfix
mx# make config

В дополнение к предложенным опциям включаем DOVECOT и MYSQL

---------------------------------------------------------------------¬
¦                   Options for postfix 2.8.2,1                      ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦[X] PCRE       Perl Compatible Regular Expressions              ¦ ¦
¦ ¦[ ] SASL2      Cyrus SASLv2 (Simple Auth. and Sec. Layer)       ¦ ¦
¦ ¦[X] DOVECOT    Dovecot 1.x SASL authentication method           ¦ ¦
¦ ¦[ ] DOVECOT2   Dovecot 2.x SASL authentication method           ¦ ¦
¦ ¦[ ] SASLKRB5   If your SASL req. Kerberos5 select this option   ¦ ¦
¦ ¦[ ] SASLKMIT   If your SASL req. MIT Kerberos5 select this optio¦ ¦
¦ ¦[ ] TLS        Enable SSL and TLS support                       ¦ ¦
¦ ¦[ ] BDB        Berkeley DB (choose version with WITH_BDB_VER)   ¦ ¦
¦ ¦[X] MYSQL      MySQL maps (choose version with WITH_MYSQL_VER)  ¦ ¦
¦ ¦[ ] PGSQL      PostgreSQL maps (pick ver. with DEFAULT_PGSQL_VER¦ ¦
¦ ¦[ ] SQLITE     SQLite maps                                      ¦ ¦
¦ ¦[ ] OPENLDAP   OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER¦ ¦
¦ ¦[ ] LDAP_SASL  Enable OpenLDAP client-to-server auth via SASL   ¦ ¦
¦ ¦[ ] CDB        CDB maps lookups                                 ¦ ¦
¦ ¦[ ] NIS        NIS maps lookups                                 ¦ ¦
¦ ¦[ ] VDA        VDA (Virtual Delivery Agent 32Bit)               ¦ ¦
¦ ¦[ ] TEST       SMTP/LMTP test server and generator              ¦ ¦
¦ ¦[ ] SPF        SPF support (via libspf2 1.2.x)                  ¦ ¦
¦ ¦[ ] INST_BASE  Install into /usr and /etc/postfix               ¦ ¦
+-L------------------------------------------------------------------+
¦                       [  OK  ]       Cancel                        ¦
L---------------------------------------------------------------------

Далее будет предложено выбрать опции для Dovecot. В дополнение к стандартным включаем MYSQL

---------------------------------------------------------------------¬
¦                    Options for dovecot 1.2.16                      ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦              [X] KQUEUE       kqueue(2) support                ¦ ¦
¦ ¦              [X] SSL          SSL support                      ¦ ¦
¦ ¦              [X] MANAGESIEVE  ManageSieve support              ¦ ¦
¦ ¦              [ ] GSSAPI       GSSAPI support                   ¦ ¦
¦ ¦              [ ] VPOPMAIL     VPopMail support                 ¦ ¦
¦ ¦              [ ] BDB          BerkleyDB support                ¦ ¦
¦ ¦              [ ] LDAP         OpenLDAP support                 ¦ ¦
¦ ¦              [ ] PGSQL        PostgreSQL support               ¦ ¦
¦ ¦              [X] MYSQL        MySQL support                    ¦ ¦
¦ ¦              [ ] SQLITE       SQLite support                   ¦ ¦
¦ ¦                                                                ¦ ¦
+-L------------------------------------------------------------------+
¦                       [  OK  ]       Cancel                        ¦
L---------------------------------------------------------------------

В конце установки нужно ответить на 2 вопроса Postfix’а

You need user "postfix" added to group "mail".
Would you like me to add it [y]? y
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? n

Делаем

mx# rehash

Приступаем к редактированию конфига

mx# ee /usr/local/etc/postfix/main.cf

Приводим конфиг к следующему виду

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = mx.xxx.org.ua
mydomain = xxx.org.ua
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
virtual_mailbox_base = /usr/mail/
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid             = 65534
virtual_uid_maps                = static:65534
virtual_gid_maps                = static:65534
virtual_transport               = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Создаем директорию для клиентских почтовых ящиков и необходимые файлы

mx# mkdir /usr/mail
mx# chmod -R 777 /usr/mail
mx# touch /usr/local/etc/postfix/mysql_virtual_alias_maps.cf
mx# touch /usr/local/etc/postfix/mysql_virtual_domains_maps.cf
mx# touch /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf

Редактируем mysql_virtual_alias_maps.cf

user = postfix
password = postfixpass
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Редактируем mysql_virtual_domains_maps.cf

user = postfix
password = postfixpass
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'

Редактируем mysql_virtual_mailbox_maps.cf

user = postfix
password = postfixpass
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Инициализируем базу данных алиасов

mx#newaliases

Остается добавить в master.cf dovecot транспорт

mx# ee /usr/local/etc/postfix/master.cf

Добавляем в конец файла

dovecot unix - n n - - pipe flags=DRhu user=nobody:nobody argv=/usr/local/libexec/dovecot/deliver -d ${recipient}

Теперь нужно сделать еще несколько шагов. Отключаем запуск SendMail. Добавляем в /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Отключаем специфические для Sendmail опции. Создаем файл

mx# touch /etc/periodic.conf

И вносим в него

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

После этого перегружаем машину

mx# shutdown -r now

Теперь разрешим автозапуск Postfix’a. Добавим в /etc/rc.conf

postfix_enable="YES"

Стартуем Postfix

mx# /usr/local/etc/rc.d/postfix start

Смотрим логи, чтобы удостровериться что все ОК

mx# tail -F /var/log/maillog

На этом установка и настройка Postfix завершена. Переходим к настройке Dovecot Редактируем /usr/local/etc/dovecot.conf и приводим его к следующему виду

base_dir = /var/run/dovecot
protocols = imap pop3
disable_plaintext_auth = no
mail_location = maildir:/usr/mail/%d/%u/
mail_privileged_group = mail
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_gid = 65534
maildir_copy_with_hardlinks = yes
ssl = no
protocol imap {
imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
postmaster_address = postmaster@xxx.org.ua
sendmail_path = /usr/sbin/sendmail
}
auth_username_format = %Lu
auth default {
mechanisms = plain login
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}

userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
user = nobody
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0666
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}

dict {

}

plugin {

}

Создадим файл настроек подключения к MySQL

mx# touch /usr/local/etc/dovecot-sql.conf

Отредактируем его

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfixpass
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT  CONCAT('/usr/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 65534 AS uid,  65534 AS gid FROM mailbox WHERE username = '%u'

Разрешим автозапуск Dovecot’а

dovecot_enable="YES"

Для проверки стартуем Dovecot

mx# /usr/local/etc/rc.d/dovecot start

Далее смотрим логи, в которых мы увидим ошибку коннекта к MySQL, т.к. мы еще не создали необходимые базы

mx# tail -F /var/log/maillog
Apr 16 00:05:25 mx dovecot: Dovecot v1.2.16 starting up
Apr 16 00:05:25 mx dovecot: auth-worker(default): mysql: Connect failed  to localhost (postfix): Access denied for user 'postfix'@'localhost'  (using password: YES) - waiting for 1 seconds before retry

Останавливаем Dovecot

mx# /usr/local/etc/rc.d/dovecot stop

Переходим к установке Postfixadmin.

Установка Postfixadmin

mx# cd /usr/ports/mail/postfixadmin
mx# make install clean

Опции оставляем по умолчанию

---------------------------------------------------------------------¬
¦                  Options for postfixadmin 2.3.3                    ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦   [X] MYSQL   MySQL back-end (use mysql PHP extension)         ¦ ¦
¦ ¦   [ ] MYSQLI  MySQL 4.1+ back-end (use mysqli PHP extension)   ¦ ¦
¦ ¦   [ ] PGSQL   PostgreSQL back-end (use pgsql PHP extension)    ¦ ¦
¦ ¦                                                                ¦ ¦
+-L------------------------------------------------------------------+
¦                       [  OK  ]       Cancel                        ¦
L---------------------------------------------------------------------

Создаем виртуалхост для Postfixadmin’a. Добавляем в /usr/local/etc/apache22/extra/httpd-vhosts.conf

<VirtualHost *:80>
ServerAdmin xxx@xxx.org.ua
DocumentRoot /usr/local/www/postfixadmin
ServerName postfixadmin.xxx.org.ua
CustomLog /var/log/postfixadmin.xxx.org.ua.access.log combined
ErrorLog /var/log/postfixadmin.xxx.org.ua.error.log
<Directory /usr/local/www/postfixadmin>
Options none
AllowOverride AuthConfig
Order Deny,Allow
Deny from all
Allow from all
</Directory>
</VirtualHost>

Рестартуем apache

mx# /usr/local/etc/rc.d/apache22 restart

Теперь создаем базу и пользователя MySQL

mx# mysql -uroot -p
mysql> create database postfix;
mysql> grant all on postfix.* to 'postfix'@'localhost' identified by 'postfixpass';
mysql> quit;

Теперь можно стартовать Dovecot, т.к. необходимая база уже создана

mx# /usr/local/etc/rc.d/dovecot start

Идем в /usr/local/www/postfixadmin. Приступаем к редактированию config.inc.php. В данном файле для того, чтобы запустился postfixadmin достаточно изменить следующие секции и привести их к виду

$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://postfixadmin.xxx.org.ua';
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = '127.0.0.1';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixpass';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

Остальные опции можно подправить под свои нужды позже. На всякий случай приведу свой полный конфиг этого файла (без комментариев)

<?php
$CONF['configured'] = true;
$CONF['setup_password'] = 'changeme';
$CONF['postfix_admin_url'] = 'http://postfixadmin.xxx.org.ua';
$CONF['postfix_admin_path'] = dirname(__FILE__);
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixpass';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';
$CONF['database_prefix'] = '';
$CONF['database_tables'] = array (
'admin' => 'admin',
'alias' => 'alias',
'alias_domain' => 'alias_domain',
'config' => 'config',
'domain' => 'domain',
'domain_admins' => 'domain_admins',
'fetchmail' => 'fetchmail',
'log' => 'log',
'mailbox' => 'mailbox',
'vacation' => 'vacation',
'vacation_notification' => 'vacation_notification',
'quota' => 'quota',
'quota2' => 'quota2',
);
$CONF['admin_email'] = 'admin@xxx.org.ua';
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
$CONF['encrypt'] = 'md5crypt';
$CONF['authlib_default_flavor'] = 'md5raw';
$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";
$CONF['min_password_length'] = 5;
$CONF['generate_password'] = 'NO';
$CONF['show_password'] = 'NO';
$CONF['page_size'] = '20';
$CONF['default_aliases'] = array (
'abuse' => 'abuse@xxx.org.ua',
'hostmaster' => 'xxx@xxx.org.ua',
'postmaster' => 'xxx@xxx.org.ua',
'webmaster' => 'xxx@xxx.org.ua',
'noc' => 'xxx@xxx.org.ua',
'root' => 'xxxe@xxx.org.ua',
'admin' => 'xxx@xxx.org.ua',
'support' => 'xxx@xxx.org.ua',
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
$CONF['maildir_name_hook'] = 'NO';
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
$CONF['quota'] = 'NO';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'NO';
$CONF['transport_options'] = array (
'virtual',  // for virtual accounts
'local',    // for system accounts
'relay'     // for backup mx
);
$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'NO';
$CONF['vacation_domain'] = 'autoreply.xxx.org.ua';
$CONF['vacation_control'] ='NO';
$CONF['vacation_control_admin'] = 'YES';
$CONF['alias_control'] = 'YES';
$CONF['alias_control_admin'] = 'YES';
$CONF['special_alias_control'] = 'YES';
$CONF['alias_goto_limit'] = '0';
$CONF['alias_domain'] = 'YES';
$CONF['backup'] = 'YES';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'YES';
$CONF['fetchmail_extra_options'] = 'NO';
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';
$CONF['user_footer_link'] = "http://postfixadmin.xxx.org.ua/main";
$CONF['show_footer_text'] = 'NO';
$CONF['footer_text'] = 'Go to PhpMyAdmin';
$CONF['footer_link'] = 'http://pma.xxx.org.ua';
$CONF['welcome_text'] = <<<EOM
Welcome! Your mailbox was created

Best regards, ASY
EOM;
$CONF['emailcheck_resolve_domain']='YES';
$CONF['show_status']='NO';
$CONF['show_status_key']='NO';

$CONF['show_status_text']='&nbsp;&nbsp;';

$CONF['show_undeliverable']='NO';
$CONF['show_undeliverable_color']='tomato';
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext","exchangeserver.domain.ext","gmail.com");
$CONF['show_popimap']='NO';
$CONF['show_popimap_color']='darkgrey';
$CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext");
$CONF['show_custom_colors']=array("lightgreen","lightblue");
$CONF['recipient_delimiter'] = "";
$CONF['create_mailbox_subdirs_prefix']='INBOX.';
$CONF['used_quotas'] = 'NO';
$CONF['new_quota_table'] = 'NO';
$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';
$CONF['xmlrpc_enabled'] = false;
if (file_exists(dirname(__FILE__) . '/config.local.php')) {
include(dirname(__FILE__) . '/config.local.php');
}

Открываем в браузере http://postfixadmin.xxx.org.ua/setup.php.
Если все правильно настроили, то везде должно быть «OK» и «Done«. В самом низу увидим окно создания админа. Заполняем поля Нажимаем «Добавить администратора«, после чего увидим Копируем последнюю строку, выделенную красным и заменяем ею аналогичную в config.inc.php.
Сохраняем изменения в конфиге. После этого повторяем процедуру создания аккаунта админа с теми же данными, которые были введены в предыдущем шаге.
Нажимаем «Добавить администратора» и видим сообщение о том, что админ успешно создан.
Открываем в браузере http://postfixadmin.xxx.org.ua и авторизируемся указанием e-mail’а и пароля админа, только что созданного. Войдя в Postfixadmin создаем свой домен, потом своих пользователей. При добавлении пользователя выбираем «Отправить приветственное письмо» для того, чтобы автоматически создалась папка пользователя в /usr/mail.
На этом установка и настройка связки Postfix + Dovecot + Postfixadmin завершена!

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

2 комментария

  • Прошу прощения за тупой вопрос, но получается до начала настройки-установки Postfix + Dovecot + Postfixadmin нужно сначала установить mysql и apache? Благодарю за ответ.