Настройка Postfix, Dovecot, MySQL, Roundcube Webmail

В данной статье детально описан процесс установки и настройки SMTP-сервера Postfix, POP/IMAP-сервера Dovecot, веб-интерфейса Roundcube webmail для работы с сервером баз данных MySQL.

Установка MYSQL

1. Установите необходимые пакеты:

# yum install mysql mysql-server mysql-devel zlib-devel

2. Добавьте в файл /etc/my.conf:

[mysqld]
log=/var/log/mysql.log # включаем журналирование
bind-address=127.0.0.1 # разрешаем слушать только localhost

3. Запустите скрипт для настройки безопасности MySQL-сервера:

# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!

Скриптом мы сделали следующее:

  • Задали пароль для пользователя root. С системным пользователем root он не имеет ничего общего, это абсолютно два разных пользователя, т.к. по умолчанию для него не установлен пароль.
  • Удалили анонимного пользователя, который создается только для тестовых целей.
  • Запретили пользователю root входить удаленно. Теперь он сможет заходить только с localhost.
  • Удалили тестовую базу данных test и доступ к ней.

4. Запустите сервер MySQL:

# service mysqld start

Установка Postfix

В CentOS 5 postfix собран без поддержки MySQL. Чтобы включить поддержку, необходимо пересобрать пакет:

1. Устанавите пакеты, необходимые для сборки:

# yum install rpm-build rpm-devel db4-devel openldap-devel cyrus-sasl-devel pcre-devel gcc

2. Загрузите SRPM-пакет postfix с FTP-сервера CentOS.

3. Установите SRPM-пакет postfix:

# rpm -ivh postfix-2.3.3-2.src.rpm
# cd /usr/src/redhat/SPECS/

В файле postfix.spec измените

%define MYSQL 0

на

%define MYSQL 1

4. Пересоберите пакет postfix:

# rpmbuild --ba postfix.spec

5. Установите новый пакет:

# rpm -Uvh /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm

6. Добавьте базы для Postfix в MySQL:

# mysql -u root -p
---------
mysql>create database mail;

mysql>GRANT select ON `mail`.* TO 'postfix'@'127.0.0.1' IDENTIFIED BY 'postfix';

mysql>GRANT select ON `mail`.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfix';

mysql>use mail;

mysql>create table alias (address varchar(128) not null default
   goto varchar(128) not null default

mysql>create table transport (domain varchar(128) not null default
   transport varchar(128) not null default

mysql>create table users (email varchar(128) not null default
   passwd varchar(128) not null default
   gid int(11) unsigned not null default '12', \
   maildir varchar(255) not null default '/var/spool/mail/', \
   enabled tinyint(4) not null default '1',
   quota int(11) unsigned not null default '2048000', primary key (email) );

mysql>insert into transport VALUES ('domain.com', 'virtual');

mysql>insert into users VALUES ('test@domain.com', 'password', '1000', '12', \
   '/var/spool/mail/domain.com/test/', '1', '2048000');

7. Отредактируйте файл /etc/postfix/main.cf:

# LOCAL PATHNAME INFORMATION
#
# Указываем месторасположения директории очереди postfix. Также данная
# директория является корнем, когда postfix запускается в chroot окружении.
queue_directory = /var/spool/postfix

# Задает месторасположение всех postXXX команд (postmap, postconf, postdrop)
command_directory = /usr/sbin

# Задает месторасположение всех программ демонов postfix. Это программы,
# перечисленные в файле master.cf. Владельцем этой директории должен быть root
daemon_directory = /usr/libexec/postfix

# QUEUE AND PROCESS OWNERSHIP
# Задает владельца очереди postfix, а также большинства демонов postfix.
# В целях безопасности, необходимо использовать выделенную учетную запись.
# Т.е. от данного пользователя не должны запускаться какие-либо процессы
# в системе, а также он не должен являться владельцем каких-либо файлов.
mail_owner = postfix

# INTERNET HOST AND DOMAIN NAMES
# Задает имя хоста в формате FQDN. По умолчанию, используется значение,
# возвращаемой функцией gethostname().
myhostname = mail.domain

# Задает имя нашего домена. По умолчанию используется значение $myhostname
# минус первый компонент.
mydomain = domain.com

# SENDING MAIL
# Данный параметр указывает имя домена, которое используется при отправлении
# почты с этой машины. По умолчанию, используется имя локальной машины -
# $myhostname. Для согласованности между адресами отправителя и получателя,
# myorigin также указывает доменное имя, которое добавляется к адресу
# получателя для которого не указана доменная часть.
# myorigin = $myhostname (отправлять письма от: "alex@mail.akko.com.ua")
# myorigin = $mydomain (отправлять письма от: "alex@akko.com.ua")
myorigin = $mydomain

# RECEIVING MAIL
# Указывает адреса сетевых интерфейсов, на которых будет принимать почту
# наша почтовая система. По умолчанию используются все активные интерфейсы
# на машине. При изменении этого праметра необходимо перезапустить postfix
inet_interfaces = all

# Данный параметр указывает список доменов, для которых почта будет доставляться
# локально, а не пересылаться на другой хост. Не указывайте здесь виртуальные
# домены, для этого есть специальный параметр virtual_mailbox_domains
mydestination = localhost, $myhostname, localhost.$mydomain, mysql:/etc/postfix/mysql-mydestination.cf

# REJECTING MAIL FOR UNKNOWN LOCAL USERS
# Таблица просмотра со всеми именами и адресами локльных получателей.
local_recipient_maps = unix:passwd.byname $alias_maps $virtual_mailbox_maps
unknown_local_recipient_reject_code = 550

# TRUST AND RELAY CONTROL
# Данный параметр задает список "доверенных" клиентов, которые обладают
# некоторыми привилегиями. В частности доверенным SMTP клиентам дозволено
# пересылать почту через postfix. Если вы не доверяете никому, то оставьте
# только 127.0.0.0/8
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 10.17.202.0/24

# ALIAS DATABASE
# Данный параметр указывает список алиасов, используемый local delivery agent
# После внесения изменений в данный файл необходимо выполнить команду newaliases
# или postalias /etc/mail/aliases
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# SHOW SOFTWARE VERSION OR NOT
# Желательно сообщать как можно меньше информации о нашем почтовом сервере.
# Согласно требованиям SMTP протокола вы должны указать $myhostname вначале текста
smtpd_banner = $myhostname SMTP

# DEBUGGING CONTROL
# Задает уровень информативности, когда имя или адрес SMTP-клиента
# или сервера соответствует шаблону, заданному в параметре debug_peer_list.
# Следует использовать только во время отладки.
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5

# RESTRICTIONS
# client, helo, sender, recipient, data, end-of-data
# Дополнительные ограничения доступа  smtp сервера в контексте
# SMTP-запроса клиента
smtpd_client_restrictions = permit_mynetworks,
                          permit_sasl_authenticated,
                          check_client_access hash:/etc/postfix/client_access,
                          reject_unknown_client_hostname

# Дополнительные ограничения, применяемые сервером Postfix
# в контексте SMTP-команды HELO
smtpd_helo_restrictions = check_helo_access hash:/etc/postfix/hello_access,
                          permit_mynetworks,
                          reject_invalid_helo_hostname,
                          reject_non_fqdn_helo_hostname,
                          reject_unknown_helo_hostname

# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды MAIL FROM
smtpd_sender_restrictions = permit_mynetworks,
                          check_sender_access hash:/etc/postfix/sender_access,
                          reject_authenticated_sender_login_mismatch,
                          reject_unknown_sender_domain,
                          reject_unlisted_sender,
                          reject_unverified_sender
# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды RCPT TO
smtpd_recipient_restrictions =  permit_mynetworks,
                          permit_sasl_authenticated,
                          reject_unauth_destination,
                          check_recipient_access hash:/etc/postfix/recipient_access,
                          reject_unlisted_recipient,
                          reject_unknown_recipient_domain,
                          reject_non_fqdn_recipient,
                          reject_unverified_recipient

# Отклонять команду ETRN
smtpd_etrn_restrictions = reject

# Заставляем отклонять почту с неизвестным адресом отправителя.
# Позволяет бороться с червями и некоторыми вирусами.
smtpd_reject_unlisted_sender = yes

# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды
# VRFY) используется спамерами для сбора имен почтовых ящиков.
disable_vrfy_command = yes

# Требуем чтобы адреса, передаваемые в SMTP командах MAIL FROM и RCPT TO
# заключались в <>, а также не содержали стилей или фраз.
strict_rfc821_envelopes = yes

# Скрываем отображение имени таблицы получателей в ответе "User unknown"
# yes: User unknown in virtual mailbox table
# no: User unknown
show_user_unknown_table_name = no

# Данный адрес будет использоваться при проверки существования адреса отправителя.
address_verify_sender = <>

# Числовой код ответа SMTP сервера Postfix в случае, когда адрес
# получателя отвергнут ограничением reject_unverified_sender.
unverified_sender_reject_code = 550

# Требуем, чтобы удаленный SMTP клиент представлял себя
# в начале SMTP сессии с помощью команды HELO или EHLO.
smtpd_helo_required = yes

# Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes

# Максимальное количество ошибок, которое может сделать удаленный SMTP клиент.
# При превышение данного числа Postfix разорвет соединение.
smtpd_hard_error_limit = 8

# Интервал времени в течение которого SMTP сервер Postfix должен послать ответ,
# а удаленный SMTP клиент получить запрос
smtpd_timeout = 120s

# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду HELO или EHLO и получить ответ сервера.
smtp_helo_timeout = 60s

# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду RCPT TO и получить ответ сервера.
smtp_mail_timeout = 60s

# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду MAIL FROM и получить ответ сервера.
smtp_rcpt_timeout = 90s

#======== MySQL ===================
virtual_mailbox_base = /
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_maps =  mysql:/etc/postfix/mysql-virtual.cf
virtual_minimum_uid = 500
virtual_uid_maps = mysql:/etc/postfix/mysql-virtual-uid.cf
virtual_gid_maps = mysql:/etc/postfix/mysql-virtual-gid.cf
transport_maps = mysql:/etc/postfix/mysql-transport.cf

#======== Quota ===================
virtual_mailbox_limit = 10240000
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-mailboxsize.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 11000000

8. В файле /etc/postfix/master.cf строку:

virtual unix - n y - - virtual

измените на:

virtual unix    -       n       n       -       -       virtual

9. Создайте базу данных псевдонимов:

# newaliases

10. Создайте необходимые файлы postfix:

# cd /etc/postfix
# touch hello_access sender_access
# touch recipient_access client_access
# postmap hello_access
# postmap sender_access
# postmap recipient_access
# postmap client_access

11. Создайте файл /etc/postfix/mysql-mydestination.cf:

user = postfix
password = postfix
dbname = mail
table = transport
select_field = domain
where_field = domain
hosts = 127.0.0.1

12. Создайте файл /etc/postfix/mysql-virtual-maps.cf:

user = postfix
password = postfix
dbname = mail
table = users
select_field = maildir
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1

13. Создайте файл /etc/postfix/mysql-virtual.cf:

user = postfix
password = postfix
dbname = mail
table = alias
select_field = goto
where_field = address
hosts = 127.0.0.1

14. Создайте файл /etc/postfix/mysql-virtual-uid.cf:

user = postfix password = postfix dbname = mail table = users select_field = uid where_field = email additional_conditions = and enabled = 1 hosts = 127.0.0.1

15. Создайте файл /etc/postfix/mysql-virtual-gid.cf:

user = postfix
password = postfix
dbname = mail
table = users
select_field = gid
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1

16. Создайте файл /etc/postfix/mysql-transport.cf:

user = postfix password = postfix dbname = mail table = transport select_field = transport where_field = domain hosts = 127.0.0.1

17. Создайте файл /etc/postfix/mysql-mailboxsize.cf:

user = postfix
password = postfix
dbname = mail
table = users
select_field = quota
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1

18. Создайте каталог /var/spool/mail/domain.com/ с правами 775 и владельцем root:mail.

19. Запустите службу postfix:

# service sendmail stop
# service postfix start
# chkconfig --add postfix

Настройка dovecot

1. Установите пакет dovecot:

# yum install dovecot

2. Измените файл /etc/dovecot.conf:

base_dir = /var/run/dovecot/

# Протоколы, которые мы хотим поддерживать: imap imaps pop3 pop3s
# Если вы хотите использовать только dovecot-auth, вы можете задать "none".
protocols = pop3 imap

# IP или адрес хоста, где необходимо слушать соединения. В данный момент
# невозможно задать множество адресов. "*" прослушивает все IPv4 интерфейсы.
# "[::]" прослушивает все IPv6 интерфейсы, но так же может слушать все IPv4
# интерфейсы, зависит от операционной системы.
#
# Если вы хотите указать порты для каждого сервиса, вам необходимо настроить
# эти параметры внутри секции protocol imap/pop3 { ... }, таким образом вы
# сможете задать различные порты для IMAP/POP3. Например:
#   protocol imap {
#     listen = *:10143
#     ssl_listen = *:10943
#     ..
#   }
#   protocol pop3 {
#     listen = *:10100
#     ..
#   }
#listen = [::]

protocol pop3 {
 listen = *:110
 #ssl_listen = *:995
}

protocol imap {
 listen = *:143
}

# Использовать этот log файл вместо syslog().
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot.log

##
## SSL settings
##
# Отключить поддержку SSL/TLS.
# no - поддержка SSL/TLS включена
# yes - поддержка SSL/TLS отключена
ssl_disable = yes

##
## Login processes
##
# Сообщение приветствия для клиентов
login_greeting = Welcome to IMAP/POP3 server

##
## Mailbox locations and namespaces
##
# Месторасположение пользовательских почтовых ящиков. Это такой же параметр
# как и старый default_mail_env. Значение по умолчанию отсутствует, это
# означает, что Dovecot попытается найти ящики автоматически. Это не будет
# работать, если у пользователя до сих пор нет никакой почты, поэтому вы
# должны непосредственно указать Dovecot полный путь к ящику.
#
# Если вы используете mbox, указание пути к INBOX файлу (например, /var/mail/%u)
# недостаточно. Вам также необходимо указать Dovecot, где находятся другие ящики
# и где Dovecot может расположить файлы с индексами. Это называется "корневая
# почтовая директория", и она должна быть указана первой в параметре mail_location.
#
# Существует несколько специальных переменных, которые вы можете использовать:
#
#   %u - имя пользователя
#   %n - пользовательская часть в user@domain, то же самое что и %u
#   если не задана доменная часть
#   %d - доменая часть в user@domain, пустая, если не указан домен
#   %h - домашняя директория
#
# Смотрите doc/variables.txt для полного списка переменных.
#
# Некоторые примеры:
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
mail_location = maildir:/var/spool/mail/domain.com/%n

##
## Mail processes
##
# Включает отладку, очень полезно при первоначальной настройке и поиске
# неисправностей. После настройки лучше отключать.
mail_debug = yes

# Допустимый интервал UID для пользователей, по умолчанию 500 и выше.
# Это сделано для того, чтобы быть увереным в том, что пользователи
# не смогут войти как демоны или другие системные пользователи.
# Примечание запрет входа root встроен в бинарник dovecot и не может
# быть изменен, даже если установить first_valid_uid в 0.
# 1981 - uid и gid пользователя и группы virtual соответственно,
# которых мы создавали в Mail Howto
first_valid_uid = 1

##
## Authentication processes
##
#
# Следующих три параметра следует использовать только во мремя настройки
# и отладки dovecot. После этого их лучше отключить.
#
# Более высокий уровень информативности. Полезно использовать при поиске
# ошибок, связанных с аутентификацией.
auth_verbose = yes

# Более высокий уровень информативности, используется в целях отладки.
# Например, показывает SQL запросы.
auth_debug = yes

# В случае несовпадения пароля, отображает пароли и испоьзуемую схему
# хранения пароля. Требует, чтобы был установлен auth_debug=yes.
auth_debug_passwords = yes
auth default {

 # Разделенный пробелами список, используемых механизмов аутентификации:
 # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
mechanisms = plain

 # База данных паролей используется для проверки паролей пользователей
 # (и ничего более). Вы можете использовать множество passdbs и userdbs.
 # Это полезно, если вы хотите позволить обоим - системным пользователям и
 # (/etc/passwd) и виртуальным пользователям входить без необходимости
 # делать дубликаты системных пользователей в БД виртуальных пользователей.
 #
 #
 #
 # Пользователи могут быть временно отключены с помощью добавления deny=yes
 # в passdb. Если пользователь найден в БД, аутентификация потерпит неудачу.
 # БД с отключенными пользователями всегда должна быть указана перед остальными,
 # так как ее проверка идет первой.
 # SQL database

passdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
}

 # База данных пользователей указывает месторасположение почтовых ящиков
 # и пользователя/группу владеющего этим ящиком.
 #
 #
 #
 # SQL database
 #
userdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
    }
}

3. Создайте файлы конфигурации связки Dovecot и MySQL:

# mkdir /etc/dovecot
# touch /etc/dovecot/dovecot-mysql.conf

4. Измените файл dovecot-mysql.conf:

# Этот файл открывается от имени пользователя root, поэтому его владельцем
# должен быть root, а права на файл должны быть 0600.
#
# Для sql модуля passdb, вам необходима БД с таблицей, содержащей по
# крайней мере поля userid и password. Если вы хотите использовать
# синтаксис user@domain, возможно вы захотите использовать отдельное
# поле, содержащее имя домена.
#
# В качестве структуры БД используем БД из postfixadmin.
# Драйвер базы данных: mysql, pgsql, sqlite
driver = mysql

# Строка соединения с БД. Данный параметр зависит от драйвера.
#
# mysql:
#   Базовые настройки повторяют опции PostgreSQL:
#     host, port, user, password, dbname
#
#   Но также имеют некоторые новые параметры:
#     client_flags        - Смотрите руководства пользователя MySQL
#     ssl_ca, ssl_ca_path - Set either one or both to enable SSL
#     ssl_cert, ssl_key   - Для отправки клиентского сертификата серверу
#     ssl_cipher          - Задает минимально разрешенный уровень безопасности
#
#   Вы можете соединиться с сокетом UNIX используя : host=/var/run/mysql.sock
#   Примечания: В данный момент вы не можете использовать пробелы в параметрах.
#
# Примеры:
#   connect = host=192.168.1.1 dbname=users
#   connect = host=sql.example.com dbname=virtual user=virtual password=blarg
#   connect = /etc/dovecot/authdb.sqlite
#
#connect = dbname=virtual user=virtual
connect = host=/var/lib/mysql/mysql.sock dbname=mail user=postfix password=postfix

# Схема хранения паролей по умолчанию
# Список поддерживаемых схем приведен в
default_pass_scheme = PLAIN

# Запрос для получения пароля.
# Этот запрос должен возвращать только одну строку с полями "user" и "password".
# Этот запрос также может возвращать другие поля, которые имеют специальное
# значение, смотрите
#
# The "user" column is needed to make sure the username gets used with exactly
# the same casing as it's in the database. Note that if you store username and
# domain in separate fields, you most likely want to return a combination of
# them as the "user" column, otherwise the domain gets stripped.
#
# Commonly used available substitutions (see
#  for full list):
#   %u = entire userid
#   %n = user part of user@domain
#   %d = domain part of user@domain
#
# Note that these can be used only as input to SQL query. If the query outputs
# any of these substitutions, they're not touched. Otherwise it would be
# difficult to have eg. usernames containing '%' characters.
#
# Example:
#   password_query = SELECT password FROM users WHERE userid = '%n' AND domain = '%d'
#   password_query = SELECT pw AS password FROM users WHERE userid = '%u' AND active = 'Y'
#
password_query = SELECT passwd as password FROM users WHERE email = '%u' and enabled='1'

# Query to retrieve the user information.
#
# The query must return only one row. Commonly returned columns are:
#   uid - System UID
#   gid - System GID
#   home - Home directory
#   mail - Mail location
#
# Either home or mail is required. uid and gid are required. If more than one
# row is returned or there are missing fields, the login will fail. For a list
# of all fields that can be returned, see
#
#
# Примеры
# user_query = SELECT home, uid, gid FROM users WHERE userid = '%n' AND domain = '%d'
# user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = '%u'
#
user_query = SELECT maildir, uid as uid, gid as gid FROM users WHERE email = '%u'

5. Запустите службу dovecot:

# service dovecot start

Установка Apache

1. Установите необходимые пакеты и запустите службу:

# yum install httpd
# service httpd start

Установка PHP

1. Установите необходимые пакеты PHP:

# yum install php php-mysql php-pear*

2. В файле php.ini установите лимит объема загруженных файлов через вэб-интерфейс:

upload_max_filesize = 5M

3. Увеличьте объем памяти, которую может использовать скрипты:

memory_limit = 64M

Установка Roundcube webmail

1. Загрузите архив и распакуйте его в каталог /var/www/html/mail/.

# chown -R apache:apache /var/www/html/mail/

2. Создайте файл /var/www/html/mail/config/main.inc.php:

'domain' values to support multiple hosts
$rcmail_config['username_domain'] = 'domain.com';

// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support multiple hosts
$rcmail_config['mail_domain'] = 'domain.com';

// Path to a virtuser table file to resolve user names and e-mail addresses
$rcmail_config['virtuser_file'] =

// Query to resolve user names and e-mail addresses from the database
// %u will be replaced with the current username for login.
// The query should select the user's e-mail address as first col
//$rcmail_config['virtuser_query'] = 'select email from mail.users WHERE email = '%u
$rcmail_config['virtuser_query'] =

// use this host for sending mails.
// to use SSL connection, set ssl://smtp.host.com
// if left blank, the PHP mail() function is used
$rcmail_config['smtp_server'] = "127.0.0.1";

// SMTP port (default is 25; 465 for SSL)
$rcmail_config['smtp_port'] = 25;

// SMTP username (if required) if you use %u as the username RoundCube
// will use the current username for login
$rcmail_config['smtp_user'] = '$u';

// SMTP password (if required) if you use %p as the password RoundCube
// will use the current user's password for login
$rcmail_config['smtp_pass'] =

// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
// best server supported one)
$rcmail_config['smtp_auth_type'] = 'PLAIN';

// Log sent messages
$rcmail_config['smtp_log'] = TRUE;

// these cols are shown in the message list
// available cols are: subject, from, to, cc, replyto, date, size, encoding
$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size');

// relative path to the skin folder
$rcmail_config['skin_path'] = 'skins/icandy2/';

// use this folder to store temp files (must be writebale for apache user)
$rcmail_config['temp_dir'] = 'temp/';

// use this folder to store log files (must be writebale for apache user)
$rcmail_config['log_dir'] = 'logs/';

// session lifetime in minutes
$rcmail_config['session_lifetime'] = 10;

// check client IP in session athorization
$rcmail_config['ip_check'] = false;

// Use an additional frequently changing cookie to athenticate user sessions.
// There have been problems reported with this feature.
$rcmail_config['double_auth'] = false;

// this key is used to encrypt the users imap password which is stored
// in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars.
$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';

// the default locale setting
$rcmail_config['locale_string'] = 'ru';

// use this format for short date display
$rcmail_config['date_short'] = 'D H:i';

// use this format for detailed date/time formatting
$rcmail_config['date_long'] = 'd.m.Y H:i';

// use this format for today's date display
$rcmail_config['date_today'] = 'H:i';

// add this user-agent to message headers when sending
$rcmail_config['useragent'] = 'RoundCube Webmail/0.1-rc1';

// use this name to compose page titles
$rcmail_config['product_name'] = 'AES Webmail';

// only list folders within this path
$rcmail_config['imap_root'] =

// store draft message is this mailbox
// leave blank if draft messages should not be stored
$rcmail_config['drafts_mbox'] = 'Drafts';

// store spam messages in this mailbox
$rcmail_config['junk_mbox'] = 'Junk';

// store sent message is this mailbox
// leave blank if sent messages should not be stored
$rcmail_config['sent_mbox'] = 'Sent';

// move messages to this folder when deleting them
// leave blank if they should be deleted directly
$rcmail_config['trash_mbox'] = 'Trash';

// display these folders separately in the mailbox list.
// these folders will automatically be created if they do not exist
$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');

// protect the default folders from renames, deletes, and subscription changes
$rcmail_config['protect_default_folders'] = TRUE;

// Set TRUE if deleted messages should not be displayed
// This will make the application run slower
$rcmail_config['skip_deleted'] = FALSE;

// Set true to Mark deleted messages as read as well as deleted
// False means that a message's read status is not affected by marking it as deleted
$rcmail_config['read_when_deleted'] = TRUE;

// When a Trash folder is not present and a message is deleted, flag
// the message for deletion rather than deleting it immediately.  Setting this to
// false causes deleted messages to be permanantly removed if there is no Trash folder
$rcmail_config['flag_for_deletion'] = TRUE;

// Make use of the built-in spell checker. It is based on GoogieSpell.
$rcmail_config['enable_spellcheck'] = FALSE;

// For a locally installed Nox Spell Server, please specify the URI to call it.
// Get Nox Spell Server from
// Leave empty to use the Google spell checking service, what means
// that the message content will be sent to Google in order to check spelling
$rcmail_config['spellcheck_uri'] =

// These languages can be selected for spell checking.
// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch');
// Leave empty for default set of Google spell check languages
$rcmail_config['spellcheck_languages'] = NULL;

// path to a text file which will be added to each sent message
// paths are relative to the RoundCube root folder
$rcmail_config['generic_message_footer'] =

// this string is used as a delimiter for message headers when sending
// leave empty for auto-detection
$rcmail_config['mail_header_delimiter'] = NULL;

// in order to enable public ldap search, create a config array
// like the Verisign example below. if you would like to test,
// simply uncomment the Verisign example.

/**
* example config for Verisign directory
*
* $rcmail_config['ldap_public']['Verisign'] = array(
*  'name'          => 'Verisign.com',
*  'hosts'         => array('directory.verisign.com'),
*  'port'          => 389,
*  'base_dn'       =>
*  'bind_dn'       =>
*  'bind_pass'     =>
*  'search_fields' => array('mail', 'cn'),  // fields to search in
*  'name_field'    => 'cn',    // this field represents the contact's name
*  'email_field'   => 'mail',  // this field represents the contact's e-mail
*  'scope'         => 'sub',   // search mode: sub|base|list
*  'filter'        =>
*  'fuzzy_search'  => true);   // server allows wildcard search
*/
// don't allow these settings to be overriden by the user

$rcmail_config['dont_override'] = array();
// list of configuration option names that need to be available in Javascript.

$rcmail_config['javascript_config'] = array('read_when_deleted', 'flag_for_deletion');
// try to load host-specific configuration

$rcmail_config['include_host_config'] = FALSE;

/***** these settings can be overwritten by user's preferences *****/
// show up to X items in list view
$rcmail_config['pagesize'] = 40;

// use this timezone to display date/time
$rcmail_config['timezone'] = 1;

// daylight savings are On
$rcmail_config['dst_active'] = TRUE;

// prefer displaying HTML messages
$rcmail_config['prefer_html'] = TRUE;

// show pretty dates as standard
$rcmail_config['prettydate'] = TRUE;

// default sort col
$rcmail_config['message_sort_col'] = 'date';

// default sort order
$rcmail_config['message_sort_order'] = 'DESC';

// save compose message every 300 seconds (5min)
$rcmail_config['draft_autosave'] = 300;
?>

3. Создайте базу данных, в которой Roundcube будет хранить свои файлы:

# mysql
> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
    IDENTIFIED BY 'pass';
> quit

# mysql roundcubemail < SQL/mysql5.initial.sql

4. Откройте в браузере страницу http://mydomain.com/mail/.

5. Введите логин и пароль и наслаждвйтесь работой с почтой.

Заключение

Таким образом, нами был настроен Postfix, Dovecot, MySQL и Roundcube webmail.

Автор: Роман Лобко

Статьи по Теме

Категории
Поиск