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 завершена!

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить!

Средний рейтинг 0 / 5. Голосов: 0

Пока оценок нет! Будьте первым, поставь свою оценку этому посту.

Мы сожалеем, что этот пост не был полезен для вас!

Давайте улучшим этот пост!

Расскажите, как мы можем улучшить этот пост?

Теги

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

avatar
1 Цепочка комментария
1 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
2 Авторы комментариев
alexnettmАлександр Авторы недавних комментариев

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
новее старее большинство голосов
Уведомление о
Александр
Гость
Александр

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

Back to top button
Close
Close