В данной статье мы установим и настроим связку 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']=' ';
$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 завершена!




